スタッフブログ
作ったのはXOOPSユーザのランク画像等を表示するためのプラグインです。
・ユーザのランク情報を表示する ryus_user_rankプラグイン
ユーザメニューなら下記のような感じで使えます。
<img src="<{$block.uid|ryus_user_rank}>" title="<{$block.uid|ryus_user_rank:"title"}>" />
<{$block.uid|ryus_user_rank}> あるいは <{$block.uid|ryus_user_rank:"image"}> で画像URL
<{$block.uid|ryus_user_rank:"title"}> でランク名
XOOPSユーザのuidさえSmarty変数にアサインされていれば、ランク画像表示ができますので他に使えそうなところがあればいろいろためしてみてください。
また、短時間でサクッとつくれそうなプラグインがあったら作ってみますね。


「オープンソースカンファレンス???」と思われる方は
オープンソースにまつわるいろんな団体が参加する、お祭り!
と思っていただければと思います。あ、オープンソースというのはフリーソフトのように自由に使えるソフトウェアというようなもの、、です。
RYUSではこのところスタッフが力を注いで作成している「ITXOO(あいてぃずー)」という名前の商品を展示しています。
お手持ちの定期券に使われている交通系ICカード、携帯電話に付いているICカード、その他色々なところに付いているICカードを利用してタイムカードの替わりに打刻できるというシステムです!
開発するきっかけとなったのは実はRYUSでタイムカード管理するのが面倒だなぁということでした!
最初は〜
何もしてなくて…でも社労士さんがちゃんとつけないといけない、というから
反省して
入り口に置いた紙に各自が書いて…うーでもめんどくさいし、つけ忘れちゃう。それに時刻の計算も手作業で、、昭和の会社か!とつっこみたいような状況でした
めんどくささに負けて、いよいよモジュール化
めんどくさがりやが管理してますので、手計算もすぐに限界になりました。かといって今更、がっちゃん!っていうのも…。てことでモジュール化を考えました。ICリーダーからの読み込みも考えましたがドライバが見つからず、とりあえず手持ちのバーコードリーダーで読み取る形のタイムカードモジュールを作成して運用を開始。
RYUS初の商品に!
モジュール化してからずっと使い続けていました。RYUSで商品を作ってみよう!と話をしてるときに「じゃぁタイムカードモジュールを商品に」ということになりました。せっかくなのでICカードを読み込んでハード付きでかっこよく♪ということで今の形に
というようなストーリーです。いよいよ11月には発売となります。
会場では皆さん試していただき
「お〜!便利ですね」
「インストールが不要で各自のパソコンから参照したり管理できるのがいい♪」
と好評です。
オープンソースカンファレンスは明日まで開催されていますから、遊び気分で是非RYUSの商品 ITXOO を触りに来てください♪
その過程を連載記事としてブログに書いていこうと思います。
さて、作るサイトは身内なのですが、自分の弟のサイトです。
彼はストリートで音楽を演奏したりライブをやったりと音楽活動をしているので
そういった事を載せるサイトにしていけたらと思います。
まず、レンタルサーバーをどこにするかを検討します。
参考
XUGJのレンサバ放浪記
候補
XREA
CORESERVER
ヘテムル
さくらインターネット
といった所でしょうか。XREAとCORESERVERは自分のサイトで使ったことあります。
ヘテムルもちょっと使ったことがあるので候補に。
あとは知名度と評判でさくらインターネット、プランは当然安いタイプになりますが。
こんな感じで候補を考えていたのですが、弟と話していたら、まずXREAの無料サーバで試して
できてきたら、ドメイン取得やXREAの有料化またはサーバー移転等すれば良いのじゃないか?
という話に落ち着きました。小さく始めて育てていこうと思います。
次回予定
XOOPSインストール

今日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しかなく、他のブラウザでは動作しないので結局仕事には使えませんでした。
たいていは、「CTRL+Cを押して、コマンドを中断してやりなおす」か、「BSキーを適度に連打して、再度入力」という方法をとると思います。
が、一旦中断するのは面倒だし、BSキーもどれだけ押せばいいかわからないので、不便です。
こういった場合は、「CTRL+uを押す」と、入力中の内容をすべて削除できます。
間違えたかも。と思った時はあわてずにCTRL+uを押して再度入力すると、あの入力内容が見えない画面も怖くなくなると思います。

こんにちわ。 なおとです。
開発では、なにごともやってみて初めて分かるということがあるものです。 今回は、あるコンテンツに対して「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のWindowsクライアントですが、先月末に3.5のbeta版がリリースされ、今までとはだいぶ使い勝手が変わったとのことで、早速試してみました。
ダウンロードはこちらから行えます。
過去バージョンが入っている場合は、起動時に昔のDBをコピーするかどうか聞かれます。
早速起動してみたところ、

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

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

この台風18号ですが、ブログを書いている現時点では東北にあるとのことで、オフィスの窓から外を見ても雨や風はおさまっているようです。
幸いなことに、RYUSのスタッフにはこの台風で怪我をしたりした人はいなかったのですが、台風は日本列島の各地に被害を出しながら縦断していったそうで、被害に遭われた地域の復旧が少しでも早く進むことをお祈り申し上げます。
明日以降は、台風一過ということで暫くは良い天気が続くそうなので、週末などを使ってどこかに出かけてみようかと思います。
旅行などには行けないと思いますが、何か面白い体験が出来た場合は、次回のブログに書くかも知れません

前日の会場準備をしてくれた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度目です。
前日のhamacoさんのエントリもトラックボールについてだし、操作デバイスのエントリが続きます…
さて、以前使っていたキーボードは「キーボードの選択」に書いたRealForce 86Uです。
今回はmikaさんが「ほぼ理想のキーボード」で書いたLenovoのトラックポイントキーボードの英語版を試しています。

自分はノートPCでThinkPadも使っているし、以前ThinkPadのキーボードを移植したようなキーボード
スペースセイバーII(リンクの画像は日本語版ですが自分が使っていたのは英語版)も愛用していた時期があるので、
トラックポイントがついた黒いキーボードはかなり好みでした。
このキーボードの前のバージョンのようなトラベルキーボードも気になっていたのですが、不要なトラックパッドがあるのがネックになって購入はしませんでした。ですが、このトラックポイントキーボードはトラックパッドもなく、お値段も以前の半分くらいなので発表されて直ぐに発注しました。
使った感想としては、質感は悪くないです。キータッチ普通でしょうか。悪くはないです。
キーボード自体の剛性は流石にあまりないですが、そこはそれほど問題ではないと思います。
キー配列はノートに近いキー配列なので左Shiftキーの下にFnキーとCtrlキーがある配置で、結構な頻度で左のFnキーを使うので慣れないとちょっと不便かもです。
そんな話をhamacoさんに話したら「CapsLockキーをCtrlに割り当ててしまえばいいじゃないですか!」という話になりました。
今度「Change Key」を使ってキーを配置を変更してみようと思います。
総合的に使いかっては結構良いです。RealForceも良いキーボードだと思うのですが、コストパフォーマンスがいささか悪いのでなかなか人には勧めずいキーボードですが、このトラックポイントキーボードはThinkPadユーザーやトラックポイント好きな方にはかなりお勧めできる品だと思います。
今Lenovoのストアで少しセールで安くなているようなので、もう一枚、自宅用に買おうかなと思っています。
過去キーボードのエントリまとめ
キーボードの選択
キーボードの選択その2
キーボードを変えました



