ソーシャルブックマークから「いいね!」

以前、ソーシャルブックマークが流行ってるって事で、このブログにもソーシャルブックマークのボタンを付けたり、マイリリースにもトップと公開ページにもソーシャルブックマークのボタンを付けていたが、時代は移り、最近では「いいね!」ってのを付けてる所が多い。(ソーシャルフィードバックっていうらしい)
なんでも、海外の人気SNS「facebook」で使われてる機能らしく、最近ではmixiやgreeも同じ様な機能を付けている。この「いいね」ボタンを付けるとアクセス数が増加するという事で一気に広まっている。
個人的にはfacebookもGREE(PC版)もやった事ないしmixiも殆どログインしていないのでどんなに便利なのか分からないが、ただ携帯版のモバゲーにmixiのいいね(mixiチェック)が付いていて気にはなっていたので調べてみた。

まず、今までのソーシャルブックマークは基本的にブックマークレットを使って登録するので、ページ制作側は特に何もする必要が無く、ボタンを付けたければボタンをJavaAcriptなどでタイトルとURLを送るボタンを用意するだけでOKで製作者側は楽だった。
ソーシャルブックマークだと「タイトル」と「URL」の2つの情報だけしか無く、ブラウザに付いてる「お気に入り」の様に埋もれてしまう事が多かったが、facebookの「いいね!」の場合はOpen Graph Protocolという書式に従ったタグをHTMLに記載してこの情報を元にブックマーク(?)をするので、ページ概要や画像等の情報を含めた内容が保存出来て埋もれにくそうようだ。
OGPは標準の書式にしておけば良さそうで携帯版が別URLの場合はmixiやGREE様に追記する感じでOK。(画像を載せる場合はmixiの仕様に合わせてリサイズすると他でも使えるかと思います。)

他にもTwitterやEvernoteへのボタンも欲しいところだ。

ソーシャルブックマーク系のもGoogleブックマークとYahoo!ブックマークとLivedoorクリップは人気なので残す事にした。

個人的にソーシャルネットワークを使いこなせてないので、仕様を読んで理解するのにかなり時間がかかってしまったがようやく設置できた。

mixiチェックにamazonからの画像が掲載されなくて悩んだけど、ミクシィ デベロッパーセンターにて許可するドメインにamazonの画像サーバーを登録していない事が原因だったようで、登録すると表示された。

facebookは「いいね」か「シェア」かを最後まで悩んだけど「いいね」にしました。

PHPの高速化

MyReleaseの新規セッションの割合が低下していた。
Yahoo!が検索エンジンをGoogleの検索エンジンに切り替えた為だ。

そこで、PHPの高速化をとスクリプトを調整していたが限界が来たのでサーバーの設定を変更することにしました。
とりあえず「eAccelerator」を入れてみた。
MyReleaseはCPIのVPSで元々PHP4でPleskという環境に、無理やりPHP5を導入してるので不安だったが何の問題もなくインストールできた。体感できるほど速くはならなかったがコンパネから利用状況が分かり頑張ってる様子がわかる。

次に「eAccelerator」と同居できるという事で「ZendOptimizer」もインストールした。
これは入会する手間はあるが簡単にインストールできた。
ただ、バージョンが3.3.9と新しく色んなサイトで紹介されてるインストーラーを使ったインストールができないが、必要なファイルをコピーしてphp.iniにコピーした場所を記述するだけでOKという簡単な作業でインストール完了。

更にmySQLのインデックスも微調整した。query_cacheを調整したりすると、ようやく体感できるレベルに改善された。

このおかげかは分からないけどランキングは約一年ぶりに5位に戻った。

Windows7のUAC

メインのパソコンをWindows7に引っ越した。エクスペリエンスインデックスはオンボードなのでグラフィックが低いがゲームはしないので問題は無い。
XPと比べるとAeroで見た目がよくなったし、システムのバックアップ機能が付いてて、いい印象だったWindows7だが、Vista以降はUACという超うざい機能が追加された事を知った。

まず、ウチのWindows7は64ビットなんですがWOW64様のおかげで32ビットのアプリでも普通にほぼ速度的な劣化も無く動きます。
ライブラリの関係でソフトによっては32ビット用を使ったほうが正常に動いたりするぐらいです。

稀にソフトがWindows7に対応していない場合もあるけど実行ファイル(.exe)のプロパティの互換性タブから互換モードを有効にして適当に「Windows XP(Service Pack 3)」とか選ぶと普通に動きます。

