さくらのVPS契約&wordpress周りの再設定

January 30th, 2011 No comments

先日、さくらのVPSを契約し、yusukezzz.netのコンテンツ全てを移行しました

その際、wordpress周りの設定を大分弄ったので備忘録として残しておきます
パフォーマンスの指標として今回はYSlowを使って測定しました
変更前は記録していないのですが、確かGrade Dで50台だったと思います…

設定内容はググって出てきたものをほとんどコピペしてるだけです

まずはhttpd.conf

<VirtualHost *>
~略
    <Directory /your-htdocs-root>
        AllowOverride All
        Options FollowSymLinks -MultiViews

        # gzip compress setting
        SetOutputFilter DEFLATE
        # Netscape 4.x has some problems...
        BrowserMatch ^Mozilla/4 gzip-only-text/html

        # Netscape 4.06-4.08 have some more problems
        BrowserMatch ^Mozilla/4\.0[678] no-gzip

        # MSIE masquerades as Netscape, but it is fine
        BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

        # ここからフィルター設定
        FilterDeclare Compression CONTENT_SET
        FilterProvider Compression DEFLATE Content-Type $text/plain
        FilterProvider Compression DEFLATE Content-Type $text/css
        FilterProvider Compression DEFLATE Content-Type $application/xhtml
        FilterProvider Compression DEFLATE Content-Type $application/xml
        FilterProvider Compression DEFLATE Content-Type $application/xhtml+xml
        FilterProvider Compression DEFLATE Content-Type $application/rss+xml
        FilterProvider Compression DEFLATE Content-Type $application/atom+xml
        FilterProvider Compression DEFLATE Content-Type $application/x-javascript
        FilterProvider Compression DEFLATE Content-Type $image/svg+xml
        FilterProvider Compression DEFLATE Content-Type $text/html
        FilterProvider Compression DEFLATE Content-Type $application/javascript
        FilterChain Compression
        # ここまでフィルター設定

        # Don't append Vary heder for specific files
        SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip|lzh|exe)$ dont-vary

        # Make sure proxies don't deliver the wrong content
        Header append Vary User-Agent env=!dont-vary
        Header append Vary Accept-Encoding env=!dont-vary
        # expires headers
        <FilesMatch "\.(ico|jpg|jpeg|png|gif|js|css|swf)$">
            ExpiresActive On
            ExpiresDefault "access plus 3 days"
        </FilesMatch>
    </Directory>
~略
</VirtualHost>

次にmysqlのクエリキャッシュ設定

[mysqld]
# query cache
query_cache_limit=1M
query_cache_min_res_unit=4k
query_cache_size=24M
query_cache_type=1

最後に、wp-minify の導入
wp-minify はwordpress内で使用されているjavascript, cssを1ファイルにまとめてくれるプラグインです
インストール後、wp-minify/cache に書き込み権限を与えておきます

APCや eAcceralatorなどもある程度効果ありますね
yusukezzz.netはAPCを導入しています

以上の設定を施したところ、YSlowのスコアは以下のようになりました
Grade A
Overall performance score 90
後はhttpリクエスト数を減らせ(CSSスプライトが未実施)&CDN使え(パフォーマンスと無関係)の2点が評価悪いだけなので、今回はこの辺までで十分だと思います
#CDNについては about:config からYSlowの設定を弄ることで強制的にオレオレCDNを登録出来るそうですが、スコアが上がるだけなのでやってないです
CSSスプライトはテーマによっては対応してそうなので、もう少しいい評価になるかもしれません

#2011/02/19 追記
そもそも YSlow の RuleSet を Small site or Blog にするべきでした
その状態で計測するとスコアは94まで行きました
あと、下記チューニングの通りにデーモンを停止してみました
CentOSをサーバーとして活用するための基本的な設定 (さくらインターネット創業日記)
#追記終了

以下参考サイト一覧(順不同)
DSAS開発者の部屋:負荷分散環境でブラウザキャッシュが効かないときは – ETagの解説 -
Webサイトの高速化 ルール13 ETagを正しく設定する! (Yahoo! developer netoworkより翻訳) | 株式会社インターオフィス
クラウド環境でのApacheの設定 | cloudrop
ゆっくりと… » WP MinifyでCSS/JavaScriptをまとめて軽量化、ページの応答速度を向上させる
mod_expires – Apache HTTP サーバ
YSlow対策でmod_expireを利用してHTTPレスポンスヘッダにExpiresを追加する – blog.katsuma.tv
Apacheで圧縮してコンテンツ配信しよう – takami_hirokiの日記
Apache 2.2 mod_filterを使いこなす – AddOutputFilterByType DEFLATE text/htmlを書き換えてみる « cyano

