[C++] : Apache ModuleでRequest ParameterをParseしてDBからデータを取得する Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集
作者: Ken Coar,Rich Bowen,笹井崇司出版社/メーカー: オライリージャパン発売日: 2008/09/26メディア: 大型本購入: 6人 クリック: 144回この商品を含むブログ (32件) を見る
Request Parameter取得とDB接続 母校の同窓会幹事代表を務めています@yutakikucです。
最近C++のエントリーを書く事が多いですが、今日もApache Moduleについて書きます。
Apache ModuleでRequest Parameterを取得する際はApacheのVersionに気をつけましょう。Versionによって使える関数が異なるようです。基本的には上位互換が保たれているようですが、最新Versionのドキュメントを参照している時に、実際には古いVersionを使ってしまっていると実装時に長い時間嵌る可能性があります。また単にRequest Paramterを取得しただけでは面白くないので、Parameterに従ってDB上のデータを参照する事を行いたいと思います。Apache ModuleやCのPreparedStatementに関する日本語ドキュメントは少ないので少しでも開発者の方々へ貢献できるように今後も頑張ります。
GitHub GitHub Path このエントリーで使用するソースコードGitHubに置きました。
CPlus/apache_module/ps/mod_db.c at master · yutakikuchi/CPlus
Compile & Install 以下のコマンドでcompile & installしてくれます。installが完了したらApacheを再起動します。
$ sudo yum install httpd-devel mysql-devel -y $ git clone git@github.com:yutakikuchi/CPlus.git $ cd CPlus/apache_module/ps/ $ sudo apxs -i -a -c -I /usr/include/mysql -L /usr/lib64/mysql -lmysqlclient mod_db.
[C++] : crypto++でのお手軽暗号 C++プログラミング入門
作者: グレゴリーサティア,ダウグブラウン,Gregory Satir,Doug Brown,望月康司,谷口功出版社/メーカー: オライリー・ジャパン発売日: 2001/11メディア: 単行本購入: 9人 クリック: 147回この商品を含むブログ (29件) を見る
お手軽暗号 @yutakikucです。
今日はcppで暗号/復号するためのエントリーを書きます。PHPやPythonにはcrypt標準モジュールがありドキュメントも充実しているので簡単に暗号化できますが、cppではそれらがあまり整備されていない事もあってプログラム書く時にちょいと苦労します。尚、ここでお手軽暗号と言っているのは暗号化のブロック方式をECBで対応するためです。CBC方式でも良いのですがIVの管理も面倒だし、そもそもそこまで暗号化強度に拘らないケースを想定しています。cppでの暗号化を行う為のLibraryとしてcrypto++という様々な暗号化方式をサポートする物を利用します。
Crypto++ Library 5.6.2 - a Free C++ Class Library of Cryptographic Schemes
crypto++ install 以下のOneLineです。
$ sudo yum install cryptopp cryptopp-devel -y DES × ECB TripleDES - Crypto++ Wiki
以下のコードでDES × ECBの暗号化/復号化ができます。crypto++のwikiにTripleDES × CBCの内容が載っていたのでそれを真似て作ってみました。暗号化の対象テキストが「魔法少女まどか☆マギカ」、暗号化keyに「Soul Gem」を指定します。ECBブロック暗号なのでIVを必要としません。処理としては単純にマルチバイト文字列を暗号化 = バイナリを16進数変換 = 16進数をバイナリに変換 = マルチバイト文字列を復元です。下に実行結果も載せておきます。
#include #include "
[StartUP] : スケジュールの仮登録を神速で管理できる「Cu-hacker」がセクシー過ぎる件 Cu-hackerとは
あどさーばーを開発中の@yutakikucです。
今日はビジネスマンの面倒くさいスケジュール管理を強力にサポートしてくれる「Cu-hacker」の仮登録機能を紹介したいと思います。前もってスケジュール候補をたくさん抑えたい人には超お勧め機能なので、是非使ってみると良いと思います。以下のCu-hacker操作のannotationにはSkitch | Evernote を利用しています。
Cu-hackerの仮登録管理がセクシー!
スケジュール管理にGoogle Calendarを使っている人も多いのでは無いでしょうか。今のGoogle Calendarには残念ながら仮予定を一括で管理する機能がありません。1つの予定候補を1つずつ管理するといった手間がかかってしまいます...
この予定候補のおまとめ管理といったセクシーな機能をCu-hackerは実現してくれています。下がCu-hackerの操作画面です。
以下は使い方の簡単な説明です。
1.まずは仮予定として登録したい日時のカレンダーをマウスでドラッグ選択します。
2.左のクリップボードに仮予定一覧がまとめられるので、「仮登録」ボタンを押します。予定名を入力して、仮登録完了!
3.予定が確定した段階で、本登録します。仮登録で抑えた時間の枠に対して「予定として確定」ボタンを押します。これで本登録完了!
4.本登録された予定以外は自動的に消してくれます!この機能が仮予定を沢山登録したいビジネスマンに対する優しい気持ちの表れだと思います。セクシー過ぎて鼻血がでますね!(笑)
他人とのスケジュール調整がセクシー! Cu-hackerにはまだまだセクシーな機能が備わっています。他人とのスケジュール調整をしたい時に、まずは自分の空いている日時を伝えて、相手にそこから選んでもらいたいケースがあると思います。これもCu-hackerなら出来ますYO!
まずは上で登録した仮登録URLを調整して欲しい相手にメール等で渡します。
次はURLを受け取った相手側の予定調整画面です。URLを送った人の紹介が出ますので、「登録を始める」ボタンを押します。そうすると送った人の仮予定一覧を見る事ができるので、URLを受け取った人はOKな日を選択し「登録へ進む」ボタンを押します。URLを受け取った相手側はCu-hackerに未ログインでも使えてしまうところがセクシー過ぎますね!
相手には自分の名前の入力と登録をしてもらいます。下の画面で名前を入力し、「登録を確認する」ボタンを押します。内容を確認し「登録する」ボタンを押すと、URLを送って来た人のCu-hackerスケジュールに登録されます。また親切なCu-hackerはThank youページで相手に調整が終わった事を知らせるメール文言を表示してくれるので、それをコピーしてURLを送ってくれた人に返信します。
URLを送った本人のCu-hackerスケジュールに確定として予定が登録されている事が分かります。これで他人との予定調整は神速で完了です。さすがのCu-hackerさん、セクシー過ぎてエロいですね!僕ももはや色んな人と予定が調整したいです!
Cu-hackerを紹介しているサイト Googleカレンダーで華麗にアポ取り!打合せや飲み会の日程調整・仮押さえを効率化するCu-hacker(クウハッカー)が快適!! | jMatsuzaki スケジュール調整を10倍早くする「Cu-Hacker (クウハッカー)」ベータ版登場 【増田 @maskin】 | TechWave 「Cu-Hacker」の野望 スケジュール調整を10倍早くする→気づかいエンジン、そしてその先へ 【増田 @maskin】 | TechWave マウス操作だけでスケジュール調整ができるWebサービス「Cu-hacker」 - noriaki blog はてな出張所 わかってる人が作ったと感じさせるCu-hackerの設計のすばらしさと実用性 | akazah blog Googleカレンダー予定管理のCu-hacker、スマートフォンに対応 | ICT Headline directed by P検
[C++] : C++でApache Moduleを書きたい人へのTutorial C++ Apache Module Tutorial あどさーばー作っています@yutakikucです。
広告配信等の処理高速化の実現手段としてCを使ってApache/NginxのModuleレイヤーで処理を書く事があります。Apache/NginxのModuleはCを基本としているんですが、char*の処理は面倒でstringにしたい、連想配列でデータを管理し易くしたい、その他C++にしか無いライブラリを使いたいといったC++への欲求が出てきてしまいます。ぐぐってもApache ModuleをC++で実現している人って結構少なく、おそらく一般的にはApache Moduleにそんな複雑な処理を書く要件や期待なんて無いんだろうなと想像はしていますが、このエントリーではC++で書いてみます(笑)。
Apache API C++ Cookbook
Apache 2.x Modules In C++ (Part 1) - CodeProject
1つ目のサイトの「A Basic C++ Apache Module Example」にExampleが載っているんですが内容が素晴らしく古くて使い物にならなかったり、2つ目のサイトはMakefileの説明がよく分からないんで、僕がTutorial作ってみます。
C++ Source & Makefile Tutorial File CPlus/apache_module/tutorial at master · yutakikuchi/CPlus
下で使うTutorialの内容を置いておきました。
Package Install 今回のC++ ApacheModule作成はCentOS6.4 x86_64でやっています。
先に開発に必要なパッケージをInstallしておきましょう。
$ sudo yum install httpd httpd-devel make gcc gcc-c++ -y $ tree .
[OpenData] : 日本全国避難所データと現在地周辺の避難所地図を公開しました 避難所 防災情報 全国避難所ガイド | ホーム
避難所マップ - Yahoo!天気・災害
@yutakikucです。オープンデータへの貢献という大義名分っぽい事を掲げ、避難所データを構造化テキストで作成し、更にはポイントを地図上へのマッピングします。避難所というと1st MediaのアプリやYahoo!避難所マップに情報が掲載されていますが、それ以外の避難所野良Web等は避難所データが整理されていません。Yahoo!避難所マップも都道府県毎に公開/非公開があるようでこちらもデータとしては不十分です。今回僕がデータ作成と簡単な地図マッピングを行うので、これを参考に良いアプリケーションが出てくる事に期待しています。
作成した避難所データと地図 作成した避難所データはgithub、それをマッピングした地図をGAEで公開します。地図はGeoLocationAPIを利用して現在地付近の避難所のみを取得します。※利用は全て自己責任でお願いいたします。
github Data/shelter/pref at master · yutakikuchi/Data
公開地図 避難所マップ
避難所データソース 都道府県避難施設一覧 - 内閣官房 国民保護ポータルサイト
1st Mediaの避難所データ
内閣官房 国民保護ポータルサイトのデータを利用します。注意として「平成22年4月1日現在のデータを参考として掲載しております。」とあるようにデータが最新の物では無いです。上のサイトに掲載されているpdfからtextを抽出し、構造化テキストに変換します。代替のデータソースとしては1st MediaのWebPageに掲載されているデータを引っ張ってくる方法もいいかと思いますが、取り扱いには注意してください。
避難所構造化テキスト作成 pdftotextを利用した避難所YAMLファイルの生成 まずはpdfからtextに変換する為のツールであるpdftotextをCentOS6.4へinstallします。install後に国民保護ポータルサイトからpdfファイルをdownloadして、pdftotextコマンドを実行してみます。pdftotextにより標準出力されたデータを見てみるとちゃんと変換されていることが分かりますが、pdf中の表に入力された改行がそのまま改行として出力されています。改行が1つであれルール化できそうですが、2つ以上ある箇所は改行がメイン行の前後に出力されるので、そのようなデータを拾う事はここでは諦めました。拾いたい場合は人の目で判断する必要があると思います。
※pythonにはpdfをtext変換するpyPdf ライブラリもあるので、そちらを使っても良いと思います。
$ sudo yum install poppler-utils -y $ wget http://www.kokuminhogo.go.jp/pdf/hinan_hokkaido.pdf $ pdftotext -enc UTF-8 -layout -nopgbrk hinan_hokkaido.
[Life] : 町田ヒルズ族になってしまいました(`・ω・´)キリッ 僕が22,3歳の頃はちょうどLivedoorでホリエモンが大活躍をしていた時で、「俺も30歳になる時は六本木ヒルズに住んでやる!ホリエモンの部屋の隣に住んでやる!」って夢を大きく語っていた、そんな大志を抱いていた時期もありました。あれから7年近く経って30歳になった僕の現実の住まいは、「六本木」では無く「町田」です。いや、むしろ「町田」と呼ぶ事も正しく無い程の町田市の外れで、駅からも遠く、そしてかなり急な坂の上になります。本当に登る気も失せるような急で長く立派な坂です。僕が住んでいる家は坂の頂上にあるので、勝手ながら自宅周辺を「町田ヒルズ」と呼んでいます。このブログを書いている時間も車が通る音は一切聞こえない、コオロギだけが鳴いている静かな環境です。
先週末に一人暮らしをしていた横浜市から引っ越してきました。引っ越しの理由は父/母/姉の家族との時間を大切にする為で、4人がのんびりと過ごす生活がスタートしました。今僕の隣の部屋にいるのは自分をドラえもんと呼んでいる父(ドラえもんと誕生日が一緒らしい)です。ホリエモンはどこに...。数ヶ月前に書いた退職エントリーにはWebの未来について色々とカッコいい事だけを書いていましたが、それに加えて優先度を上げて家族を守る長男としても頑張って行く事になりました。暫くは家族と真剣に向き合って行こうと思います。かなり都心には出にくい環境になってしまいましたが、町田の急な坂の上から新しいWebサービスを考えることと技術的な情報の配信は可能な限り継続します。ただこのブログは適当な僕のメモ書きも多いので、ブックマークが沢山付けられてしまうと心苦しい時もあります。それでも本当に良い事を僕が書いたと皆さんが思われた時は支援をお願いします。今後も何卒宜しくです。
静かで何も無い環境の方がプログラミング作業自体は捗るかもしれません。とりえあず町田市民ということで今後はFC町田ゼルビアを応援します!あ、僕は元気でやってますよ。
[Linux] : ギーク野郎のTerminal生活 ギーク野郎 ギーク野郎とは開発用Terminalを常に立ち上げてプログラミング言語をいじっている人の事をここでは意味します。ギーク野郎はモニターを複数台所有し、それぞれがTerminal用、ネットサーフィン用、ニコニコ動画専用というような使い分けをしています。しかしそれぞれのモニターへの視線とマウス移動はフラストレーションを溜める1要因になります。それを回避するために本当のギーク野郎は1台モニタのTerminalだけで作業します。すみません、左の発言は適当です笑。この記事ではTerminalだけで作業を完結したい人を対象とし、GUIを使わずにCUIだけでの作業環境構築を目指し、それに役立ちそうなアイテムについて紹介します。
tmux tmux
プロセス管理の初歩テクニック - Yuta.Kikuchiの日記
tmuxを使ってWorking Spaceを効率的に使う事を強く薦めます。個人的にはtmuxが好きですが、screenでも良いと思います。tmuxはwindowを複数立てたりpaneと呼ばれる単位の子windowへの分割もできます。分割した領域間の移動は設定したキーバインドで可能です。tmuxは一つのプロセス内で作業領域を管理するので、アタッチ/デタッチという機能を使うと作業の中断/再開が簡単にできます。プロセスを消さない限りターミナルを落としても問題ありません。作業領域に関してはターミナルに備わっているタブ機能の方が便利と思われる方も多いと思いますが、個人的にはターミナルのタブ機能は使わずに1つのwindowをtmuxで細かく分割して作業内容を全て1画面で見れるような使い方の方がしっくり来ます。また複数のWorking Spaceの移動をtmuxでやるとキーバインドが統一されて、使用しているTerminalに依存しません。以下はtmuxの設定ファイルの.tmux.confとtmuxの使用画面例になります。
$ sudo yum install tmux -y $ vi ~/.tmux.conf #新しいウィンドウのベース番号 set-option -gbase-index 1 #全てのベルを無視 set-option -gbell-action none #各セッションで保持するバッファ数 set-option -gbuffer-limit 20 #256色端末を使用 set-option -gdefault-terminal "xterm" set-option -gdefault-command /usr/local/bin/zsh set-option -gdefault-shell /usr/local/bin/zsh #ウィンドウ履歴で保持される最大行数 set-option -ghistory-limit 5000 #Escapeキー入力時の待ち時間(0.5秒)をキャンセル set-option -sescape-time 0 #ウィンドウを実行コマンド名で自動リネーム set-window-option -gautomatic-rename on #スクロールモード、コピーモード、選択モードで vi のキーバインドを使う set-window-option -gmode-keys vi #ウィンドウで動作があるとステータスラインでハイライト set-window-option -gmonitor-activity on #UTF-8 シーケンスが現れることに備える set-window-option -gutf8 on #set-option -g mouse-resize-pane on #set-option -g mouse-select-pane on # prefix + r で設定ファイルを再読み込み set-option -gprefix C-g unbind r bind r source-file ~/.
[PHP] : defineを辞めてhidefを使う 追記 PHPでdefineのかわりにhidefをつかう必要はない - id:k-z-h
トラックバックに対して反応を書いた事が無いんですが、ちゃんとした内容が掲載されていたのでこちらでも追記しておきます。エントリーアップ時にdefineを辞めてhidefに切り替えることを強く推薦したつもりは全くありませんでした。確かに僕が書いた「まとめ」の項目だけを見るとそう捉えれる事もできるのでまとめの項目を「hidefの導入を検討しても良いと思います」にしました。kazuhaさんが仰られているY!社の現状予想と僕の読解力の無さの話は置いておいて(笑)、その他defineの改善効果とPECLの話はご指摘通りかなと思いました。カンファレンス当日の発表の一部を深堀したつもりだったんですが、問題の本質に誤解を与えてしまう内容を書いた事は反省します。
その他の方からdefineとhidef以外でオブジェクト定数(const)でもいいじゃんという話もコメントに頂いてまして、パフォーマンスの検証とかしてないですけどその方法もありかなと思いました。
PHPカンファレンス2013に参加してきました PHPカンファレンス2013
2013/9/14(土)に開かれたPHPカンファレンス2013に参加してきました。主催、運営、スピーカーを担当された方々、大変お疲れ様でした。全体的には大半の人が知っている基礎的な内容が多かったと思います。スピーカーの方々も本当はもっとコアな話がしたいんだろうなぁとか、でも難しい話をし始めるとみんな分からなくなるんだろうなぁと思いながら聞いていました。個人的にセキュリティ面の知識が不足しているという事もあって、以下の2タイトルがとても勉強になりました。
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML... 安全なPHPアプリケーションの作り方2013 前職の先輩方、大学の後輩も積極的にスピーカーを担当していて凄いなぁと感心していました。PHPを2年以上書いていない僕もどこかで間違いの無い知識を発表してみようかなぁと思ったり。(笑)今日は前職の先輩がPHPのhidefについてさらりと触れられていた内容について僕の方でも追加で紹介したいと思います。
defineでは無くhidefを使う PECL :: Package :: hidef
カンファレンスの説明でdefineはスクリプト実行毎に呼ばれるので、起動時一度定数読み込みするためにPHPExtensionを使うのが良いって説明もありました。ただしExtensionは開発コストが大きいのでPECLのhidefを使う話をします。
PHPとCentOSのversion 今回僕が実行した環境です。PHPのversionは5.4.19、CentOSは6.4になります。
$ php -v PHP 5.4.19 (cli) (built: Aug 22201308:03:53) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies $ less /etc/redhat-release CentOS release 6.
[javascript] : Object Oriented JavaScriptの入門 謝罪 Object Oriented JavaScriptの入門 - Yuta.Kikuchiの日記
2013/08/27に公開したObject Oriented JavaScriptの記事ですが、prototype周りの説明がいい加減だったため内容を一旦削除することにしました。多くの方にBookmarkして頂いたお陰でホットエントリーにも掲載されたのですが、正直それに見合う内容ではありませんでした。
あやふやな知識を書いてしまったのは僕の勉強不足が原因です。ネットで収集した情報だけで自分の知識を固めて行くのは危険だという事を身にしみて感じました。同時に今回とても悔しく情けない思いもしたので、必ずや正しいJavaScriptのオブジェクト指向知識を身につけて再投稿することをここに宣言します。 "I shall return!"
(function() { console.log( "I shall return!" ); }()); > 後で読むタグをつけた方、もう記事はありません(笑)。修正版の再投稿を期待していてください。
> ブックマークをしていただいた方、申し訳ありませんがブックマークの削除をお願いします。
> id:yuisekiさん はい、仰せの通りCoffeeScriptで書くというのも一つの手だと感じています。
> id:anemoさん もしまた変な知識を書いていたら今度は容赦なく突っ込みをお願いします。
[Linux] : プロセス管理の初歩テクニック Index 一言 Terminalログアウト後もプロセスを残す プロセスの2重起動防止 簡単に不要なプロセスをkillする tmuxの薦め 一言 はてなって不思議なコミュニティーで具体的な実装や調査分析よりも便利なコマンドとかを紹介するネタが何故か重宝されるようなので、良く使うプロセス管理系コマンドの初歩テクニックを書いてみます。( コマンドの学習をより必要とする人が多く一般的な話だからでしょうか? )
Terminalログアウト後もプロセスを残す 単一の処理で長時間かかってしまうようなプログラムを実行後にログアウトするとプロセスが消えて悲惨な目に遭います。tmuxやscreenを使って再起動可能な設定をしている人は特に気にする必要はありませんが、これらを使っていない場合はnohupでログアウト後もプロセスを残しましょう。
$ vi nohuptest.sh #!/bin/sh sleep 1000 $ chmod +x ./nohuptest.sh $ nohup ./nohuptest.sh & [1] 13564 #nohup: ignoring input and appending output to `nohup.out' $ exit # 再度ログイン $ ps auxww | grep nohuptest yuta 13564 0.0 0.1 106088 1172 ? SN 03:56 0:00 /bin/sh .