« 2007年2月 | メイン | 2007年4月 »

2007年3月30日

セマンティックウェブのためのRDF/OWL入門のためのRDF/FOAF入門
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

komagataです。

先日社内の勉強会でRDFとFOAFについて話しましたので資料を公開します。

セマンティックウェブの小難しいイメージが少しでもやわらげば幸いです。

2007年3月29日

コマンドラインで作業する上で知っておくといいテクニック
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

ちょうど入社から半年で有給発生しつつも本日が退職日になりましたjokagiです.もう花見の季節ですね!!

ちょうどラボブログの当番のようで,退職記念にjokagiが普段の開発で使っているテクニックとは呼ぶにはおこがましい小手先の技をつらつら書いてみたいと思います. これを覚えればjokagi程度には仕事をこなせるかも!?

コマンドの使い方を覚えよう

基本的なコマンドの使い方やコンソールなどの使い方は書籍いろんなサイトで覚えてください. ここでは一応一通りなんとなくでもコマンドを扱える人がさらに覚えるといいかもしれないことだけを記述します.

また,これからの解説はシェルはbash,その他のコマンドの多くはGNU Toolsと呼ばれることのあるGNU findやcoreutilsなどを用いた環境でのオプション例や実行例になります.

echo

いわゆる指定された文字列を出力するコマンドですね. 知らない人も多いみたいですが,echoも実はいくつかのオプションを受け付けます.

-eバックスラッシュ(半角円記号)に続く文字を特別視する
-n最後に改行文字を入れない

grep(egrep,fgrep,pgrep),fgrep,zgrep

grepはファイル内をパターン検索(意訳的にいうと文字列検索)を行うコマンドです. ここで覚えておくべきオプションは下記のとおりになります.

-i英大小文字を等価に扱う.いわゆる「A」と「a」が同じということを表す
-r検索対象にディレクトリを指定した場合,ディレクトリ内を再帰的に検索する
-E -F -Pパターンの扱いを変える.egrep,fgrep,pgrepはそれぞれ-E,-F,-Pが指定されたときと等価の処理を行う
-v指定キーワードが含まれる行を除外する
-l条件に一致するファイル名だけを出力する

grepはアプリケーションの解析では(多分)非常に基本的かつ重要なコマンドです. 当然これだけでは見つからないものもでてきますが,結構有効です.

find

-type <TYPE>「-type f」でファイルだけを対象に,「-type d」でディレクトリだけを対象にする
-name <NAME><NAME>と一致する名前を対象にする.ワイルドカードを使うことができる
-uid <UID>オーナーユーザーのIDが<UID>のものを対称にする
-gid <GID>オーナーグループのIDが<GID>のものを対称にする
-exec <COMMAND-LINE> \;対象毎に「<COMMAND-LINE>」を実行する.「{}」を含ませると対象が展開される

sed

sedは通常行指向でテキストの置換などを行うときに使用します. しかし,通常その結果は標準出力に出てくるだけですが,-iを使用することで実際に入力に使用したファイルを置換することができます.

-i実行された置換を読み込んだファイルに実際に適用する

diff

-uCVSやsvnなどと近い書式で差分情報を出力する
-r比較として指定された対象がディレクトリだった場合,再帰的に中身を評価する
-Nいずれの比較先にだけ存在するファイルも対象とする

od

オプションに「-tx1」と指定すると1バイトずつ16進数で表示します. なぜそういう挙動になるかはマニュアルなどで調べてください.

sendmail

個人的にはメーラーとしてコマンドsendmailをオプション「-t -i」としてよく使います. その理由はPHPのmail()は通常内部で/同オプションをあわせてusr/sbin/sendmailを使用するからです. この辺について興味がある方は mail()でメールが送信できるかどうかの確認手順 - よくきたWiki やPHPのソースなどを参照してください.

vi,emacs

サーバー上で作業はできるほうがいいですね. 使ったことがないのに好みでどうぞってのは判断がなかなかつかないですね. jokagiはemacsとviは7:3位の割合で併用していますが,emacsは入っていない場合があるので,どっちがいいか判断がつかない方はviをお勧めします.

その他大体の覚えるべきオプション

すべてのコマンドが対応しているわけではないですが,おおよそのコマンドで有効なオプションです.

--オプションの終了を表す
--helpコマンドの使い方を出力する

実用例

メールを送ってみる

コマンドsendmailと併用してメールを送るテストをする
$ echo -e 'From: <from@example.com>\nTo: <to@example.com>\nSubject: test\n\ntest' | /usr/sbin/sendmail -t -i -ffrom@example.com

マルチバイトの中身(バイトストリーム)を見る

ここではechoとodを併用します.余計な改行文字が含まれないようにするためにechoには-nを,バイト表示をするためにodには-tx1を使用します.

マルチバイト文字のバイトストリームを16進数表記で調べる
$ echo -n '在籍中お世話になりました' | od -tx1
 0000000 e5 9c a8 e7 b1 8d e4 b8 ad e3 81 8a e4 b8 96 e8
 0000020 a9 b1 e3 81 ab e3 81 aa e3 82 8a e3 81 be e3 81
 0000040 97 e3 81 9f

Poderosaなど,比較的簡単に文字エンコードを変更できる場合,Poderosa側で16進数にしたい文字エンコードに変更した上で上記のようにコマンドを実行するとお手軽に調べることができる場合があります(環境によってはできない可能性もあります) また,iconvやその他を併用してもいいでしょう.

さらに文字エンコードを変更する
$ echo -n '在籍中お世話になりました' | iconv --from UTF-8 --to EUC-JP | od -tx1
 0000000 ba df c0 d2 c3 e6 a4 aa c0 a4 cf c3 a4 cb a4 ca
 0000020 a4 ea a4 de a4 b7 a4 bf
 0000030

HTMLの生成をしているファイルを特定する

「class="header"」というHTMLタグの属性っぽいものを扱っているファイルを探して出力する
$ fgrep -r 'class="header"' .

あるウェブアプリケーションが出力するHTMLの処理がおかしいときに上記のようにして調べます. おおよそそれっぽいのがでてきたら-lも併用します.

上記に引っかかるファイルのファイル名だけを出力する
$ fgrep -lr 'class="header"' .

ハードコーディングされた値があるファイルを特定する

メールアドレスやドメイン名を固定で記述しているファイルを探して出力する
$ fgrep -r 'example.com' .
$ fgrep -r 'support@example.com' .

適当に開発されたウェブアプリケーションはえてして値がハードコーディングされていることが多いです. それらを定数に置き換えるときも上記のような検索が有効です.

脆弱性を調べる

XSSになりそうなファイルを探して出力する
$ fgrep -ir '<input' . | egrep -i '\$(_GET|_POST)'

よくあるこういう出力をしているファイルを探します.

<input type="name" value="<?=$_GET['name']?>">

上記grepでこういうフォーム要素を出力している可能性のあるファイルを探します.

XSSになりそうなファイルを探して出力する
$ egrep -ir '(select|update|insert)[ \t]+\$' . | grep -iv '</?select'

これでたとえば「select * from users where id = $id」のようなSQL文字列を検索します. これらはプレースフォルダーなどを使用すれば「select ~ where id = ?」などとなるはずなので,変数名は基本的にSQL中に出てくることがないことに着目しています. また,「<select~」などのHTMLは除外しています.

ある名前のファイルやディレクトリを調べる

カレントディレクトリ配下でファイルindex.htmlを調べる
$ find . -type f | fgrep index.html

あるファイルだけ,ディレクトリだけ何々をする

emacsのバックアップを見つける,削除する
$ find . -name '*~'
$ find . -name '*~' -exec rm {} \;
ディレクトリ.svnを削除する
$ find . -name .svn -type d -exec rm -rf {} \;
オーナーがrootなファイルやディレクトリを探す
$ find -uid 0
ついrootで作ってしまったファイルなどのオーナーユーザーをjokagiにする
$ find -uid 0 -exec chown jokagi {} \;

複数のファイルの内容を一気に置換する

「sjis」をすべて「Shift_JIS」にする
$ sed -i 's/sjis/Shift_JIS/g' `grep -irl sjis .`

多分覚えておくといいこと

文字列のクォートについて

文字列をダブルクォートすると,シェルが文字列を評価する場合があるので(「$」とか)個人的にはなるべくシングルクォートを使うことをお勧めします. また,クォート文字を含んだ検索をする正規表現など,エスケープ処理が複雑になってくるとシェルのためのエスケープか正規表現(あるいはその他のための)正規表現かわからなくなってしまうことがあります. そういう時は素直にオプション値をファイルにして読み込むという手段もあります.

コマンドの実行結果をオプション値として取り込む

上記のようにコマンドの実行結果をオプション値で取り込むと便利なことがまれにあります. 実行結果をコマンドラインに取り込む方法はそれ自体をバッククォートでくくることで実現できます.

