Hatena::ブログ(Diary)

130単位

2010-04-25

さくらレンタルサーバ スタンダードとServersMan@VPS Entryプランの比較

GWは特に出かける予定もなくおそらく暇だということに今さらながら気づいたので、サーバーを借りて何かやってみようかと思い立ちました。候補としては2つ。割と評判良く定番といってもいいさくらインターネットの共用レンタルサーバーのスタンダードと、つい最近サービス開始されて破格な値段設定が話題だったりするDTIの仮想専用サーバーServersMan@VPSです。

以下、両ページに載っている項目を単純にマージしてみた比較表です。

項目さくら スタンダードServersMan Entry
OS(FreeBSD7.1)CentOS5
メモリ(2GB)256MB
HDD10GB10GB
初期費用¥1000¥0
月額費用¥500¥490
最低利用期間2か月分初回請求なし
割引年間契約¥1000割引月額費3ヶ月無料
root権限なしあり
固定IP(グローバル)あり
IPv6対応
サーバー管理ツールServersMan?
Apache○(1.3.42)
独自ドメイン4月下旬提供予定
サブドメイン
マルチドメイン最大20
FTP
SFTP
SSH△※
cron△※
Perl○(5.8.9)
Ruby○(1.8.6)
Python○(2.5.3)
PHP○(5.2.12)
PHP4変更可△※
SSI○※
CMSクイックインストール×
MySQL○(1個)
phpMyAdmin
SQLite△※
ファイルマネージャ×
アクセス制御(.htaccess)△※
アクセス解析
アクセスログ取得/閲覧
共有SSL
ファイアウォール△※
メールアドレス制限なし
メーリングリスト最大10
メール全般
ウェブメール
迷惑メールフィルタ
ウイルスチェック△※
携帯電話転送
商用利用おそらく○

サーバー借りたことのない素人ではありますが、どう考えてもServersManのほうが優れているように思います。いろいろと自分でインストールしないといけないっぽいですが、むしろ学習するつもりで触ってみるのが良さ気です。

というわけでServersManを申し込んでみようと思います。噂によると利用開始まで10日ほどかかるそうなので、残念ながらGW中には触れられないかもしれませんが…。

レンタルサーバは「さくらレンタルサーバ」「さくらのマネージドサーバ」のさくらインターネット 
http://www.sakura.ne.jp/

ServersMan@VPS仮想専用サーバーサービス:ユビキタスプロバイダ DTI 
http://dream.jp/vps_promo/index.html

【関連記事】
000webhost.comにお名前.comのドメインを設定 - 130単位
お名前.com .infoドメイン取得手順 - 130単位

2010-04-24

ほぼ無料の利用中iPhoneアプリ一覧 2010年4月

もくじ

  • ホーム画面晒し
  • 3ヶ月前から変わったこと
  • 雑感
  • アプリ紹介×20

ホーム画面

1画面目

f:id:deeeki:20100424231043p:image

2画面目

f:id:deeeki:20100424231041p:image

3画面目

f:id:deeeki:20100424231038p:image

4画面目

f:id:deeeki:20100424231036p:image

5画面目

f:id:deeeki:20100424231033p:image

3ヶ月前から変わったこと

  • TwitterのメインアプリTwitBirdをPremiumからProにした
    • いっときProのほうがアップデートが早かったという単純な理由だったような
  • 株価が1画面目にきた
    • 投資の影響で毎日数回チェックするほどの利用頻度
  • foursquareが1画面目にきた
    • 外食ランチとかどこか出かけたらとりあえず使ってみてる
  • 将棋オセロアプリを入れた
  • メモアプリをShopShopからListToBuyに変えた
  • テレビ番組表アプリをDisplexからテレビ番組表に変えた
  • Dropboxを消した
    • ファイルの読み込みが遅く感じるしあまり使わないことに気づいたため
  • 1画面目の左側の色をなんとなく青で統一してみた
  • 試す時間がなくて試し中アプリが溜まり気味

雑感

以前は2ヶ月おきに振り返っていたのに3ヶ月ぶりになってしまいました。Macと同期するようにしたら一度順番がめちゃくちゃになって、並び替えるのに苦労しました。

