2010年10月29日金曜日

GALAXY Sを買って困ったこと,よかったことなど


アキヨドで今月の初めあたりに運良くGALAXY Sを予約でき本日購入してきました.


実は今まではXperia(プライベート)とiPhone4(会社用)を使っていたのですが,プライベート用のXperiaがちょっと使いにくくて


DoCoMoのポイントも溜まっていたので機種変してきました.




GALAXY S最初の感想


Xperia iPhone4 と比べて非常に軽いです.


iPhone4(137g) Xperia(139g) GALAXY S(118g)と非常に軽い仕様になっています.


次に気になったのが,画面の明るさです.


iPhone4と同等の綺麗さだと思います.またタッチパネルの感度もiPhone4にまったく劣りません.



困ったこと


Xperiaから電話帳やメールなどのデータを移す際にSDカードにコピーしたのですが,GALAXY SにSDカードを入れると


まったく見えない現象に遭遇しました.


よくよくディレクトリを調べると,SDカードは「/mnt/sdcard/external_sd」にマウントされていることがわかりました.


バックアップからインポートする際に殆どのアプリは「/mnt/sdcard/...」を見に行くので手動でバックアップしたディレクトリまで移動する必要があります.



電話帳は,Google Contactを利用してXperiaから同期していたので簡単に移行する事ができました.


GoogleContactを利用している場合は,専用のアプリかGmail経由でアドレス帳を編集するしかないと思っていたのですが公式マネージツールがありました.


Google Releases an API for Contacts


マネージツールでは一括でグループ分けや,重複ユーザの統合が簡単に行えます.


SPモードが使えないという方は以前書いた記事を参考にして下さい.


SPモードを契約しており,3G回線を利用している場合のみ利用可能です.




Flashは使えるのか?


使えます.ニコニコ生放送がサクサク動きました.


f:id:koujirou6218:20101028232039j:image




iPhone4とGALAXY Sどちらがいいのか


GALAXY SがiPhone4に勝る点



  1. 動作が速い

  2. DoCoMoだから回線も速い

  3. GoogleMapの描写は早い

  4. 画面が大きい

  5. 生放送がみられるぐらいFlashがさくさく


iPhone4がGALAXY Sに勝る点



  1. Google Mapの現在地点を示すポイントの動作がスムーズ

  2. アプリが豊富

  3. 洗練されたインタフェース

  4. Skypがある

  5. LEDフラッシュ搭載

  6. Twitterクライアントたくさん



サッと思いつくのはこれぐらいでしょうか.


個人の感想としては,インタフェースはiPhone4ですが機能はGALAXY Sといったところです.




2010年10月23日土曜日

MySQLのクエリーログ


今日は開発からMySQLに投げているクエリーの調子が悪いという話がきました。


開発は基本的にPHPなのですが、PHPからDBに接続しクエリを投げる際にPHP5.1から実装されたPDOを利用しています。


PDOとは


DBにはMySQLやPostgreSQL、Oracleなどがあります。


DBにデータを入れたり、DBからデータを抜き出したり、検索したりする場合はDBに対してクエリを実行します。しかし、クエリはDBによって異なるので新しくクエリを覚えるのは非常にトレーニングコストがかかったりします。


PDOは、データベースの違いによるクエリの差を吸収してくれるための関数です。


完全に差を吸収してくれるわけではありませんが、MySQLからPostgreSQLに以降する時などに非常に効率が上がり、セキュリティを向上させる仕組みもあるのでセキュリティ向上も期待できます。




PDOからクエリを取得できない


今日問題が起こったのはPDOからDBに実際に渡るクエリを知る術が基本的にないため、クエリが正しく実行されているのかを分析できない点にありました。


PDOからクエリを収集する方法



  1. MySQL QueryLogを取る

  2. TCPダンプを取る


などがありました。TCPダンプを取るよりも明らかにクエリログを取る方が簡単なのでこちらを採用しました。



クエリログを取る方法


/etc/my.cnfにlogを追加します。



log=/var/log/mysql/query.log




logディレクトリがない場合は予め作成しておいてください。


