僕は発展途上技術者

iPhone 3GS が届きました - 「かなぶん」を動かしてみた

日付変わって昨日になりますが、発売日に iPhone 3GS が届きました。


iphone 3g s arrived on Twitpic

↑ なかば強引に妻のも購入、黒白1台ずつ。お父さん犬も2匹ついてきて息子2人も喜んでます。


おお、iPhone って電話が使える!!いや、失礼。2年間 AT&T にしかつなげることができない 2G iPhone を使っていたので、基本的なところで感動してしまいました。


コンパスや音声コントロールなど、いちいち「おお!」とか一人歓声をあげながら、一通り3GS の新機能を試した後、先日リリースしたかなぶんを動かしてみました。



ご覧のように問題なく動いています。


ちなみに、この動画ももう一方の iPhone 3GS で録り、録った直後に YouTube に投稿しました。ビデオから SD カードを抜き取り PC に挿入してからアップロードしていたのと比べると、これは格段に便利です。


続 せっかちな人のための git 入門 - 共有リポジトリの作り方

久々 git のセットアップをすることになり、自分で書いた記事を参考にする。


» せっかちな人のための git 入門 - git をインストールし、共同で開発できる環境を整えるまで : 僕は発展途上技術者


いつのまにかはてなスターがたくさんつき、ブックマーク数も400を超えていた。さすがはてなユーザー。「git なにそれ?」というのが一般ユーザーはもちろん、多くのプログラマー(ブログ書いたり読んだり twitter 使ってたりすると僕らweb系、オープン系が多数派だと勘違いしてしまいそうになるが、決してそうではないのですよね)の反応だと思うのだが。。。


さて、上記記事では触れていない、共有レポジトリの作成方法を書き留めておきます。


まず準備としてリポジトリを使うことになる複数ユーザーを同一グループに所属させます。


太郎くん、次郎くんのアカウントを作成。



% sudo useradd taro

% sudo passwd taro

% sudo useradd jiro

% sudo passwd jiro


group hoge を作成し、taro jiro を hoge に含めます。



% groupadd hoge

% sudo vigr


hoge のユーザーリストに taro jiro を追加します



共有リポジトリを作成します。



% sudo mkdir hoge.git

% cd hoge.git

% sudo git init --bare --shared


git init に --shared オプションをつけ、値を何も指定しない場合、default の --shared=group が適用されます。



The option can have the following values, defaulting to group if no value is given:


» git-init(1)


また、



group (or true): Make the repository group-writable, (and g sx, since the git group may be not the primary group of all users). This is used to loosen the permissions of an otherwise safe umask(2) value. Note that the umask still applies to the other permission bits (e.g. if umask is 0022, using group will not remove read privileges from other (non-group) users). See 0xxx for how to exactly specify the repository permissions.


group (or true) とあるので、sudo git init --bare --shared=group でも sudo git init --bare --shared=true と指定しても結果は同じです。


hoge.git/config ファイルをみてみると、いずれの場合でも、



sharedrepository = 1


となっています。


上記 git の公式ドキュメントにあるように、hoge.git ディレクトリ含め、それ以下のすべてのファイル、ディレクトリのグループ属性に s ビットが立つようになります。


hoge.git 以下すべてのファイルのグループを hoge に変更すれば、hoge グループに属しているユーザーがこのリポジトリに対して読み書きできるようになります。



% cd ..

% chgrp -R hoge hoge.git

% ls -l

drwxrwsr-x 7 root hoge 4096 6月 18 00:42 hoge.git


taro さんがまずローカルマシンで適当にファイルを作成し、レポジトリに push します。



taro% mkdir hoge

taro% cd hoge

taro% git init

taro% git remote add origin ssh://taro@hogehoge.com/var/git/hoge.git

taro% touch README

taro% git add .

taro% git commit -m "Initial import"

taro% git push origin master


次に jiro さんの番です。



jiro% git clone ssh://jiro@hogehoge.com/var/git/hoge.git

jiro% vi README (適当に編集)

jiro% git add .

jiro% git commit -m "Test commit"

jiro% git push origin master


これでちゃんと permission エラーなどにならず、push できれば OK。


最後に taro さんが jiro さんの変更した部分を取り込みます。



taro% git pull origin master


