2008年11月25日火曜日

2008年11月24日月曜日

Googleカレンダーでスクロールホイールを使って月を移動

Googleカレンダーで月ごとのカレンダーを表示している時に、マウスのスクロールホイールを回すと表示中の月を次の月や前の月に移動できることにさっき気付いた。
地味だけどなかなか便利な機能かも。

2008年11月14日金曜日

PHPでサーバサイドでデータをPOSTする色々な方法











とても簡単にPHPからPOSTリクエストを送信する方法 [PHP, Tips] - Programming Magicがまとまっていて分かりやすい。

関連記事:floatingdays: PHPを使ってサーバサイドでXMLをPOST


2008/11/28 追記
POSTするときのContent-typeをオプションのheader(http header)として指定しないとNoticeが出る。その場合は"application/x-www-form-urlencoded"が適用される。
また、Content-typeに"text/html"などを指定すると受け側でエラーを起こすことがあるので注意。Railsとか。

PHPで簡単にURLのGETパラメータを作成する方法

標準関数のhttp_build_query()を使うと、URLのGETパラメータ(クエリーストリング)を簡単に作れる。
PHP5かららしい。


$query = array('foo' => 'ABC', 'bar' => 123, 'baz' => 'あああ');
echo http_build_query($query);
結果
foo=ABC&bar=123&baz=%82%A0%82%A0%82%A0

URLエンコードもしてくれるのが便利。


HTMLエスケープもしたいなら、第3引数を'&'にする。(パフォーマンスを気にしないなら、URLをまるごとhtmlSpecialChars()した方が楽だが。)


echo http_build_query(array('foo' => 'ABC', 'bar' => 123), '', '&');
結果
foo=ABC&bar=123


参考:PHP: http_build_query - Manual

携帯サイト向けクローラのUser Agent一覧

手元の専用ログから、モバイルサイト向けの検索エンジン等のクローラ(Bot)のUser Agentを洗い出し。2008年6月~11月頃のもの。