試し中アプリを整理して、また4画面におさえるのが直近の目標です。GNReaderの後継ともいえるLDNReaderは即一軍になるかと思います。Operaも良さそうです。

アプリ紹介×20

常用アプリとおすすめだったり注目してたりするアプリの紹介です。ほとんど無料でダウンロードできます。

  • テレビ番組表 TV Listings
    • テレビ番組表。リスト形式で現在時刻の番組がチャンネル別に確認できます

関連記事:
iPhone 2010年1月の利用アプリ一覧 - 130単位
iPhone 3GS 購入5ヶ月目の利用アプリ一覧 - 130単位
iPhone 3GS 購入3ヶ月目の利用アプリ一覧 - 130単位

2010-04-11

foobar2000 キーボードショートカット&Twitter投稿設定

f:id:deeeki:20100411125019j:image

foobar2000 
http://www.foobar2000.org/

メディアファイル再生ソフトです。

つい先日ソフトの設定がなぜかリセットされてしまいました。ので、再設定とともにその内容をメモっておこうと思い。ついでに2010/04/10にリリースされた最新版v1.0.2にもアップデートしました。

音楽再生ソフト foobar2000 インストール手順 - 130単位
音楽再生ソフト foobar2000 初期設定(自分流) - 130単位

とりあえず自分の過去の記事を参考にしつつ。Portable installationでしたが問題なくアップデートされました。

キーボードショートカット設定

再生や一時停止をしやすいようにショートカットを設定します。

  • メニューより「File」→「Preferences」
  • 「General」→「Keyboard Shortcuts」を表示
  • 「Add New」で新規ショートカット追加
  • 「Action」から設定したい項目を選択
    • 曲のコントロールは「Playback」に存在する
  • Key」にフォーカスして設定したいキーを入力

f:id:deeeki:20100411122927j:image

Wikiを参考に同じように設定してみました。以前はデフォルトで割り当てられていたようです。

Keyboard Shortcuts 解説 - foobar2000 Wiki 
http://foobar2000.xrea.jp/index.php?Keyboard%20Shortcuts%20%E8%A7%A3%E8%AA%AC

Twitter投稿設定

【追記】Twitter投稿するにはOAuth認証に対応した最新版を利用する必要があります。

foo_twit_post v3.0.1: きたへいの悠々自適


Twitter投稿コンポーネントを利用します。

foo_twitter_post v2.0.1: きたへいの悠々自適 
http://kitahei.cocolog-nifty.com/youyou/2010/02/foo_twitter_pos.html
設定

以上でデフォルト設定で使えます。

  • 自動投稿するには「Automatic Post Settings」を好みに設定
  • 投稿フォーマットを変更するには「Post Format」を編集
  • 投稿にリンクを付加するには「Add link at end of post」にチェックを付けて編集

f:id:deeeki:20100411122926j:image

自分用フォーマット。

#nowplaying $if([%artist%],$cut(%artist%,38) - )$cut(%title%,38)♪

文法は以下が参考になります。

Title Formatting Help - foobar2000 Wiki 
http://foobar2000.xrea.jp/index.php?Title%20Formatting%20Help
再生中の曲を手動投稿
  • メニューより「Playback」→「Post to Twitter
    • 「No Comment」でフォーマットのまま投稿
    • 「With Comment」でフォーマットに自由に追記して投稿
  • キーボードショートカットを設定しておくといいかも

f:id:deeeki:20100411122925j:image

deeeki実験 #nowplaying a.mia+Key of life - Friday let me down featuring Diggy-MO'♪ http://j.mp/a4yO6H ( 2010-04-11 11:49:20 )

YouTube検索のリンクがあると、もしかしたらフォロワーの方々に興味を持ってもらえたりするかもしれないので良いですね。ただし検索結果がなかったら逆に不快感を与えてしまう可能性もあるという諸刃の剣

2010-04-09

PHP 配列とオブジェクトの利用コスト比較

なんとなく計測してみたくなりました。やり方が適切かどうかは分かりませんが><

計測1

コード
<?php
Class a {
    public $a;
}

function useArray() {
    $a = array();
    $a['a'] = 'a';
}

function useObject() {
    $a = new a();
    $a->a = 'a';
}

function useStdObject() {
    $a = new stdClass();
    $a->a = 'a';
}