誤りなどありましたらご指摘ください。


参考:

» [git] 共有リポジトリを作る:git init --bare --shared=true - satoko's blog - s21g

» git-init(1)

» gitcvs-migration(7)


iPhone アプリ、ひらがなゲーム「かなぶん」をリリースしました

長らく審査中(2ヶ月くらい?)だった iPhone アプリ「かなぶん」がやっと App Store に並びました。


kanabun.png



かなぶんは、盤面上に並んだひらがなを使い、制限時間内にいかにたくさんの単語を作れるかを競うゲームです。


大人からこどもまで、やり込むほどやめられなくなる面白さです。


家族や友達同士、だれが一番高得点をだせるかを競いながら、お楽しみください。


» ひらがなゲーム「かなぶん」


「知育ゲーム」的な側面を持ってはいますが、純粋にゲームとして大人でもはまる面白さだと思います。


上記リンクからたどれるWeb版「かなぶん」で、ほぼ同じルールで遊べますので、一度試していただいて気に入っていただけたらぜひ!


昔からずっと遊ばれている「しりとり」がそうであるように、一時的に遊ばれ終わるのではなくて、50年後、100年後も遊んでもらえるゲームにできたらいいなと思っています。


関連記事:

» 「かなぶん」iPhone 版クローズドベータのご案内 : 僕は発展途上技術者

» かなぶん(α版) - 僕は発展途上技術者 2.0


Amazonから調布市立図書館へ、すぐさま本を予約できるGreasemonkeyスクリプトをパワーアップ

2年前に作った


» Amazonに調布市立図書館の蔵書検索リンクを追加するGreasemonkeyスクリプト : 僕は発展途上技術者


を、今回思い立ってパワーアップしてみました。


いままでは、単に該当する本の図書館での蔵書検索結果のページに移動できるリンクを追加していたのですが(これだけでも便利でしたが。。)、さらにその本が図書館にあるかどうかをあらかじめチェックし、蔵書がある場合のみリンクを追加するようにしました。


また今までは個別ページにしか表示していなかったリンクを、Amazon の検索ページでも表示できるようにしました。


amazon.png


これは、もう死ぬほど便利!!あらためて、Greasemonkey がめちゃめちゃ強力であることを思い知りました。


調布市民にしか紹介できないのが残念でなりません。でも、Javascript の知識があれば、最寄りの図書館用に改造して使っていただけると思います。


バージョン管理しやすいよう、github に移しました。


» amazonchofulibrarylinky.user.js


上記スクリプトは Firefox でしか動かず、Safari + GreaseKit では残念ながら動きません。


外部のサイトにアクセスする GM_xmlhttpRequest() が GreaseKit では利用できないためです。


でも、僕は Safari ユーザーです。実は上記スクリプトを自分用に改造し、いったん僕のサーバーに中継させて Safari でも使えるように細工しています。そちらのスクリプトは、ちょっと公開はできないのですが、もし調布市民でどうしてもこのスクリプトを Safari で使いたいという方がいましたら、ご連絡ください。なんとか使えるようにするかもしれません。


Joker Racer と行ったカリフォルニア

うーむ、題名が微妙なんですが、サイドフィード赤松さんの


» where2.0 2009 に参加した理由と感想 : a++ My RSS 管理人ブログ


にならい、Joker Racer と Where 2.0 の感想などを書きたいと思います。


» Joker Racer


僕はサイドフィードには所属しておらず、Joker Racer はいまのところサイドフィードのサイドプロジェクトという位置づけなので、以降の文章は僕個人の視点として受け止めていただきたいと思います。特に、赤松自身に対する記述は、あくまで個人として正直に感じたことを書いているだけであり、メンバーが代表を持ち上げるとか社員が社長を持ち上げているといった類のものではないので。。。(書くまでもないかなとも思ったのですが、まあ一応)


きっかけ


3月始め、赤松さんから、Joker Racer が Where 2.0 に出展することになったのでその準備を手伝ってくれないかというお誘いを受けました。


最初からターゲットを世界に置いていることに大きな魅力を感じ、そして「あとで行く」が「あとで読む」に対するオマージュであることからもうかがえるようにかねてからリスペクトしている赤松さんの誘い、ということもあって二つ返事でお手伝いさせていただくことになりました。