jokagiがよくやるのは下記のようなパターンです.

拡張子が「.html」のファイルを全部emacsで読み込む
$ emacs `find -name '*.html'`

ファイルがあまりに多いときはより厳密に絞り込むほうがいい場合もあります.

最後に

半年間ではありますが,ウノウでは多くのことを勉強をさせていただきました. jokagiは本日で退職ですが,ノッキングオンという会社に移籍をすることになります. ノッキングオンは広告キャンペーン携帯アフェリエイトなどを運営している企業です. 今後ウノウとノッキングオンはいろいろな面で協力をしていこうということになっていて,今後は両社でいろいろな価値を作って行くことになると思います.

また,jokagi個人もノッキングオンでもウノウ,あるいはこのウノウラボのように自分たちが考えたことを,自分のノウハウを世間と共有できるようなコンテンツや価値を作って行きたいなぁと思います. これから改めてみなさまよろしくお願いいたします. それではあでゅー.

2007年3月28日

人見知りな技術者のプレゼンの準備方法
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

Keita です。
先日、enNetForumという所で、Wikiについてお話させていただきました。

僕は、どちらかというと、引きこもりたい人間で、人前で話しをするのは苦手です。
しかも、今回は、Wikipedia創始者 Jimmy Donal Wales氏 の後で話すということで大変緊張しました。
しかし、当日は、わりとちゃんと準備したおかげか、それなりに、ちゃんとお話できたかと思います。

そういうわけで、僕のような人見知りが、どのようにして、プレゼンを準備したかを今回はお話させていただこうと思います。

ネタを蓄積する

今回、僕は、自分のサーバのWikiにテーマである、Wikiの社内共有のネタを大量に蓄積しました。 この作業はお昼休みや帰宅したとき思いついたときにちょこちょこ書き足していました。 内容は、まとまっていなくてもとりあえず書いていくのがいいようです。 とにかく思いついたことを書いていきました。

実は、この作業は実はプレゼンの時じゃなくて、僕は普段の生活でもたまにやっていて、僕の中では「一人ブレスト」と呼んでいる作業になります。

調査する

ほかの人が、同じようなテーマでどんな話をしているかとか、その周囲のコミュニティがどのような空気かを調べました。 といっても、実はこの作業は、以前、原稿を書いたときに調査したので、それほど時間はかかりませんでした。

自分が何を伝えたいかを考える

ネタが蓄積された後、このまとまりのないネタの中から、自分の中の方向性を見出していきます。 方向性は1つでなくてもかまいませんが、必ず、短文であらわせるくらいにまでは、いいたいことをまとめておく必要があります。 今回の例でいえば、「Wikiにはモデレータが必要」とかそういったものです。

プレゼン資料を作る

本当は、PukiWikiに、S5を組み込んでPukiWikiだけでプレゼンを行いたかったのですが、手を入れている時間がとれず仕方がなくPowerPointで資料を作成しました。 しかし、PowerPointに触る時間は可能な限り短くしたかったので、PukiWikiに下書きをしてからそれを、手動でインポートするような流れにしました。

下書きを完了したときに、その内容で正しいか、裏を取る作業もしました。
あと、社内のMLに、投げて時間があるときに見てといったら、多数の人から意見がありこれも非常に参考になりました。

練習をする

練習は計2回やりました。 「練習やるとき付き合うよ」といってくれた同僚もいたのですが、35分間、相手の時間を拘束するのが申し訳ないなと思って、定時後、社内の会議室で一人練習を始めると、「おー練習ですか」といって、別の同僚が1人付き合ってくれました。 実際、口に出して練習してみると、かなり内容が伝わりにくいことが自分でもわかって、30分くらいかけて、内容を大幅に修正しました。

その後、2回目の練習の時には、別の同僚2人がつきあってくれました。
内容的には、1回目よりましだったのですが、やはり、わかりにくいところがあり、また同僚が積極的に提案してくれたので、その部分を修正したりしました。

プレゼンに慣れている人ならともかく、慣れていない人は最低でも2回は、通しで練習するべきだと痛感しました。

本番

本番は、Wikipedia創始者 Jimmy Donal"Jimbo" Wales氏の講演の後に僕の番でした。 氏のプレゼンは、非常にエキサイティングな内容で、正直、緊張しました。

こういう時は、プレゼンを始める前に、軽い冗談とかを言うと自分の緊張がほぐれます。

正直、言えば、氏のプレゼン中、どういう冗談を言おうかということで頭がいっぱいでした。
あとはしゃべる時には、可能な限りゆっくりしゃべることだけを心がけました。

結果はどうだったかというと、そこまで、ひどくはなかったつもりです。


今後やってみようかと思うこと


今回、本当は、高橋メソッドを使うつもりでした。どうしても、自分の伝えたいことが、高橋メソッドに落とし込めなかったので、楽なプレゼン手法を使いましたが、今後は、積極的に使っていきたいと思います。
また、日本の技術周りのプレゼン手法はなんか恐ろしいほど進化しているので、そういったプレゼン手法も取り入れて、自分なりのプレゼン手法を確立できればなと思いました。

最後に

今回のプレゼンの資料はPDFでアップロードしておきます。 また、今回、利用させていただいた。PukiWikiのコミュニティの皆様と協力してくれた人に感謝を。

もし、こういうプレゼンの方法がいいんじゃない?とかありましたら、教えていただけると助かります。

ご参考になれば幸いです。

2007/03/30追記

資料は、pptファイルを、Oo.oで開いて保存しました。 なお、本資料に関してはクリエイティブコモンズ - 表示のライセンスで配布いたします。 Creative Commons License

2007年3月27日

Flickr2PhotoZouを公開します
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちわ、hideです。
先日のエントリにある通り、2泊3日で開発合宿に行ってきました。僕は「1日1サービス」を目標に掲げて合宿に望んだのですが、なんと風邪でダウンしてしまい真ん中の日は丸々寝てました。

そんな状況ではあったのですが、Flickr2PhotoZouというFlickrの写真をフォト蔵にインポートするツールを作りました。もともとFlickrの無料アカウントが200枚制限に達してしまったため、その写真を移行したくて自分用に作ったものなのですが、せっかくなので公開します。


http://flk2pz.demos.unoh.net/


Flickr2PhotoZou


【使い方】


  1. フォト蔵にログインするためのメールアドレスとパスワードを入力してください。
  2. Flickrにログインしていない場合は、ログイン画面が表示されるのでFlickrにログインしてください。
  3. Flickr2PhotoZouへアクセスを許可するために、「OK, I'LL ALLOW IT」ボタンをクリックします。
    (写真の情報を取得するのみで、Flickrのパスワード情報が伝わることはありません。)

以上で終わりです。
インポートにはしばらく時間がかかりますので、完了通知メールが届くのをお待ちください。

2007年3月23日

未熟なバイトが開発合宿で得たもの
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

はじめまして。先月からアルバイトとして働いているmatsumotoです。

今月初め(3月2日~4日)に実施した開発合宿のお話をさせていただきます。
これから開発合宿を検討されている方の参考になれば幸いです。

まず、参加したのはアルバイトを含む13人。合宿の舞台は晴海グランドホテル。

初めにブレストを行い何を作るか確認する。ということをしました。不肖ながら私が司会進行をつめさせていただきました。

作ろうとしている物の発表をし、皆でアイデアを出し合い色々発展させていきました。それを通してその人はどういう人なのかを改めて再認識させられる事もしばしば・・・

さらに普段の会議などにはない気軽な雰囲気も助け皆口々に意見が飛び交います。集団の中で意見を言う大事さを実感しました。

また司会をさせていただくことによって会議を進めていくということの難しさ。というのも知ることが出来ました。

普段の会議で話を聞く側にいらっしゃる方は開発合宿でブレストをするとき是非司会進行を立候補してみるのがいいと思います。

会議をしている立場の人の大変さも実感できます。相手の意見を聞きだしたり話をうまく切り返し、途切れさせずにするのはとても難しい!

他にも普段は違うプロジェクトの方とお話しする機会がありました。すると、その人とすごく気が合うことに気づきました。今ではゲームセンターに一緒に遊びに行く仲です。思いがけない出会いに感謝です。

私はウノウに入ってまだ日は浅いのですが開発合宿によって皆さんとの間の距離を少し縮めることができたんじゃないのかな?と感じています。合宿以来たしかに会社の中での自分の立ち位置が変わったと思います。もちろんいい意味で。

最後に今回の合宿で作成した物のスクリーンショットを何枚か頂いたので軽い説明と共にご紹介させていただきます。

komagataFOAFのウィジェット

komagata_camp200703
komagata_camp200703 posted by (C)フォト蔵

Hatenaやmixiのプロフィールを吸い出して表示するBlogパーツです。自分の友達が表示されどんどん友達を辿っていける感じです。Blogでmixi感覚を味わえそうですね。

