apahceモジュール入門

apacheモジュールとは
apacheに付加的な機能を追加できる。というかapacheの大半の機能はモジュールで実現されている。
C言語で書くことができ、余分な処理が走らないため
PHP,Perlなどで書くCGIより一般的に高速に動作する。
↓詳細
http://labs.yumemi.co.jp/labs/mod/apache_module.html


apacheモジュールを作成するにはroot権限が必要。
手軽にやるならVMwarelinuxインストールがよい。(バックアップ取りやすいし)
最近ならVPS借りるという選択肢もある。


apacheモジュールの開発環境を作る

yum を使ってapache-develとか開発に必要なパッケージをインストール
Apacheモジュールの作り方(2.x系)
yumはパッケージ管理ソフト。apt-get(macだとmacPorts,Homebrewとか)
と同様コマンドを打つだけで依存関係とか考慮しながらインストールしてくれる。


サンプルプログラムの作成

以下のコマンドでテンプレを作成できる。
/usr/sbin/apxs -g -n hellow_world


モジュールの組み込みは、静的リンクと動的リンクがある。動的リンクはテンプレにあるMakefileが使える。
*動的リンクするにはmod_soというモジュールを組み込む必要がある。
モジュールの確認は/usr/sbin/apachectl -l とか/usr/sbin/apachectl -Mを実行
↓詳細
apxsでapacheにモジュールを追加する
mod_soが無いときはapacheを ./configure --enable-module=so でリビルドする必要があるとか(未確認)


サンプルプログラムの実行
動的リンクができる環境では、
テンプレを展開したフォルダでmake installでビルドしてくれる。
環境によっては、設定までしてくれるが自分の場合は手動でやる必要があった

以下のapacheの設定ファイル↓を編集する
/etc/httpd/conf/httpd.conf

サンプルモジュールの読み込みを追加
LoadModule helloworld_module modules/mod_helloworld.so


http://サーバーのIP/hello、でサンプルで作成したモジュールを実行するようにする。

SetHandler helloworld

apacheを再起動する。
/etc/rc.d/init.d/httpd restart


http://サーバーのIP/hello、にアクセスすると
The sample page forom mod_helloworld.cと表示される。


apache再起動時に以下のエラーメッセージが出た場合
Could not reliably determine the server’s fully qualified domain name,
↓参照のこと
http://d.hatena.ne.jp/uriyuri/20100511/1273575287


apacheの設定について
DocumentRoot、/var/www/html/をみんなで使うのはセキュリティ的に問題なので、
ユーザーディレクトリを使えるようにする。↓詳細
TIPS集:Webサーバ(Apache) 『ユーザホームページを公開するには?(その1:"~"チルダ付き)』 - はじめての自宅サーバ構築[kajuhome.com]
FTPでの基本的なユーザー権限・パーミッションについて

httpd.confを以下の感じに編集するとのこと。

  コメントアウトする
  #UserDir disable
  UserDir public_html


apacheモジュールでファイルの読み書きをする。
apr_file_openを使う。
http://dev.ariel-networks.com/apr/apr-tutorial/html/apr-tutorial-5.html
※ファイル書く時にディレクトリに権限与えておかないと、書き込めないので要注意!

http://sb.xrea.com/showthread.php?t=10447

apacheモジュールでPOSTメッセージを受け取る

char post_buf[100];
int post_write_size = 100;
memset(post_buf,0,100);

ap_setup_client_block(r,REQUEST_NO_BODY);
ap_should_client_block(r);
ap_get_client_block(r,post_buf,post_write_size);

参考サイト
https://www.codeblog.org/blog/inoue/200612.html
http://kilrey.com/c-lang/apache/post.html



よく使うapache関連のディレクト
ログ
/etc/httpd/logs
設定ファイル
/etc/httpd/conf/httpd.conf
起動の時などに使用
/usr/sbin/apachectl
起動の時に使用、サーバー起動時に実行される場所
/etc/rc.d/init.d/httpd


参考サイト
apacheモジュールに詳しいサイト
http://dsas.blog.klab.org/archives/50574774.html
apacheの起動系コマンド
http://www.jitaku-server.net/apache_start.html
emacsのコマンド
http://www.unixuser.org/~euske/doc/emacsref/#cutcopydel
c++apacheモジュール
http://blogs.yahoo.co.jp/take_low_6/23875145.html


まとめ
apacheモジュールはapacheの深い所の知識も学べるため非常に面白い。
特に高速化手段を考えなくても十分早く動くのも魅力的。
最近はVPSを使えばrootが使えるようになったので、前より楽に使えるようになったと思います。