iPhone アプリ


Joker Racer をコントロールする iPhone アプリを開発できる、というのも大きな魅力の一つでした。


知識全くゼロからの開発でしたが、Erica Sadun 女史による iPhone デベロッパーズ クックブックかなぶん を開発していただいている id:Kanta さんに大いに助けていただき、なんとか Where 2.0 までにプロトタイプとよべるものが完成しました。


Where 2.0 で紹介されているほかのプロダクトでも、Web + iPhone という組み合わせが多く、うまくそのトレンドにはまっていたように思います。Nintendo コントローラーには操作性の上ではまだまだ及ばないのですが、「iPhone でも動く」ということはデモに来ている人たちの反応を見る限り、結構なインパクトを与えていたように思います。


ただ「え、これって App Store からダウンロードできる??」と聞かれることが多かったので、欲を言えば App Store からダウンロードできる状態にまで作り込んでおけばよかったかな。


偶然と努力



自分で書くのもなんですが、このプロジェクトは本当に強運で、いろんなことがなぜかすべてうまくいくのですw。

調子の悪かったマシンが本番の大舞台だけはシャキンと動いたり、今回の Launch Pad の発表の件しかり、結果的に良い方向になるということが多く、つまりは、なんでもポジティブに捕らえている状態なので、えっと、えっと、where2.0 もすばらしかったです(笑)。


と赤松さん自身、冒頭に紹介したエントリーに書いているのですが、その運をひきよせた裏には赤松さんと大森さんの大きな努力と、チャンスを最大限に生かそうとするどん欲さの両方があったということは、今回一緒にプロジェクトに関わることがなかったら知るよしもなかったでしょう。


Launch Pad のプレゼンでは、ご本人は謙遜しておられますが、英語で堂々とプレゼンをおこない、きっちり笑いと賞賛の拍手を獲得していました。赤松さんならクールにスマートに、練習なんてそこそこにさらっとあのくらいできてしまうのだろう、というのがいままでの僕のイメージでした。


そのかっこいいスーパーマンなイメージをひっぺがしてしまうようで、赤松さんには申し訳ないのですが、いやいや実はその裏には、何度も何度もストーリーを書き直し、暗記するためにホテルで繰り返し繰り返しリハーサルをされている赤松さんの姿があるのです。


僕の好きな言葉にルイ・パスツールの le hasard ne sourit qu'à l'esprit préparé というのがあります。「偶然(あるいはチャンス)は準備のない者に微笑(ほほえ)まない」と訳されることがあるのですが、まさにその通りのことが次々と起こっていったのを目の当たりにしました。


当然のごとく偶然とともに良い結果も努力をおこなった人のところにしか訪れないのだということも。。。



Joker Racer の楽しさ


プロトタイプのかなり初期の段階のものを触らせてもらったときにその楽しさを実感しました。遠隔のものをコントロールするというのは、たぶんそれだけで楽しいことなのですが、その対象との距離が遠くなれば遠くなるほどドキドキします。見えない場所、危険な場所、あるいは遠いどこか別の国にあっても操作できるのが、Joker Racer の楽しさなんじゃないかと思っています。


それを端的に表しているのが、以下の動画です。僕も会場を一周させてみたのですが、車がブースの裏側にまわり自分の視界から消えた瞬間から楽しさが一気に倍増するのです。(下の動画だと 1:40 あたりから)


Joker Racer はこれからも確実にどんどん楽しくなっていくと思います。


» Joker Racer



懐かしきカリフォルニア


さて、最後に Joker Racer からちょっと離れた個人的な話を。。。


2000年 - 2004年の間生活した後、帰国して以来初めてサンフランシスコベイエリアを訪れました。


Where 2.0 を終えたあと一日時間をもらい、勤めていた会社のオフィスを訪ねたり、その後転職した元同僚や友人の家を訪ねてまわりました。


僕の後任として呼んだ韓国人の同僚であり友人の奥さんは会計士の資格をとるべく主婦業のかたわらコミュニティカレッジに通っていたり、転職した元同僚は次のステップを考えて Bio Informatics の学位を Distance Learning (いわゆる通信教育)で取得中だったり、ジュエリーショップを購入して自分のビジネスを立ち上げつつある友人女性など、ここではだれもが前向きに一生懸命に努力して生きているのです。