現在は適応できるサービスに限りがあるらしいですが、将来的には自分で任意のサービスのプロフィールを吸い出せるようになるらしいです。

yamaoka本でつながる

yamaoka_camp200703
yamaoka_camp200703 posted by (C)フォト蔵

ISBNを登録するとAmazonからその本のデータを吸い出して表示してくれます。同じ趣味をもつ人同士がつなげることができます。

ブレストでは「読み終わった本をランダムで送りつけて布教するってどうよ?」と言う意見もありました。実現できたら面白いですね。

honda写真を分解してリンクをつなげる


フォト蔵APIを使ったスクリーンセーバー。ランダムでフォト蔵の写真を取ってきてRGBをピックアップし、似たような色合いの小さなサムネイルで置き換えてピクセル画を作るサービスです。

将来的には、タグ分類などで、置き換えられるサムネイルが元画像と関連したテーマになると面白いと思います。ぜひ完成させてフォト蔵のサービスとしてリリースして欲しいです。

emoto遺伝的アルゴリズムを用いたシミュレーション

emoto_camp200703
emoto_camp200703 posted by (C)フォト蔵

フィールド上には毒キノコと通常キノコがあります。最初配置されているキャラクターは何も知らない状態です。その状態から何度か世代交代をし、学んでいって最後には毒キノコを避けるキャラクターが現れだします。

難しいアルゴリズムを使っているらしく、ぜひ今度勉強会で披露していただきたいと思いました。

MODブログの更新頻度をランキング化

mod_camp200703
mod_camp200703 posted by (C)フォト蔵

現在どのBlogが頻繁に更新しているかが人目で分かるサービスです。ブレストではさらに「コメント数やトラックバック数などもチェックして、そのBlogの盛り上がりをはかれたら面白いね。」という話が出てました。

matsumotoアドベンチャーゲームエンジン

matsumoto_camp200703
matsumoto_camp200703 posted by (C)フォト蔵

アドベンチャーゲームを作るツールを作ってみました。ただ作るだけでは面白くないので弊社のCEOとCTOの出会いを再現してみたいと思いました。

しかし僕は二人の出会いについて何も知らないので想像で作ってみました。今度のみに行ったときに二人の出会いについて詳しく聞いてみたいと思いました。

以上で終了とさせていただきます。次の開発合宿の報告をお楽しみに。

一人の人を幸せにすることで、より多くの人を幸せにするサービスを考える。
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

Sashaです。気がついたら自分の生活の一部だった。そんなサービスが人に小さな幸せを生み出します。そんなサービスを作ることが出来たらいいですよね。

でも、人っていっても、色々いますよね。私たちは、だれの生活を思い浮かべたらいいのでしょう。

UIという文脈の中で、ペルソナ(personas)という言葉の意味を聞いたことがありますか?ペルソナは、マーケティング、デザイン、製品開発など幅広い分野で、顧客中心思考を実現するためのひとつのキーワードとして論じられています。

UIに関していえば、樽本徹也氏が「ユーザビリティエンジニアリング」という本の中でこの言葉について説明されていますので、ご紹介させていただきます。

ペルソナとは、UI設計の中で設計チームの意思決定のよりどころとなる「ユーザ像」をさします。「だれのためのサービスか」、を明らかにすること。当たり前のようなことですが、日々、バグやクレームや締め切りに追われる開発者たちにとっては、本当に忘れやすいポイントだということを、私もよく実感します。

ペルソナは、実在する人物でも、私たちが勝手に作り上げる人物でもなく、「発見するもの」です。樽本氏はペルソナを構成する以下のような手順を紹介しています。

1. 数十名規模でインタビューを実施する
2. 同じようなニーズや目的を持っているユーザーを、グループ化する
3. グループごとに、ライフスタイル、ITリテラシー、サービス利用の目的などを踏まえてユーザ像(ペルソナ)を定義する
4. このペルソナを持った人物に、"もっともらしい"個人情報をつけてあげる(キャラクター誕生!)

例えば、

右脳優子さん(35歳)
主婦。最近ちょっといいデジカメを買った。決してプロレベルの写真ではないけれど、自分の写真の中の一人息子の笑顔をたくさんの人に見せたくてフォト蔵を利用。ネットサーフィンや情報収集のためにPCには毎日短時間ずつ触れている。

左脳秀蔵さん(29歳)
IT企業に勤めるプログラマ。ネットには四六時中つながっていて、職業的興味から暇さえあれば新しいサービスを試している。最近フォト蔵のAPIをつかって何か面白いことが出来ないか模索中。

その他数名・・・。


5. ペルソナに優先順位をつける!!

私たちは、優先順位の「最高値」をつけられたペルソナ、つまり、プライマリペルソナを、セカンダリペルソナより、「えこひいき」しなければならないんですよね。もちろん、セカンダリペルソナを排除しなければならない、ということではありません。限られた時間でより多くの人々の生活にとって「なくてはならない」サービスを作るには、『より多くのニーズ』を満たすよりも、『より多くの人のニーズ』を満たして「お得意さん」になってもらう必要があります。でも『より多くの人のニーズ』が実際に『多すぎるニーズ』であると、事業は方向性を見失ってしまうものです。ですから、『より多くの人を代表する、一人の人のニーズ』に意識を集中させる必要があるのです。サービスの方向性で重要なのは、「どのキャラクターからの要望」なのかを議論すること。多様化するユーザーニーズにいきあたりばったりに対応しようと思っても、相反する要望が出たときに行き詰ってしまいますが、ペルソナを使えば迅速な意思決定が可能になるかと思います。

ちなみに、「右脳優子さん」と「左脳秀蔵さん」を紹介するにあたり、私は手順の1番目の「インタビュー」を実際に行ったわけではありません。この点でこの二人のキャラクターは「勝手に作り上げられた人物」であると突っ込まれるかも知れませんが、この二人のキャラクターは実際にフォト蔵ユーザーの中に存在するペルソナですし、そもそもここで話しているサービスにしてもこの記事を書くための一例ですので、大目に見てください。

フォト蔵の場合、右脳優子さんは左脳秀蔵さんより多くのユーザーを代表しています。ですので、右脳優子さんのニーズは左脳秀蔵さんのニーズより比重を置かれるべきです。より多くのユーザーを代表するペルソナを作れば、「より多くの人を幸せにする」というとても複雑な事業目標も、「まずは右脳優子さん一人を幸せにしよう」というシンプルなものに整理され、方向性がブレにくくなると思います。

まずは、右脳優子さんの生活を思い浮かべてみる。どうやったら、ひとつのサービスがこの人の生活の一部になれるのでしょうか。どうやったら、この人を「ちょっと幸せ」にできるのでしょうか。

『まずは、一人の人を幸せにしよう』

それをいつも考えていようと思います。


2007年3月19日

ウノウラボブログが1歳になりました!! - ウノウラボブログを通して思った事感じた事
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

尾藤正人です。

ウノウラボブログの最初のエントリから始まってウノウラボブログもとうとう1歳になりました。 最初は購読者数も少なかったラボブログですが、今では購読者数も増え多くの方に読んでいただけるブログに成長する事ができました。 これもひとえにいつも読んでいただいてる読者の方のおかげだと思っています。

今日はラボブログ1周年を迎えた記念に、この1年を通して感じた事、思った事などをつらつらと書いていきたいと思います。

開発合宿の成果報告場から情報公開の場へ

ウノウでは2ヶ月に1回ぐらいのペースで開発合宿に行っています。 当初ラボブログは開発合宿での成果を公開する目的で始めました。 ですが、開発合宿の成果をそうそう頻繁に出すのは難しいのでどうしようかという話になり、だったら開発合宿の成果だけに留まらずどんどん情報を公開していく場にしようということで、エントリを書き始めました。

OSSから影響を受けた公開に対する強い思い

ウノウではオープンソースソフトウェアを多く使用しています。 僕も昔はVine Linux SPARC版の開発をやってた時期とかもあり、オープンソースソフトウェアが大好きです。 コミッターは自分の時間を削って有意義なソフトウェアを無償で提供してくれています。 その恩恵で給料をもらって生活しているわけですから、もらいっぱなしはよくない。 公開できるものはどんどん公開してコミュニティに還元するべきだという強い思いがありました。

1日1エントリ

ラボブログでは1日1エントリを目標にエンジニア、デザイナ、テスターで持ち回りで書いています。 当初「書きたいエントリがあった時に書きたい人が書く」という方法も提案されたのですが、それでは絶対に続かないと思って持ち回り制にしました。 ブログの場合はネタが新鮮かどうかも重要なので、ネタがある時に先に書くのは問題ありません。 その場合は自分の順番が来た時に飛ばして次の人が書くようになってます。

ちょっとした報酬

ラボブログではてなブックマークで100以上のユーザを獲得するとamazonギフト券3000円がもらえるようになってます。 人気エントリを書くと本が1冊購入できるというようなイメージです。

人気エントリにはそれほどこだわらずに

