セマンティックウェブのためのRDF/OWL入門のためのRDF/FOAF入門
Tweet
komagataです。
先日社内の勉強会でRDFとFOAFについて話しましたので資料を公開します。
セマンティックウェブの小難しいイメージが少しでもやわらげば幸いです。
Tweet
komagataです。
先日社内の勉強会でRDFとFOAFについて話しましたので資料を公開します。
セマンティックウェブの小難しいイメージが少しでもやわらげば幸いです。
Tweet
ちょうど入社から半年で有給発生しつつも本日が退職日になりましたjokagiです.もう花見の季節ですね!!
ちょうどラボブログの当番のようで,退職記念にjokagiが普段の開発で使っているテクニックとは呼ぶにはおこがましい小手先の技をつらつら書いてみたいと思います. これを覚えればjokagi程度には仕事をこなせるかも!?
基本的なコマンドの使い方やコンソールなどの使い方は書籍やいろんなサイトで覚えてください. ここでは一応一通りなんとなくでもコマンドを扱える人がさらに覚えるといいかもしれないことだけを記述します.
また,これからの解説はシェルはbash,その他のコマンドの多くはGNU Toolsと呼ばれることのあるGNU findやcoreutilsなどを用いた環境でのオプション例や実行例になります.
いわゆる指定された文字列を出力するコマンドですね. 知らない人も多いみたいですが,echoも実はいくつかのオプションを受け付けます.
| -e | バックスラッシュ(半角円記号)に続く文字を特別視する |
|---|---|
| -n | 最後に改行文字を入れない |
grepはファイル内をパターン検索(意訳的にいうと文字列検索)を行うコマンドです. ここで覚えておくべきオプションは下記のとおりになります.
| -i | 英大小文字を等価に扱う.いわゆる「A」と「a」が同じということを表す |
|---|---|
| -r | 検索対象にディレクトリを指定した場合,ディレクトリ内を再帰的に検索する |
| -E -F -P | パターンの扱いを変える.egrep,fgrep,pgrepはそれぞれ-E,-F,-Pが指定されたときと等価の処理を行う |
| -v | 指定キーワードが含まれる行を除外する |
| -l | 条件に一致するファイル名だけを出力する |
grepはアプリケーションの解析では(多分)非常に基本的かつ重要なコマンドです. 当然これだけでは見つからないものもでてきますが,結構有効です.
| -type <TYPE> | 「-type f」でファイルだけを対象に,「-type d」でディレクトリだけを対象にする |
|---|---|
| -name <NAME> | <NAME>と一致する名前を対象にする.ワイルドカードを使うことができる |
| -uid <UID> | オーナーユーザーのIDが<UID>のものを対称にする |
| -gid <GID> | オーナーグループのIDが<GID>のものを対称にする |
| -exec <COMMAND-LINE> \; | 対象毎に「<COMMAND-LINE>」を実行する.「{}」を含ませると対象が展開される |
sedは通常行指向でテキストの置換などを行うときに使用します. しかし,通常その結果は標準出力に出てくるだけですが,-iを使用することで実際に入力に使用したファイルを置換することができます.
| -i | 実行された置換を読み込んだファイルに実際に適用する |
|---|
| -u | CVSやsvnなどと近い書式で差分情報を出力する |
|---|---|
| -r | 比較として指定された対象がディレクトリだった場合,再帰的に中身を評価する |
| -N | いずれの比較先にだけ存在するファイルも対象とする |
オプションに「-tx1」と指定すると1バイトずつ16進数で表示します. なぜそういう挙動になるかはマニュアルなどで調べてください.
個人的にはメーラーとしてコマンドsendmailをオプション「-t -i」としてよく使います. その理由はPHPのmail()は通常内部で/同オプションをあわせてusr/sbin/sendmailを使用するからです. この辺について興味がある方は mail()でメールが送信できるかどうかの確認手順 - よくきたWiki やPHPのソースなどを参照してください.
サーバー上で作業はできるほうがいいですね. 使ったことがないのに好みでどうぞってのは判断がなかなかつかないですね. jokagiはemacsとviは7:3位の割合で併用していますが,emacsは入っていない場合があるので,どっちがいいか判断がつかない方はviをお勧めします.
すべてのコマンドが対応しているわけではないですが,おおよそのコマンドで有効なオプションです.
| -- | オプションの終了を表す |
|---|---|
| --help | コマンドの使い方を出力する |
$ 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を使用します.
$ 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
$ fgrep -r 'class="header"' .
あるウェブアプリケーションが出力するHTMLの処理がおかしいときに上記のようにして調べます. おおよそそれっぽいのがでてきたら-lも併用します.
$ fgrep -lr 'class="header"' .
$ fgrep -r 'example.com' . $ fgrep -r 'support@example.com' .
適当に開発されたウェブアプリケーションはえてして値がハードコーディングされていることが多いです. それらを定数に置き換えるときも上記のような検索が有効です.
$ fgrep -ir '<input' . | egrep -i '\$(_GET|_POST)'
よくあるこういう出力をしているファイルを探します.
上記grepでこういうフォーム要素を出力している可能性のあるファイルを探します.
$ egrep -ir '(select|update|insert)[ \t]+\$' . | grep -iv '</?select'
これでたとえば「select * from users where id = $id」のようなSQL文字列を検索します. これらはプレースフォルダーなどを使用すれば「select ~ where id = ?」などとなるはずなので,変数名は基本的にSQL中に出てくることがないことに着目しています. また,「<select~」などのHTMLは除外しています.
$ find . -type f | fgrep index.html
$ find . -name '*~'
$ find . -name '*~' -exec rm {} \;
$ find . -name .svn -type d -exec rm -rf {} \;
$ find -uid 0
$ find -uid 0 -exec chown jokagi {} \;
$ sed -i 's/sjis/Shift_JIS/g' `grep -irl sjis .`
文字列をダブルクォートすると,シェルが文字列を評価する場合があるので(「$」とか)個人的にはなるべくシングルクォートを使うことをお勧めします. また,クォート文字を含んだ検索をする正規表現など,エスケープ処理が複雑になってくるとシェルのためのエスケープか正規表現(あるいはその他のための)正規表現かわからなくなってしまうことがあります. そういう時は素直にオプション値をファイルにして読み込むという手段もあります.
上記のようにコマンドの実行結果をオプション値で取り込むと便利なことがまれにあります. 実行結果をコマンドラインに取り込む方法はそれ自体をバッククォートでくくることで実現できます.
jokagiがよくやるのは下記のようなパターンです.
$ emacs `find -name '*.html'`
ファイルがあまりに多いときはより厳密に絞り込むほうがいい場合もあります.
半年間ではありますが,ウノウでは多くのことを勉強をさせていただきました. jokagiは本日で退職ですが,ノッキングオンという会社に移籍をすることになります. ノッキングオンは広告キャンペーンや携帯アフェリエイトなどを運営している企業です. 今後ウノウとノッキングオンはいろいろな面で協力をしていこうということになっていて,今後は両社でいろいろな価値を作って行くことになると思います.
また,jokagi個人もノッキングオンでもウノウ,あるいはこのウノウラボのように自分たちが考えたことを,自分のノウハウを世間と共有できるようなコンテンツや価値を作って行きたいなぁと思います. これから改めてみなさまよろしくお願いいたします. それではあでゅー.
Tweet
Keita です。
先日、enNetForumという所で、Wikiについてお話させていただきました。
僕は、どちらかというと、引きこもりたい人間で、人前で話しをするのは苦手です。
しかも、今回は、Wikipedia創始者 Jimmy Donal Wales氏 の後で話すということで大変緊張しました。
しかし、当日は、わりとちゃんと準備したおかげか、それなりに、ちゃんとお話できたかと思います。
そういうわけで、僕のような人見知りが、どのようにして、プレゼンを準備したかを今回はお話させていただこうと思います。
実は、この作業は実はプレゼンの時じゃなくて、僕は普段の生活でもたまにやっていて、僕の中では「一人ブレスト」と呼んでいる作業になります。
下書きを完了したときに、その内容で正しいか、裏を取る作業もしました。
あと、社内のMLに、投げて時間があるときに見てといったら、多数の人から意見がありこれも非常に参考になりました。
その後、2回目の練習の時には、別の同僚2人がつきあってくれました。
内容的には、1回目よりましだったのですが、やはり、わかりにくいところがあり、また同僚が積極的に提案してくれたので、その部分を修正したりしました。
プレゼンに慣れている人ならともかく、慣れていない人は最低でも2回は、通しで練習するべきだと痛感しました。
こういう時は、プレゼンを始める前に、軽い冗談とかを言うと自分の緊張がほぐれます。
正直、言えば、氏のプレゼン中、どういう冗談を言おうかということで頭がいっぱいでした。
あとはしゃべる時には、可能な限りゆっくりしゃべることだけを心がけました。
結果はどうだったかというと、そこまで、ひどくはなかったつもりです。
もし、こういうプレゼンの方法がいいんじゃない?とかありましたら、教えていただけると助かります。
ご参考になれば幸いです。
Tweet
こんにちわ、hideです。
先日のエントリにある通り、2泊3日で開発合宿に行ってきました。僕は「1日1サービス」を目標に掲げて合宿に望んだのですが、なんと風邪でダウンしてしまい真ん中の日は丸々寝てました。
そんな状況ではあったのですが、Flickr2PhotoZouというFlickrの写真をフォト蔵にインポートするツールを作りました。もともとFlickrの無料アカウントが200枚制限に達してしまったため、その写真を移行したくて自分用に作ったものなのですが、せっかくなので公開します。
【使い方】
以上で終わりです。
インポートにはしばらく時間がかかりますので、完了通知メールが届くのをお待ちください。
Tweet
はじめまして。先月からアルバイトとして働いているmatsumotoです。
今月初め(3月2日~4日)に実施した開発合宿のお話をさせていただきます。
これから開発合宿を検討されている方の参考になれば幸いです。
まず、参加したのはアルバイトを含む13人。合宿の舞台は晴海グランドホテル。
初めにブレストを行い何を作るか確認する。ということをしました。不肖ながら私が司会進行をつめさせていただきました。
作ろうとしている物の発表をし、皆でアイデアを出し合い色々発展させていきました。それを通してその人はどういう人なのかを改めて再認識させられる事もしばしば・・・
さらに普段の会議などにはない気軽な雰囲気も助け皆口々に意見が飛び交います。集団の中で意見を言う大事さを実感しました。
また司会をさせていただくことによって会議を進めていくということの難しさ。というのも知ることが出来ました。
普段の会議で話を聞く側にいらっしゃる方は開発合宿でブレストをするとき是非司会進行を立候補してみるのがいいと思います。
会議をしている立場の人の大変さも実感できます。相手の意見を聞きだしたり話をうまく切り返し、途切れさせずにするのはとても難しい!
他にも普段は違うプロジェクトの方とお話しする機会がありました。すると、その人とすごく気が合うことに気づきました。今ではゲームセンターに一緒に遊びに行く仲です。思いがけない出会いに感謝です。
私はウノウに入ってまだ日は浅いのですが開発合宿によって皆さんとの間の距離を少し縮めることができたんじゃないのかな?と感じています。合宿以来たしかに会社の中での自分の立ち位置が変わったと思います。もちろんいい意味で。
最後に今回の合宿で作成した物のスクリーンショットを何枚か頂いたので軽い説明と共にご紹介させていただきます。
FOAFのウィジェット