windows7の対応も64ビットの対応もdllを使用するソフトは互換性の問題が起きる事が多い様に思います。おそらくdllのバージョンが古かったり開発が終了していたりする為かと思います。

残すはUACなんですが、UACはWindows Vistaから導入された機能で証明書が付いてないアプリには色々と制限を付ける事でセキュリティを高めるもので、マイナーな企業が作成したソフトやオンラインソフトは起動するたびにアラートが出たり、ファイルを保存できる領域を制限したりと嫌がらせをうけてまともに動作しない場合が多々ある。そんな証明書の無いソフトでも管理者権限で起動するとある程度正常に動く。毎日起動してるファイラにもメールソフトにもUACが邪魔するので実行ファイル(.exe)のプロパティから「互換性タブ」の特権レベルで「管理者としてこのプログラムを実行する」にチェックを入れて管理者権限で起動していましたが、それだけだと発行元が不明だからと起動するたびにアラートが出て鬱陶しいし、他のソフト(管理者として起動していないソフト)からのドラッグ&ドロップができないという問題が出てくる。

ドラッグ&ドロップの問題はエクスプローラーからのドラッグ&ドロップができないことになる。エクスプローラーも管理者として起動すれば問題なくなりそうだけどパソコンを起動した時点でエクスプローラーは起動してしまってるので、ドラッグ&ドロップしたいと思ったら一旦コントロールパネルからフォルダオプションを出して「別のプロセスでフォルダー ウィンドウを開く」にチェックを入れてエクスプローラを管理者として起動すればドラッグ&ドロップできるが鬱陶しすぎる。

いろいろ悩んだあげく、オンラインソフトを使う機会が多いのでUACをOFFにすることにした。本当はソフトごとにUACを設定したい所だがそんな機能はWindows7には無いので仕方ない。まあ、XPにはUACが無かったのでセキュリティレベルがXP時代に戻っただけだし、いざとなったらノートンさんが何とかしてくれるだろう。

UACの無効化で問題は解消されたが、Home Premiumなので「Windows XP モード」や「グループ ポリシー」が使えない。数千円の違いなのでProfessionalにしとけば良かった・・・

パソコンのデータ掃除

セキュリティソフトの更新日の関係で年が明けるまで新メインパソコンはしばらくメインでは使えない。一通り新メインパソコンへの引越しが終わったので旧メインパソコンをなんとか快適にすることにした。
まず残り容量が1%切っていてデフラグすらかけられないので容量の確保。
・Windowsアップデートのごみ削除(念の為、全部では無く2008年まで削除)
Windowsフォルダの見た目にはすっきりするが容量は1%ぐらいしか変わらない。
そこで、ディスク可視化ソフト「WinDirStat – Windows Directory Statistics」で何が原因か調べてみる事にした。
「Adobe Soundbooth」の音声解析ファイルと「UserDumps」と「pagefile.sys」が容量を食っている事がわかった。
〝パソコンのデータ掃除〟の続きを読む

PHPで切り抜き画像を作ってみる

まとめサイトのサイドバナーによくamazonのフィギュアを載ってるのをよく見る。amazon画像編集ツールamacco -あまっこ-も元々CDのジャケット用に作ったのだけど実際は殆どフィギュアばかりだ。
大抵フィギュアの背景は白で味気ない「PhotoShopとかで魔法の杖(マジックワンド)を使ったら簡単に切り抜き画像作れそうだな」と思ってPHPのGDで出来ないか調べてみた。
GDにはそんな機能は無かったがアルゴリズムの紹介にシードフィルというアルゴリズムを使って塗りつぶす方法がC言語で書かれていたのでPHPでもやってみた。
PHP 切り抜き
画像上の切り抜きたい場所を適当にポチポチ数カ所クリックして画像生成を押すと切り抜き画像が出来る。
白(左上の端の色)と画像の各ポイントの色の差を連想配列に入れておいて、画像上でクリックされた各ポイントからシードフィルアルゴリズムで塗りつぶしを繰り返し、(実際塗りつぶす訳じゃなく塗りつぶしのデータはマスク用の連想配列に入れる)処理が終わったら、マスクデータにぼかしをかけたりして、マスクを適用させて画像を生成するという感じ。
今回はテストなので普通に多次元配列を使ったが色情報なのでサイズ固定のSplFixedArrayを使った方が速そうな気もするが・・・。
あまりキレイでは無いので役に立たないかもしれないけどPHPで簡単切り抜き画像が作れることはできるという事が分かった。

Password Matrix

