Ryuji
HTML5の新機能Web Databaseを試してみた。
- 2009-10-15 18:54
- スタッフブログ
今日HTML5の新機能であるWeb Databaseを仕事で使えないかなーと調べてみたので、
簡単に使い方をコードで紹介したいと思います。
<script>
var db = openDatabase("sample", "1.0", "Sample database", 1024 * 1024);
function createTable() {
db.transaction(function(tx) {
tx.executeSql(
"CREATE TABLE IF NOT EXISTS users( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(64) NOT NULL);",
null,
insertData,
function() {
alert("CREATE 失敗");
}
);
});
}
function insertData(tx) {
tx.executeSql(
"INSERT INTO users(name) VALUES(?);",
["hamaco"],
findData,
function() {
alert("INSERT 失敗");
}
);
}
function findData(tx, rs) {
tx.executeSql(
"SELECT * from users WHERE id = ?",
[rs.insertId],
function(tx, rs) {
document.body.innerHTML = rs.rows.item(0)["name"];
},
function() {
alert("SELECT 失敗");
}
);
}
createTable();
</script>
上記コードを実行すると、Safariのデータベースデバッグ用の画面で以下の様にデータが入っているのを確認することができます。
CREATE,INSERT,SELECTの3つを行なっているだけですが、executeSqlメソッドが非同期で動作する為、このように面倒くさいコードになってしまいます。
ただ、現在Web Databaseが動作するのはSafari4しかなく、他のブラウザでは動作しないので結局仕事には使えませんでした。
SSHのログインパスワードを間違えた時にキャンセルする方法
- 2009-10-14 18:38
- スタッフブログ
たいていは、「CTRL+Cを押して、コマンドを中断してやりなおす」か、「BSキーを適度に連打して、再度入力」という方法をとると思います。
が、一旦中断するのは面倒だし、BSキーもどれだけ押せばいいかわからないので、不便です。
こういった場合は、「CTRL+uを押す」と、入力中の内容をすべて削除できます。
間違えたかも。と思った時はあわてずにCTRL+uを押して再度入力すると、あの入力内容が見えない画面も怖くなくなると思います。
リダイレクトとget_headers()の返り値
- 2009-10-13 17:00
- スタッフブログ
こんにちわ。 なおとです。
開発では、なにごともやってみて初めて分かるということがあるものです。 今回は、あるコンテンツに対して「HEADリクエストを送って存在確認をする」、というスクリプトを(PHPで)書いた時の話です。
マニュアルにはレスポンスが正常な場合(200 OK)の例が掲載されています。 これが、リダイレクトするコンテンツの場合には、少々様子が異なってきます。
結果を書いてしまうと、「get_headers()はリダイレクトを辿って複数のリクエストを行う」ということを知りました。 私は「HTTP HEADの結果に係わらず、1回だけリクエストして、その結果を返す」という動作を(勝手に)想像していたのですが、違いました。
動作を確認するために以下のような、リダイレクトを数回繰り返すサンプルを用意しました。(redirect.php)
<?php
$req = $res = $_SERVER['REQUEST_URI'];
if (preg_match('/[^\w\:\/\.]/i', $req)) {
echo 'wrong request.';
} else {
if (strpos($req, '.php') === (strlen($req) - 4)) {
$res = $res . '/';
}
if (!strpos($req, '1111')) {
$res = $res . '1';
header('Location: ' . $res);
} else {
echo htmlspecialchars($req, ENT_QUOTES, 'UTF-8');
}
}
これを、get_headers()を使って結果を見ます。(別のスクリプトです)
<?php
var_dump(get_headers('http://localhost/redirect.php', 1));
その結果が以下になります。
※分かりやすくするために、一部を編集しました
array
0 => string 'HTTP/1.1 302 Found' (length=18)
1 => string 'HTTP/1.1 302 Found' (length=18)
2 => string 'HTTP/1.1 302 Found' (length=18)
3 => string 'HTTP/1.1 302 Found' (length=18)
4 => string 'HTTP/1.1 200 OK' (length=15)
'Date' =>
array
0 => string 'Tue, 13 Oct 2009 06:38:51 GMT' (length=29)
1 => string 'Tue, 13 Oct 2009 06:38:51 GMT' (length=29)
2 => string 'Tue, 13 Oct 2009 06:38:51 GMT' (length=29)
3 => string 'Tue, 13 Oct 2009 06:38:51 GMT' (length=29)
4 => string 'Tue, 13 Oct 2009 06:38:51 GMT' (length=29)
'Server' =>
array
0 => string 'Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.7 with Suhosin-Patch' (length=xxx)
1 => string 'Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.7 with Suhosin-Patch' (length=xxx)
2 => string 'Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.7 with Suhosin-Patch' (length=xxx)
3 => string 'Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.7 with Suhosin-Patch' (length=xxx)
4 => string 'Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.7 with Suhosin-Patch' (length=xxx)
'X-Powered-By' =>
array
0 => string 'PHP/5.2.4-2ubuntu5.7' (length=20)
1 => string 'PHP/5.2.4-2ubuntu5.7' (length=20)
2 => string 'PHP/5.2.4-2ubuntu5.7' (length=20)
3 => string 'PHP/5.2.4-2ubuntu5.7' (length=20)
4 => string 'PHP/5.2.4-2ubuntu5.7' (length=20)
'Location' =>
array
0 => string '/redirect.php/1' (length=15)
1 => string '/redirect.php/11' (length=16)
2 => string '/redirect.php/111' (length=17)
3 => string '/redirect.php/1111' (length=18)
'Content-Length' =>
array
0 => string '0' (length=1)
1 => string '0' (length=1)
2 => string '0' (length=1)
3 => string '0' (length=1)
4 => string '18' (length=2)
'Connection' =>
array
0 => string 'close' (length=5)
1 => string 'close' (length=5)
2 => string 'close' (length=5)
3 => string 'close' (length=5)
4 => string 'close' (length=5)
'Content-Type' =>
array
0 => string 'text/html' (length=9)
1 => string 'text/html' (length=9)
2 => string 'text/html' (length=9)
3 => string 'text/html' (length=9)
4 => string 'text/html' (length=9)
get_headers()の第2引数に「1」をセットしなかった場合は、もっと混沌とした結果になっていましたが、省略します。
それと今回は、自分自身にリダイレクトするスクリプトで実験しました。 異なるサーバ/スクリプトに跨ってリダイレクトを辿った場合は、レスポンス・ヘッダーの内容も異なると思われますので、もう少し複雑な結果になります。
これを受けて、「Locationの結果、行き着くコンテンツ」は次のように取得できることがわかります。 ただし、URLの解決(絶対URLに直す処理)は端折っています。 あと実際のコードでは、エラー処理など適宜しています。
<?php
$url = 'http://localhost/redirect.php';
$headers = get_headers($url, 1);
$location = $headers['Location'];
if (is_array($location)) {
$location = array_pop($location);
}
if (
(strpos('/', $location) === false)
and
(strpos('http', $location) === false)
) {
$location = dirname($url) . '/' . $location;
}
echo "original: {$url} \n redirected: {$location} \n";
以上です。
Evernote for Windows 3.5 beta
- 2009-10-9 13:36
- スタッフブログ
あまり使いやすくはないとの評判だったEvernoteのWindowsクライアントですが、先月末に3.5のbeta版がリリースされ、今までとはだいぶ使い勝手が変わったとのことで、早速試してみました。
ダウンロードはこちらから行えます。
過去バージョンが入っている場合は、起動時に昔のDBをコピーするかどうか聞かれます。
早速起動してみたところ、

