2007/06/26

Rails API を読む


Railsに限らず、Documentは非常に重要で、とても参考になるものです。

いつもはRails Framework Documentを参考にするのですが、他に以下のようなサイトもあるようです。知らなかった・・・w



Ruby on Rails Manual
過去のバージョンのDocumentも揃っています。



Rails API with the AJAX flavor
AjaxでSuggestしてくれるので便利!



gotAPI/HTML - Instant search in HTML and other developer documentation
AJAX and Frameworks(Prototype.js等)や、HTML/CSS/Javascript等、Rails以外のも多数載ってます。こちらもAjaxでSuggest!これはいい!

2007/06/21

Edge Railsとruby-Gettext


先日、新しいRailsプロジェクトを作る機会がありまして、せっかくなのでRESTfulなRailsでいこうと思い、Edge Rails使うことを決意。



ですが、さっそく躓いたので、以下問題と解決です。ご参考までに。



アプリを起動するとエラーが発生し、development.logに以下のエラーが。

DISPATCHER FAILSAFE RESPONSE (has cgi) Wed Jun 20 21:18:28 +0900 2007
Status: 500 Internal Server Error
You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
C:/ruby/lib/ruby/1.8/cgi.rb:1165:in `[]'
C:/ruby/lib/ruby/gems/1.8/gems/gettext-1.9.0-mswin32/lib/gettext/locale_cgi.rb:26:in `system'
C:/ruby/lib/ruby/gems/1.8/gems/gettext-1.9.0-mswin32/lib/gettext/locale.rb:88:in `system'
C:/ruby/lib/ruby/gems/1.8/gems/gettext-1.9.0-mswin32/lib/gettext/locale.rb:96:in `default'
C:/ruby/lib/ruby/gems/1.8/gems/gettext-1.9.0-mswin32/lib/gettext/rails.rb:276:in `render_file'
:
:



[gettext-u-en] Problem with gettext 1.9.0 and RESTful rails appを参考に、問題解決(ここまでくるのに、数日の間Google先生に質問攻めでした・・・)

--- /opt/local/lib/ruby/gems/1.8/gems/gettext-1.9.0/lib/gettext/locale_cgi.rb 2007-05-28 16:11:27.000000000 +0300
+++ Desktop/locale_cgi.rb 2007-05-28 16:11:49.000000000 +0300
@@ -23,7 +23,7 @@ module Locale
def system
return @@default_locale unless @@cgi
cgi_ = cgi
- if ret = cgi_["lang"] and ret.size > 0
+ if not cgi_.params.empty? and ret = cgi_["lang"] and ret.size > 0
elsif ret = cgi_.cookies["lang"][0]
elsif lang = cgi_.accept_language and lang.size > 0
num = lang.index(/;|,/)



上記問題が発生したのは、

svn co http://dev.rubyonrails.org/svn/rails/trunk rails

でとってきたEdge Railsでした。

今しがた、再度Edge Railsを取り直したら上記問題は発生せずでした・・・

rake rails:freeze:edge TAG=rel_1-2-3



なんだったんだろw

2007/06/11

Enter キーでの Submit を抑止する方法


ときに、EnterキーでFormがSubmitされてしまうと、よろしくない場合があります。

そんなときは、以下のようにするとEnterキーによるSubmitが抑止されます。


function enterSubmit(event) {
event = event || window.event;
if (event.keyCode == 13) {
if (event.srcElement) {
if (event.srcElement.type != 'submit' &&
event.srcElement.type != 'textarea') {
return false;
}
} else if (event.target) {
if (event.target.type != 'submit' &&
event.target.type != 'textarea') {
return false;
}
}
}
}

<form action="#" onkeydown="return enterSubmit(event)">
<input type="text" />
<input type="submit" />
</form>


これでまたひとつ、すっきりしましたね。

2007/06/04

Firefoxでページ内にカーソルが出現する


しばらく前から、Firefoxでページを表示するとカーソルが出現するようになった。

とても邪魔くさくてなんとかしたいと思いつつ放置していたのだけれど、本日解決しました。



先日のGDDレポートにトラックバックをくださったせつないぶろぐにて解決方法が紹介[firefoxでページ内にカーソルが表示される件について]されていました。



で、解決方法はというと、F7キーを押すだけです。


F7キーを押すとキャレットブラウズモードのオンオフを切り替えます。この機能を有効にするとWebページ中に移動可能なカーソルが表示され、キーボードでテキストを選択できるようになります。

とのことです。



いやー、とてもすっきりしました!

やっぱり放置はいくないですね。

2007/06/02

Google Developer Day 2007



5/31に世界同時開催された、Google Developer Day 2007 にいってきました。

北海道からはるばるの参加でしたが、とても有意義な時間を過ごすことができました。

開発者としてとてもよい刺激を受けたとともに、僕の中でのGoogle好感度が格段にアップしました。



Kynote & Speech


ご挨拶 - グーグル株式会社 エンジニアリング ディレクター マグラス みづ紀




まずは挨拶から。

Google初の世界同時イベントで、このDeveloper Dayには世界で5,000人が参加しているとか。

世界10カ国で同日開催されるこのイベントは、シドニー会場に続き、東京会場が二番目で、Google本社のMountain Viewが最後です。

(ご挨拶されたマグラス みづ紀さんはとても美しい方でした!)



基調講演 - Google,Inc. UberTechLead/Manager Greg Stein




Greg Stein氏の講演は、Googleのオープンソースについての考え方でした。


  • Googleのオープンソース活動は2002年頃から始まり、その頃はまだGoogle SOAP Seach APIしかなかった

  • 2005年頃から、Google Maps API、Google Code等、続々APIが公開される

  • sitemaps.orgは、Google,Microsoft,Yahooで設立し、CreateiveCommonsLisenceを用いている

  • ライセンスをCreativeCommonsにすることで、利用者に安心感を与えることができる

  • 自社のライセンスはつくらない。Apache、BSD、GPLを使用

  • ソースコードの80-90%は公開しても問題ない

  • オープンソースは市場を劇的に変える - Amazon,eBayの出現

  • Googleはインフラ(APIs)を提供

  • iGoogle,Mappletsを利用すれば、世界中のGoogleユーザへのリーチを得ることができる






ゲスト講演 - 株式会社はてな 取締役(最高技術責任者) 伊藤 直也




はてなの伊藤直也さんからは、はてなのサービスの紹介や、はてなのサービス作りの基盤は「クリエイティビティ」「コミュニティを信じる心」「技術」。「WebAPIは技術者をempowermentし、サービスによってユーザもempowermentする」というお話がありました。

いつもブログ等で拝見しておりましたが、こうして直接話しが聞けてとても刺激をうけました。



グーグル最新情報 - グーグル株式会社 シニア プロダクト マネージャー 及川 卓也




及川さんからは、Googleの最新情報がありました。

Google Codeの日本語化がされるようです。これはとてもありがたいことです。

iGoogleガジェットコンテストが開催されるようです。これは是非とも参加するしかないでしょう!

そして本日のサプライズ!Google Gearsの発表です。

GoogleGearsはWebアプリケーションがオフラインでも動作するようになるブラウザ拡張です。

他にもJavascriptを効率的に動作させる機能もあるようです。これはすごい!

前々からGoogleReaderがオフラインでも読めるといいのにと思っていましたが、早速GoogleReaderはGoogleGearsに対応しているようです。

このほかにも、「5分で出来るGoogleツールバーAPIを使ったカスタムボタンの作成」も披露してくださいました。




Breakout Session2



午後のセッションは2つの会場に別れて行われます。

どれも話を聞きたかったのですが、今回はこちらを聞くことにしました。

後日Videoやプレゼンの資料が公開されるようですので、今回聞けなかったものもチェックできるようです。いいですね。


Google Gadgets API - Sophia Brueckner




Sophia Bruecknerさんからは、GoogleGadgetsAPIについてです。


  • Gadgetsを利用して、先日名称変更されたiGoogleカスタマイズできる

  • ワールドカップの試合状況をリアルタイムに提供するガジェットが人気を博した

  • 世界中で10,000,000のリーチ

  • もっとも人気のガジェットであるWikipedia検索のガジェットは、14歳の少年が作成した。すごい!

  • ガジェット経由で自ページへのトラフィック増を期待できる

  • ガジェットはXMLで作成

  • ローカライズにも対応

  • Gadgets For your webpage - どこにでも設置できる!

  • Gadgets内のFlashアプリにてGadgetsのuserPref(ユーザデータ)を取得可能


Gadgetsの作成はとても簡単!らしいので、ガジェットコンテストもありますし何かつくってみたいですね。

面白いガジェットとして、マウスポインタを目で追うガジェットや、Pony(馬)の世話をするガジェット、金魚の世話をするガジェットが紹介されていました。

また、Googleでは、GMail、Calendarのガジェットがよく使われているようです(笑)



Google Desktop Gadgets - James Yum




James Yumさんからは、Google Desktop Gadgetsの紹介です。


  • ガジェットはユーザが求めている!(結構人気があるみたいです。知らなかった・・・)

  • ガジェットには、UniversalGadget(Webで動作。HTML+Javascript)と、DesktopGadget(XML+Javascript)がある

  • ヌードルタイマーのガジェット(日本製)や、バッテリー残量を教えてくれるガジェットが人気

  • SDKを利用すればガジェットを簡単に作成できる

  • AdvancedAPIs(DesktopGadgets特有のAPI)

  • CommunicationAPI - GoogleTalkの機能を利用しガジェット同士の通信を可能にする

  • QueryAPI - Googleデスクトップのインデックスから検索(非常に高速)

  • EventAPI - ブラウザを開いた等のイベントを扱うことが可能

  • 2007年はガジェットの年になるらしい

  • ActiveXを通して、WindowsAPIも扱うことが可能

  • VBScriptもサポート

  • デスクトップアプリケーションと同様のことが可能


デスクトップガジェットにはまったく興味がなかったのですが、なかなか面白そうです。挑戦してみようかしら。

公演中に、「たまたま」本社の友人がリストにいたので、実際にチェスのガジェットを披露してくれました。リクエストに答えてくれた友人がとても素敵でした。




Google AJAX API - 小俣 裕一




小俣 裕一さんからは、AJAX APIの紹介です。


  • AjaxAPIには、SearchAPIとFeedAPI(それにMapsAPI)がある

  • SearchAPIは、ローカル、Web、News、ブログ等のサーチを選択可能

  • FeedAPIは、SlideShowコントロール、Blogロール、TuneBarコントロールが使用可能

  • AjaxAPIsを用いると、簡単なUIも適用してくれる - すぐに利用可能


このAjax Feed APIは、弊社Webサイトのリニューアル時に実際に利用してみました。

ほんとに数行のJavascriptコードで実装できてとても簡単です。

簡単なUIも適用してくれるので、レイアウトにそれほどこだわらないときはすぐに利用が可能ですので非常に便利です。

ほかにもVideoやSlideShowも扱えるみたいですので、どんどん利用していきたいと思います。



Software Engineer in Google - 鵜飼 文敏




鵜飼 文敏さんからは、Software Engineer in Googleと題して、Google内での開発の様子を紹介してくださいました。GDD日本スペシャル講演です。

鵜飼さんは、本日でちょうど入社1年(6/1入社)になるとのこと


  • グーグルの開発センターは世界各地にあり、それぞれの場所でそれぞれのプロジェクトに参加し作業をしている(ローカライズだけをしているわけではない)

  • ソフトウェアの開発は、一人が全ての工程(設計~テスト)の責任を持つ

  • プロジェクトは非常にたくさんあり、ボトムアップで発生する

  • ひとつのプロジェクトは2~6名

  • イノベーション重視 - 早くどんどん作る!

  • オープンなコミュニケーション - IM, ML, Wiki ,Docs, Blog等

  • 最近はWikiより、リアルタイムに共同編集できるDocs & Spreadsheetsに移行しつつある

  • プロジェクト開始時にはDesignDocを作成

  • DesignDocには、背景・目的(Why?)、設計(How?)、メンバー(Who?)、セキュリティー・プライバシーについての考察、テスト・モニタプランなどが記載される

  • DesignDocは、他の人が見てどんなプロジェクトか分かる程度のもの。後から自分がみて理解するためにも重要

  • 主な言語は、C++, Java, Python, Javascript。最近は動画のためにActionScriptも。あとは独自言語のSawzall

  • あらゆるコードはひとつのリポジトリで管理 - 全エンジニアで共有

  • コードは他の人がレビュー

  • コーディングスタイル統一のためのリーダビリティレビュー

  • 偉い人ほどコードを書いている

  • パフォーマンスを重視。よりよいアルゴリズム、計測・最適化 - 遅いとつっこまれる

  • スケーラビリティは並列化

  • 「Testing on the Toilet」テストのうまいやり方を書いたビラをトイレ貼り付け - Unitテストは基本

  • 「遅いのは勝てない」「スケールは重要」 by エリック

  • Project,Idea,Bugの情報はデータベースにて共有

  • TechTalk - プロジェクトや自身の技術についてスピーチ

  • ユーザ情報、プライバシーデータは非共有。別サーバにて厳重管理

  • 仕事の評価は、同僚が評する - 一緒に仕事している人間が一番知っている(気が抜けない笑)

  • マーケティングにつては考えるな! - ユーザにとってどうなのか?使われるのか?人気があるかを重視

  • プロジェクトを社内で公開→人気があればLabsで公開→人気があればProductとして公開


本日一番参考になったのでは?と思える内容でした。

Googleでは、とにかく情報を公開することで、誰もがプロジェクトに自由に参加できるので、まさに社内でも玉石混交の淘汰が行われているわけですね。

各エンジニアが「これいい!」と思ったらどんどんプロジェクトを立ち上げられるわけで。

まさにインターネットの世界がGoogleの社内の世界なようです。




Reception Party






本日ラストは、レセプションパーティーです。

残念ながらGoogleの社員の方とはお話できなかったのですが、近くにいたBHA(B's Recorderを作っているところ)の方とお話ができてとても有意義な時間をすごすことができました。

当たり前ですが、Google社員の方は大人気でした!



Google Developer Day 2007 を終えて




冒頭でも書いたように、今回のGDDに参加して、とても刺激を受けました。

やはりこういう場に参加し、リアルな空気に触れることはとてもよいことですね!

今までGoogleというとある意味「神」のような存在に感じていましたが、とても身近で、フレンドリーな存在なんだと再認識しました。ものすごい存在には変わりありませんが・・・。



あとは、やっぱり英語は必須だなぁと痛感しました。僕はまったく英語ができないので、外国のエンジニアの方と話がしたいと思っても、なかなか踏み出せません。(同時通訳の方が咳き込んでしまい、何を言っていたのか分からない、なんてこともないでしょうし笑)



また、今回の東京出張により、普段はメールや電話でのやり取りだったお客様と直接お会いすることができました!

わざわざお会いいただき、ありがとうございました。