人気エントリを書くと嬉しいのですが、そこにはそれほどこだわりを持たないようにしてます。 まとめ系のエントリを書くとたくさんブックマークしてくれたりするのですが、だからといってまとめ系のエントリばっかり書くと中身の薄いブログになってしまう。 ラボブログ賞を高額に設定しなかったのは、適度なインセンティブを提供しつつ、ブックマーク数にそれほどこだわりを持って欲しくなかったからです。

小さな挑戦のきっかけに

通常業務の中でたんたんと仕事をこなしているだけでは、新しい事に挑戦する事ができません。 IT業界は変化が激しいですから、どんどん新しい知識を吸収していろんなことに挑戦していかないと、すぐに置いてけぼりにされてしまいます。 ブログのエントリを書く事が、普段と違ったことをやったり、新しい情報を調べたりすることのきっかけにすることができます。 時には至らない点もあってするどい突っ込みをいただく事もありますが、失敗を通して自身の成長に繋げる事ができます。

実は社外だけでなく社内の情報共有になる

基本的に社外に向けて情報公開していますが、一人一人持ってる知識に違いがあるので、実は社内での情報共有に一役買ってます。 ウノウの社員同士でもお互いのエントリをブックマークしたりしてます(自作自演という意味ではなく)。

ウノウの名前を多くの方に知ってもらうようになった

ラボブログのおかげで多くの方にウノウの名前を知ってもらえるようになりました。 ウノウの本事業の事は知らなくてもラボブログを読んでくれている方も多数います。 ウノウラボがウノウとは別会社だと思われる事も。 ウノウ本体の事業ももっと頑張ってウノウラボよりも有名になるように頑張ります!!

リクルーティングに効果大!!

弊社に応募してくる方でラボブログを読んで応募されるという方が増えてきました。 他のIT企業の方とお話すると、どこの会社さんも優秀な人材確保に苦労されています。 弊社の場合は他社さんと比べて比較的多くの優秀な人材を確保できていると自負しています。 それもラボブログで積極的に情報公開してきたおかげだと思っています。

Give&TakeはGiveから始まる

GiveせずにTakeだけしても何も得る事はできません。 提供できる物はどんどん提供しましょう。 最終的にはそれ以上のリターンが得られます。 公開する事から全ては始まります。

まとめ

ラボブログをやってきた思ったのは「よかった」という一言につきます。 ラボブログを通して数多くのものを得る事ができました。

「御社はよくあそこまで情報公開されますね」と言われる事がよくありますが、それは企業側の利権しか考えてないからじゃないでしょうか。 もちろんそれ自体は全然悪い事ではないのですが、もっと広い視点で考えてみたら良いと思います。 情報を積極的に公開してよりよいサービスがたくさん出れば、もっとたくさんの人がハッピーになれる。 ITはそういう風に発展してきたはずだし、僕らはその恩恵で給料をもらって仕事をしているのですから、それを何らかの形で還元しようとするのはごく自然の発想ではないでしょうか。

今後もウノウラボブログでは積極的にいろんな情報を公開していきたいと思います。 これからも暖かく、時には厳しく見守っていただければ幸いです。

2007年3月18日

[書評] こんな僕でも社長になれた
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんばんは、naoya です。

今日は、献本でいただきました「こんな僕でも社長になれた」を読みましたので、レビューさせていただきます。

この本は、家入さんの自伝書です。家入さんは、現在格安で好評のレンタルサーバロリポップ!などを運営されている(株)paperboy&co.の社長さんです。

あらすじを紹介すると、家入さんの幼年期から起業されるまでの家入さんご自身の人生体験が細かく書かれています。一度この本を読み始めると、とにかく面白くて一気に読んでしまいました。ところどころ僕の幼年期の体験と近い体験があったので、共感しつつそのときの家入さんの気持ちをすこしだけかもしれませんが理解できたような気がしました。

家入さんが起業された後の体験記も、とても興味深く読みました。これから起業する人、起業したばかりの人は必読だと思いました。

ウノウでも、ロリポップ!と同じようにこれからユーザの皆さんに楽しんで使ってもらえるサービスをたくさん開発していきたいと思います。

こんな僕でも社長になれた
家入 一真
ワニブックス (2007/02)
売り上げランキング: 1222
おすすめ度の平均: 5.0
5 感動的な一冊


2007年3月16日

サーバの監視に関する記事をThinkITに寄稿しました
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは satoです。

以前紹介しました監視に関する記事ですが、ThinkITに寄稿しました。

各種ツールで運用・監視の手間を削減

紙面の関係で、大雑把にしか説明できていないですが、参考になれば幸いです。

2007年3月14日

専用サーバを構築するときにまず行う4つの設定
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんばんは、最近寒い夜が続いていて自転車通勤がつらくなってきた naoya です。

ウノウでは、フォト蔵や社内システムなどは、すべて専用サーバを構築して運用をしています。

今日は、専用サーバを構築するときに、僕がウノウで学んだ専用サーバでまず行う4つの設定を紹介します。

なお、今回の設定はすべて Fedora Core 5 をもとにしています。

(1) sudo を使えるようにする

sudo コマンドを使えるようにします。sudo コマンドは、別のユーザとしてコマンドを実行できるコマンドです。

sudo コマンドを使えるようにするには、/etc/sudoers に sudo を許可するグループを追加します。次の例は、unoh グループを追加する例です。


%unoh ALL = (ALL) ALL, !/bin/su, /bin/su postgres, /bin/su * postgres


(2) su を使えないようにする

su コマンドでスーパーユーザになるのは便利なのですが、一度 root になってしまうと誤って重要なファイルを削除しまうことがあるため、su コマンドでスーパーユーザになれないようにします。この設定をすると、スーパーユーザになるには sudo を使うことしかできなくなりますので、注意してください。

su コマンドを使えないようにするには、/etc/pam.d/su ファイルの次の行をコメントを外します。


#auth required pam_wheel.so use_uid


(3) root のパスワードを削除する

root でログインできないように root のパスワードを削除します。

root のパスワードを削除するには、/etc/shadow ファイルの root のパスワード部分に「!!」と変更します。次のような内容になります。


root:!!:13410:0:99999:7:::


(4) iptables を設定する

最後に iptables を設定して、不要なポートにアクセスできないように設定します。 基本的なポリシーとしては、次のようになります。

  • 外部からの接続は、基本的にすべて拒否するが、ローカルネットワーク内からの接続は許可する
  • ポート転送は許可しない
  • ローカルホストからの接続は、すべて許可する

最初に、すでに定義されている INPUT チェインを削除します。


$ sudo /sbin/iptables -P INPUT DROP

次に、外部からの INPUT チェインを定義します。INPUT チェインを定義するには、次のコマンドを実行します。このコマンドの意味は、「サービスに対して接続が確立した場合は、それ以降のパケットを通過させる」ということになります。


$ sudo /sbin/iptables -A INPUT -i all -m state --state ESTABLISHED,RELATED -j ACCEPT

次に、ローカルホストからの接続は許可するように設定します。


$ sudo /sbin/iptables -A INPUT -p icmp -j ACCEPT
$ sudo /sbin/iptables -A INPUT -i lo -j ACCEPT

次に、ローカルネットワークからの接続はすべて許可します。


$ sudo /sbin/iptables -A INPUT -s 192.168.1.0 -j ACCEPT

あとは、お好みで必要なサービスのポートを開放します。例えば、SSH のポートを開放するには、次のコマンドを実行します。


$ sudo /sbin/iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

最後に、今まで作成した iptables のルールを保存して、iptables を再起動します。


$ sudo /etc/init.d/iptables save
$ sudo /etc/init.d/iptables restart


以上の4つの設定を行うと比較的専用サーバでセキュリティを確保することができると思います。

また、こんな設定も便利などありましたら、ぜひ教えてください。

# 2007.03.18 追記

たくさんのフィードバックありがとうございます。 フィードバックを元に、修正と追記をさせていただきます。

(1) sudo を使えるようにする

/etc/sudouser を直接そのまま編集するよりも、visudo コマンドを使うとより安全へに編集できるようになります。また、編集内容も次の内容で十分です。


$ sudo visudo


%unoh ALL = (ALL) ALL, !/bin/su

(3) root のパスワードを削除する

/etc/shadow を直接そのま編集するよりも、vipw コマンドを使った方がより安全に編集できるようになります。


$ sudo vipw

(4) iptables を設定する

次のコマンドの意味を「すでに定義されている INPUT チェインを削除します」と火書きましたが、「INPUT チェインポリシーを DROP に変更する」という意味でした。チェインポリシーを DROP に変更すると、iptables で指定されているポート以外に接続されたときには、接続を拒否するようになります。


$ sudo /sbin/iptables -P INPUT DROP

iptables を再起動するときは、init.d にあるシェルスクリプトを実行すると、service コマンドを使った方が便利です。iptables を再起動するには、次のコマンドを実行します。