また、MySQL実行ユーザの権限をディレクトリに付けてください。



普通はこんな感じでしょうか



chown root:mysql /var/log/mysql/




パーミッションは775です。


MySQLを再起動させます。


ログの監視を開始します。



tail -f /var/log/mysql/query.log




しかし、問題のあるクエリを投げてもいっこうにログが流れてきません‥。



どうやらQueryCacheが効いているようです。


QueryCacheは、参照系のクエリが実行されキャッシュにある場合クエリを実行せずにキャッシュから結果を返すためログにクエリが残りません。


MySQLのキャッシュをクリアします。


MySQLにログイン後



FLUSH QUERY CACHE;




これでログにクエリが流れてきました。



結局、サーバ側やPHPの問題ではなく投げているクエリが間違っていただけでした。。。。



この設定では、ずっとログを書き込んで行くのでローテートログなどを設定する必要があります。


2010年10月22日金曜日

今日はNFSを触ってみました


NFS(Network File System)はLinuxで利用されるファイル共有システムです。


Windowsのようにネットワークに接続されたマシン同士でファイル共有を行うことができます。


NFSを行うには、NFSサーバとNFSクライアントで最低2台のマシンが必要になります。


NFSサーバ側で公開設定されたディレクトリをネットワーク経由でクライアントが利用できる仕組みです。


ファイル共有として利用されるのが多いですが、シチュエーション的にはユーザ個別のディレクトリがある/home/以下を共有すると


他のマシンでも同じ環境を引き継ぐ事ができたりするので複数あるサーバ機などに利用したりします。


今回はVMで、2機のマシンを準備しました。


サーバ:CentOS 64bit 192.168.0.128


クライアント:RedHat 64bit 192.168.0.130



サーバー側の設定


共有したいディレクトリを設定します。


設定ファイル



etc/exports




この設定ファイルに次のように入力します



/home/kojirou/work 192.168.0.130(rw)




これで、/home/kojirou/work ディレクトリを 192.168.0.130からの読み込み/書き込みが可能になります。


192.168.0.0/24 などネットワークを指定することもできます。