function calcTime($func, $loop = 0, $output = true) {
    if (!function_exists($func)) { return; }

    $start = microtime(true);
    for ($i = 0; $i < $loop; $i++) {
        call_user_func($func);
    }
    $end = microtime(true);

    $ret = $func . ' - ' . ($end - $start);
    if ($output) { echo $ret . '<br />'; }
    return $ret;
}

for ($i = 0; $i < 5; $i++) {
    calcTime('useArray', 100000);
    calcTime('useObject', 100000);
    calcTime('useStdObject', 100000);
}
結果
useArray - 0.794046878815
useObject - 0.967427015305
useStdObject - 1.26947712898
useArray - 0.781193971634
useObject - 1.02620601654
useStdObject - 1.22665381432
useArray - 0.830453157425
useObject - 1.07026720047
useStdObject - 1.3514380455
useArray - 0.782141923904
useObject - 1.03708195686
useStdObject - 1.21455192566
useArray - 0.813714981079
useObject - 1.01268291473
useStdObject - 1.20510196686

最初は関数化せずに書いていて、思うところがあったので再度実験。

計測2

コード
<?php
for ($i = 0; $i < 5; $i++) {
    $start = microtime(true);
    for ($j = 0; $j < 100000; $j++) {
        useArray();
    }
    $end = microtime(true);
    echo 'useArray - ' . ($end - $start) . '<br />';

    $start = microtime(true);
    for ($j = 0; $j < 100000; $j++) {
        useObject();
    }
    $end = microtime(true);
    echo 'useObject - ' . ($end - $start) . '<br />';
}
結果
useArray - 0.333177089691
useObject - 0.442293167114
useArray - 0.309988975525
useObject - 0.465826034546
useArray - 0.357007026672
useObject - 0.465425014496
useArray - 0.311547040939
useObject - 0.452219963074
useArray - 0.312607049942
useObject - 0.467305898666

わかったこと

  • 配列のほうがオブジェクトよりコスト低い
  • ビルトインクラスのstdClassはコスト高い
  • call_user_func()はコスト高いっぽい

ある程度の規模のWebアプリのデータの受け渡しで配列を使うかオブジェクトを使うかという問題。値を参照する際にタイプ数が少なく済むという理由でここ最近はオブジェクト派だったりしたのですが、コスト面では配列が勝ることを身をもって学びました。とはいえ現実のコードの中ではそれほど差に表れないでしょうし、拡張しやすいとかオブジェクトの利点もあるので引き続きオブジェクト派でいきたいと思います。

2010-04-08

WordPress 記事カスタムフィールドの検索条件をフックで追加

記事のカスタムフィールドに'cost'が1つあって、上限(cost_max)と下限(cost_min)を指定して検索したい場合。さらに安い順にソートもしたい場合。

<?php
//リクエストから記事検索クエリに追加してセット
function parse_query_ex($query) {
    if (is_numeric($_REQUEST['cost_max'])) {
        set_query_var('cost_max', $_REQUEST['cost_max']);
    }
    if (is_numeric($_REQUEST['cost_min'])) {
        set_query_var('cost_min', $_REQUEST['cost_min']);
    }
    if ($query->query['orderby'] == 'cost') {
    	set_query_var('order', 'cost');
    }
}
add_action('parse_query', 'parse_query_ex');

//追加した記事検索クエリが存在すればWHERE句追加
function posts_where_ex($where) {
    $cost_max = get_query_var('cost_max');
    $cost_min = get_query_var('cost_min');

    if (is_numeric($cost_max)) {
        $where .= " AND postmeta_cost.meta_value <= $cost_max ";
    }
    if (is_numeric($cost_min)) {
        $where .= " AND postmeta_cost.meta_value > $cost_min ";
    }

    return $where;
}

//追加した記事検索クエリが存在すればJOIN句追加
function posts_join_ex($join) {
    global $wpdb;

    if (get_query_var('cost_max') || get_query_var('cost_min') || get_query_var('order')) {
        $join .= " LEFT JOIN $wpdb->postmeta AS postmeta_cost ON ($wpdb->posts.ID = postmeta_cost.post_id AND postmeta_cost.meta_key = 'cost') ";
    }

    return $join;
}