何かエラーが出てしまいました。
しかしキャンセルすると普通に使えるようになりました。betaなので仕方ないのでしょうか。

モザイクだらけでわかりにくいですが、今までの画面とは大幅に変わっているのがわかります。
相変わらず日本語での検索ができませんが、文字入力も前ほど重くなく、ようやく実用できるレベルが見えてきた感じです。
Lifehacking.jpの記事によると、来年中に日本語化を行うということで、文字認識や検索も使えるようになると思うので、非常に楽しみです。
ちなみに3.5のbetaはあくまでbetaなので、ご利用は自己責任でお願いします。
今のところ、FirefoxのEvernoteアドオンが正常に動かなくなる等の問題があるようです。
台風18号、無事に通過
- 2009-10-8 19:07
- スタッフブログ

この台風18号ですが、ブログを書いている現時点では東北にあるとのことで、オフィスの窓から外を見ても雨や風はおさまっているようです。
幸いなことに、RYUSのスタッフにはこの台風で怪我をしたりした人はいなかったのですが、台風は日本列島の各地に被害を出しながら縦断していったそうで、被害に遭われた地域の復旧が少しでも早く進むことをお祈り申し上げます。
明日以降は、台風一過ということで暫くは良い天気が続くそうなので、週末などを使ってどこかに出かけてみようかと思います。
旅行などには行けないと思いますが、何か面白い体験が出来た場合は、次回のブログに書くかも知れません
XOOPS Cubeサタデーラボ楽しかったー!けど反省点も!
- 2009-10-7 12:12
- スタッフブログ
前日の会場準備をしてくれたRYUSメンバーの皆さん、突然のお願いを快諾してくれたスピーカーの皆さん、土曜の夜にお時間をさいて参加してくれた参加者の皆さん、それぞれに感謝です!
勉強会の部でどんなことをスピーカーの方が話されたかは別途ニュースにあげたいと思っていますが、今日は私自身の感想を書きたいと思います。
最近私はCMSビジネスに関連する集まりに参加することが多いのですが、そこでは「ビジネスの中でのCMS」「XOOPSをビジネスにどう活用するか」という話が中心になります。
それに対して、今回のXOOPS Cubeサタデーラボでは、「XOOPS Cubeのコアをどうしていくか?」「XOOPS Cube Legacy2.2は、今の方向性でいいのか?」など、ビジネス以外のことが中心となった話がたくさんできました。夜遅く(最後まで残っていたのは私とtadashiさん、minahitoさんですが、たぶん深夜1時過ぎまで話してました!)までXOOPS談義をできたのは、非常に楽しかった!(懇親会では半分以上はXOOPSとは関係ない話をしてたような気もしますが(^^;)
やってみて、やっぱり懇親会は立食形式が一番いいなぁと思ってます。席に座ってしまうとなかなか離れた場所の人と話せませんが、立食だと自由に移動できて話せますからね。
次回以降も是非立食形式でやりたいと思います。
■反省点
○勉強会短すぎ
1時間ぐらいを予定してたんですが、発表につかうPCトラブルなんかもあって、1時間半ぐらいかかりました。
それも質疑応答すっとばしで1時間半だったので、次回は質疑応答の時間もいれて勉強会の部は2時間ぐらいとっておきたいと思います。
なんとなくですが、下記のようなスケジュールがよさそうかなぁ
16:30-17:00 受付
17:00-19:00 勉強会の部
19:00-19:15 懇親会準備
19:15-22:00 懇親会の部
○狭すぎ
スピーカーの方が、前にでるのも難しいぐらいぎゅうづめになってしまったので、次はもうちょっとゆとりある会場でやりたいと思ってます。
○内容の事前告知
事前にスピーカーさんの告知はできたんですが、発表内容について告知できてませんでした。
せめて開催日の数日前には発表内容をスピーカーのみなさんに確認して、告知すればよかったなぁと思ってます。
これらをふまえて次回は第1回目よりも良くしたいと考えています。
次回は11月に開催予定!
キーボードの選択 その3
- 2009-10-2 14:05
- スタッフブログ
キーボードについて書くブログもこれで3度目です。
前日のhamacoさんのエントリもトラックボールについてだし、操作デバイスのエントリが続きます…
さて、以前使っていたキーボードは「キーボードの選択」に書いたRealForce 86Uです。
今回はmikaさんが「ほぼ理想のキーボード」で書いたLenovoのトラックポイントキーボードの英語版を試しています。

自分はノートPCでThinkPadも使っているし、以前ThinkPadのキーボードを移植したようなキーボード
スペースセイバーII(リンクの画像は日本語版ですが自分が使っていたのは英語版)も愛用していた時期があるので、
トラックポイントがついた黒いキーボードはかなり好みでした。
このキーボードの前のバージョンのようなトラベルキーボードも気になっていたのですが、不要なトラックパッドがあるのがネックになって購入はしませんでした。ですが、このトラックポイントキーボードはトラックパッドもなく、お値段も以前の半分くらいなので発表されて直ぐに発注しました。
使った感想としては、質感は悪くないです。キータッチ普通でしょうか。悪くはないです。
キーボード自体の剛性は流石にあまりないですが、そこはそれほど問題ではないと思います。
キー配列はノートに近いキー配列なので左Shiftキーの下にFnキーとCtrlキーがある配置で、結構な頻度で左のFnキーを使うので慣れないとちょっと不便かもです。
そんな話をhamacoさんに話したら「CapsLockキーをCtrlに割り当ててしまえばいいじゃないですか!」という話になりました。
今度「Change Key」を使ってキーを配置を変更してみようと思います。
総合的に使いかっては結構良いです。RealForceも良いキーボードだと思うのですが、コストパフォーマンスがいささか悪いのでなかなか人には勧めずいキーボードですが、このトラックポイントキーボードはThinkPadユーザーやトラックポイント好きな方にはかなりお勧めできる品だと思います。
今Lenovoのストアで少しセールで安くなているようなので、もう一枚、自宅用に買おうかなと思っています。
過去キーボードのエントリまとめ
キーボードの選択
キーボードの選択その2
キーボードを変えました
マウスも買いました
- 2009-10-1 16:20
- スタッフブログ
前回のブログではキーボードを買った話をしましたが、今日はマウスの話です。
写真を見て分かる通り、KensingtonのSlimBlade Trackballを購入しました。
元々MicrosoftのBlueTrackのマウスを使っていたのですが、コンセントが少ないので充電するのが面倒くさいのと、マシンのロック解除時にマウスの速度が最高速になって使い難かったので、とある事情で1万円程お金があったのでついカっとなって買ってしまいました。
トラックボールを使ったことがなかったので、慣れることが出来るのか不安だったのですが、使い始めてみると10分もしない内に手に馴染んできて、1週間程たった今ではこれ以外に考えられないくらい快適に使用しています。
openpearの旅 第16回:Services_HTML2PDF
- 2009-9-30 20:42
- スタッフブログ
openpear.orgは、四季の変化と関係なく、順調にパッケージ数を増やしているようで、
すでに100個前後のプロジェクトが公開されています。
今回は、その中から、Services_HTML2PDF ( http://openpear.org/package... ) を紹介します。
Services_HTML2PDFは、名前の通り、HTMLをPDFに変換するライブラリです。
アシアル株式会社が提供しているHTML2PDF.BIZ ( http://html2pdf.biz ) というサービスを利用して、指定したサイトのサムネイルをPDFで出力します。
実は、サービス名にHTML2PDFとついているので、PDF出力しかできないと思われがちですが、PDFの他にPNGとして出力する機能があるので、これを利用すると、ウェブサイトのスクリーンショットを集める事もできます。
Services_HTML2PDFをインストールして以下のコードを実行すると、RYUSウェブサイトのトップページのサムネイルをpngとして保存します。
require_once 'Services/HTML2PDF.php';
//PNG
function example_png()
{
$pdf = Services_HTML2PDF::convert("http://ryus.co.jp/", 'PNG');
if (PEAR::isError($pdf)) {
print($pdf->getMessage() . "\n");
exit();
}
file_put_contents(dirname(__FILE__) . '/hoge.png' , $pdf);
}
example_png();
このライブラリで利用しているのは、無料版のAPIなので、機能制限があります。
本格的に利用する場合は、HTML2PDF 機能比較 ( http://html2pdf.biz/compari... ) を参考に、有料版を検討してみるのもよいでしょう。
PEAR Net_POP3::login について
- 2009-9-30 10:35
- スタッフブログ
なおとです。
メールをPOP3で受信するプログラムを書いていて気づいたことをメモしておきます。 今回はPEARライブラリのNet_POP3を使いました。
loginメソッドはマニュアルの記述が古くて、 誤りがあるようでした。
boolean Net_POP3::login (string $user string $pass boolean $apop)
このようなシグネチャとともに、
string $user - 使用するユーザ名。 string $pass - 使用するパスワード。 boolean $apop - APOP を試みるかどうか。
という説明が見えます。
私はこれを見て、APOPを使わないという意図で3番目のパラメータにはfalseを指定しました。 しかしこのとき予想に反して、「サポートしていない認証方式」という意味のエラーとなってしまいました。
そこでソース(Net/POP3.php)を確認しました。
/**
* Performs the login procedure. If there is a timestamp
* stored, APOP will be tried first, then basic USER/PASS.
*
* @param string $user Username to use
* @param string $pass Password to use
* @param mixed $apop Whether to try APOP first, if used as string you can select the auth methd to use ( $pop3->login('validlogin', 'validpass', "CRAM-MD5");
* Valid methods are: 'DIGEST-MD5','CRAM-MD5','LOGIN','PLAIN','APOP','USER'
* @return mixed true on Success/ PEAR_ERROR on error
*/
function login($user, $pass, $apop = true)
どうやら3番目のパラメータは用法が違っているようです。 実際には、認証方式を文字列で与えるか、もしくtrueを受け取ります。 falseあるいはnullでは上記のエラーになります。 なお、3番目のパラメータを省略することはできて、その場合はtrueもしくは'USER'を指定したときと同じ動作になります。
私はここまでで問題解決できたのですが、他に気になる部分がありました。
//Disabling DIGEST-MD5 for now
検証していないのですが、どうもDIGEST-MD5は使用不可の状態になっている模様です。 APOP認証したいときは、チャレンジ・レスポンス方式のCRAM-MD5を選択することになりそうです。
またついでにエラーハンドリングのための豆知識をひとつ書いておきます。
Net_POP3のメソッドは、loginを除いて、失敗したときに返り値falseを返します。 そしてloginだけはPEAR_Errorオブジェクトを返します。
実際のコーディングでは、loginの返り値だけPEAR::isErrorでチェックして、他は
$ret = $pop3->getSize();
if ($ret === false) {
throw new Exception('POP3: cannot get mailbox size.');
}
といったように、返り値をチェックして例外をthrowしなおすという繰り返しにしました。
エラーハンドリングのやり方には種々あると思いますが、もうすこしうまい書き方ができないものかとおもいつつ、こんな形で妥協しています。
iPhoneを買いました
- 2009-9-28 15:47
- スタッフブログ
突然ですがiPhoneを購入しました。

早速セカイカメラで遊んでいます。

セカイカメラに関しては、既に各地で取り上げられているので、ここでの説明は省略します。
他にも、Googleの各サービスを簡単に見ることができたり、IRCやTwitterも快適に操作することができます。
特に外出先でGoogleカレンダーを見るのは、普通の携帯電話から見るのは何かと不便だったので、これだけでも買って良かったと思います。
とりあえず入れたものは、
・LimeChat(IRCクライアント)
・mixi Browser mini(mixiクライアント)
・BB2C(2chクライアント)
・AeroReader(Livedoor Readerクライアント)
・NatsuLion for iPhone(Twitterクライアント)
・セカイカメラ
・乗換案内
・食べログ
・Flickit(Flickrクライアント)
・ニコニコ動画
・Skype
・WifiTrak(WifiのAPを探してくれる)
・Amesh View(東京アメッシュブラウザ)
他にもいくつか入れてあります。
3Gなだけあって、回線速度も十分あり、ほとんどのサービスを快適に利用できます。
3GSから搭載されたコンパスでGoogleマップをグリグリ回すだけでも楽しいです。
実際に使い込んでいくと使いやすさがわかってくるので、Googleのサービスをよく使う方や、IRCをどこからでも見たいという方は是非購入を検討してみてください。
第1回XOOPS Cubeサタデーラボ、無事終了!
- 2009-9-28 12:23
- スタッフブログ

先週の土曜日は、第1回XOOPS CubeサタデーラボがRYUSオフィスで開催されました。
自分も、勉強とお手伝いを兼ねて参加したのですが、スペースいっぱいになるくらい参加者が集まり、かなり盛況でした。
XUGJのフォーラムに参加された方が感想を書かれていますが、今回の反省を活かしつつ、次回以降はもっと良くなっていくと思いますので、今回参加出来なかったけど興味があるという方は、是非第2回を楽しみにして頂ければと思います
今週末は第1回XOOPS Cubeサタデーラボです。
- 2009-9-24 14:54
- スタッフブログ
今回のミニレクチャーは、XOOPS Cubeコアの開発をされてるminahitoさんを筆頭に、Marijuanaさん、tohokuaikiさんと、主に開発をされている方達中心になるので、開発よりの話が中心となるかもしれません。
他、うさでき♪でおなじみの当社mikにも、ユーザさんよりのミニレクチャーをやってくれとお願いしてます。
何しろ思いつきではじめたイベントの第1回目ですので、どんな展開になるのか、私もドキドキしています。
というわけで、何があっても笑って許せる心の広い方のみご参加ください(^^;
秋といえば読書、の薦め
- 2009-9-24 9:34
- スタッフブログ
今回はかなり沢山読めましたので、その中でお奨めの本をご紹介します。秋と言えば読書、ご参考になさってください。
○動的平衡
知らずに買ったのですが以前読んだ「生物と無生物の間」、を書いたかたの著書でした。
「人間は素粒子でできていて、宇宙にある全てのものは一体である」、という様な理論を最近
読むしこの本でも書いてあるのですが、今ひとつしっくりは来ていません。
ただ、「記憶についてずっと前の記憶も1週間前の記憶も等しくあいまいだ」、ということが
書いてあり、ここは目から鱗でした。生きやすくなる気がします。
○新世界より
話題になった本ですが、新刊で読むには冒険だなと思ってました。なんとノベル化していたので
買いました。夜長にはぴったりの長編です。
○二重洗脳
これも「リセット禁煙」を書いた方のものと知らず、内容が面白そうで買いました。
何かやめたくてもやめられないモノ(^^;、がある方にお奨めします。
○死ぬときに後悔すること25
読んでいる途中で「え、この著者まだ30代なの!?」とびっくりしました。ちょっと
落ち着いてたのでてっきり60代ぐらいの方かと。
お医者さんが実際に立ち会って、聞いた後悔のお話なので興味深かったです。
悔いの無いように生きたいなぁと思わせる一冊。
○鷺と雪
今年の直木賞作品です。3部作なのでこのまえの2作を読んでから読むのを強くお奨め
します。昭和初期の銀座や東京の生活がリアルに描かれていてタイムスリップ気分になれ
る作品です。作品に頻出する教文館で3部目を偶然買ったのがちょっと嬉しかった。
次期PCの構成
- 2009-9-16 20:38
- スタッフブログ
こんばんは、argonです。
今回はWindows7の発売も間近にせまってきているので、自分の次期PCの構成などを妄想してみようと思います。
コンセプトはそれなりの性能とコストパフォーマンスを持ちつつ静音性も考えたPC パーツのの構成を考えてみます。
- CPU Intel Core i7-860 (2.80GHz)
- マザーボード GIGABYTE GA-P55-UD5
- メモリー DDR3-1600 2GB×4
- ビデオ-カード GIGABYTE GV-N96TSL-1GI
- ディスク Intel SDSA2MH80G2C1/R1/R5
ケースや電源は適当に選択します。あとDVDドライブかBDドライブも必要ですが、OSをインストールする だけなら、最近はUSB接続でも大丈夫な場合が多いので、手持ちのUSBの外付けドライブで行けそうです。 それとCPUファンも別売りの製品を買う可能性が高いです。
インストールするOSはWindows 7 Professionalの64bit版を考えています。 最近は64bit対応のアプリケーションも増えてきたし、satoさんも64biのVistaで使用していて特に問題ないそうなので、大丈夫かなと思っています。
という、感じの妄想をしてみました。 Windows Vistaはなんだかんだでパスしてしまったので、Windows7を使うのが今から楽しみです。
キーボードを変えました
- 2009-9-15 18:46
- スタッフブログ
入社した当初は他にキーボードがなかったので、先日argonさんが
紹介していた通りHHK Proを使用していたのですが、普段日本語キーボードを使用していて英語配列のキーボードが使い辛いので、今現在誰も使用していなかった、Apple Keyboard (JIS)を借りて使っています。
数日使用してみて、
キーを叩いた時にちょっとカチャカチャ言うけど、殆どMacbookのキーボードと同じ感じなので良い感じだったので、20分程前にApple Wireless keyboard(JIS)を購入してきました。

以前US配列のを触った時はAキーの横がCapsLockで、長押ししないと反応しなかったので完全に眼中になかったのですが、JIS配列のはAキーの横がControlキーで普通に使えるので良いキーボードです。
openpearの旅 第15回:Services_Prowl
- 2009-9-15 1:08
- スタッフブログ
今回も、私がopenpear上で公開しているライブラリについて紹介します。
Services_Prowl ( http://openpear.org/package... ) は、iphoneアプリケーションのProwlに通知を送る為のAPIをラップしたものです。
これを利用すると、以下のように、PHPからiPhoneやiPod Touchに対してメッセージを送れます。
メールの新着通知や、IRCなどのキーワード反応、Twitterのdirect messageやmentionなど、
リアルタイムに把握していたい情報をProwlに送信する事で、パソコンを開いていない時でも
最新の情報を知る事ができるようになります。
Services_Prowlは、現在の所、エラーハンドリングの実装待ち状態で公開されていません。
利用するには、svnからダウンロードする必要があります。
$ svn export http://svn.openpear.org/Services_Prowl/trunk Services_Prowl
と実行する事で、エクスポートできます。使い方は以下のようになります。
require_once 'Services/Prowl.php';
$api_key = 'あなたのAPI KEY';
$prowl = new Services_Prowl($api_key);
$result = $prowl->push('Test message from Services_Prowl at ' . date('Y-m-d H:i:s'));
var_dump($result);
通知系のアプリケーションはパソコンにもありますが、作業中にずっとチカチカされると
集中力が削がれるので、こういったものを外のデバイスに逃がすという使い方もありだと思います。
アイデア次第でいくらでも便利になると思うので良い使い方があれば教えてください。
『イントラタイムカードXOO』登場!!
- 2009-9-14 18:52
- スタッフブログ
こんにちわ。なおとです。 今日は弊社で開発を進めている、とっておきの商品を紹介いたします。
先日のPHPカンファレンス2009 ビジネス・デイの会場でお披露目した、「イントラタイムカードXOO」です。
まだこちらの弊社サイトからは大きく告知することはしていませんでしたが、今日バナーができたので、商品紹介のサイトにリンクを追加しました。
※画面は開発中のものです
これはズバリ、タイムカード機能を持った、社内/部署向けのなにかです!
その正体は、Felica系カードで出勤・退勤の時刻を記録したり、その勤怠データを集計したり、またあるときはXCCP譲りの社内ポータル(イントラサイト)として機能するXOOPS Cubeです。
いまはさらにブラッシュアップすべく、開発改善を進めています。 これからのRYUSにご期待ください。
PHP5.3でXOOPSを動かす
- 2009-9-10 10:28
- スタッフブログ
PHP5.3がリリースされて2ヶ月少々経ちますが、XOOPS CubeのPHP5.3対応はどうなっているのでしょうか。
少し調べてみました。
素のXOOPS Cubeをダウンロードして、PHP5.3環境で実行してみます。

Deprecated: Function set_magic_quotes_runtime() is deprecated in /path/to/xcl/html/install/class/textsanitizer.php on line 32
と出ています。Deprecatedというのは「非推奨」という意味で、つまりその関数は今後どうなるかわかんないしセキュリティとかそういう方面でもあまり良くないので(いろいろなケースがありますが)使うな、ということです。
とは言っても消すのは大変なので、php.iniで
error_reporting = E_ALL & ~E_DEPRECATED
とすると消えてくれます。インストールを進めていき、設定の保存(mainfile.phpに書き込むところ)の次の画面で、以下のようになってしまいました。

Warning: syntax error, unexpected '<' in /path/to/xcl/html/settings/site_default.ini.php on line 1 in /path/to/xcl/html/core/XCube_Root.class.php on line 163 Fatal error: Call to a member function prepare() on a non-object in /path/to/xcl/html/core/XCube_Root.class.php on line 287
2つエラーが出ていますが、最初のWarningのせいでFatalが出てそうな感じです。XCube_Root.class.phpを見てみます。
$this->setSiteConfig(parse_ini_file($file, true));
として、settings/site_default.ini.phpを読み込もうとしているようですが、site_default.ini.phpは、以下のようになっています。<?php
/**
[Cube]
Root=XOOPS_ROOT_PATH
Controller=Legacy_Controller
#SystemModules=system,legacy,user,legacyRender
SystemModules=legacy,user,legacyRender,stdCache
RecommendedModules=pm
RoleManager=Legacy_RoleManager
Salt=XOOPS_SALT
...
どうやら、parse_ini_fileの仕様が変わって、iniの書式として不正なものは容赦なくエラーになるように変更されたようです。zend_ini_parser.yのdiffを取ってみたのですが、長そうなので見るのはやめておきました。
site_default.ini.phpがiniファイルであるにも関わらずphpにしているのは、外部から直接叩かれたときに見られないようにするためだと思いますが、この方法は5.3では使えないことがわかります。
このままでは進まないので、site_default.ini.phpを以下のようにします。
1=<?php
1=/**
(中略)
1=*/
1=?>
これでsite_default.ini.phpを直接叩くとparse errorになりますが、中身は表示されませんし、普通に次に進むことは可能です。書き方をもう少し工夫すれば直接叩いても大丈夫になります。
これ以外はインストールは問題なく通りました。
次に初期のモジュールの追加画面で、変なエラーが出ています。

Unknown Condition [8192]: Assigning the return value of new by reference is deprecated in file kernel/member.php line 79
Unknown Condition [8192]: Assigning the return value of new by reference is deprecated in file kernel/member.php line 80
Unknown Condition [8192]: Assigning the return value of new by reference is deprecated in file kernel/member.php line 81
...
該当行を見てみましょう。 function XoopsMemberHandler(&$db)
{
$this->_gHandler =& new XoopsGroupHandler($db);
$this->_uHandler =& new XoopsUserHandler($db);
$this->_mHandler =& new XoopsMembershipHandler($db);
}
どうやら、newの時に&を付けるのが駄目になったようです。PHP5になった時点で既に意味がなくなっていたものなので、deprecatedと表示するのは間違っていないと思いますが、E_DEPRECATEDで消せないのは腑に落ちないです。とりあえず無視します。
インストールが完了して、installフォルダを取り除くと、以下のような画面になりました。

最後のほうのiniのエラーが問題な気がするので、全てのthemeのmanifesto.ini.phpを先ほどの要領で1=を付けると

ここまでは出るようになりました。
iniの読み込み処理側に手を加えたほうが楽そうです。
とりあえず今回はここまでにします。
PHPカンファレンス2009に参加してきました
- 2009-9-9 20:16
- スタッフブログ

先週末は、RYUSもスポンサーとなっているPHPカンファレンス2009に参加してきました。
今年は、ビジネスデイとテックデイの2日間開催だったわけですが、私はスタッフとして2日間とも参加し、更に勢いで懇親会LTで発表までしてきてしまいました

カンファレンスの内容については、gihyo.jpにレポート記事があがっているので、こちらをご覧下さい。
「史上最速のレポート」と言われているくらいタイムリーに更新されていたので、当日参加出来なかった方にも雰囲気が伝わるかも知れません

また、こちらに、参加された方たちのトラックバックが送られているので、参加された方たちのブログも参考になるかと思います。