Google(AdSense絡みも含む。ただしNokiaは集計していない)

  • DoCoMo/1.0/N505i/c20/TB/W20H10 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)
  • DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)
  • DoCoMo/2.0 SH905i(c100;TB;W24H16) (compatible; Mediapartners-Google/2.1; +http://www.google.com/bot.html)
  • KDDI-CA34 UP.Browser/6.2.0.10.2.2 (GUI) MMP/2.0 (compatible; Mediapartners-Google/2.1; +http://www.google.com/bot.html)
  • SoftBank/1.0/911SH/SHJ001 Browser/NetFront/3.3 Profile/MIDP-2.0
    Configuration/CLDC-1.1 (compatible; Mediapartners-Google/2.1;
    +http://www.google.com/bot.html)


Yahoo!
  • DoCoMo/2.0 SH902i (compatible; Y!J-SRD/1.0; http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html)
  • DoCoMo/2.0 N905i (compatible; Y!J-SRD/1.0; http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html)
  • KDDI-CA23 UP.Browser/6.2.0.5 (compatible; Y!J-SRD/1.0; http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html)
  • KDDI-CA33 UP.Browser/6.2.0.10.4 (compatible; Y!J-SRD/1.0; http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html)
  • Vodafone/1.0/V705SH (compatible; Y!J-SRD/1.0; http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html)
  • J-PHONE/2.0/J-SH03 (compatible; Y!J-SRD/1.0; http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html)


goo
  • DoCoMo/2.0 P900i(c100;TB;W24H11)(compatible; ichiro/mobile goo; +http://help.goo.ne.jp/door/crawler.html)
  • DoCoMo/2.0 N905i(c100;TB;W24H16)(compatible; mobile goo; +http://emu.mobile.goo.ne.jp/)


livedoor
  • DoCoMo/2.0 SH905i(c100;TB;W24H16) (compatible;* livedoor-Yill/1.0; *+http://helpguide.livedoor.com/help/search/qa/grp627)


はてな
  • DoCoMo/2.0 D903i(c100;TB;W28H20) (compatible; Hatena-Mobile-Gateway/1.2; +http://mgw.hatena.ne.jp/help)


DeNA
  • DoCoMo/2.0 N902iS(c100;TB;W24H12)(compatible; moba-crawler; http://crawler.dena.jp/)



雑感:
  • docomoのみを偽装しているとこが多い
  • auはCASIO製が人気、それ以外はN905iとSHARP製が人気。なぜ?
  • docomoは902と905が多い
  • Yahoo!はJ-Phoneまでフォローしている一方、SoftBankがまだ無い?親子断絶?
  • Googlebot-Mobileはdocomoしか無い?
  • あれ?F☆Routeが来てない...



参考:
 Google Japan Blog: Google モバイル検索についてのウェブマスター向け情報
 Utilz: 携帯クローラ
 モバイル検索サイト クローラー一覧 - sin-news.com
 携帯サイトオーナーズClub 携帯クローラ user-agent 一覧
 携帯検索エンジンのクローラーのメモ ([黒]黒豚備忘録)
 User Agentリスト - Mozilla Firefox まとめサイト

Windows XP SPSP3にしたらスケジュールしたタスクが実行されなくなった

Windows UpdateでXP SP2からSP3にアップデートしたら、タスクスケジューラに登録していたタスクが全て実行されなくなった。
タスクのプロパティを開いて、パスワードを再入力したら実行可能になった。

SP3へのアップデートに一度失敗したことと関係があるのか?

2008年11月8日土曜日

PHP5のマジックメソッド

第2回設計勉強会に参加しました | Shin x blogを読んで初めてautoloadを知った。

ついでにマジックメソッドについてまとめてみる。


classのマジックメソッド



グローバル関数なマジックメソッド
  • __autoload()
    • 未定義のclassが参照された場合に呼ばれる
    • この関数の中でクラス名等に紐付いたファイルをインクルードさせれば、classを使う時にいちいちrequire/includeしなくてよくなる
    • newでのインスタンス生成や静的メソッドの呼び出しの他、extendsや型宣言などによるclassの参照でも呼ばれる
    • 参考:PHP: オブジェクトのオートローディング - Manual


今まで__construct, __destruct, __call, __get, __setくらいしか知らなかった。
__constructは別にすると、この中では__autoloadが特に便利。
また、__call, __get, __setはコーディングミス防止に役立つので生産性向上に寄与する。「重いので使うな」的なことが書かれていることが多いので、それなりに負荷のあるサイトでは使わないほうがよいのかも。(1ページ表示するのに__setを1000回使うサイトとか!)


参考:PHP: マジックメソッド - Manual

CakePHP 1.2のFormHelperのradio()で余分なhiddenを出力しない方法

CakePHP1.2のFormHelperでラジオボタンを出力すると、ラジオボタンの前に隠し項目が出力されることがある。


<input type="hidden" name="data[Foo][bar]" id="FooBar_" value="" />
<input type="radio" name="data[Foo][bar]" id="FooBarBaz" value="Baz" />
<label for="FooBarBaz">Baz</label>

このhiddenを出力させたくない場合、$form->radio()の第3引数の配列で、'value'に何か値をセットして渡す。
echo $form->radio('Foo.bar', array('Baz' => 'Baz'), array('value' => 'none'));
そうすると、
<input type="radio" name="data[Foo][bar]" id="FooBarBaz" value="Baz" />
<label for="FooBarBaz">Baz</label>

ラジオボタンの値に一致するvalueを渡すとそれが初期選択状態になるので、選択状態にしたくない場合は上記の例のように一致しない適当なvalueを渡す。


参考:API for CakePHP : The PHP Rapid Development Framework :: version 1.2.x.x

無料の携帯サイト向けアクセス解析サービス4つの比較

無料アクセス解析 with 位置情報 「なかのひと」

  • 携帯サイト向けは「うごくひと」
  • 画像埋め込み+オプションでPHP等のスクリプト埋め込み
  • 良い点
    • グラフを多用した大雑把なUIで見やすい
    • 機種の発売時期のグラフがある
    • 都道府県別のアクセス度合いが見られる。役には立たないが。(沖縄はいつも赤い)
    • スクリプト埋め込みを使うことにより、時系列に沿って検索キーワード(KDDIとSoftBankのみ)が見られる
  • 悪い点
    • スクリプト埋め込みを使えば、やろうと思えばリファラからリンク元の情報を取れるはずだが、それが無い
    • 表示ページや検索キーワードや機種の集計が無い


i2i無料『アクセス解析』携帯対応・訪問ルート分析の足あと機能
  • 画像埋め込みタイプ
  • 良い点
    • アクセスしてきた機種の細かい統計が見られる。表示できる文字数とか、iモードブラウザのバージョンとか。
  • 悪い点
    • 画像埋め込みなので、リファラが無いと引っ張れれない情報(リンク元と検索キーワード)が取れない


トップページ|myRTモバイル
  • 画像埋め込みタイプ
  • なぜかSoftBankしか集計されない...
  • 良い点
    • 対応している画像タイプの集計が見られる。でもSoftBankだけ...
  • 悪い点
    • SoftBankしか集計されない...
    • 画像埋め込みなので、リファラが無いと引っ張れれない情報(リンク元と検索キーワード)が取れない。しかもSoftBankしか集計されない...
    • 管理画面が重い。しかもSoftBankしか集計されない...


Google Analytics

CakePHPの標準機能でパンくずリスト(トピックパス)を生成する方法

CakePHPでパンくずリストを表示するサンプル YARETOKO「ヤレトコ」メインブログ


標準で使えるのが便利。
$html->addCrumb()の第2引数(URL)を省略すると、リンクでないただのテキストとして表示されるようだ。
なのでelementにするならURLを省略できるようにすると便利。

<?php
foreach ($crumbs as $crumb) {
 $crumb = am(array('url' => null, 'options' => null), $crumb);
 $html->addCrumb($crumb['title'], $crumb['url'], $crumb['options']);
}

echo '<div class="crumbs">';
echo $html->getCrumbs(' > ', 'トップ');
echo "</div>\n";


参考:API for CakePHP : The PHP Rapid Development Framework :: version 1.2.x.x

PHPで簡単にタグクラウドを生成するPEAR::HTML_TagCloudを試してみた

PEAR :: Manual :: HTML_TagCloud

これは簡単。とても簡単。便利。
タグを追加してbuildするだけ => PEAR :: Manual :: 導入


デフォルトだとタグの色がグレー等になるようなので、サイトに合わせて色を変えた方が良さそう。
普通のリンクの色(デフォルト 青、visited 紫、active 赤)にしたい場合はこんな感じ。
CSS

div.tagcloud a{
 /* 下線は消した方がタグクラウドっぽい */
 text-decoration: none;
}
PHP
<?php
$tags = array(.....); //ここにタグと件数が入っているとする

require_once('HTML/TagCloud.php');

$cloud = new HTML_TagCloud();
foreach ($tags as $tag => $count) {
 //経過時間をセットしない場合の例
 $cloud->addElement($tag, '/tag/' . urlencode($tag), $count);
}
echo $cloud->buildHTML(); //HTMLのみ出力する

携帯サイトをGoogle Analyticsでアクセス解析する方法






(2009/12/28追記:Google Analyticsで公式に携帯サイトをアクセス解析できるようになった → Google Analyticsで携帯からのアクセスを解析する方法 (公式Beta版)


Google Analyticsの利用規約上、問題ないのだろうか?


大元?:Linklove » Google Analytics without javascript!

HTTP Headerをいじった改良版:モバイルサイトで Google Analytics
(Webページのタイトルも送信する方法はコメント欄の下の方に書いてある。)

さらに微調整して関数化した改良版:モバイル(携帯サイト)でアクセス解析にGoogle Analyticsを使う方法 - Knowledge Database IT
(ただしSmarty用なので、Smartyを使わない場合は$var_refererには普通にリファラをセットする。)


Google Analyticsのコードには「UA-xxxxxx-x」形式でコードをセットする。
「ドメイン」にスキームは付ける?


求む体験談!

ブログ アーカイブ

tags