//追加した記事検索クエリが存在すればORDER BY句追加
function posts_orderby_ex($orderby) {
    if (get_query_var('order')) {
        $orderby = " CAST(postmeta_cost.meta_value AS UNSIGNED) ASC, " . $orderby;
    }

    return $orderby;
}
add_filter('posts_where', 'posts_where_ex');
add_filter('posts_join', 'posts_join_ex');
add_filter('posts_orderby', 'posts_orderby_ex');

えー、検証はしてません><

parse_queryを介してリクエストを処理しているのは、get_posts()にも対応するためです。

あとWHERE句生成のところはキャストしたほうがいいと思われます。


【関連記事】
WordPress 数値のカスタムフィールドでソート - 130単位

2010-04-07

3月分の読書記録

ほとんどマンガで雑誌なんかも登録してしまってたりしますが。

お借りした『少女ファイト』をまとめて読みました。3巻あたりでちょっと折れそうになりましたが、その後は巻を重ねる度に面白くなっていきました。比較的多いと思われる登場キャラの個性を、絵柄も含めて見事なまでに描き分けているのがすごいと思いました。

『小さなチーム、大きな仕事』『ツイッターノミクス』は、いいタイミングで読めたと思います。現在取り組んでいるソーシャルアプリに通じるものが多く、参考になりました。

3月分読書データ

期間 : 2010年03月
読了数 : 16 冊
ネオ・デジタルネイティブの誕生―日本独自の進化を遂げるネット世代
橋元 良明 , 電通総研 奥 律哉 / ダイヤモンド社 (2010-03-19)
★★★☆☆ 読了日:2010年3月27日
主人公願望、オンタイム、動画ランカレンシー(動画によるコミュニケーション)、頑張らない、モバイル
ダイヤモンド ZAi ( ザイ ) 2010年 05月号 [雑誌]
★★★★☆ 読了日:2010年3月21日
1回の投資の損失は全資金の5%以下に/株価10%上昇ごとに売りの逆指値も10%ずつ引き上げ/直近1年間の安値付近で買う/Wボトムで買い、Wトップで売り/新興国は200日移動平均線を株価が上まったら買い
日経マネー 2010年 05月号 [雑誌]
★★★☆☆ 読了日:2010年3月21日
殖やす特集のところでそれぞれの金融商品について再確認できた
少女ファイト (6) (イブニングKCDX)
★★★★☆ 読了日:2010年3月21日
「それが本当に不幸なことかどうかなんて本人以外決められない」/周りと影響しあってどんどん成長していくのがいいですね
少女ファイト (5) (イブニングKCDX)
日本橋 ヨヲコ / 講談社 (2009-01-23)
★★★★☆ 読了日:2010年3月21日
試験編→大会編とますますチームの絆が深まっていく感じがイイ。あとカップリングうまいですね
少女ファイト (4) (イブニングKCDX)
日本橋 ヨヲコ / 講談社 (2008-04-23)
★★★★☆ 読了日:2010年3月21日
「特別な人間なんていねんだよ そいつが何をやってきたかが特別なだけだ」/カバーマンガ面白い。伊丹の指摘がツボ過ぎた
少女ファイト (3) (イブニングKCDX)
日本橋 ヨヲコ / 講談社 (2007-09-21)
★★★☆☆ 読了日:2010年3月20日
「どうにもならない他人の気持ちはあきらめて どうにかなる自分の気持ちだけ変えませんか」
少女ファイト (2) (イブニングKCDX)
日本橋 ヨヲコ / 講談社 (2007-02-23)
★★★★☆ 読了日:2010年3月20日
小田切の存在感が大きく。前向きでいいですね。
少女ファイト (1) (イブニングKCDX)
★★★★☆ 読了日:2010年3月19日
1巻にしては登場キャラが多いと思ったがなんとか把握できた。1話のタイトルにした理由が気になる
小さなチーム、大きな仕事―37シグナルズ成功の法則 (ハヤカワ新書juice)
ジェイソン フリード , デイヴィッド・ハイネマイヤー ハンソン / 早川書房 (2010-02-25)
★★★★☆ 読了日:2010年3月14日
競合相手以下のことしかしない。人に託す前にできる限り自分たちでやる→どういう人が必要か分かる
ツイッターノミクス TwitterNomics
タラ・ハント 津田 大介(解説) / 文藝春秋 (2010-03-11)
★★★★☆ 読了日:2010年3月13日
ウッフィー≒信頼。幅広い層を対象に設計、必ず返事、批判を受け止める、公に感謝、変更は事前に通知、こまめに改善、フィードバックを自ら検索、あら探しに適切に対応
バクマン。 (07)
大場 つぐみ / 集英社 (2010-03-04)
★★★★☆ 読了日:2010年3月8日
新たな展開がたくさんあって飽きずに読めた
NARUTO (50)
岸本 斉史 / 集英社 (2010-03-04)
★★★★☆ 読了日:2010年3月7日
暁陣営がわずかに思えるけど第四次忍界大戦どうなるんだろうか
ONE PIECE (57)
尾田 栄一郎 / 集英社 (2010-03-04)
★★★★☆ 読了日:2010年3月7日
面白い。「その場にいる者達を次々と味方につける」
WORLD SOCCER DIGEST ( ワールドサッカーダイジェスト ) 2010年 3/18号 [雑誌]
★★★☆☆ 読了日:2010年3月6日
スペインが先頭。やはり本命なのでしょうか
Windowsユーザーに贈るMac乗り換えガイド
日経BP社 (2009-12-11)
★★★★☆ 読了日:2010年3月1日
移行・共存のTipsがわかりやすく記載。メールはThunderBird経由、連絡先はvCard形式