共有したディレクトリ 許可するクライアントのIP又はホスト名(rw(読み込み書き込み可能/ro(読み込みのみ))




許可するクライアントは「,」で区切り複数していすることが可能です。




/usr/local 192.168.0.1(ro) 192.168.0.2(ro)


/home 192.168.0.1(rw) 192.168.0.2(rw)




ここまで設定できれば、NFSを起動します。



service nfs start



クライアントの設定


クライアント側では、サーバ側で設定したディレクトリに対してマウントするだけです。



mount -t nfs 192.168.0.128:/home/kojirou/work /home/kojiro/work



mount -t nfs NFSサーバ:NFSサーバ側の共有したディレクトリ クライアント側の展開ディレクトリ


するとエラーが出てしまいました。



mount.nfs: Input/output error.




これは、クライアント側でportmapが起動していないためポートマッピングできないというエラーなのでポートマッパーを起動します。



/usr/sbin/portmap start




そして、再度マウントさせます。何も表示されなければ共有完了です。



セキュリティ


NFSは、垂直型のファイル共有システムなのでNFSサーバが攻撃されてしまえばクライアントは一気に停止する危険性があります。


先ほどクライアント側で起動したポートマッパーは、NFSサーバの接続先をクライアントに伝えるためのデーモンです。


おそらく侵入者はポートマッパーからNFSサービスを受けている接続先を特定し攻撃しようとするでしょう。




それを防ぐために /etc/hosts.allow と /etc/hosts.deny を編集し指定したネットワークからのみのサービスを利用できるようにアクセス制限を行います。




/etc/hosts.allow と /etc/hosts.deny は次のような動作をします。


hosts.allowから許可されているか? (Yes) → サービスにアクセス


(No)↓


/etc/hosts.denyから拒否されているか? (Yes)→アクセス拒否


(No)↓


   サービスにアクセス



2つのファイルはデフォルトでは何も書かれていないのですべてのアクセスを許可しています。


/etc/hosts.allow



portmap: 192.168.0.130



こちらも同様にネットワークを指定することも可能です。


デーモン名:IP/HOST で指定します。


「,」で区切り複数していすることが可能です。


/etc/hosts.deny



portmap:ALL




マウントできない場合


NFSは複数のデーモンを利用しているので、各デーモンごとにポートを開けてる必要があります。


サーバ側で rpcinfo -p コマンドでNFSが利用しているポートを調べることができます。


/etc/init.d/nfs を編集することで任意のポートに変更することもできます。




2010年10月20日水曜日

Webサーバソフトウェアnginxの導入まで


軽量で高速と言われているnginxを試してみました。


OSはCent64bitです。


試してみようと思った経緯


Webサーバを構築しようと思った時、殆どの方はApacheを無意識のうちに選んでいると思います。


Apacheは稼働実績も多く、情報も豊富にあるので最良の選択だと思います。


そこで、ひねくれ者の僕はApacheって本当に最良の選択なの?っという疑問が生まれました。



Webサーバソフトウェアの種類


では、現在Webサーバソフトウェアの選択肢として何があるのか?


僕がWebサーバソフトウェアとして見つけることができたのは以下の3つです。



  1. Apache

  2. nginx

  3. perlbal


今回はnginxを試してみました。




インストール


不要なソフトウェアやモジュールがインストールされるのを防ぐために、基本的に全てソースからインストールを行います。


ソースからのインストールは、ソフトウェア管理やアンインストールが不便ですので、これらを管理できるpacoなどの利用をお勧めします。


http://d.hatena.ne.jp/koujirou6218/20100927#1285740277



nginx公式サイトから安定版をダウンロードしてきます。


現在はnginx-0.8.53



解凍後、特にオプションなしでconfigureを実行します。


すると、以下のようなエラーがでました。



./configure: error: the HTTP rewrite module requires the PCRE library.


You can either disable the module by using --without-http_rewrite_module


option, or install the PCRE library into the system, or build the PCRE library


statically from the source with nginx by using --with-pcre=<path> option.



どうやら、PCRE libraryがないようです。


ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/:title=PCRE最新版]をダウンロードします。


現在はpcre-8.10.tar.gz


ダウンロード後解凍してください。


今度は、先ほど解凍したPCREを指定してconfigureします。



./configure --with-pcre=/home/user/work/pcre-8.10



エラーがないので、そのままmake、make installしてください。


/usr/local/nginx/conf/nginx.confを編集します。


設定内容はApacheとよく似ているのでApacheの設定を行った事がある人は簡単にできると思います。


編集に関しては以下のWikiを参考しました。


http://viz.is-a-geek.com/~viz/cw/index.php?nginx




pid logs/nginx.pid; #コメントアウトを外す





location / {


root /usr/local/nginx/html; #DocumentRootに該当する部分


index index.html index.htm; #Indexesに該当する部分


}



とりあえず、上記の設定を行えば動きます。


起動方法は/sbin内のnginxを実行します。


自動起動に関しては先ほど紹介したURL内に自動起動スクリプトがあるので、そちらを配置する必要があります。


起動テスト



./nginx -t


the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok


configuration file /usr/local/nginx/conf/nginx.conf test is successful



エラーがなければOKです。


起動



./nginx



ブラウザからアクセスするとWelcome to nginx!が表示されればOKです。


ヘッダーもnginxになっています。



200 OK


Date: Thu, 07 Oct 2010 20:52:01 GMT


Content-Length: 151


Last-Modified: Thu, 07 Oct 2010 18:09:44 GMT


Server: nginx/0.8.53


Content-Type: text/html


Accept-Ranges: bytes





ログファイル


デフォルトの設定であれば/usr/local/nginx/logsに出力されています。


access.log



192.168.0.1 - - [08/Oct/2010:04:21:05 +0900] "GET / HTTP/1.1" 200 151 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3"


192.168.0.1 - - [08/Oct/2010:04:21:06 +0900] "GET /favicon.ico HTTP/1.1" 404 571 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3"