Hatenaやmixiのプロフィールを吸い出して表示するBlogパーツです。自分の友達が表示されどんどん友達を辿っていける感じです。Blogでmixi感覚を味わえそうですね。
現在は適応できるサービスに限りがあるらしいですが、将来的には自分で任意のサービスのプロフィールを吸い出せるようになるらしいです。
本でつながる

ISBNを登録するとAmazonからその本のデータを吸い出して表示してくれます。同じ趣味をもつ人同士がつなげることができます。
ブレストでは「読み終わった本をランダムで送りつけて布教するってどうよ?」と言う意見もありました。実現できたら面白いですね。
写真を分解してリンクをつなげる
フォト蔵APIを使ったスクリーンセーバー。ランダムでフォト蔵の写真を取ってきてRGBをピックアップし、似たような色合いの小さなサムネイルで置き換えてピクセル画を作るサービスです。
将来的には、タグ分類などで、置き換えられるサムネイルが元画像と関連したテーマになると面白いと思います。ぜひ完成させてフォト蔵のサービスとしてリリースして欲しいです。
遺伝的アルゴリズムを用いたシミュレーション

フィールド上には毒キノコと通常キノコがあります。最初配置されているキャラクターは何も知らない状態です。その状態から何度か世代交代をし、学んでいって最後には毒キノコを避けるキャラクターが現れだします。
難しいアルゴリズムを使っているらしく、ぜひ今度勉強会で披露していただきたいと思いました。
ブログの更新頻度をランキング化

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