$ sudo /sbin/service iptables restart


また、専用サーバを構築するときには、メンテナンスのために ssh を使うことが多いと思います。ウノウでも ssh を使って、専用サーバのメンテナンスを日々しています。

なので、今回の追記にあわせて ssh の設定も書きたいと思います。ssh の標準状態ではパスワード認証が有効になっています。パスワード認証が有効になっていると、パスフレーズの総当たり攻撃に対して弱いので公開鍵認証のみに変更します。公開鍵のみ認証にするには、ssh の設定ファイル /etc/ssh/sshd_config に次の行を追記します。


PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no

また、ssh のプロトコルバージョンが標準の設定では、1 と 2 ともに有効になっていますので、2 だけに変更しています。プロトコルバージョンを変更するには、/etc/sshd/sshd_config ファイルの Protocol の行を 1,2 から 2 に変更します。

あとは、ssh を再起動するだけです。ssh を再起動するときは、設定ミスがあるかもしれないので、必ずターミナルで ssh で専用サーバに接続している状態で再起動すると安心です。ssh を再起動するには、次のコマンドを実行します。ssh を再起動したあとは、別のターミナルで ssh で接続して問題がないことを確認します。


$ sudo kill -HUP `cat /var/run/sshd.pid`

最後のトピックスとして、設定ファイルを編集するときには必ずオリジナルのファイルをバックアップしておいた方がいいです。ウノウでは、設定ファイルのオリジナルのファイルは必ずバックアップしています。オリジナルのファイルをバックアップしておくと、何か設定ミスがあった場合原因を特定しやすくなります。

本エントリにいくつか間違いがあって申し訳ありませんでした。今後もウノウラボをよろしくお願いします!

2007年3月13日

テストという名前のワインを入手する方法
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは!やまもと@テスト番長です。

最近次第に春めいて参りました。
そろそろ巷は卒業シーズンかと思われます。
この春ウノウを卒業するQAスタッフはおりませんが、
時期的に贈り物やらアルコールやらが活躍する時ですね。

今回はテストという名前のワインを手に入れる方法をご紹介します。
そういう名前のワインが世界のどこかにあるのかというと、恐らくありません。
完成品の名前にはさすがに付けられない単語のようですね。。。

無ければ、作ってしまいましょう。
QAエンジニアへの贈り物にどうぞ。

1) ワインとサインペンを用意する。

「EST! EST!! EST!!!」というワインと、サインペンを一本用意します。 エスト・エスト・エストは自分のような庶民が普段手をつけても心が痛まないような、 お値打ちで良い白ワインです。機会があれば是非一度お試しを。

テストという名前のワインを入手する方法 1)
テストという名前のワインを入手する方法 1) posted by (C)フォト蔵


2) 「T」の文字を書き加える。


「EST!」→「TEST!」にしてしまいましょう。
一文字書き加えるだけであら不思議、テストという名前になってしまいます。

テストという名前のワインを入手する方法 2)
テストという名前のワインを入手する方法 2) posted by (C)フォト蔵


3) 出来上がり。


裏のラベルもお忘れなく。

テストという名前のワインを入手する方法 3)
テストという名前のワインを入手する方法 3) posted by (C)フォト蔵


#たまにはネタもご披露ということで。

2007年3月 9日

1時間で作る簡易スクリプト言語(JavaScript)
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

さかとくです。最近では、JavaScript上でJavaバイトコードが実行できたり(Orto)、JavaScriptでScheme(jsScheme)が動いたりと、とても楽しい状況ですね。ブラウザさえあれば、その上でいろんなプログラミング言語を体験することができるのですから!

私も、これまで、マクロ言語やスクリプト言語をいくつか作ってきました。(代表作は、音楽のプログラミング言語「サクラ」や、日本語プログラミング言語「なでしこ」などです。)今は、ブラウザ上で動く日本語プログラミング言語を開発中ですが、これはまだ見せられる状況ではありません。

そこで、ウノウラボを書くのに与えられただろう時間(約1時間)で、オリジナルのプログラミング言語を作ってみようと思います。もちろん、JavaScriptだけで。

では、はじめてみましょう!

(1) コンパイラコンパイラをゲットする

はじめに用意するのは、コンパイラコンパイラです。これは、文法規則を与えると、自動的にプログラミング言語のソースコードを吐いてくれるというとても便利な道具です。今回は、時間も限られているので、とにかく、Googleで「javascript コンパイラコンパイラ」で検索してみます。

すると、弊社CTOの尾藤が書いた、「ベイエリア情報局: Javascriptも出力できるコンパイラコンパイラ」が見つかりました。既に「JavaScriptなでしこ」なる言語を作って公開しているようです。

その時、使ったのが「kmyacc - 多言語対応LALRパーサー生成系」のようで、時間もないのでさっそく、これをダウンロードして、マニュアルを見ながら、Cygwin上でmakeしてみました。何の障害もなくインストール完了です。でも、よく見たら、実行ファイル版(VC++版)もあるようなので、自分でmakeしなくてもよかったのです。いきなり時間浪費してしまいました。

(2) サンプルを研究する

次に、用意されているデモプログラムのソースを見て、だいたいの感じをつかみます。幸いなことに、文法の定義方法は、Yaccとほとんど同じようです。本来なら、Yaccの使い方も解説したいところですが、何しろ1時間と限られていますので諦めます。Yaccが分かれば、ほとんど悩むことなしに、kmyaccを使いこなせるでしょう。

(3) 変数が使えるようにする

次にサンプルをコピーして適当に文法を付け加えていきます。サンプルでは、四則演算ができるだけのものでした。そこで、とりあえず、変数が使えるように、代入の定義を追加してみます。

start : lines { parser_result = $1; }
      ;
lines : /**/            { $$ = null; }
      | line            { $$ = $1; }
      | lines EOL       { $$ = $1; }
      | lines EOL line  { $$ = $3; }
      ;
line : expr
     | let
     ;
let : WORD '=' expr   { variables[$1] = $3; }
    ;
expr  : expr '+' expr { $$ = $1 + $3; }
      | expr '-' expr { $$ = $1 - $3; }
      | expr '*' expr { $$ = $1 * $3; }
      | expr '/' expr { $$ = $1 / $3; }
      | expr '%' expr { $$ = $1 / $3; }
      | value
      ;
value : NUMBER     { $$ = $1; }
      | WORD       { $$ = variables[$1]; }
      ;

まず、複数行のプログラムを読めるように、linesという定義を加え、次に、「WORD '=' expr」という定義を追加したのです。

(4) タイムアウト

・・・と、このような感じで、1時間終了です。やはり、1時間では、変数が使える電卓が限度のようです。もう半日あれば、変な言語に改良できるんでけど、これは、またの機会にしてみます。


ここまでで作ったものは、以下のような感じです。
[calc]ボタンを押すと計算できます。

→変数の使える電卓

2007年3月 8日

2006年度上期未踏ユース成果報告会に参加してきました
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

尾藤正人です。

2/17-19の三日間に渡って行われた2006年度上期未踏ユース成果報告会に参加してきました。 遅くなりましたが、いろいろ面白い成果物がいっぱいあったので、 今日はそれをレポートしたいと思います。 全て紹介してたらかなりの長文になってしまいました。

1日目

スプラインスキャン法による曲線認識とその応用

スプラインスキャン法というのを用いると線を自然に認識して、線の繋がりや流れも認識できるようになるとか。 OCRへの応用等が考えられているそうです。

採択者はaltpaperという紙ベースのデータを自動で認識するシステムを開発している株式会社情報基礎開発で働いていて、 今回開発システムはaltpaperにも組み込む予定だそうです。Altpaperも未踏の開発成果物の一つです。

FileUtils-URI: ローカルファイルにWebコンテキストを付加するためのライブラリの開発

インターネットからファイルをダウンロードすると、 そのファイルをどこからダウンロードしたのかがすぐに分からなくなってしまいます。 そこで、ファイルにオリジナルのURIのメタ情報を付加しておくというのが提案者のシステムです。 オリジナルのURIのメタ情報を付加する事で、 そのファイルがどこからダウンロードされたのかすぐに分かるようになります。

現在メタ情報はディレクトリの中に入っており、 ファイルを動かしてしまうとメタ情報がそのまま引き継がれないという問題点があります。 Rubyのライブラリを用意していて、 そのライブラリ経由でファイルの移動をすると大丈夫なんですが。 また、ファイルをダウンロードした時に自動的にURI情報が付加されないので、 自分で手動でつける必要があります。 使いやすさがもう少し向上すると良いですね。

「あと一歩の勇気」を引き出すコミュニケーションインターフェースの開発

傘連判状というのを用いたコミュニケーションインターフェース。 傘連判状というは全然知らなかったんですが、昔一揆とかを起こす時に、 リーダが誰かばれるのを防ぐために放射線状に署名したものだそうです。