apacheインテルコンパイラーでビルドするとさらに高速化できるとの話もあるので、
モジュールと含めてためしてみるのも面白いかもしれません。
http://nex.xrea.jp/?s=180
intel compiler で Apache が 400% 高速化 - drk7jp

リロード時の二重送信対策

発生する問題
自分で簡単なPHPを書いて投稿フォームを作った場合、
送信ボタンを押した後、リロードすると「フォームデータ再送信」メッセージが出て二重にデータが投稿される事があります。


問題がおきる理由
この問題はデータ送信後「更新、リロード」処理を行いPOSTのメッセージが再送されるために発生します。


ブラウザの「更新」ボタンは、直前に行ったメッセージを再実行するため、
直前に普通に表示する場合は「GET」が再送され最新のページが取得でき、
直前にデータを投稿していれば「POST]が再送され、二重投稿になります。

二重投稿対策
二重投稿の対策は、ページ遷移による対策、セッションを使った対策、リファラーを使った対策などがあります。

ページ遷移による対策
ページ遷移による対策は、POSTでデータを登録後、header関数を用いて違うページに飛ばす(GETを実行する)ことで対策します。
これで、リロードしても最後に実行されたGETを行うため二重投稿が起こらなくなります。
2009-07-16
問い合わせ完了ページでの二重送信防止法 -過去の投稿で同内容のものが- PHP | 教えて!goo

セッションによる対策
セッションによる対策は、送信時にセッション(クッキー)で投稿の確認をする時にチケットを渡しておいて、DBに登録する際にそのチケットを使用する手法です。チケットを一度使ってしまえば、リロードしてもデータの二重投稿ができないという事になります。
58. すごいリロード対策 | 日経 xTECH(クロステック)
http://d.hatena.ne.jp/p4life/20071021/1192960112


リファラーによる対策
リファラーによる対策は、直前のページをチェックし正しいページから飛んできていない場合は処理を行わない対策です。


どの手法で対策するか
対策方法は以下のページに書いてあるように、端末の使用やサービスの仕様によって、セッションやリファラーがうまく機能しない事があることを考えなければいけません。
ふつうのリロード対策 - to-R
http://cakephp-saboten.blogspot.com/2008/04/blog-post.html
ヘッダー関数を使った対策は一番簡単に実装でき、いろんな端末に使えるためまずはこれで実装してみるのがよさそうです。

AppleMobileDeviceHelper.exeが異常終了する

iTunesを5.0にアップデートしてから、同期しようとするとAppleMobileDeviceHelper.exeが異常終了して
同期できない問題が自分のPCで発生しています。


どうやら以下のプログラムが正常に動作していないようです。
C:\Program Files\Common Files\Apple\Mobile Device Support\AppleMobileBackup.exe


前回は以下のアドレスに示すように
http://d.hatena.ne.jp/gravit/20110727/1311798082
iTunesの再インストールで治ったのですが、今回は再インストールしてもダメでした。


このへんの情報をもとに新しいアカウントを作って試してみたのですが、それでもダメでした。
http://support.apple.com/kb/TS1421?viewlocale=ja_JP


海外でもこの問題は起こっている人が多いようです。
https://discussions.apple.com/thread/1595916?start=525&tstart=0



いろんなサイトで調べてみたところ、タイムゾーンの設定がおかしくなっているから、
他のタイムゾーンにして戻すという処理を、PC,iPhone両方でやるといい、というネタがあったのですが
自分の環境では、その方法でもダメでした。


以下は参考リンクです。
https://discussions.apple.com/thread/3131275?start=0&tstart=0
http://cgatesmobile.wordpress.com/2010/04/24/itunes-syncserver-summary/#comment-105
http://d.hatena.ne.jp/makaibito/20081203/1228233076


自分のPCはまだiTunesが正常動作していないですが、参考になればと思ってここに書いておきます。

greasemonkey入門

greasemonkeyfirefoxのアドオンで、javascriptを用いて様々な機能を追加することができます。


表示のカスタマイズ、広告の無効化、キーボードショートカット、ブラウザゲーの自動化など、
HTML,javascript,cssで行われることなら何でもできる感じです。


ちょっと前まではいろいろ解説サイトあったと思うのですが、
最近調べたら参考になるサイトが減っている気がしたのでここにまとめておきます。



ソースの最初に書くスクリプトの名前とかの宣言。

// ==UserScript==
// @name              スクリプトの名前
// @namespace         スクリプトの名前がかぶった時区別するもの。自分のサイトのURLなどを指定。 
// @description       スクリプトの説明
// @include           スクリプトを適用するサイト。*を指定するとすべてのサイトに。
// ==/UserScript==


