2009年12月06日

Google Analytics for Mobileを改造してみた

Google Analyticsが携帯の解析に対応し始めたのですが、なんやかんやでちゃんと統計が取れないので、Googleに送るデータを生成するga.phpを改造してみました。

【改良点】

* DoCoMo以外の機種情報も送ってるってこと(それは↑と同様)
* 透過GIFが一部の携帯だと「白色」になってしまうのを改善
* 機種固有IDが取れなかったらCookieに頼る(大量にSessionをカウントしないように)
 (機種固有IDもCookieも使えない携帯は無理。そんな設定の携帯はカウントしなくてもいいような…)

【思ったこと】

* IPの下1バイトを0にしてるけど何で?ユーザを匿名にしてるって書いてあるけど、普通のGoogle Analyticsだと普通にアクセスしてるよね…ってか携帯の場合だと普通キャリアのIPしか渡らない気が、、、そこに匿名性って必要なのかねー。。。
* オリジナルのソースにあった最後のほうの『?> * SSL通信だと機種固有IDが取れないから、SSLページにGETでgetVisitorIdの返り値を渡せばいいと思います。独自実装になっちゃうけどね・・・
* getVisitorIdで何してるかって言うと、
 o 機種固有IDが取れたら
   1. 機種固有IDとAnalyticsのコード「MO-XXXXXX」と文字列をつなげる
   2. つなげた値をMD5でハッシュ値化して先頭16文字を取る
   ⇒ これで機種固有IDの生情報をGoogleに通知することなくユニークなIDをAnalyticsに渡せるってわけです。
 o 機種固有IDが取れないと
   1. 固有のIDが無いということなので、変わりにUSER-AGENTとランダム値のハッシュを使う
   2. これを毎度毎度やっても固有のIDが取得できないからCookieにセットしてIDを引きずり回してるって感じになってます。
 ってなわけで、へー一応色々考えてあるって感じでした。

http://www.b-r-u.net/google_analytics_for_mobile.html
Posted at 02:36 | comments(0) | TrackBacks(0) | 開発

2009年06月14日

イマジーン / インターネット募金でNPOを応援!!

新しいサービス始めました。
イマジーン / インターネット募金でNPOを応援!!
よかったら登録してください。
携帯からはhttp://m.imagene.jp/でアクセスできます。

イマジーンはインターネット版の募金箱です

イマジーンは、
NPOやNGOなど「社会をより良くするために活動されている方々」を応援するために作られた、インターネット版の募金箱です。

ご覧いただければ分かるように、環境保護に努められている団体や、災害支援に取り組まれている団体など、世の中には、たいへん多くの方々が、この世界が抱えている種々の問題を解決しようと励まれています。

そんな彼らのために、活動資金集めのサポートをするのがイマジーンの使命です。

少額の、手軽にできる募金を通して、彼らと一緒に社会を良くしていきませんか?

イマジーンでは、1人の志有る方が100万円を募金することよりも、1万人が100円ずつ募金することで世の中が良くなると信じています。
Posted at 02:14 | comments(0) | TrackBacks(0) | 日記

2008年11月17日

Flash Player 10 で クリップボードにコピーする方法

Flash Player 10からSystem.setClipboard()の使用が制限されました。Adobeのページを参考
どーゆーことかって言うと、クリップボードへの情報の貼り付けはIE以外はFlashで行えるのですが、それが出来なくなるってことです。

一番手っ取り早い解決策はボタンそのものをFlashにしてしまうことです。参考サイト
今扱ってる案件ではボタンの種類が多く、ボタンの数の分だけFlashを作るわけにもいかないので、透過Flashにして今までどおり使えるようにしました。

動作にはPrototypeが必要です。
PrototypeとFlashの良い勉強になりました。

ソース:http://www.b-r-u.net/flashclipboard.html
Posted at 01:14 | comments(0) | TrackBacks(0) | 開発

2008年04月13日

PHP Tips (4) - ハッシュについて

ハッシュってのは暗号化とは違います。
暗号化は複合すれば元に戻りますがハッシュは元に戻せません。
Aのハッシュ値がA'だとするとA'だけからAを求めることはできません。
WindowsとかでCDからデータを落とすときに
「○○をコピーできません。データエラー(巡回冗長検査(CRC)エラー)です。」
ってのが一番身近なハッシュかな…

PHPでそれぞれのハッシュ値を100,000回算出するためにかかった時間
md5はよく使われててPHPでもmd5('hoge');ってすればhogeのハッシュがわかるんだけど、(perlでもcryptで可能)
アメリカ政府(NIST (アメリカ国立標準技術研究所))と
日本のCRYPTREC (暗号技術評価プロジェクト)では、
MD5が推奨から外れているとおりに攻撃される可能性があるんですよ。