何か議論を重ねる時に声の大きい人の意見が通りがち。 傘連判状のように全員が平等の立場であれば、 コミュニケーションが円滑に進むのではないかというのが提案者の考えです。

作ったシステムは画像上の好きな位置でチャットができるlock-on-chatシステム。 発言者の名前が傘連判状のように放射線状になって表示される。

僕はこういうコミュニケーションツールはWebとの親和性がかなり高いと思っています。 現在Web版は開発中とのことなので、期待したいところです。

P2Pセキュアファイル共有システムにおける新共有機能の実現

唯一の女性採択者。 鍵を用いてローカルのネットワーク上でファイルを共有するためのシステム。 鍵の存在が全面に出てるので、初心者にはちょっと使いづらかったり、 ドラッグ&ドロップでファイルのコピーができなかったりするので、 もう少しインターフェースがよくなって使いやすくなるといいですね。

CPUとGPUを用いる高速数値計算ライブラリ

最近のマシンには高速なGPUが付属しています。 このGPUを描画にではなくCPUが行う演算の代わりに使ってしまおうというのがGPGPUです。 提案者はCPUとGPUを用いて並列計算させることによって、 行列積和の計算を高速に行う事ができるライブラリを作りました。 このライブラリが広く使われるようになって、 いろんな処理が高速に行われるようになるといいですね。

ライブラリが公開されています。
GPUPC

ブックマーク連携型検索エンジン「netPlant」の開発

ユーザのブックマークと連動させる検索エンジン。 こういう視点の検索エンジンって面白いですね。 まだ公開していない現在開発中の新しい検索インターフェースを見せてもらいましたが、かなりかっこ良かったです。 Flashで作られていて、こういうかっこいいインターフェースだと使ってて楽しいですね。

最初ブックマークをただ単純に集めようとしたんだけど、それはうまくいかず。 そこでswimmieというFirefoxのプラグインを作ってブックマークを共有する機能を提供する事で、ブックマークを集めることに成功したそうです。 こういう戦略を途中で変更して結果を出すというのは大変素晴らしいですね。

netPlantは今後事業化を目指すそうです。 若いのに非常に勢いがあります。 今後に期待したいですね。

2日目

SMILES記法を利用した薬物設計支援ツールの開発

SMILES記法というのを初めて知りました。 化学的な物質の構造を表記する方法だそうです。 炭素とか酸素のような原子がどういう風に繋がっているのかをSMILES記法を使って表すのだとか。 SIMILES記法だけを見ても何がどうなってるのかは全然分かりません。 そこで提案者はSMILES記法から可視化するシステムを作成しました。

よくわからないんだけど、いろんな化学物質を可視化して見せてくれました。サリンとかw。 C60もちゃんと表示されてた。

こういう特定の分野の専門家で、かつプログラムが書ける人ってなかなかいないんですよね。 このシステムで薬物設計が格段に楽になることでしょう。

モバイルARと小型センサによるタンジブルユーザインターフェースの実現

最近何かと話題(?)のタンジブルユーザインターフェース。 世の中にはリモコンが多すぎて管理するのが大変。 提案しているのは携帯電話がリモコンになっていろんなデバイスをコントロールすることができるシステム。 携帯電話はいつも持ち歩くので、携帯でできると何かと便利ですね。 タンジブルユーザインターフェースなので、直感的に操作できるものを目指しています。

実際に「動画を流す」「それを別のディスプレイに表示」「別のプリンタに印刷」という流れを、 携帯電話で操作するデモをやってくれました。 携帯電話には無線LANのモジュールがついたNokiaの携帯を使用していて、 日本で同じ事をやるにはちょっと難しい印象を受けました。 未来ではこれが当たり前になるんでしょうか。

初心者を挫折させない、魅力的な3Dライブラリとヴィジュアルシーンエディタ

プログラマがプログラムを始めるきっかけとしてはゲームを作りたいというのが多いそうです。 僕自身はゲームを作ってみたいと思った事は一回もないのですが、 周りを見回してみると結構当たってます。 ところが最近のゲームは3Dをふんだんに使っていて、敷居が高く、 そこで挫折してしまう人がたくさんいます。 提案者のシステムは初心者をターゲットにした簡単に3Dアニメーションを作れるソフトウェアです。

驚いたことにプレゼン資料を全て今回作成したソフトウェアVisual Scene Editorで作っています。 プレゼンを見るとVisual Scene Editorのすごさがわかります。 機能がたくさんあってここには書ききれないですが、完成度が非常に高いです。

実際にプレゼンを見てて、3Dアニメーションをふんだんに使ったかっこいいプレゼンなんですが、 これが簡単に使えるようになればいいなと思いました。 話を聞いてみると、プレゼン用に最適化してものを別に開発することは考えているそうです。 MacのKeynoteがかっこいいと嘆いていたWindowsユーザも、 Visual Scene Editorでかっこいいプレゼンができるようになるかもしれません。

ソフトウェアは公開されていますので、実際に使ってみてはいかがでしょう。
Visual Scene Editor

Spark Project

採択者は現役の高校生!! IT業界でスパークと聞くとSunのSPARCしか思い浮かばないのですが、高校生には分からないんだろうな。

Spark ProjectはFlashでゲーム開発を行うためのクラスライブラリ集を開発するプロジェクトで、 今回はイベントドリブン型で処理をするXelfというのを開発しています。 Xelfの由来は単にFlexを逆にしただけとか。

エージェントという概念があって、エージェントがお互いにメッセージを交換する事によって処理が行われるという仕組みになってます。 そのためオブジェクトが多くできるのですが、DIコンテナを使って簡単に管理できるようにしてます。 またConvention Over Configurationでできるだけ簡潔になるように工夫されています。

Spark Projectにて公開予定。

誰かを感じるウェブコミュニケーション - ブラウジングコミュニケータ「Antwave」の開発

誰かと一緒に同じwebページを見る事ができるwebブラウザです。 とにかく使ってて楽しい!! 一緒に同じページを見ながらチャットができたり、ページに落書きができたり、相手のマウスポインタをバシバシ叩く事ができたり。 誰かがリンクをクリックすると、同じページを見ている人のページもちゃんと切り替わるようになっています。 今回採択されているnetPlantに対応して、未踏ユース同士のコラボも面白い。

技術的にもかなりこった事をやっています。 同じページをブラウズしているときのやり取りは、 多くのデータのやり取りを行うのでP2Pで行っていて、 それ以外の部分の処理にはWeb APIを通してAntwaveのサーバとやり取りをしています。 HTTPにデータを載せてやり取りをすることで、簡単に外に出れないような環境でもちゃんとデータのやり取りが行えるようになっています。

採択者は2chで有名になった上下ジーパン男の映画監督でもあります。 映像が趣味というだけあって、作ってきたデモムービはかなりクオリティの高いものになってました。

思いついた全てのアイデアを集積・管理・公開するWiki型CMS「Ubiki」の開発

採択者が提案するシステムはどこでも使えるWiki型CMS「Ubiki」。 Ubikiはオフラインでもオンラインでもどこでも使えるWikiシステムを目指しています。 確かにこういうシステムがあれば、どこでもメモがとれて共有できるから便利ですね。 残念ながら作ったシステムは完全にうまく動けるところまではいってないようですが、 今後の開発に期待したいところです。

プログラミングを学べるMMORPGの開発

MMORPGを使ってプログラムを学習する事ができるシステム。 MMORPGには多くの人がハマっていますが、そこにプログラミングの演習を持ってくれば楽しくプログラミングが学べるのではないかというアイデアです。 デモでは簡単なRPG上で問題を解く事で次に進む事ができるようになっていました。 採点をどうするかとか、いろいろ難しい部分は多いと思いますが、 こういうシステムでもっとプログラミングの敷居が下がるといいですね。

統合ディスクレスネットワーク基盤システム

ネットワークブートを用いることでディスクレスで複数のマシンに同じシステムを起動させてしまおうというシステム。 ネットワークブートを用いる事自体はそんなにすごいことではないが、 彼がすごいのはこのシステムのために分散ファイルシステムを作ってしまったところです。 ファイルシステムはNBD(Network Block Device)の上に全てユーザランドで書かれています。 ディスク全体のイメージを複数のサーバに分割して持つ事でメモリの消費量を抑えています。 またデータを重複して持つ事で耐障害性も高めています。 僕はこの分散ファイルシステムだけでも十分に価値があるのではないかと思いました。 (というかそっちの方に興味があった) もっと実用性を高めて安定運用できるところまで期待したいところです。

3日目

よりよいコメント記述のためのプログラミング環境

コメントにもっと記述力を持たせようとする試み。 このシステムを使う事で、他言語コメント、プログラマのレベルに合わせたコメント、部分的なコメントが実現できるようになります。 コメントは別ファイルに保存されていて、同じシステム上で開発する必要がありますが、こういう細かいコメントが記述できるようになれば便利ですね。 提案者はEmacsで実装していましたが、僕はEmacsは使わないので、ぜひvimにも移植して欲しいです。