HelloWorld
上の宣言の後に追加して書く。どこのサイトでもダイアログを出しHello Worldと表示されます。

(function() {
	alert("Hello World");

})();

上で書いたHelloWorldのサンプル。UTF-8じゃないと文字化けすると思います。
https://addons.mozilla.org/ja/firefox/addon/greasemonkey/
でアドオン導入後、↓のコードをテキストエディタで「helloworld.user.js」という名前で保存して、
FireFoxドラッグアンドドロップでインストールできます。

// ==UserScript==
// @name            Hello world
// @namespace       http://d.hatena.ne.jp/gravit/
// @description     すべてのサイトでHello worldとポップアップで表示
// @include         *
// ==/UserScript==

(function() {
	alert("Hello World");

})();

functionで囲む利用は↓
http://efcl.info/adiary/Greasemonkey%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E5%85%A8%E4%BD%93%E3%82%92%E7%84%A1%E5%90%8D%E9%96%A2%E6%95%B0%E3%81%A7%E5%9B%B2%E3%81%86%E6%84%8F%E5%91%B3


firebugなどのコンソールにデバッグ情報を表示する。

(function() {
	 GM_log ( "debug message" );

})();

メッセージのPOST

(function() {
	 GM_xmlhttpRequest({
		    method : 'POST',
		    url    : 'POSTするURL',
		    headers: {'Content-type': 'application/x-www-form-urlencoded',},
		    data   : 'bookmarkurl=' + location.href + '&bookmarksitetitle=' +  document.title,
		    onload: function(response) {alert("BookMark Success!")}
     });

})();


参考サイト
Google Notebook
ナマケモノになりたいishiducaが書いてます : Twitterにポストするための小窓を作るユーザスクリプト(Greasemonkey)を書いてみた
http://linuxserver.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/JavaScript/Firefox%E3%81%AE%E3%82%AD%E3%83%BC%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89%E3%82%92%E5%A4%89%E6%9B%B4.php

FC2でスマートフォン用ブログをはじめてみました

スマートフォン用のデザインを勉強したかったので、FC2でブログをはじめてみました。
スマートフォン ブログ

リンク先のサイトをスマホで見ると、私がデザインを作成したテンプレが表示されます。
まだ作成中なのであまりかっこ良くないですけどねw


スマートフォン用のデザインは、HTML5,CSS3を生かしたサイトを作れますし、
移動中にどういうコンテンツを見せるべきか?
といろいろ考えることがあり作っていて面白いです。


FC2だと作成したテンプレートを他の人に使ってもらう機能があるのもいいですね。
もう少しクオリティ上げて、共有のテンプレートに申請したいと思っています!

iPhoneから投稿

はてなtouchを使って投稿できるかテストです。

写真は貼れるようですね。

はてな記法には対応しているのはいいのですが、プレビューがないのはちょっと辛いですね。
あの難しい書式は覚えられる気はしませんw

steins;gate iPhone

シュタインズゲートiPhone版きてますね。iPad版も同時にきているようです。
iPhone版でデータは1.6Gあるので時間無いときのダウンロードは要注意ですw


STEINS;GATE - 5pb.Inc.


STEINS;GATE HD - 5pb.Inc.

steins;gate詳しくない人はwindows版のページをみるといいと思います。
Windows版『STEINS;GATE』追加要素 - 想定科学ADV『STEINS;GATE(シュタインズゲート)』
結構本格的なSFですが、キャラクターも痛い人がいたりかわいい女の子がいたりと
あまりゲームやらない人にもおすすめできる出来ですね。


ちなみにpspの解像度が480x272、iPhone4の解像度が960×640なのでpspの2倍ぐらい細かいですね。
ほんとiPhoneの解像度はヤバイです。


ちょっとプレイしてみた感想
声はかなりクリアですね。BGMもヘッドホンやイヤホン使うと立体感があって良い感じです。
OpenFeint対応しているので、実績解除とかされるのもいいですね。
起動時間は忍者ロワイヤルより早いですww

画像も旧来の5bpのアプリと違ってすごくクリア!


これはいいですね。Memories Offでは画像が劣化していたのですごく嬉しいです!これはしばらくの間じっくり楽しめそうです!!


操作方法
なんかメニューの出し方わかりにくかったのでメモ。
●2本指タップ   メニュー
●下スワイプ    バックログ
●上スワイプ    テキストウィンドウOFF
●右スワイプ    既読スキップ
●左スワイプ    強制スキップ
●タップ&ホールド オートモード開始
●Phone フォーントリガーしまい込み、呼び出し
●端末縦持ち    フォーントリガー呼び出し
●端末横持ち    フォーントリガーしまい込み