また、仕事だけではない、ゴルフや BBQ の焼き方、庭で本格的に野菜を育てていたり、あるいはネイティブインディアンの美術に興味を持っていたりと、それぞれのやりたいこと好きなことに対してものすごい入れ込みようで、彼らの話を聞いて、カリフォルニアのあるいはアメリカ文化独特のエネルギーを注入された気がします。


かつて僕も持っていたものが、日本に帰ってきて生活するうちに、すこし忘れかけ、薄れていたのかもしれません。それを今回 Joker Racer に関わることで、また Where 2.0 のためにカリフォルニアを訪れたことで呼び覚ますことができたのはとても価値あることでした。


mp4 から avi への変換など、動画編集に役立つフリーウェア

ゴールデンウィーク最終日は、悲しくも雨。


というわけで今日は外出せず、インドアでなにかこども達を喜ばせようと、映画撮影のまねごとをしてみました。


以前


» 「ダースベーダー vs ヨーダ」 本編では描かれなかった闘い (ホームビデオです。悪しからず) : 僕は発展途上技術者


こんなものを作ったことがあるのですが、2年経って僕も子供達もちっとも進歩せず、あいかわらず僕らにとっては、映画 = スターウォーズ なのです。


というわけであいも変わらず、スターウォーズの名シーンをいくつか再現し、撮ったビデオに本編の音声を合成したりして楽しんだのですが、毎回毎回動画ファイルの変換をおこなうソフトウェアを探したり、手順を思い出すために無駄な時間を使っている気がするので、手順を自分のためにもメモしつつ、使ったフリーウェアを紹介します。


1. MPEG4形式のファイルをAVI形式のファイルに変換


xacti で撮ったビデオのファイル形式が MPEG4 で、後述する Windows ムービーメーカーで編集できる形式が AVI なので、MPEG4 -> AVI の変換をおこないます。


以前は、MPG2AVIというフリーウェアを使っていたのですが、なぜか動かなくなっており、しかもダウンロード元のページがなくなってしまっていたので、


» Free MP4 to AVI Converter 1.3 - Convert MP4, M4V, MP4V files to AVI or MPEG, iPod MP4 to AVI converter - Jacek Pazera


に切り替えました。


MPEG4 -> AVI の変換にしか使わないので、マニュアルを読むことなく操作できましたが、もっと高度なことがやりたい方は適当にググッてみてください。


2. DVDから音声を抽出


映画のDVDから音声を切り出してくるために僕がいつも使っているのが、


» Audacity: Free Audio Editor and Recorder


です。


DVD を再生し、Audacity の音源を選ぶセレクトボックスで「Stereo Mix」を選択し録音したあと、wav 形式で書き出します。


3. 動画や音声ファイルを編集


動画や音声ファイルを編集するときに使うのが、Windows ムービーメーカー。Windows XP に最初から入っていたソフトウェアですが、こいつが結構便利で使えるのです。


以上のフリーウェアがあれば、とりあえずそれっぽい動画を作ることができます。


番外として、「スターウォーズ好き」にしか役立たない情報ですが、


» スターウォーズのライトセーバー動画を無料ソフトウェアだけで自作する方法 : 僕は発展途上技術者


を紹介しておきます。


実は上記記事、rails や ruby、プログラマー向けの話題が多い僕のブログの中にあって、他を圧倒してダントツで読まれている記事だったりするのです。


passenger を使うときは .htaccess を削除!

サーバー周り、環境構築でここ数日よくはまる。


以前はまったことがあったのに、またまた同じところではまってしまった自分に厳重注意。


passenger を使うときは .htaccess を削除


皆さんもはまってます。


» Passenger を使う時は public/.htaccess に注意! - yuum3のお仕事日記

» Passenger(mod_rails)と.htaccessではまる - 仙台Rails社長


Ubuntu Hardy に ImageMagick と RMagick をインストールする

わかってしまえば超簡単なのですが、2時間近くはまってしまいました。


Slicehost 上の Ubuntu Hardy に ImageMagick と RMagick をインストールするには



% sudo aptitude update

% sudo aptitude install imagemagick libmagick9-dev

% sudo gem install rmagick


であっさり出来てしまうのですが、最初の sudo aptitude update をやっていなかったために、sudo gem install rmagick で