MARS(Mutural Authentication RSS) 相互認証を基盤とした未来型RSS配信ソフトウェアの開発

RSSはデータの配信に広く使われていて、ツールもいろいろ揃っています。 ですが、元々パブリックなデータを配信するのに使われているため、認証部分が弱いです。 提案者はグリッドコンピューティングの研究室に属していて、グリッドコンピューティングで使われている認証システムと組み合わせてしまおうという提案です。 グリッドで使われている認証を通す事で、非公開な情報をRSSで配信できるようにします。

実際に作ったシステムを作ってデモを行ってくれました。 先生が現れると通知が届くというデモです。 グリッド - MARS - Plagger - メール という構成で、 先生が財布をマウスの近くに置くと財布とマウスに入っているRFIDによって検知されてメールが届くようになっています。 こういうところにRSSが使われるなんて面白いですね。

旅する漢字”漢字んカナメ” 漢字学習支援システム

漢字の学習を支援するシステムです。 漢字はたくさんあって覚えるのが大変ですが、漢字をストーリにすると覚えやすくなります。 漢字んカナメは漢字を分解してストーリを自動生成するシステムです。 漢字を入力してしばらく待つと、分解された漢字の一部分がうにょうにょ動き出してストーリが出来上がります。 動く様子は見てるだけでも楽しい。こういう遊び感覚が学習には必要なんでしょうね。 現在特許出願中のようで、実際に手元で使えるようになるのが楽しみです。

GPUPPUR: 汎用高速3Dグラフィックスライブラリの開発

3DCGの描画処理にはラスタライズ法とレイトレーシング法があるそうです。 ラスタライズ法は高速に処理できるのでゲームとかのリアルタイムCGに、 レイトレーシング法はリアルな3Dを生成できるが計算に時間がかかるので映画等のオフラインCGに使われています。 提案者の汎用高速3Dライブラリ"GUPUPPUR"では、ラスタライズ法とレイトレーシング法を組み合わせたハイブリッドな3Dライブラリです。

実際に作ってみて動かしてみると、結果的にはOpenGLよりも遅くなってしまったとのこと。 ラスタライズ法の計算に使われるGPUは広く普及していますが、 レイトレーシング法の計算に用いられるプロセッサにPPUというのがあって、これがかなり高価だそうです。 PPUが広く普及するようになれば、GUPUPPURを使う事で現実的な速度今までよりもきれいな3Dを描画できるようになるかもしれません。

アニメ表現におけるアーティスティックな陰影コントロール法

トゥーンレンダリングという技術があります。 写実的な描画ではなく、アニメのように陰影のはっきりした描画を行うのがトゥーンレンダリングです。 トゥーンレンダリングでは3Dの物体に光を当てる事で陰影をつけるのですが、 実際にやってみるとうまく影がつかない場合があります。 提案者が作ったのはトゥーンレンダリングの処理を行う時に、手で陰影のつける部分を変更して、 光源の位置を変えてもちゃんと描画されるようにするシステムです。 Mayaというプロが使っているシステムのプラグインとして開発しています。 今後、実際の映画製作に使われる予定ということで、早ければ次のポケモンに使われるそうです。

身体イメージを利用した装着型擬人化ディスプレイロボットの開発

ロボット技術は非常に高度高価だが実際にできることが少なく、人間が期待する事とのギャップが大きい。 なので、ロボットの部分を一部分に限定すれば現実的なものが作れるのではないかというのが提案者の考えです。 提案しているシステムは手や目などの一部分を作って、いろんな物を擬人化してやろうというもの。 デモでは電子レンジに手や目がついているものを見せてくれました。 女性が見ると「かわいい」と言う人が多いそうです。 こういうアプローチは面白いですね。

まとめ

未踏ユースでの成果報告会についてまとめてみました。 未踏ではいろいろ面白いプロジェクトがいっぱいあります。 プロジェクトだけでなく、未踏を通じていろんな人との繋がりができます。 みなさんも未踏プロジェクトに応募してみてはいかがでしょうか。

2007年3月 7日

Yahoo! User Interface Library(YUI) を利用する
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

はじめまして。今月から入社した5日目の新人のyukiです。yukiですが女性ではありません。残念です。

ウノウでは毎日新鮮な気分で仕事させてもらっています。毎日違う机や椅子、ボールというのもすごいですね。朝もゆっくりなのでシャワーを浴びて、洗濯物を干してから出かけたりしてます。

さて今回は初めてラボを書くことになりました。諸先輩方のためになる記事、さすがです。そこで自分はちょっと方向性を独自にとってみようと思います。

Yahoo! DEVELOPER NETWORK(英語) より、Yahoo! UI Library(YUI) のお話です。結構有名どころだと思いますが。

最近ではリッチなインターフェースのサイトも多くなってきました。通信速度やコンテンツ内容はすばらしくても、「使ってもらえる」サイトでなくてはユーザーの不満がたまります。去ることはなくても、より使いやすいサイトが出てくればそちらに流れるかもしれません。

Movable Typeなどを使って手軽に製作できるようになりましたが、あまりに使わているためにどうしても差別化が必須になる場面があります。そういうときに、ちょっと手軽に追加できるライブラリを知っておくといいかもしれません。幸い設置方法やサンプルなどもしっかりあり、初心者向けに作られてる感じです。

この他にも、ブラウザの違いを吸収して同じ大きさで表示してくれるFonts.cssや<ol>タグなどの表示誤差をリセットしてくれる Reset.cssなんかもあります。自分の手ですべてを調整しようとすると大変ですが、いったんYUIに調整してもらってから自分で修正したりすれば、大分作業がラクになります。

※Yahoo! UI Library ライセンス情報

2007年3月 6日

失敗から学んだ効率のよい会議術
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちはmatsudaと申します。
2月に中途でウノウへ入社した新人です。

まだウノウでの体験は少ないので、これまで勤めてきた企業でやっていた会議で、自らの失敗談から学んだ会議を円滑にすすめるための会議術をご紹介します。

頭の片隅にちょっとでも残していただけるのであれば、とてもうれしいですね。


■時間通りに会議をはじめる

当たり前のようでなかなかできないのが時間通りに集まり、会議をはじめることです。ダラダラはじまる会議ほど、ダラダラと会議をする傾向にありました。
 

■必ずアジェンダを用意する

会議には必ずアジェンダを用意してください。アジェンダのない会議ほどあさっての方向に話題がそれることはありません。簡単なものでいいです。必ずアジェンダを用意するクセをつけてください。
 

■冒頭に会議の目的を共有する

何のために集まった会議なのか?お互い確認してください。「いや、会議しろと言われたから集まっただけ」という本末転倒のようなことが何度かありました…。
 

■議事録はプロジェクトに詳しい人間がとる

議事録は、そのプロジェクトに詳しい人がとりましょう。まだ内容を理解できない新人に議事録をとらせるのは酷ですし、私自身うまくいかないこともありました。
 

■プロジェクターとホワイトボードを用意する

プロジェクターにアジェンダ・議事録・会議資料を映し出すと、みんながそれに集中します。アジェンダを表示しながら議事録を書き、会議が終わった段階で議事録が完成していることがベスト。さらに会議のペーパーレス効果もありました。
 
また、ホワイトボードは思考を広げます。特にブレストのときに意見を書き留め、図式化することで、参加者に新しいひらめきを与えることがあります。最後はデジカメで保存して議事録に添付すれば保存も簡単ですね。
 

■発言には責任をもつ

思いつきや憶測で話をするのは、会議の話題をそらす原因になるので極力ひかえるようにしています。個々人の意識によりますが、発言に責任をもてば軽々しく思いつきを話したりしません。
 
ただ、思いつきの話が出た場合に備え“今日のブレスト”と題して最後に時間を用意するのも方法です。「なるほど、その話題は最後にしましょう」と言って最後にまわしてください。せっかく出た案を簡単に否定するのは、よくない会議になりがちです。
 

■会議の最後に、するべきこと(ToDo)を確認する

会議の最後は会議中に決まったするべきこと(ToDo)とその期日を最終確認しましょう。誰がいつまでに何をするか。ココでは作業者本人に決めてもらうことが効果的です。あまりに無理を言っているようならマネージャーが気づいて修正してあげてください。
 
 
以上、極論的なところもありますが、会議は全員の時間を拘束する業務です。
クリエイターが生産的な時間をより多く作ることができ、さらにはモチベーションを下げないような会議を心がけていきたいですね。

2007年3月 5日

日本語とPHP
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

yamaokaです。

PHPで日本語を扱う場合、mbstringモジュールを利用する場合が多いと思います。 日本語に特有の機能(カタカナの全角/半角変換など)も備わっていて、とても便利です。 しかし、日本以外ではmbstringモジュールはあまり利用されていないようです。 代わりに利用されているのがiconvモジュールで、 最近話題のフレームワーク、symfonyでも 国際化の機能を実現するために内部で利用されています。