メディアマーカー

2月分の読書記録 - 130単位

3月分の読書記録 - 130単位 (※一年前)

2010-04-06

ブックマークしたモバイル開発記事まとめ

deeekiモバイル関連のブックマークを精査してまとめたいな ( 2010-04-06 17:43:12 )

というわけで、自分の過去のはてなブックマークをざっと読み返してまとめてみました。精査とまではいきませんが、それぞれの見出しで記事の新しい順に並べています。押さえておきたい点は引用/メモさせていただきました。モバイルソーシャルアプリ開発に活かしたいと思います。

マークアップ

ユーザビリティ

その他Tips

ソーシャルアプリ

参考デザイン集

ニュースサイト

ライブラリ/ツール

CakePHP

Google Analytics

まとめ

リンク集


ついでに読んだことのある書籍です。どちらも体系的な知識を得るにはおすすめです。

4797348488
『携帯サイト コーディング&デザイン (大型本)』

4844326317
『モバイルユーザビリティ・デザイン Web制作者が身につけておくべき新・100の法則。 (大型本)』

2010-04-05

WordPress 多階層カテゴリーに属する記事のパーマリンクを最下層カテゴリーのみ表示

deeekiんーパーマリンクを小カテゴリだけにするって方法はないものかな → WordPress : フォーラム ≫ 2階層のカテゴリーパーマリンクが複数出力されるのを統一したい

http://ja.forums.wordpress.org/topic/3681 ( 2010-04-05 18:46:37 )

WordPressパーマリンク設定を「/%category%/%postname%/」とします。「Single > Perfume」カテゴリーの「不自然なガール」という記事の場合、「http://example.com/single/perfume/不自然なガール/」になります。ここで、親カテゴリーの「single」という文字列をパーマリンクから除外したい。WordPress本体をいじるカスタマイズです。

link-template.php L116-L130

<?php
if ( strpos($permalink, '%category%') !== false ) {
    $cats = get_the_category($post->ID);
    if ( $cats ) {
        usort($cats, '_usort_terms_by_ID'); // order by ID
        $category = $cats[0]->slug;
        //以下2行をコメントアウト
        //if ( $parent = $cats[0]->parent )
        //    $category = get_category_parents($parent, false, '/', true) . $category;
    }
    // show default category in permalinks, without
    // having to assign it explicitly
    if ( empty($category) ) {
        $default_category = get_category( get_option( 'default_category' ) );
        $category = is_wp_error( $default_category ) ? '' : $default_category->slug;
    }
}
  • 説明と注意点
    • パーマリンク置換後文字列から親カテゴリーを除外
    • 複数カテゴリ指定の記事だと、最も若いIDのカテゴリに適用される
    • パーマリンク設定では%postname%など一意になる構成タグと同時に使うべき

これで「http://example.com/perfume/不自然なガール/」になります。