パスワードを記録し、暗号化するための、超アナログな方法 : ライフハッカー[日本版]の記事を見て圧縮して財布の中に入れられるようなモノを作ってみました。(前にも似たような記事を見たような気がするが)
Password Matrix
本家と同じだと財布に入るサイズにすると字が小さくなって読めなくなるので26あるアルファベットを2分割し、13×13のマスにしています。本家だと半角記号も含まれてますが日本では半角記号を許可していないサイトが多くあるのでデフォルトでは外しています。(あと間違いやすい0ゼロとOオーとか1いちとl小文字のLとか間違いやすそうなの文字も外しています。)
年賀状の時期ですので間違えた年賀状に印刷してカードサイズに切るといいかもしれません。

Phenom II X6 1090T+890GXM-G65を買いました

最近主に地デジ録画に使っていたDNRH-001のハードディスク(1TB)が壊れ、しばらく放置してるとバッテリーが白煙を吐いたりしてたので怖くて直す気にもならなくなり、メインで使ってるパソコンもCドライブの容量が不足してアラートが出る度にファイルを削除したり移動を繰り返していた、パーティションを切り直せばいいのだけど結構古いハードディスクなので、要らん事をして動かなくなると困る。
どうしようかと思ってたら、AMDのPhenom IIがキャンペーンで色んな所でCPUとマザーボードのセットが安くなってる。ソフマップでPhenomII X6 1090T Black Edition BOX品 + 890GXM-G65が12月末まで4000円引きという事でPhenomII X6を調べてみるとCore i7に匹敵?するぐらい早いらしい。しかも個人的に相性のいいMSIのマザー。そこで、決心して構成を考えてみた。
OS:10,428円(Windows 7 Professional 64bit DVD DSP版)
CPU&マザー:28,960円(Phenom II X6 1090T+890GXM-G65)
メモリ:7,865円(4G×2:W3U1333Q-4G)
電源:6,990円(玄人志向のKRPW-P630W/85+)
は最低限必要。
ハードディスクは先日、バックアップ用に買った外付け2TBのがある。(以前はDNRH-001にバックアップとってたんだが・・・。)、ケースは半年以上前(3月)に買ったGMC R-4 Bulldozer(5,480)がある。光学ドライブは別に無くててもいいかなと思ったが
BH10NS30 BLが同じくソフマップで9,980円でしかも今なら3D対応PowerDVD9付属(OEM版)って事で買うことにした。今のメインマシンのDVDドライブ(GSA-4120B)がいつの間にか4倍でしか焼けなくなってしまってるのでまあいいかな。光学ドライブはパイオニアの日本製のが欲しいけど2~3倍するので無理(海外版のパイオニアドライブは安いけど評判が良くない)、日立LG製はバッファローとかIO-DATAでも採用されてるので実質のシェアは大きいので安心(?)。
OSはGENOとか安いけど送料が高いのでメモリと一緒に送料無料の風見鶏で買った。
マルチモニタで使うのでビデオカードがいるかと思ってたが最近のはオンボードでマルチモニタができるらしい。
結局ケース代プラス64,213円で購入した。年末に痛い出費だけど壊れてからだと遅いので「いい買いもんだった」と自分に言い聞かせる事にすることにする。

PHPで複数のURLを404チェックする関数の速度比較

amazonのAPIなんかを利用して画像のパスを取得し保存していると稀に画像が削除されてしまってる事がある。
毎回、amazonのAPIを叩く様にしてもいいかもしれないけど頻繁にアクセスするとamazonに怒られるかもしれない。
そこで、ファイルが存在するかチェックする事にしたのだけどPHPには色々関数があるのでそれぞれチェックしてみた。
〝PHPで複数のURLを404チェックする関数の速度比較〟の続きを読む

月々8円!?IS01を買ってandroid

先月から某巨大掲示板で噂になっている月々8円で借りられるauのIS01を買ってきた。
8円と言っても事務手数料と本体購入価格は必要で本体購入価格はお店によっては0円のところもあり、キャッシュバックでお金がもらえるような店もあるらしい。
(IS01/02割ってのを使って3G回線を使わなければ8円だけで借りられるという事です。詳しくはググって)
とりあえず、先日犬の散歩がてら一番近いauショップに行くと新規は1万円(MNPは0円)と言われたので断念し、適当にau携帯を売ってるお店に電話すると、0円だけど今は在庫無いし入ってくるか分からないとか3000円分のサイト登録すると0円にするとか中には2万数千円とか強気な値段の店もあったが、0円の所に予約してダメなら諦めようと思っていたら今日連絡があって買えた。