Building native extensions. This could take a while...

ERROR: Error installing rmagick:

ERROR: Failed to build gem native extension.


/usr/bin/ruby1.8 extconf.rb install rmagick

checking for Ruby version >= 1.8.2... yes

checking for cc... yes

checking for Magick-config... no

Can't install RMagick 2.9.1. Can't find Magick-config in /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin


というエラーに悩まされ、ああでもこうでもないと散々パッケージのインストール、アンインストールを繰り返してしまいました。


sudo aptitude update は、man の記述



Updates the list of available packages from the apt sources (this

is equivalent to "apt-get update")


の通り、aptitude でインストールするパッケージ情報を最新に更新するコマンドです。これまで特に更新しなくても問題が起こらなかったため、甘く見てました。今度からは aptitude install でなにかパッケージをインストールするときは、事前に必ず aptitude update をおこなうことにします。


aptitude update 超重要ということはもっと認識されるべきです。(どこにもあまり書かれてない)


あと、sudo aptitude install imagemagick libmagick9-dev がなにごともなく通っているように見えて、ImageMagick が正常にインストールされている、と勝手に思い込んでしまったことも問題がどこにあるかわからなくなってしまったことの原因。


ImageMagick がインストールされているかどうかは、



% which convert

/usr/bin/convert


で確認できるということが、インストールがうまくいった後わかりました。


HTMLカラーコードで表された色を濃く(暗く)する Javascript

任意に指定された HTML カラーコードで表された色と、それを少し濃くした色とのペアを取得するという必要にせまられた。これを実現する Javascript のコードを探したのですが、適当なものがみつからなかったので自分で書いてみました。


エントリー末尾の Javascript コードを読み込み、


darken('ff0000', 0.8)


のように darken 関数を呼んでください。2つ目の引数は濃くする度合いで、1に近いほど濃くする度合いは弱く、0に近いほど度合いが強くなります。


以下、実際どのように濃くなるかの例です。


  ff0000

  darken('ff0000', 0.8) = cc0000


  ffccff

  darken('ffccff', 0.8) = cca3cc


» Miscellaneous : True Color Darkening and Lightening / The JavaScript Source


のコードを参考にしました。


上記は逆数を取ったりとちょっとややこしいことをしているのですが、#ff0000 のような原色をうまく変換してくれなかったので、


» Darken and lighten color? - Usenet Forums




To lighten, increase RGB values by 10% each. To darken, decrease RGB values by

10% each. Maybe replace 10 with whatever the "certain amount" is.


(RGBの各色を10%ずつ増やせば色を薄く、10%ずつ減らせば色を濃くできる)


という発言を参考にして書き直しました。


不備があったり、もっと良い方法がありましたら、コメントなどでお知らせください。



世界中のどこからでもラジコンを遠隔操作 - JokerRacer

あとで読むフレッシュリーダーを開発されたサイドフィードの赤松さんに誘っていただき、一ヶ月ほど前から参加しているプロジェクトなのですが、これがかなり良い感じで進行しています。


いろいろ説明するより見てもらった方が早いです。



Linux サーバーを積んだラジコンを無線経由でインターネットに接続し、iPhone から操作!


車の前面に搭載されたカメラからリアルタイムに配信される動画が映し出されているので、ネットにつながりさえすればラジコンが世界中のどこにあっても、また操作する側も世界中のどこにいても可能なのです。(理論的には、という話ですが。。。)


ラジコンのスピードに比べて、オンボードカメラから映し出される動画から感じられる体感速度が超高速に感じられ、テンションがあがります。


速く数台を表で走らせ、競争したい!


詳しい情報は、以下のリンク先にあります。


» Joker Racer - remote drive our real racing car


» iPhone からラジコンを操作してみる : a++ My RSS 管理人ブログ


プロフィール

株式会社まちクエスト代表、つくる社LLC代表。

Scratchで楽しく学ぶ アート&サイエンスRaspberry Piではじめる どきどきプログラミングを書きました。

オンラインコンテンツ: 大人のためのScratch

Amazonから図書館検索 Libron、iPhoneアプリ ひらがなゲーム かなぶん を作っています。

Email: webmaster at champierre dot com

Twitter @jishiha

最近のエントリー

アーカイブ