ただし、本来は'post_link'のフィルターフックで置換するのが適切なやり方だと思います。あとあまり検証していないので重複URLとか不具合が起こるかもしれないです。

(※WordPressバージョン2.9.1で検証)


【追記】

検証してみたところ、WordPress内のリンク(get_permalink()で返されるリンク)としては子カテゴリーのみになりますが、実際は親カテゴリーを含んだURLでもアクセス可能のようです。重複URLがSEO的にどの程度悪影響なのかわかりませんが、カテゴリーパーマリンクに含めるならば、多階層のカテゴリーは利用しないほうがいいんじゃないかという気がします。


【関連記事】
WordPress MU のカテゴリーについて調べた - 130単位
WordPress MU 手動のカテゴリー整理で嵌る - 130単位

2010-04-03

MVCのモデルのあり方について考えた

deeekiモデルとかエンティティとかDAOとかDTOとかの自分の中での定義付けをはっきりさせときたい ( 2010-04-03 16:48:21 )

既存Webアプリのコードを踏襲しながら新規開発、なんてことをしています。そこで立ち止まったのが、MVCアーキテクチャのモデルについて。モデルという言葉の定義が難しいですが、RDBMSを利用する場合テーブル毎に対応するもので、ロジックを主に記述するものという捉え方でいます。そのモデルですが、ざっくりと「データアクセスロジック」と「データそのもの」に分けられると思います。

既存コードでは、データアクセスとデータそのものが一つのクラス/オブジェクトでまかなわれていました。つまり、自身でテーブルのカラムに対応したプロパティを持ち、自身にupdateやらdeleteやらのメソッドを持つというものです。

この構造になんとなく違和感を持ったまま開発をしていました。というのは、データ(レコード)1件に対してならつじつまが合いますが、複数のデータを扱おうとすると若干無理が生じてくると思うからです。複数件照会のメソッドで配列を返すか、あるオブジェクトの中にそれ自身が複数並ぶ配列プロパティを持たせるとかしないといけないんじゃないかと思います。

そこで、他のフレームワークを調べてみました。

WAF比較表

触れたことのあるもののみです(※Ethnaは経験1日の知識)。

言語フレームワークデータアクセスデータアクセスの変数データそのものデータそのものの変数
PHPCakePHPAppModel$Controller->Xxx連想配列$xxx
PHPEthnaAppManager$xxx_managerAppObject$xxx
JavaSAStrutsService*1xxxServiceEntityxxx
傾向
  • 照会/登録はデータアクセスのクラスを介して行う
  • データそのものの変数名がシンプルなものになっている
  • EthnaはAppObjectで登録などができるっぽい

調べた結果

調べている中で、とても納得のいく説明を見つけたので引用してみます。

ビジネスロジックをエンティティとサービスのどちらに定義するのかは、とても重要な問題です。 データアクセスロジックは、サービスに定義したほうが良いでしょう。 なぜかというと、検索系のメソッドは、エンティティを取得するためのメソッドなので、エンティティ自身には定義できません。 エンティティのstaticメソッドとして定義すれば、できないこともありませんが、 staticメソッドだと、テスト用にオーバーライドすることができないので、やめておいたほうが良いでしょう。

また、更新系のメソッドは、エンティティに持たせることもできますが、 そのためには、エンティティが更新系のメソッドが定義されている特定のクラスを継承する必要があり、 最近のPOJO指向とかみ合いません。データアクセスロジックは、エンティティではなく、サービスに定義するほうが良いのです。

Super Agile Struts - Feature Reference

そんなわけで、データアクセスとデータそのものは分けたほうがいいという考えに至りました。

きめた方針

これでやってみようと思います(PHPです)。

参考リンク

モデルというよりMVCについての記事ですが。

Life is beautiful: Ruby on Railsの「えせMVC」の弊害 
http://satoshi.blogs.com/life/2009/10/rails_mvc.html

 Web アプリMVC 設計まとめ - もやし日記 
http://d.hatena.ne.jp/p4life/20091014/1255532618

  CakePHPを使ったMVC設計のベストプラクティス - Sooey 
http://old-journal.sooey.com/2008/03/26/717/

【関連記事】
自己流MVC開発体験記 - 130単位

*1:テーブル毎ではなく、jdbcManagerで直接処理もできる