NISTじゃSHA-2(SHA1以外のこと)が使われているらしくて
とりあえずハッシュの実行速度がわかるように算出してみた。

sha256はmd5の倍ぐらい時間かかるみたいです。
でもアメリカの政府が使ってるぐらいだから安全みたいだし、
sha256を使えばよさそうだね。

md2 (128): 1.068129
md4 (128): 0.168168
md5 (128): 0.183619
sha1 (160): 0.213175
sha256 (256): 0.338196
sha384 (384): 0.958671
sha512 (512): 0.959832
ripemd128 (128): 0.302765
ripemd160 (160): 0.335816
ripemd256 (256): 0.306326
ripemd320 (320): 0.344032
whirlpool (512): 0.723098
tiger128,3 (128): 0.244434
tiger160,3 (160): 0.244207
tiger192,3 (192): 0.244750
tiger128,4 (128): 0.277339
tiger160,4 (160): 0.275671
tiger192,4 (192): 0.277098
snefru (256): 0.948601
gost (256): 0.990941
adler32 (32): 0.143271
crc32 (32): 0.128725
crc32b (32): 0.128641
Posted at 23:36 | comments(0) | TrackBacks(0) | 日記

PHP Tips (3) - PHPでのCSVの読み込み

【難易度:中】
PHPでCSVを操作するにはfgetcsvというすげー便利な関数があるが、
たとえば単純にカンマ区切りのデータの場合はファイルを読み込んで
,でexplodeかけても同様の動きをする。
ってことで今回で3回目になるPHP Tipsですが、
ファイルの中身を読むにもfopen関数やfile関数やfile_get_contents関数やら色々ある、
結局どれを使えばいいんだよって話になるので
とりあえずベンチってみた。

data1-1,data1-2,data1-3,...
data2-1,data2-2,data3-3,...
...
ってのがCSVデータなんだけど
それを以下の4通りで取得してみる。

1. fgetcsv
2. file→explode(,)
3. fopen→fread→explode(\n)→explode(,)
4. file_get_contents→explode(\n)→explode(,)

結論から言うとfgetcsv意外はどれも早い。
今回行ったベンチマークでは3<2<4<<1の順番だった。
fgetcsvは他のに比べて約2倍処理に時間がかかる。
2,3,4は多分誤差の範囲だと思います。
コードの読みやすさから個人的には2.がお勧めです。
Perlな人はfopenのほうが使いやすいのかな?
まー人それぞれだと思います。

ではなんでfgetcsvが遅いかと言うと、fgetcsvは
フィールド囲いこみ文字もちゃんと認識してくれるからです。
フィールド囲いこみ文字ってのは
data1,data2,"data3,5,6",data7,"data8
改行があってからdata9",data10,...
ってな感じの「"」です。
よーはカンマ区切りのデータだと区切り文字になってるカンマはデータに入れられないし、行も改行でわけられてるから改行でデータに入れることもできないけどよーはCSVだとできます。
まーよく意味がわからない人はExcelで名前をつけて保存でCSVを選択してから保存してテキストエディタを開いてみてください。

これを2,3,4で読めるようにするには結構苦労が要るからfgetcsvを使うと一発ですって話です。
よーは時と場合によって使う関数を変えましょうって話です。

いや、CSVなんて使わずにDB使えば、、、って話はとりあえずなしです。

※ PHPやPerlなどで膨大なテキストを操作する場合は、気をつけましょう。
  サーバによってはCGIの実行速度が制限されていて保存が完了する前に実行が止められるとデータが飛びます!
Posted at 23:36 | comments(0) | TrackBacks(0) | 日記

2008年03月16日

【ML】 Keio.to

Keio.toに新機能を追加しました。
・QRコード表示機能
・エラー表示機能

PHPとMySQLを最新に変えて
DBをがしがしいじりました。

今後の改良予定としては
・subscribe unsubscribe機能
・MLでのイベント参加受付
・軽い名簿集計機能
・MLのSequencer機能
・他ドメインとのML接続
・副管理人機能

あともう少しでユニークなメールアドレス登録数が
4万4千…

MLの便利機能・アイディア募集…
Posted at 04:14 | comments(0) | TrackBacks(0) | 開発

2008年03月15日

PHP Tips (2) - strpos strstr preg_match結局どれが早いの?

文字検索の方法はstrposやstrstrやpreg_matchなどいろいろありますが、
結論から言うとstrposが一番早いです。
本来preg_matchはPerlの正規表現が使えるということで便利なのですが、
単純に文字が含まれているかどうかのチェックをする場合(正規表現を使う必要がない場合)は必要ありません。

また、preg_matchで'/a|b|c/'などor検索する場合も
strposをorでひっかけたほうが早いです。