画像の向き(Orientation)を取得

January 3rd, 2011 No comments

Androidのカメラは横(Landscape)表示が標準らしく、縦画像が撮れないアプリもあったりします(Milestone2の標準カメラは駄目でした)
ここでいう縦画像は width < height な画像のことで、普通に表示すると縦長になる画像のことです
しかし、Milestone2のギャラリーでは端末を縦にして撮影したときの画像は縦長で表示されます
PCに取り込むと横長になってしまうのに何故?と思ったらExifにOrientationが書きこまれていました!
ということは、この値を見て向きを判別できるということですね
AndroidではいちいちExifを見なくてもある程度の情報はMediaStoreから取得出来ます

前置きが長くなりましたがサンプルコードです
Intent.ACTION_SEND で画像を受け取った場合を想定しています

Uri uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
ContentResolver cr = getContentResolver();
Cursor query = MediaStore.Images.Media.query(cr, uri,
    new String[] { MediaStore.Images.ImageColumns.ORIENTATION },
    null, null);
query.moveToFirst();
int orientation = query.getInt(0);

orientation は整数で、0, 90, 180, 270 の値を取ります
あとはこの値になるように Matrix#postRotate(orientation) なんかで画像を回転させれば正しい向きの画像データが得られます

以上を踏まえて画像縮小アプリを作りました
yusukezzz/ImageReducer - GitHub

Tags: ,

Milestone2 でテザリング

December 26th, 2010 No comments

Softbank銀SIMで動作を確認
標準の3G Wifi Hotspotはうまく動かなかったけど、Barnacle Wifi Tetherっていうのを入れたら普通に出来た
意外と使い物になる感じなのでWiMAX解約しちゃっていいかなーと思った
多分1DAYで運用したほうが経済的だし、エリアを気にする必要がほぼなくなるので

連続30分ぐらいしかまだ使ってないけど、ニコ動とか見てもほんのり温かくなる程度
バッテリが厳しいのでその内BP-7Xに買い換えたいところ

追記:
2chのMotorolaスマートフォンスレで見かけたのですが、標準の3G Wifi Hotspotが動かなかったのは
X06HTから持ってきたSIMでAPN設定のAPN Typeにdunがないのが原因だったみたいです
default,mms -> defalt,mms,dun
のように変更すれば動きました
※今のところ定額内のようですが自己責任で設定してください

Milestone2 ALT+SHIFT+キー で入力出来る内容一覧

December 24th, 2010 No comments

先ほど、ALT+SHIFT+, でパイプ(|)が入力出来るのを知って衝撃を受けたので他にないか調べてみました

ALT+SHIFT+. = …(三点リーダ)
ALT+SHIFT+/ = \(バックスラッシュ)
ALT+SHIFT+@ = ・(中黒)
ALT+SHIFT+f = ¥(円)
ALT+SHIFT+h = {(中括弧開始)
ALT+SHIFT+j = }(中括弧終了)

他にもいくつかありますが、良く解らん記号ばかりだったので省略します
(例えばALT+SHIFT+sでβ、ALT+SHIFT+tで£…など)
ちなみに使用しているIMEはOpenWnnフリック対応版です

Milestone2 のキーボードレイアウトを変更

December 24th, 2010 2 comments

してみました
もちろん要root権限です

milestone2のキーボードは中々入力しやすくて悪くないのですが、
ホームボタンとメニューボタンがキーボード側になかったのでその2つを設定してみました
それぞれ、ALT-LOCKとVOICEに上書きしました
ALT-LOCKは大抵のIMEでALT2度押しで代用出来ますし、音声検索は自分はまず使いませんので

※以下、自己責任で設定してください

編集するファイルは
/system/usr/keylayout/umts_milestone2-keypad.kl
です

自分はRootExplorerを購入して編集しました
既に配置されているキーを入れ替えるだけなら単純にキー名を書き換えるだけで大丈夫です

設定後の内容です(最下行2行を編集)

Milestone2 Keylayout

Milestone2 Keylayout

設定後、再起動すると有効になります

後はターミナルで作業していて|(縦棒、パイプ)がないのが非常に不便なのでどこかに配置したいのですが、
もともとキー設定に存在しない内容をどうやって設定するのか分かりません;

追記:
特に設定しなくても|の入力できました;

How to enter a pipe symbol? – Android Forums

ALT+SHIFT+”,”(カンマ)
で|が入力できます…

ALT+SHIFT+キーの操作をまとめました
Milestone2 ALT+SHIFT+キー で入力出来る内容一覧 | zilog