192.168.0.1 - - [08/Oct/2010:05:07:49 +0900] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3"


192.168.0.1 - - [08/Oct/2010:05:07:50 +0900] "GET /favicon.ico HTTP/1.1" 404 571 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3"


192.168.0.1 - - [08/Oct/2010:05:52:01 +0900] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3"




error.log



2010/10/08 04:21:06 [error] 5760#0: *1 open() "/usr/local/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.0.128"


2010/10/08 05:07:50 [error] 5760#0: *2 open() "/usr/local/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.0.128"



アクセスログをカスタムするのはできるのか不明です。




今後すること


Apacheとのパフォーマンス比較


PHP導入


カスタムログの方法


perlbalとnginxとApacheの比較


2010年10月2日土曜日

DoCoMo SPモードにする前の事前確認


DoCoMoが9月からSPモードのサービスを開始した。


SPモードとはなにか



スマートフォンではNTTドコモのiモードメールや絵文字、デコメールが利用できないうえ、コンテンツやアプリケーションの料金を、携帯電話料金と併せて支払うことができなかった。スマートフォンはiモードネットワークとは別に通常のISPへ接続していたため、メールはiモード以外のメール、mopera UメールやGmail、BlackBerryメールなどを使うことが原則とされていた。しかし近年スマートフォンの需要が高まり、iモード携帯からスマートフォンへの買い替え需要などへ対応するため、2010年9月1日にスマートフォンでもドメインがdocomo.ne.jpのメールアドレス、iモード絵文字、デコメールなどの利用を可能としたspモードの提供を開始した。またspモードメールの他に、インターネット接続、「ドコモマーケット」におけるコンテンツ決済サービスやメールウイルスチェック、アクセス制限サービスも利用することができる。


Wikipedia



DoCoMoがiモードに公式対応するまでに、@docomo.ne.jpを使う方法として2種類の方法があった。



  1. IMoNiなどの非公式ツールを利用する

  2. iモード.netから利用する


IMoNiは定期的にメール受信を行うことで疑似プッシュとしての機能も持ち、DoCoMoの絵文字やデコメにも対応しAndroidストアでも評価の高いアプリケーションの1つである。


※利用にはiモード.netの契約が必須


iモード.netは、ブラウザからアクセスになりプッシュにも対応していない。



SPモードになってできること



  1. @docomo.ne.jpが公式に使えるようになった

  2. コンテンツアプリケーションの料金を携帯電話の請求と一緒にできるようになった


DoCoMoが公式に@docomo.ne.jpをサポートしたことで、別途iモード.netの加入が不必要になった。


SPモードではできないこと



  1. VPN


SPモードでは、端末に割り振られるIPがローカルIPのためVPNが利用できません。


SPモードする際の注意点


SPモードではVPNが使えない上に、DoCoMo指定のIPでしか@docomo.ne.jpを利用することができないため、WiFiを利用してメールの送受信を行うことはできない。このため、@docomo.ne.jpwを利用したい場合は3G回線の利用が余儀なくされる。


また、SPモードではテザリングが禁止されている。


SPモードの契約は電話かDoCoMoショップで行うことになるが、1点注意が必要なのがSPモードに対応していない場合は先にアップデートしておかなければ現在の通信設定では、SPモードは利用できないの契約完了後、圏外になる。これを解決するには端末のバージョンアップを行うのだが、圏外ではWiFi環境が内限りバージョンアップできない。


そのため、先にバージョンアップしてから契約しよう。


バージョンアップについては次で紹介する。


まとめ



  1. WiFiでは、メールの送受信が行えない

  2. テザリング禁止

  3. 家族間メールは有料


SPモードに対応していない場合はバージョンアップが必要


確認方法

設定⇒ワイヤレス設定⇒モバイルネットワーク⇒アクセスポイント名で進むとAPN一覧画面が表示されます。ここで、メニューキーを押し、「初期設定にリセット」をタッチするとspモード契約で必要となるAPN設定が自動で反映されます。


ここでSPモードという表示がない場合はアップデートが必要になる。