$strに文字($findme)が含まれているかどうかをチェックする場合
strpos($str,$findme)!=falseとするのは間違えです
これはstrposが検索文字を文字列の何番目にあるかどうかをチェックするからです。
もしこれが一番最初に来た場合、人間のお約束の1では無く0が帰ってきますので
strpos($str,$findme)!==falseとするのが正しいです。

ただ、検索している文字列が0番目にくることがまず絶対ありえないのだったら
if(strpos($str,$findme)){...}
とするのが一番早いようです。

手元で軽くベンチマークを取ったことろ
preg_matchはstrposより3〜4倍程度処理に時間がかかります。

■結果
文字検索の際、正規表現を使わないときはpreg_matchではなく、strposを使おう!
Posted at 02:57 | comments(0) | TrackBacks(0) | 開発

2008年03月09日

wrong mysql library version or lib not found

毎度のことながらmysqlとphpのインストールは面倒だ。
phpはバージョン違いでコンパイルできませんといわれるし
mysqlはじゃんじゃん文字化けしてくれる。
ここ何年かいじっててやっと最近慣れてきた。

古いmysqlや古いphpから最新のものにしようとすると
phpのコンパイルの際に
「wrong mysql library version or lib not found」
と出る。
あ、いや、新しいの入れたんですが…
といいたくなるがconfigureは勝手に中断してしまう。
しかもエラーの不親切なことw

mysqlを入れなおしても改善されなかったので
サポート掲示板を見てみるんだけどなかなか解決方法が見当たらない…

解決方法は
/usr/lib/mysql/内の
libmysqlclient.soのバージョンが古いからでした。
最新のmysqlは
/usr/lib/libmysqlclient.so.15.0.0
に最新のmysqlclientを入れてくれるらしいんだけど
そんなんわからないって・・・w
Posted at 20:32 | comments(0) | TrackBacks(0) | 日記

2008年02月19日

PHP Tips (1) - PHPでJPGやGIFにコメントを追加する

The PHP JPEG Metadata ToolkitにならってJPGだけでなくGIFにもコメントを挿入できるPHPを作ってみた。
全部のソースはないので多少自力でやる必要あります。
これで携帯電話で画像を転送させなくできます。
ImagickとかMagickWandとかあるけど、処理速度が気になるので自分で作りました。
何のサイトで使おうとしてるのかも今は秘密で…
PNGもやろうとしたけど資料がすぐに見つからなかったので断念…

//The PHP JPEG & GIF Comment Tool
@header('Content-Type:'. $ctype);
@header('Content-Transfer-Encoding: binary');
$read = file_get_contents($file);
$str = 'copy="NO",kddi_copyright=on';
if($ctype=='image/jpg'){
    echo substr($read,0,strpos($read,0xFF,3));
    // Write segment marker
    echo "\xFF\xFE";
    // Write segment size
    echo pack('n',strlen($str)+2);
    // Write segment data
    echo $str;
    echo substr($read,strpos($read,0xFF,3));
}elseif($ctype=='image/gif'){
    echo substr($read,0,strlen($read)-2);
    // Write segment marker
    echo "\x00\x21";
    // Write segment size
    echo pack('n',strlen($str));
    // Write segment data
    echo $str;
    echo "\x00\x3b";
}
Posted at 02:29 | comments(0) | TrackBacks(0) | 開発

2007年06月12日

CPUとDRAMな話

慶早戦のときに久しぶり(実はそうでもない!?)に会った先輩に
ガチでマニアックな日記を書いてくれといわれたので、

CPUの値段の下落情報でも載せてみる。

情報によるとIntelが7月22日に価格改定を行うらしい、何でもAMDの対抗らしい。
販売ではIntelが圧勝ですからねぇAMDも必死なんでしょう…

4月の価格改定で
10万だったQ6600(2.4GHz Quad Core)が7万になり、
7月の改定で3万5千円ぐらいになるらしい。

また、同様の値段で
E6850(3GHz Dual Core)が出るらしい、
そこでスピードを取るか、4CPUを取るか、、、
う〜んどっちかなぁ〜…

また、6月中にDRAMの値段が急上昇するという噂もある、
何でも、現時点で生産コストよりも安い値段で販売しているとかなんとか…
まぁなんせ去年10月の1/4の値段で売ってるからねぇ〜

7月って事はテスト後ですね、、、
いや、まだ考えたくありません。
Posted at 04:53 | comments(0) | TrackBacks(0) | 日記

2007年06月08日

セキュリティキャンプ2007






経済産業省とJIPDEC(財団法人 日本情報処理開発協会)が主催して、
後援に文部科学省とNPO日本ネットワークセキュリティ協会がついている、
日本国内に居住する、22歳以下の学生・生徒を対象に行われる
【セキュリティキャンプ2007】というまじでガチなキャンプがあります。

どのぐらいガチかといいますと、応募用紙の最初の質問が
「Linux(UNIX)やWindowsの基本的なGUIおよびコマンドライン操作ができますか?」
というガチさ加減です。