iconvモジュールはPHP 5でPHPの本体に組み込まれました。 別途用意して組み込む必要があるmbstringモジュールと違って、最初から使用できるので便利ですね。 PHPのマニュアルのiconv関数のページを見ると、 いくつかの関数が定義されているのがわかります。 それぞれ、mbstring関数との 対応表を作ってみました。

iconv関数mbstring関数
iconv_get_encodingmb_http_input, mb_http_output, mb_internal_encoding
iconv_mime_decode_headersmb_decode_mimeheader
iconv_mime_decodemb_decode_mimeheader
iconv_mime_encodemb_encode_mimeheader
iconv_set_encodingmb_http_output, mb_internal_encoding
iconv_strlenmb_strlen
iconv_strposmb_strpos
iconv_strrposmb_strrpos
iconv_substrmb_substr
iconvmb_convert_encoding
ob_iconv_handlermb_output_handler

mbstring関数は上に挙げた関数以外にも定義されているので、mbstring関数の方が機能的には豊富です。 また、php.iniで設定できる内容の対応表も作ってみました。

iconvセクションmbstringセクション
iconv.input_encodingmbstring.http_input
iconv.internal_encodingmbstring.internal_encoding
iconv.output_encodingmbstring.http_output

php.iniで設定することができる内容もmbstringモジュールの方が多く、 iconvモジュールで実現できることはmbstringモジュールと比較すると かなり制限があることがわかります。

また、サポートされているエンコーディングの種類が異なります。

mbstringモジュールでサポートされているエンコーディングは、 mb_list_encodings関数などで確認することができます。 また、マニュアルにも詳細に記載されています。 SJIS-winやeucJP-winなど、Windows特有のエンコーディングにも対応しています。

それに対して、iconvモジュールでサポートされる文字セットはOSのiconvライブラリの実装に依存します。 詳細はlibiconvのサイトを参照してください。 ここで注意すべきなのは、Windows上で扱われる文字セット(cp932など)がサポートされていないことです。 この場合、全角のローマ数字などが正常に変換されない場合があるので注意が必要です。 この件に関しては、Samba国際化プロジェクトのページ に詳しくまとめられているので参考になります。

上記のような現状から考えると、mbstringモジュールを利用することが日本語を扱う一番の早道です。 ですが、オープンソースのプロジェクトなどでmbstringモジュールの使用を前提にできない場合、iconv関数を利用する必要があるかもしれません。 また、個人的に海外のレンタルサーバなどを利用する場合は、mbstringエミュレータjcode.phpを利用するのがお勧めです。 mbstringとほぼ同等の機能を、ライブラリとして利用することができます。

PHP 6ではInternational Components for Unicode(ICU)を利用して Unicodeがサポートされます。日本語の取り扱いも変わってくると思われるので、要チェックですね。

以下追記です:

  • iconv関数自体はPHP 4のころから存在します。PHPに標準で組み込まれるようになったのがPHP 5からです。
  • Linuxだとglibcのiconvでcp932がサポートされており、使用可能のようです。
  • 日本語とPHPについてもっと詳しく知りたい方は、書籍の『超・極める! PHP』がお勧めです。

2007年3月 2日

個人でWebサービスを作る時に一番大変なこと
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

komagataです。

最近、個人でWebサービスを作る人が増えています。

僕も個人(2人)で※Plnetというしがないサービスを作っています。Plnetを作るにあたって、もう一人の作者t-kawaduと目標に掲げたのが、

「とにかくオープンすること。」

なんて低い目標だと驚かれるかもしれませんが、仕事で作るのとは違って個人でWebサービスを作る上で一番大変だったのは“やる気を継続させること”でした。やる気を継続させるためにやったことを紹介したいと思います。

(普通こういうことは成功しているサービスの作者が言うものですが・・・)

寝る前にドメインを取る

よく飲みながらこれこれこういうサービスを作ったら便利なんじゃないか、なんて話をしますが実際に作ったためしがありませんでした。自分の口ばっかり具合にうんざりしていたので、寝て気が変わる前にドメインを取りました。

寝る前にレンタルサーバを借りる

開発・公開に使うサーバも寝てしまう前に借りました。さくらインターネットの月500円のプランならまったく気兼ねなく借りられます。

次の日の朝起きたときに心底後悔したのをよく覚えています。前日にドメインやサーバを借りていなければ絶対に開発を始めることはなかったと思います。

開発初日に動くものを作る

開発を始めたとしても、初日にやっていける感触が掴めなければやはりやる気が失せてしまいます。とにかく外部からアクセスできる何かを1日目で作り上げました。(HTMLだけでもいいので)

具体的に初日はレンタルサーバのドメインの設定と、vimのインストールをし、簡単なトップページを作りました。ソースのバージョン管理のためのsubversionやtrac、emacsの設定はそれだけで初日が終わると思ったのでやりませんでした。(やる気が充実してから、後日やりました。)

綺麗な実装よりも動くものを重視する

綺麗な実装を追求するのは楽しいものですが、綺麗な実装方法が自分でも思いつかない箇所などが出てくると逆にストレスになります。個人的にそうして開発をやめてしまったオープンソースプロジェクトの残骸がいくつかあります・・・。

最初から“動くもの重視”と思っていればそれほどストレスになりません。

互いに褒め合う

「おまえはなんて素晴らしいコードを書くんだ」とか「今日も相変わらずキーが走ってるよ」とか言い合ってました。

1ヶ月でオープンする

Webサービスは一時のモチベーションで作れるものではなく、やはり大半は地味な作業が続きます。感覚的に、第三者のフィードバック無しにやる気を維持できるのは1ヶ月辺りが限界じゃないかと思います。

オープンさえしてしまえば例えばどこかのブログで、

「けっこういいかも」

などと書かれただけでも1週間分ぐらいのやる気は余裕で確保できます。(実際にはSafariでの動作確認のためにオープンは1ヶ月を1週間程オーバーしてしまいました。)

オープンしたからといってそのWebサービスが成功するかは別問題ですが、オープンしないことには成功する確率は0%です。とにかく一度作ってみると楽しいものです。もっと個人でWebサービスを作る人が増え、作成のノウハウをみんなでシェアしていければいいなと思います。

Plnet [ http://plnet.jp ]

plnet_banner.png

Bloggerやdel.icio.us、Flickr、はてなブックマークなど様々なサービスをまとめて一つのブログのように見せたり、Mixiの足あとのような機能をブログに持たせるサービスです。

よろしければ使ってみて下さい。そして使い勝手などをフィードバックして頂ければ幸いです。

2007年3月 1日

auは絵文字を自動変換していたわけではなかった
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんばんは。harukです。

前回、絵文字の相互変換リストというエントリを書きましたが、

説明に正しく理解できていなかった箇所がありましたので訂正しておきます。


今回のリストを作っていた時や、前々から気にはなっていたんですが、

auのケータイではwebで表示されているDoCoMoの絵文字は
auの絵文字に自動で変換して表示していた。
というふうに理解していました。

携帯サイトを作り始めの頃に見た、↓↓のような技術資料によって記憶に刷り込まれたのかもしれません。

http://www.au.kddi.com/ezfactory/tec/spec/html_con004.html

http://www.au.kddi.com/ezfactory/tec/spec/html_con.html

http://www.au.kddi.com/ezfactory/tec/spec/i_mode.html

実際は、auの端末がformでの絵文字の入力・送信ができるようになった時には、もう違っていたようです。


まず、auがShift_JISのページのformで入力した場合の絵文字は以下の範囲です。

  • F340~F3FC
  • F440~F48D
  • F640~F6FC
  • F740~F7FC

一方、DoCoMoの絵文字の範囲は以下です。

  • F89F~F8FC
  • F940~F9FC

このDoCoMoの絵文字をauの端末で見た場合に表示されるのは、

それぞれのDoCoMoの絵文字に対応するauの絵文字です。


この文字をコピペしてフォームから送信すると・・・

そのまま(F8xx~F9xxの範囲)送られてきます。


auはサーバで変換しているのではなくて、

ただ、その範囲に絵文字を割り当てているだけのようです。

(普通に考えたらわかりそうなものですが。。。)


SoftBankの端末ではHTMLをコピーできる端末を知っていますが、

もし、auでそういう端末がある場合は、

DoCoMoの絵文字でauでの絵文字の表示も兼ねているサイトではHTMLからコピーして、

formでペーストして。。。とDoCoMoの絵文字が手軽に送られてくるのかもしれません。


厳密に行うには、

au(DoCoMoの絵文字) → au(本来のauの絵文字)

への変換をしてあげないといけません。

(そこまで面倒を見てあげる気にはなれませんが。。。)


もし同じ誤解をしている方がいましたら、気をつけてください。