アドベンチャーゲームを作るツールを作ってみました。ただ作るだけでは面白くないので弊社のCEOとCTOの出会いを再現してみたいと思いました。
しかし僕は二人の出会いについて何も知らないので想像で作ってみました。今度のみに行ったときに二人の出会いについて詳しく聞いてみたいと思いました。
以上で終了とさせていただきます。次の開発合宿の報告をお楽しみに。
Tweet
Sashaです。気がついたら自分の生活の一部だった。そんなサービスが人に小さな幸せを生み出します。そんなサービスを作ることが出来たらいいですよね。
でも、人っていっても、色々いますよね。私たちは、だれの生活を思い浮かべたらいいのでしょう。
UIという文脈の中で、ペルソナ(personas)という言葉の意味を聞いたことがありますか?ペルソナは、マーケティング、デザイン、製品開発など幅広い分野で、顧客中心思考を実現するためのひとつのキーワードとして論じられています。
UIに関していえば、樽本徹也氏が「ユーザビリティエンジニアリング」という本の中でこの言葉について説明されていますので、ご紹介させていただきます。
ペルソナとは、UI設計の中で設計チームの意思決定のよりどころとなる「ユーザ像」をさします。「だれのためのサービスか」、を明らかにすること。当たり前のようなことですが、日々、バグやクレームや締め切りに追われる開発者たちにとっては、本当に忘れやすいポイントだということを、私もよく実感します。
ペルソナは、実在する人物でも、私たちが勝手に作り上げる人物でもなく、「発見するもの」です。樽本氏はペルソナを構成する以下のような手順を紹介しています。
1. 数十名規模でインタビューを実施する
2. 同じようなニーズや目的を持っているユーザーを、グループ化する
3. グループごとに、ライフスタイル、ITリテラシー、サービス利用の目的などを踏まえてユーザ像(ペルソナ)を定義する
4. このペルソナを持った人物に、"もっともらしい"個人情報をつけてあげる(キャラクター誕生!)
例えば、
右脳優子さん(35歳)
主婦。最近ちょっといいデジカメを買った。決してプロレベルの写真ではないけれど、自分の写真の中の一人息子の笑顔をたくさんの人に見せたくてフォト蔵を利用。ネットサーフィンや情報収集のためにPCには毎日短時間ずつ触れている。
左脳秀蔵さん(29歳)
IT企業に勤めるプログラマ。ネットには四六時中つながっていて、職業的興味から暇さえあれば新しいサービスを試している。最近フォト蔵のAPIをつかって何か面白いことが出来ないか模索中。
その他数名・・・。
5. ペルソナに優先順位をつける!!
私たちは、優先順位の「最高値」をつけられたペルソナ、つまり、プライマリペルソナを、セカンダリペルソナより、「えこひいき」しなければならないんですよね。もちろん、セカンダリペルソナを排除しなければならない、ということではありません。限られた時間でより多くの人々の生活にとって「なくてはならない」サービスを作るには、『より多くのニーズ』を満たすよりも、『より多くの人のニーズ』を満たして「お得意さん」になってもらう必要があります。でも『より多くの人のニーズ』が実際に『多すぎるニーズ』であると、事業は方向性を見失ってしまうものです。ですから、『より多くの人を代表する、一人の人のニーズ』に意識を集中させる必要があるのです。サービスの方向性で重要なのは、「どのキャラクターからの要望」なのかを議論すること。多様化するユーザーニーズにいきあたりばったりに対応しようと思っても、相反する要望が出たときに行き詰ってしまいますが、ペルソナを使えば迅速な意思決定が可能になるかと思います。
ちなみに、「右脳優子さん」と「左脳秀蔵さん」を紹介するにあたり、私は手順の1番目の「インタビュー」を実際に行ったわけではありません。この点でこの二人のキャラクターは「勝手に作り上げられた人物」であると突っ込まれるかも知れませんが、この二人のキャラクターは実際にフォト蔵ユーザーの中に存在するペルソナですし、そもそもここで話しているサービスにしてもこの記事を書くための一例ですので、大目に見てください。
フォト蔵の場合、右脳優子さんは左脳秀蔵さんより多くのユーザーを代表しています。ですので、右脳優子さんのニーズは左脳秀蔵さんのニーズより比重を置かれるべきです。より多くのユーザーを代表するペルソナを作れば、「より多くの人を幸せにする」というとても複雑な事業目標も、「まずは右脳優子さん一人を幸せにしよう」というシンプルなものに整理され、方向性がブレにくくなると思います。
まずは、右脳優子さんの生活を思い浮かべてみる。どうやったら、ひとつのサービスがこの人の生活の一部になれるのでしょうか。どうやったら、この人を「ちょっと幸せ」にできるのでしょうか。
『まずは、一人の人を幸せにしよう』
それをいつも考えていようと思います。
Tweet
尾藤正人です。
ウノウラボブログの最初のエントリから始まってウノウラボブログもとうとう1歳になりました。 最初は購読者数も少なかったラボブログですが、今では購読者数も増え多くの方に読んでいただけるブログに成長する事ができました。 これもひとえにいつも読んでいただいてる読者の方のおかげだと思っています。
今日はラボブログ1周年を迎えた記念に、この1年を通して感じた事、思った事などをつらつらと書いていきたいと思います。
ウノウでは2ヶ月に1回ぐらいのペースで開発合宿に行っています。 当初ラボブログは開発合宿での成果を公開する目的で始めました。 ですが、開発合宿の成果をそうそう頻繁に出すのは難しいのでどうしようかという話になり、だったら開発合宿の成果だけに留まらずどんどん情報を公開していく場にしようということで、エントリを書き始めました。
ウノウではオープンソースソフトウェアを多く使用しています。 僕も昔はVine Linux SPARC版の開発をやってた時期とかもあり、オープンソースソフトウェアが大好きです。 コミッターは自分の時間を削って有意義なソフトウェアを無償で提供してくれています。 その恩恵で給料をもらって生活しているわけですから、もらいっぱなしはよくない。 公開できるものはどんどん公開してコミュニティに還元するべきだという強い思いがありました。
ラボブログでは1日1エントリを目標にエンジニア、デザイナ、テスターで持ち回りで書いています。 当初「書きたいエントリがあった時に書きたい人が書く」という方法も提案されたのですが、それでは絶対に続かないと思って持ち回り制にしました。 ブログの場合はネタが新鮮かどうかも重要なので、ネタがある時に先に書くのは問題ありません。 その場合は自分の順番が来た時に飛ばして次の人が書くようになってます。
ラボブログではてなブックマークで100以上のユーザを獲得するとamazonギフト券3000円がもらえるようになってます。 人気エントリを書くと本が1冊購入できるというようなイメージです。
人気エントリを書くと嬉しいのですが、そこにはそれほどこだわりを持たないようにしてます。 まとめ系のエントリを書くとたくさんブックマークしてくれたりするのですが、だからといってまとめ系のエントリばっかり書くと中身の薄いブログになってしまう。 ラボブログ賞を高額に設定しなかったのは、適度なインセンティブを提供しつつ、ブックマーク数にそれほどこだわりを持って欲しくなかったからです。
通常業務の中でたんたんと仕事をこなしているだけでは、新しい事に挑戦する事ができません。 IT業界は変化が激しいですから、どんどん新しい知識を吸収していろんなことに挑戦していかないと、すぐに置いてけぼりにされてしまいます。 ブログのエントリを書く事が、普段と違ったことをやったり、新しい情報を調べたりすることのきっかけにすることができます。 時には至らない点もあってするどい突っ込みをいただく事もありますが、失敗を通して自身の成長に繋げる事ができます。
基本的に社外に向けて情報公開していますが、一人一人持ってる知識に違いがあるので、実は社内での情報共有に一役買ってます。 ウノウの社員同士でもお互いのエントリをブックマークしたりしてます(自作自演という意味ではなく)。
ラボブログのおかげで多くの方にウノウの名前を知ってもらえるようになりました。 ウノウの本事業の事は知らなくてもラボブログを読んでくれている方も多数います。 ウノウラボがウノウとは別会社だと思われる事も。 ウノウ本体の事業ももっと頑張ってウノウラボよりも有名になるように頑張ります!!
弊社に応募してくる方でラボブログを読んで応募されるという方が増えてきました。 他のIT企業の方とお話すると、どこの会社さんも優秀な人材確保に苦労されています。 弊社の場合は他社さんと比べて比較的多くの優秀な人材を確保できていると自負しています。 それもラボブログで積極的に情報公開してきたおかげだと思っています。
GiveせずにTakeだけしても何も得る事はできません。 提供できる物はどんどん提供しましょう。 最終的にはそれ以上のリターンが得られます。 公開する事から全ては始まります。
ラボブログをやってきた思ったのは「よかった」という一言につきます。 ラボブログを通して数多くのものを得る事ができました。
「御社はよくあそこまで情報公開されますね」と言われる事がよくありますが、それは企業側の利権しか考えてないからじゃないでしょうか。 もちろんそれ自体は全然悪い事ではないのですが、もっと広い視点で考えてみたら良いと思います。 情報を積極的に公開してよりよいサービスがたくさん出れば、もっとたくさんの人がハッピーになれる。 ITはそういう風に発展してきたはずだし、僕らはその恩恵で給料をもらって仕事をしているのですから、それを何らかの形で還元しようとするのはごく自然の発想ではないでしょうか。
今後もウノウラボブログでは積極的にいろんな情報を公開していきたいと思います。 これからも暖かく、時には厳しく見守っていただければ幸いです。
Tweet
こんばんは、naoya です。
今日は、献本でいただきました「こんな僕でも社長になれた」を読みましたので、レビューさせていただきます。
この本は、家入さんの自伝書です。家入さんは、現在格安で好評のレンタルサーバロリポップ!などを運営されている(株)paperboy&co.の社長さんです。
あらすじを紹介すると、家入さんの幼年期から起業されるまでの家入さんご自身の人生体験が細かく書かれています。一度この本を読み始めると、とにかく面白くて一気に読んでしまいました。ところどころ僕の幼年期の体験と近い体験があったので、共感しつつそのときの家入さんの気持ちをすこしだけかもしれませんが理解できたような気がしました。
家入さんが起業された後の体験記も、とても興味深く読みました。これから起業する人、起業したばかりの人は必読だと思いました。
ウノウでも、ロリポップ!と同じようにこれからユーザの皆さんに楽しんで使ってもらえるサービスをたくさん開発していきたいと思います。
Tweet
Tweet
こんばんは、最近寒い夜が続いていて自転車通勤がつらくなってきた naoya です。
ウノウでは、フォト蔵や社内システムなどは、すべて専用サーバを構築して運用をしています。
今日は、専用サーバを構築するときに、僕がウノウで学んだ専用サーバでまず行う4つの設定を紹介します。
なお、今回の設定はすべて Fedora Core 5 をもとにしています。
sudo コマンドを使えるようにします。sudo コマンドは、別のユーザとしてコマンドを実行できるコマンドです。
sudo コマンドを使えるようにするには、/etc/sudoers に sudo を許可するグループを追加します。次の例は、unoh グループを追加する例です。
%unoh ALL = (ALL) ALL, !/bin/su, /bin/su postgres, /bin/su * postgres
su コマンドでスーパーユーザになるのは便利なのですが、一度 root になってしまうと誤って重要なファイルを削除しまうことがあるため、su コマンドでスーパーユーザになれないようにします。この設定をすると、スーパーユーザになるには sudo を使うことしかできなくなりますので、注意してください。
su コマンドを使えないようにするには、/etc/pam.d/su ファイルの次の行をコメントを外します。
#auth required pam_wheel.so use_uid
root でログインできないように root のパスワードを削除します。
root のパスワードを削除するには、/etc/shadow ファイルの root のパスワード部分に「!!」と変更します。次のような内容になります。
root:!!:13410:0:99999:7:::
最後に 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 追記
たくさんのフィードバックありがとうございます。 フィードバックを元に、修正と追記をさせていただきます。
/etc/sudouser を直接そのまま編集するよりも、visudo コマンドを使うとより安全へに編集できるようになります。また、編集内容も次の内容で十分です。
$ sudo visudo
%unoh ALL = (ALL) ALL, !/bin/su
/etc/shadow を直接そのま編集するよりも、vipw コマンドを使った方がより安全に編集できるようになります。
$ sudo vipw
次のコマンドの意味を「すでに定義されている 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`
最後のトピックスとして、設定ファイルを編集するときには必ずオリジナルのファイルをバックアップしておいた方がいいです。ウノウでは、設定ファイルのオリジナルのファイルは必ずバックアップしています。オリジナルのファイルをバックアップしておくと、何か設定ミスがあった場合原因を特定しやすくなります。
本エントリにいくつか間違いがあって申し訳ありませんでした。今後もウノウラボをよろしくお願いします!
Tweet
こんにちは!やまもと@テスト番長です。
最近次第に春めいて参りました。
そろそろ巷は卒業シーズンかと思われます。
この春ウノウを卒業するQAスタッフはおりませんが、
時期的に贈り物やらアルコールやらが活躍する時ですね。
今回はテストという名前のワインを手に入れる方法をご紹介します。
そういう名前のワインが世界のどこかにあるのかというと、恐らくありません。
完成品の名前にはさすがに付けられない単語のようですね。。。
無ければ、作ってしまいましょう。
QAエンジニアへの贈り物にどうぞ。

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

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

テストという名前のワインを入手する方法 3) posted by (C)フォト蔵
#たまにはネタもご披露ということで。
Tweet
さかとくです。最近では、JavaScript上でJavaバイトコードが実行できたり(Orto)、JavaScriptでScheme(jsScheme)が動いたりと、とても楽しい状況ですね。ブラウザさえあれば、その上でいろんなプログラミング言語を体験することができるのですから!
私も、これまで、マクロ言語やスクリプト言語をいくつか作ってきました。(代表作は、音楽のプログラミング言語「サクラ」や、日本語プログラミング言語「なでしこ」などです。)今は、ブラウザ上で動く日本語プログラミング言語を開発中ですが、これはまだ見せられる状況ではありません。
そこで、ウノウラボを書くのに与えられただろう時間(約1時間)で、オリジナルのプログラミング言語を作ってみようと思います。もちろん、JavaScriptだけで。
では、はじめてみましょう!
はじめに用意するのは、コンパイラコンパイラです。これは、文法規則を与えると、自動的にプログラミング言語のソースコードを吐いてくれるというとても便利な道具です。今回は、時間も限られているので、とにかく、Googleで「javascript コンパイラコンパイラ」で検索してみます。
すると、弊社CTOの尾藤が書いた、「ベイエリア情報局: Javascriptも出力できるコンパイラコンパイラ」が見つかりました。既に「JavaScriptなでしこ」なる言語を作って公開しているようです。
その時、使ったのが「kmyacc - 多言語対応LALRパーサー生成系」のようで、時間もないのでさっそく、これをダウンロードして、マニュアルを見ながら、Cygwin上でmakeしてみました。何の障害もなくインストール完了です。でも、よく見たら、実行ファイル版(VC++版)もあるようなので、自分でmakeしなくてもよかったのです。いきなり時間浪費してしまいました。
次に、用意されているデモプログラムのソースを見て、だいたいの感じをつかみます。幸いなことに、文法の定義方法は、Yaccとほとんど同じようです。本来なら、Yaccの使い方も解説したいところですが、何しろ1時間と限られていますので諦めます。Yaccが分かれば、ほとんど悩むことなしに、kmyaccを使いこなせるでしょう。
次にサンプルをコピーして適当に文法を付け加えていきます。サンプルでは、四則演算ができるだけのものでした。そこで、とりあえず、変数が使えるように、代入の定義を追加してみます。
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」という定義を追加したのです。
・・・と、このような感じで、1時間終了です。やはり、1時間では、変数が使える電卓が限度のようです。もう半日あれば、変な言語に改良できるんでけど、これは、またの機会にしてみます。
ここまでで作ったものは、以下のような感じです。
[calc]ボタンを押すと計算できます。
Tweet
尾藤正人です。
2/17-19の三日間に渡って行われた2006年度上期未踏ユース成果報告会に参加してきました。 遅くなりましたが、いろいろ面白い成果物がいっぱいあったので、 今日はそれをレポートしたいと思います。 全て紹介してたらかなりの長文になってしまいました。
スプラインスキャン法というのを用いると線を自然に認識して、線の繋がりや流れも認識できるようになるとか。 OCRへの応用等が考えられているそうです。
採択者はaltpaperという紙ベースのデータを自動で認識するシステムを開発している株式会社情報基礎開発で働いていて、 今回開発システムはaltpaperにも組み込む予定だそうです。Altpaperも未踏の開発成果物の一つです。
インターネットからファイルをダウンロードすると、 そのファイルをどこからダウンロードしたのかがすぐに分からなくなってしまいます。 そこで、ファイルにオリジナルのURIのメタ情報を付加しておくというのが提案者のシステムです。 オリジナルのURIのメタ情報を付加する事で、 そのファイルがどこからダウンロードされたのかすぐに分かるようになります。
現在メタ情報はディレクトリの中に入っており、 ファイルを動かしてしまうとメタ情報がそのまま引き継がれないという問題点があります。 Rubyのライブラリを用意していて、 そのライブラリ経由でファイルの移動をすると大丈夫なんですが。 また、ファイルをダウンロードした時に自動的にURI情報が付加されないので、 自分で手動でつける必要があります。 使いやすさがもう少し向上すると良いですね。
傘連判状というのを用いたコミュニケーションインターフェース。 傘連判状というは全然知らなかったんですが、昔一揆とかを起こす時に、 リーダが誰かばれるのを防ぐために放射線状に署名したものだそうです。
何か議論を重ねる時に声の大きい人の意見が通りがち。 傘連判状のように全員が平等の立場であれば、 コミュニケーションが円滑に進むのではないかというのが提案者の考えです。
作ったシステムは画像上の好きな位置でチャットができるlock-on-chatシステム。 発言者の名前が傘連判状のように放射線状になって表示される。
僕はこういうコミュニケーションツールはWebとの親和性がかなり高いと思っています。 現在Web版は開発中とのことなので、期待したいところです。
唯一の女性採択者。 鍵を用いてローカルのネットワーク上でファイルを共有するためのシステム。 鍵の存在が全面に出てるので、初心者にはちょっと使いづらかったり、 ドラッグ&ドロップでファイルのコピーができなかったりするので、 もう少しインターフェースがよくなって使いやすくなるといいですね。
最近のマシンには高速なGPUが付属しています。 このGPUを描画にではなくCPUが行う演算の代わりに使ってしまおうというのがGPGPUです。 提案者はCPUとGPUを用いて並列計算させることによって、 行列積和の計算を高速に行う事ができるライブラリを作りました。 このライブラリが広く使われるようになって、 いろんな処理が高速に行われるようになるといいですね。
ライブラリが公開されています。
GPUPC
ユーザのブックマークと連動させる検索エンジン。 こういう視点の検索エンジンって面白いですね。 まだ公開していない現在開発中の新しい検索インターフェースを見せてもらいましたが、かなりかっこ良かったです。 Flashで作られていて、こういうかっこいいインターフェースだと使ってて楽しいですね。
最初ブックマークをただ単純に集めようとしたんだけど、それはうまくいかず。 そこでswimmieというFirefoxのプラグインを作ってブックマークを共有する機能を提供する事で、ブックマークを集めることに成功したそうです。 こういう戦略を途中で変更して結果を出すというのは大変素晴らしいですね。
netPlantは今後事業化を目指すそうです。 若いのに非常に勢いがあります。 今後に期待したいですね。
SMILES記法というのを初めて知りました。 化学的な物質の構造を表記する方法だそうです。 炭素とか酸素のような原子がどういう風に繋がっているのかをSMILES記法を使って表すのだとか。 SIMILES記法だけを見ても何がどうなってるのかは全然分かりません。 そこで提案者はSMILES記法から可視化するシステムを作成しました。
よくわからないんだけど、いろんな化学物質を可視化して見せてくれました。サリンとかw。 C60もちゃんと表示されてた。
こういう特定の分野の専門家で、かつプログラムが書ける人ってなかなかいないんですよね。 このシステムで薬物設計が格段に楽になることでしょう。
最近何かと話題(?)のタンジブルユーザインターフェース。 世の中にはリモコンが多すぎて管理するのが大変。 提案しているのは携帯電話がリモコンになっていろんなデバイスをコントロールすることができるシステム。 携帯電話はいつも持ち歩くので、携帯でできると何かと便利ですね。 タンジブルユーザインターフェースなので、直感的に操作できるものを目指しています。
実際に「動画を流す」「それを別のディスプレイに表示」「別のプリンタに印刷」という流れを、 携帯電話で操作するデモをやってくれました。 携帯電話には無線LANのモジュールがついたNokiaの携帯を使用していて、 日本で同じ事をやるにはちょっと難しい印象を受けました。 未来ではこれが当たり前になるんでしょうか。
プログラマがプログラムを始めるきっかけとしてはゲームを作りたいというのが多いそうです。 僕自身はゲームを作ってみたいと思った事は一回もないのですが、 周りを見回してみると結構当たってます。 ところが最近のゲームは3Dをふんだんに使っていて、敷居が高く、 そこで挫折してしまう人がたくさんいます。 提案者のシステムは初心者をターゲットにした簡単に3Dアニメーションを作れるソフトウェアです。
驚いたことにプレゼン資料を全て今回作成したソフトウェアVisual Scene Editorで作っています。 プレゼンを見るとVisual Scene Editorのすごさがわかります。 機能がたくさんあってここには書ききれないですが、完成度が非常に高いです。
実際にプレゼンを見てて、3Dアニメーションをふんだんに使ったかっこいいプレゼンなんですが、 これが簡単に使えるようになればいいなと思いました。 話を聞いてみると、プレゼン用に最適化してものを別に開発することは考えているそうです。 MacのKeynoteがかっこいいと嘆いていたWindowsユーザも、 Visual Scene Editorでかっこいいプレゼンができるようになるかもしれません。
ソフトウェアは公開されていますので、実際に使ってみてはいかがでしょう。
Visual Scene Editor
採択者は現役の高校生!! IT業界でスパークと聞くとSunのSPARCしか思い浮かばないのですが、高校生には分からないんだろうな。
Spark ProjectはFlashでゲーム開発を行うためのクラスライブラリ集を開発するプロジェクトで、 今回はイベントドリブン型で処理をするXelfというのを開発しています。 Xelfの由来は単にFlexを逆にしただけとか。
エージェントという概念があって、エージェントがお互いにメッセージを交換する事によって処理が行われるという仕組みになってます。 そのためオブジェクトが多くできるのですが、DIコンテナを使って簡単に管理できるようにしてます。 またConvention Over Configurationでできるだけ簡潔になるように工夫されています。
Spark Projectにて公開予定。
誰かと一緒に同じwebページを見る事ができるwebブラウザです。 とにかく使ってて楽しい!! 一緒に同じページを見ながらチャットができたり、ページに落書きができたり、相手のマウスポインタをバシバシ叩く事ができたり。 誰かがリンクをクリックすると、同じページを見ている人のページもちゃんと切り替わるようになっています。 今回採択されているnetPlantに対応して、未踏ユース同士のコラボも面白い。
技術的にもかなりこった事をやっています。 同じページをブラウズしているときのやり取りは、 多くのデータのやり取りを行うのでP2Pで行っていて、 それ以外の部分の処理にはWeb APIを通してAntwaveのサーバとやり取りをしています。 HTTPにデータを載せてやり取りをすることで、簡単に外に出れないような環境でもちゃんとデータのやり取りが行えるようになっています。
採択者は2chで有名になった上下ジーパン男の映画監督でもあります。 映像が趣味というだけあって、作ってきたデモムービはかなりクオリティの高いものになってました。
採択者が提案するシステムはどこでも使えるWiki型CMS「Ubiki」。 Ubikiはオフラインでもオンラインでもどこでも使えるWikiシステムを目指しています。 確かにこういうシステムがあれば、どこでもメモがとれて共有できるから便利ですね。 残念ながら作ったシステムは完全にうまく動けるところまではいってないようですが、 今後の開発に期待したいところです。
MMORPGを使ってプログラムを学習する事ができるシステム。 MMORPGには多くの人がハマっていますが、そこにプログラミングの演習を持ってくれば楽しくプログラミングが学べるのではないかというアイデアです。 デモでは簡単なRPG上で問題を解く事で次に進む事ができるようになっていました。 採点をどうするかとか、いろいろ難しい部分は多いと思いますが、 こういうシステムでもっとプログラミングの敷居が下がるといいですね。
ネットワークブートを用いることでディスクレスで複数のマシンに同じシステムを起動させてしまおうというシステム。 ネットワークブートを用いる事自体はそんなにすごいことではないが、 彼がすごいのはこのシステムのために分散ファイルシステムを作ってしまったところです。 ファイルシステムはNBD(Network Block Device)の上に全てユーザランドで書かれています。 ディスク全体のイメージを複数のサーバに分割して持つ事でメモリの消費量を抑えています。 またデータを重複して持つ事で耐障害性も高めています。 僕はこの分散ファイルシステムだけでも十分に価値があるのではないかと思いました。 (というかそっちの方に興味があった) もっと実用性を高めて安定運用できるところまで期待したいところです。
コメントにもっと記述力を持たせようとする試み。 このシステムを使う事で、他言語コメント、プログラマのレベルに合わせたコメント、部分的なコメントが実現できるようになります。 コメントは別ファイルに保存されていて、同じシステム上で開発する必要がありますが、こういう細かいコメントが記述できるようになれば便利ですね。 提案者はEmacsで実装していましたが、僕はEmacsは使わないので、ぜひvimにも移植して欲しいです。
RSSはデータの配信に広く使われていて、ツールもいろいろ揃っています。 ですが、元々パブリックなデータを配信するのに使われているため、認証部分が弱いです。 提案者はグリッドコンピューティングの研究室に属していて、グリッドコンピューティングで使われている認証システムと組み合わせてしまおうという提案です。 グリッドで使われている認証を通す事で、非公開な情報をRSSで配信できるようにします。
実際に作ったシステムを作ってデモを行ってくれました。 先生が現れると通知が届くというデモです。 グリッド - MARS - Plagger - メール という構成で、 先生が財布をマウスの近くに置くと財布とマウスに入っているRFIDによって検知されてメールが届くようになっています。 こういうところにRSSが使われるなんて面白いですね。
漢字の学習を支援するシステムです。 漢字はたくさんあって覚えるのが大変ですが、漢字をストーリにすると覚えやすくなります。 漢字んカナメは漢字を分解してストーリを自動生成するシステムです。 漢字を入力してしばらく待つと、分解された漢字の一部分がうにょうにょ動き出してストーリが出来上がります。 動く様子は見てるだけでも楽しい。こういう遊び感覚が学習には必要なんでしょうね。 現在特許出願中のようで、実際に手元で使えるようになるのが楽しみです。
3DCGの描画処理にはラスタライズ法とレイトレーシング法があるそうです。 ラスタライズ法は高速に処理できるのでゲームとかのリアルタイムCGに、 レイトレーシング法はリアルな3Dを生成できるが計算に時間がかかるので映画等のオフラインCGに使われています。 提案者の汎用高速3Dライブラリ"GUPUPPUR"では、ラスタライズ法とレイトレーシング法を組み合わせたハイブリッドな3Dライブラリです。
実際に作ってみて動かしてみると、結果的にはOpenGLよりも遅くなってしまったとのこと。 ラスタライズ法の計算に使われるGPUは広く普及していますが、 レイトレーシング法の計算に用いられるプロセッサにPPUというのがあって、これがかなり高価だそうです。 PPUが広く普及するようになれば、GUPUPPURを使う事で現実的な速度今までよりもきれいな3Dを描画できるようになるかもしれません。
トゥーンレンダリングという技術があります。 写実的な描画ではなく、アニメのように陰影のはっきりした描画を行うのがトゥーンレンダリングです。 トゥーンレンダリングでは3Dの物体に光を当てる事で陰影をつけるのですが、 実際にやってみるとうまく影がつかない場合があります。 提案者が作ったのはトゥーンレンダリングの処理を行う時に、手で陰影のつける部分を変更して、 光源の位置を変えてもちゃんと描画されるようにするシステムです。 Mayaというプロが使っているシステムのプラグインとして開発しています。 今後、実際の映画製作に使われる予定ということで、早ければ次のポケモンに使われるそうです。
ロボット技術は非常に高度高価だが実際にできることが少なく、人間が期待する事とのギャップが大きい。 なので、ロボットの部分を一部分に限定すれば現実的なものが作れるのではないかというのが提案者の考えです。 提案しているシステムは手や目などの一部分を作って、いろんな物を擬人化してやろうというもの。 デモでは電子レンジに手や目がついているものを見せてくれました。 女性が見ると「かわいい」と言う人が多いそうです。 こういうアプローチは面白いですね。
未踏ユースでの成果報告会についてまとめてみました。 未踏ではいろいろ面白いプロジェクトがいっぱいあります。 プロジェクトだけでなく、未踏を通じていろんな人との繋がりができます。 みなさんも未踏プロジェクトに応募してみてはいかがでしょうか。
Tweet
はじめまして。今月から入社した5日目の新人のyukiです。yukiですが女性ではありません。残念です。
ウノウでは毎日新鮮な気分で仕事させてもらっています。毎日違う机や椅子、ボールというのもすごいですね。朝もゆっくりなのでシャワーを浴びて、洗濯物を干してから出かけたりしてます。
さて今回は初めてラボを書くことになりました。諸先輩方のためになる記事、さすがです。そこで自分はちょっと方向性を独自にとってみようと思います。
Yahoo! DEVELOPER NETWORK(英語) より、Yahoo! UI Library(YUI) のお話です。結構有名どころだと思いますが。
最近ではリッチなインターフェースのサイトも多くなってきました。通信速度やコンテンツ内容はすばらしくても、「使ってもらえる」サイトでなくてはユーザーの不満がたまります。去ることはなくても、より使いやすいサイトが出てくればそちらに流れるかもしれません。
Movable Typeなどを使って手軽に製作できるようになりましたが、あまりに使わているためにどうしても差別化が必須になる場面があります。そういうときに、ちょっと手軽に追加できるライブラリを知っておくといいかもしれません。幸い設置方法やサンプルなどもしっかりあり、初心者向けに作られてる感じです。
この他にも、ブラウザの違いを吸収して同じ大きさで表示してくれるFonts.cssや<ol>タグなどの表示誤差をリセットしてくれる Reset.cssなんかもあります。自分の手ですべてを調整しようとすると大変ですが、いったんYUIに調整してもらってから自分で修正したりすれば、大分作業がラクになります。
Tweet
こんにちはmatsudaと申します。
2月に中途でウノウへ入社した新人です。
まだウノウでの体験は少ないので、これまで勤めてきた企業でやっていた会議で、自らの失敗談から学んだ会議を円滑にすすめるための会議術をご紹介します。
頭の片隅にちょっとでも残していただけるのであれば、とてもうれしいですね。
Tweet
yamaokaです。
PHPで日本語を扱う場合、mbstringモジュールを利用する場合が多いと思います。 日本語に特有の機能(カタカナの全角/半角変換など)も備わっていて、とても便利です。 しかし、日本以外ではmbstringモジュールはあまり利用されていないようです。 代わりに利用されているのがiconvモジュールで、 最近話題のフレームワーク、symfonyでも 国際化の機能を実現するために内部で利用されています。
iconvモジュールはPHP 5でPHPの本体に組み込まれました。 別途用意して組み込む必要があるmbstringモジュールと違って、最初から使用できるので便利ですね。 PHPのマニュアルのiconv関数のページを見ると、 いくつかの関数が定義されているのがわかります。 それぞれ、mbstring関数との 対応表を作ってみました。
| iconv関数 | mbstring関数 |
|---|---|
| iconv_get_encoding | mb_http_input, mb_http_output, mb_internal_encoding |
| iconv_mime_decode_headers | mb_decode_mimeheader |
| iconv_mime_decode | mb_decode_mimeheader |
| iconv_mime_encode | mb_encode_mimeheader |
| iconv_set_encoding | mb_http_output, mb_internal_encoding |
| iconv_strlen | mb_strlen |
| iconv_strpos | mb_strpos |
| iconv_strrpos | mb_strrpos |
| iconv_substr | mb_substr |
| iconv | mb_convert_encoding |
| ob_iconv_handler | mb_output_handler |
mbstring関数は上に挙げた関数以外にも定義されているので、mbstring関数の方が機能的には豊富です。 また、php.iniで設定できる内容の対応表も作ってみました。
| iconvセクション | mbstringセクション |
|---|---|
| iconv.input_encoding | mbstring.http_input |
| iconv.internal_encoding | mbstring.internal_encoding |
| iconv.output_encoding | mbstring.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がサポートされます。日本語の取り扱いも変わってくると思われるので、要チェックですね。
以下追記です:
Tweet
komagataです。
最近、個人でWebサービスを作る人が増えています。
僕も個人(2人)で※Plnetというしがないサービスを作っています。Plnetを作るにあたって、もう一人の作者t-kawaduと目標に掲げたのが、
「とにかくオープンすること。」
なんて低い目標だと驚かれるかもしれませんが、仕事で作るのとは違って個人でWebサービスを作る上で一番大変だったのは“やる気を継続させること”でした。やる気を継続させるためにやったことを紹介したいと思います。
(普通こういうことは成功しているサービスの作者が言うものですが・・・)
よく飲みながらこれこれこういうサービスを作ったら便利なんじゃないか、なんて話をしますが実際に作ったためしがありませんでした。自分の口ばっかり具合にうんざりしていたので、寝て気が変わる前にドメインを取りました。
開発・公開に使うサーバも寝てしまう前に借りました。さくらインターネットの月500円のプランならまったく気兼ねなく借りられます。
次の日の朝起きたときに心底後悔したのをよく覚えています。前日にドメインやサーバを借りていなければ絶対に開発を始めることはなかったと思います。
開発を始めたとしても、初日にやっていける感触が掴めなければやはりやる気が失せてしまいます。とにかく外部からアクセスできる何かを1日目で作り上げました。(HTMLだけでもいいので)
具体的に初日はレンタルサーバのドメインの設定と、vimのインストールをし、簡単なトップページを作りました。ソースのバージョン管理のためのsubversionやtrac、emacsの設定はそれだけで初日が終わると思ったのでやりませんでした。(やる気が充実してから、後日やりました。)
綺麗な実装を追求するのは楽しいものですが、綺麗な実装方法が自分でも思いつかない箇所などが出てくると逆にストレスになります。個人的にそうして開発をやめてしまったオープンソースプロジェクトの残骸がいくつかあります・・・。
最初から“動くもの重視”と思っていればそれほどストレスになりません。
「おまえはなんて素晴らしいコードを書くんだ」とか「今日も相変わらずキーが走ってるよ」とか言い合ってました。
Webサービスは一時のモチベーションで作れるものではなく、やはり大半は地味な作業が続きます。感覚的に、第三者のフィードバック無しにやる気を維持できるのは1ヶ月辺りが限界じゃないかと思います。
オープンさえしてしまえば例えばどこかのブログで、
「けっこういいかも」
などと書かれただけでも1週間分ぐらいのやる気は余裕で確保できます。(実際にはSafariでの動作確認のためにオープンは1ヶ月を1週間程オーバーしてしまいました。)
オープンしたからといってそのWebサービスが成功するかは別問題ですが、オープンしないことには成功する確率は0%です。とにかく一度作ってみると楽しいものです。もっと個人でWebサービスを作る人が増え、作成のノウハウをみんなでシェアしていければいいなと思います。
※Plnet [ http://plnet.jp ]
Bloggerやdel.icio.us、Flickr、はてなブックマークなど様々なサービスをまとめて一つのブログのように見せたり、Mixiの足あとのような機能をブログに持たせるサービスです。
よろしければ使ってみて下さい。そして使い勝手などをフィードバックして頂ければ幸いです。
Tweet
こんばんは。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で入力した場合の絵文字は以下の範囲です。
一方、DoCoMoの絵文字の範囲は以下です。
このDoCoMoの絵文字をauの端末で見た場合に表示されるのは、
それぞれのDoCoMoの絵文字に対応するauの絵文字です。
この文字をコピペしてフォームから送信すると・・・
そのまま(F8xx~F9xxの範囲)送られてきます。
auはサーバで変換しているのではなくて、
ただ、その範囲に絵文字を割り当てているだけのようです。
(普通に考えたらわかりそうなものですが。。。)
SoftBankの端末ではHTMLをコピーできる端末を知っていますが、
もし、auでそういう端末がある場合は、
DoCoMoの絵文字でauでの絵文字の表示も兼ねているサイトではHTMLからコピーして、
formでペーストして。。。とDoCoMoの絵文字が手軽に送られてくるのかもしれません。
厳密に行うには、
au(DoCoMoの絵文字) → au(本来のauの絵文字)
への変換をしてあげないといけません。
(そこまで面倒を見てあげる気にはなれませんが。。。)
もし同じ誤解をしている方がいましたら、気をつけてください。