去年参加したのですが、いやぁかなり刺激的でした。
先ほどチューターとして応募したのですが、噂によるとかなりの倍率だとか…

しかも今年は場所が変わって海浜幕張駅なんで、家から電車で一本じゃん(所要時間1時間30分)!
Posted at 04:56 | comments(0) | TrackBacks(0) | 日記

2007年05月25日

Keio.to

慶應生用のメーリングリスト昨日リリースしました。

サービスはもともとあったんだけど1998年のシステムだたので
遅いの何の。ってかセキュリティーは?みたいな…

なので、ぜぇ〜〜〜〜〜んぶ一から作り直しました。
やっぱりメーリスのシステムってなめちゃいけないですね。

にしても、SFCからガチでメールの送信拒否られます。
1時間毎にSPAM防止で制限があるようです。
ITCの人どーにかして下さい。
って言っても再送信繰り返すからいいんだけど…

是非利用してみてください。

http://keio.to/

あぁ〜〜ちゃんと動くかなぁ…汗;
Posted at 05:06 | comments(0) | TrackBacks(0) | 開発

2007年05月21日

歌ネットの歌詞をコピるには…

※ 多少アングラネタです。

久々に歌ネットに行ったら歌詞表示がFlashになってました。

いやぁ技術上げたなぁ〜と思いました。
うたまっぷの歌詞表示は僕の個人サイトに方法載ってます。

実際コピー対策の技術はうたまっぷより歌ネットの方が優れてますねぇ。
(前回はへぼへぼでしたが…)

そんなわけで歌ネットの歌詞をコピろうと思っていじりはじめたら5分もせずに終わりました…汗;

※ コピーは私的利用の範囲内でお願い致します。

■方法

1. 歌詞ページに飛ぶ
  例:http://uta-net.com/user/phplib/view_1.php?ID=53374

2. 歌詞を表示するflashのURLは以下のとおり
  http://www.uta-net.com/user/phplib/swf/showkasi.php?ID=XXXXX&WIDTH=422&HEIGHT=798
  ただしID=XXXXXには1.のID=XXXXXが入る。

3. DLソフトを持っている場合は上のファイルをDL。

4. DLソフトを持っていない場合は
  <a href="※2.のURL※">DL</a>
  をHTML形式で適当に保存して。開いてDLで右クリック→「対象をファイルに保存」

5. 後はDLしたファイルを秀丸でガチで開く

6. 認識エラーが出るが「キャンセル」でしかと

7. ファイル→エンコードの種類→Unicode(UTF-8)

8. ファイルを読み込み直す(R)

9. 再びうるさい認識エラーを「キャンセル」でしかと

10. 最初と最後の変な文字を取り除けばは〜い歌詞表示の完成!
Posted at 03:42 | comments(0) | TrackBacks(0) | 開発

2007年02月12日

Windows Vista インストール編



とりあえず先発隊としてVistaのインストールしてみました。

1. HDD
Windows Vista用に新調したST3320620NSを設置。

2. BIOS
NCQに対応するためにHDDのモードをIDEからAHCIに。

3. CD Boot
まぁCD入れて起動させるだけ。

4. Install
おぉ〜OSのインストールが今までのCUIからGUIに!
ボタン押してるとすぐにインストール作業に入ります。
ってかHDDのフォーマットとか勝手にやってるし…
FATとかNTFSとかの選択肢ももうくれないんですね。
別にいらないけど…

5. Boot
おぉ〜
XPよりセンスがよくなってる…
起動画面がXPよりシンプルですね。
ってか結構自動認識してくれますねぇ〜

6. Driver
まぁそれでも当然ながらDriverがないのもあるので
そもそも音鳴ってないし…
屋根裏からマザボに引っ付いてきたCDを引っ張り出して
CD入れたものの、とりあえずAuto Runのプログラムが
Vistaでは動いてくれないらしい。
めんでぇ。。。
まぁ直接CDの中のフォルダを参照すればいい話なので
適当にあさってめぼしいのをインストール。

7. No Driver
対応してないDriver君も居て
無理やり入れてみたりとかしたが(コラ
やっぱりだめなんで諦める。
I. CanoScan N 1220 U
II. ELSA EX VISION 1700TV USB
CanoScanにいたってはVistaに対応する予定がないらしい…(ぅぉぃ
TVキャプチャはサイトに情報が載ってないのでメールを出しときました。
Posted at 05:45 | comments(0) | TrackBacks(0) | 日記

2007年01月30日

Windows Vista

いやぁ〜
今日からWindows Vistaの発売が開始されましたねぇ〜
僕の家にもさっき届いたのですが、
インストールは試験が終わってからにします。。。
Posted at 12:57 | 3 comments | TrackBacks(0) | 日記