先日androidのシミュレーターをインストールしたが、普段使ってないパソコンなのでパソコンの起動&androidの起動で結構待たされるので、その替わりになればと思ってたんで期待はしてなかったからか、割とサクサク動きます。
アプリもandroidは少ないんじゃないの?と思ってたがそこそこある様だし、マストなアプリはGmailとかGoogleカレンダーとかなのでGoogle androidには当然入ってる。しかもマルチタスク。
ワンセグは要らないと思ってたけどガラケーと比べるとアンテナが無いのに一番感度がいい。
Wifiもガラケー(N-06A)よりは感度が良くiPodTouchと同等レベル。
iPod Touchには付いてなかったマイクも当然付いてるし、カメラも内側外側と2コも付いてる(ガラケーならあたりまえだけど)
なによりいいのはキーボードやポインタが付いてるので文字入力や操作がしやすく、ほとんどの作業がモニタにタッチしなくても出来るので指紋が付きにくい。
もちろん難点もある。OSがandroid 1.6なのでFlashやマルチタップ非対応(1.6でも一部アプリはマルチタップ使える)なのは仕方ないとしてもアプリが対応してなかったりする。今年の秋にandroid 2.1になるという噂もあるが、ガラケーの慣習でバグフィックスしかしない可能性もある。

マルチバイト文字のtrim

yahoo!の検索エンジンがGooleの検索エンジンになるというニュースはありましたが
とうとう切り替わったのを確認してしまいました。(徐々に切り替わっていくらしい)

Googleはページの表示スピードも見てるらしいので少しでもPHPのスピードを上げたくて最近ではベンチを使って速度を比較している。
他者の計ったベンチがGoogleで調べればすぐに出てくるのになぜ自分で調べるかというと、例えば文字の置換はstr_replaceを使い。
$str = str_replase(“AAA”, “BBB”, $str);
とするが普通で速度も早いが、検索文字(例の場合”AAA”)の出現がレアな場合
if (strpos($str,”AAA”) !== false) $str = str_replase(“AAA”, “BBB”, $str);
と置換する前に先に検索した方が早かったりするので、実際のデータが無いと分からないのでベンチを計る必要が出てきたりする。

そんな中、比較的遅いというmb_ereg_replaceを使ってるマルチバイトのtrimを調査してみることにした。
$str = mb_ereg_replace(“^[  ]+”, “”, $str);
$str = mb_ereg_replace(“[  ]+$”, “”, $str);
昔、Shift-JISで単純にtrimの第2引数に全角スペースを入れてトリムすると文字化けしたのでmb_ereg_replaceを使ってるが、安全だけど遅い。
そこで昔文字化けした理由を調べに文字コードをwikipediaで見てみた。
Shift_JIS
第1バイトが81-9FとE0-FC、
第2バイトが40-7Eと80-FC
EUC-JP
第1バイトがA1-A8とADとB0-F4とF9-FC、(亜種は8FとF5-FEも)
第2バイトがA1-FE(亜種は第3バイトにもA1-FE)
UTF-8
第1バイトがC2-FD、
第2バイト以降が80-BF
trimのデフォルトの第2引数は
” ” (0x20), 半角スペース
“\t” (0x09), タブ
“\n” (0x0A), 改行
“\r” (0x0D), 復帰
“\0” (0x00), NUL バイト
“\x0B” (0x0B), 垂直タブ
とどの文字コードにも危険なコードが含まれていないので普通に使える。
ただtrimはマルチバイトには対応していないのでシングルバイトに変換され削除されるので全角スペースを除去しようとすると下記のように問題が発生する。
Shift_JISの全角スペースは0x8140でtrimの第2引数に全角スペースを入れると81と40が削られアウト
(http://charset.7jp.net/sjis.htmlの81と40が絡む行や列が文字化けする。)
EUC-JPの全角スペースは0xA1A1でtrimの第2引数に全角スペースを入れるとA1が削られアウト
(http://charset.7jp.net/euc.htmlのA1が絡む行や列が文字化けする。)
UTF-8の全角スペースは0xE38080でtrimの第2引数に全角スペースを入れるとE3と80が削られアウト

正しく全角スペースをトリムするならmb_ereg_replaceしか無く、すべての全角スペースが半角スペースになってもよければ
$str = trim(str_replase(“ ”, ” “, $str));
と先に全角スペースを半角スペースに変換するなど、シチュエーションによって使い分けるしか無いようだ。