24時間でウエブサービスを作る

去年の夏の始め、「個人ウエブ・サービスを作る」という目標を決めた。決めたにも関わらず、他の事に重点をおき結局何もやらずに去年の夏は終わった。やらなかった人で終わって良いのか?リベンジしなくて良いのか?

今日は2008年8月12日のランチタイム。妻と娘が日本から戻ってくる18日まで5日程ある。今やらなくていつやれるのであろうか?今夜から始めて、17日、日曜日の夜まで、上手く時間を使えば、24時間位時間を作れるだろう。今夜始める。

何を作るのか?

既にありふれたもので、新規性は全くないのであるが、ブックマーク・サービスを作る。理由、ブックマークサービスの一つであるdel.icio.usは、僕がもっとも頻繁に使う、ウエブサービスだから。一年以上前からマイ・バージョンのブックマーク・サービスを作ろうと思い続けてきたのも理由である。どうか、今あるサービスを模倣(クローン)しても意味ないじゃないかとはおっしゃらないで下さい。

プロジェクトのゴール?

マイ・バージョンのブックマークサービスを開発し、パブリックな場所に置く(ホスティングする)。二つの基本機能:1.ブックマークの管理。2.友人とのブックマークの共有。

なぜ24時間?

日本で働いているRuby Hacker、DominiekのBuilding a .com in 24 hoursに影響されて。

なぜ個人ウエブ・サービス?

個人サービスを作るコツのリンク先のブログエントリーに激しく影響を受けたので。

開発環境?

一年前はJava&Tomcatで行こうと考えていたが、ここ半年程、スクリプト言語に思いっきり惹かれている。今回はPythonとDjangoを中心に開発して行く。ツールはIDEから離れて、テキストエディタであるvim。

今夜、8月12日夜、プロジェクト開始

8月12日(火)

Software development Manager – 1時間30分

Unfuddleにアカウントを作成。レポジトリーにGitを選択。Gitは今話題のVersion Control Systemです。今日までGitを殆ど使った事がなかったので、チュートリアルから始めいきなり苦戦。UnfuddleのHelpにてUnfuddleがらみのところは解決。あと下記のリンクが役にたった。

Gitに何かコミットするために、Djangoプロジェクト及びアプリケーションの元となる部分を作成した。そしてチェックイン。

Unfuddleを選んだ理由:200MBの無料ストレージ、かつプライベート用Gitレポジトリーを提供している所は他にあまりない事。ReadWriteWebでも紹介されていた事。

つまずいた点:gitを使う為にssh用にパブリック・キーを設定しなければいけないのだが、その辺りの理解が浅く時間をロスした。

今日中(8月12日)に、レンタルサーバーを借りるところと、ドメインを取得するところまでしたかったのだが、これ以上やっていると明日に響くので、一旦中止。

8月13日(水)

ドメイン登録 及び レンタルサーバー - 2時間

ドメインは評判が高い、Gandiで登録。登録自体は簡単だった。登録ドメイン名はyou29.com、日本語発音でユニークと発音する。ちょっと無理やりだが。税金込みで$15でした。僕の意見だがHelpが読み難い。フォントも小さいし。

レンタルサーバーは、slicehostで一番安い256sliceを借りた。DominiekのBuilding a .com in 24 hoursでも紹介されていたが、自分が知る限り一番安いVPSホスティングです。slicehostも評判が良いのが決め手。価格は$20/月でした。初回は3ヶ月分購入しなければならない。Linux DistroにはUbuntuを選択。ここの設定もスムーズ。

つまずいた点:取得したドメインとレンタルサーバーのIPアドレスをDNSに登録して結びつけなければならないのであるが、Gandi、slicehost共に、DNS Hostingを提供していて、僕は、slicehostで提供されているものを使用したかったのであるが、Gandiのものがデフォルトで有効になっていて、GandiのDNS HostingからslicehostのDNS Hostingに切り替える方法を見つけるのに1時間以上費やしたと思う。Gandiのヘルプが読みやすければ、、、、、

今は、Peets Coffeeからこれらの作業をしたのだが家に帰って、レンタルサーバーにApache、MySql、Git、Djangoなどの設定をしようと思う。

サーバーの設定もろもろ – 3時間

Apacheをインストールする前にユーザー作ったり、SSHの設定したりやる事いっぱい!おー。
UNIXシステム・アドミニストレーターのお仕事って大変なんですね。今日まで分からなかった。Linuxサーバーの設定が良い経験になっている。
MySQLのインストールはコマンド1発。
Apacheのインストールもコマンド1発。これでyou29.comにアクセスすると”It Works!”の文字が表示されます。
一応PHPも入れとこうかな?いつか使うかもしれないし。今のところ使用しないのでa2dismod php5 で無効にする。
次はEmailの設定:Riverse DNSの設定がDNSに反映されるまで時間がかかるので後回し。
Djangoのインストール。
次はGitの設定:git-coreのインストール、Public-Keyの設定、初めてのClone成功。
RDNSがアップデートされないので、Emailの設定は明日以降。
slicehostはヘルプが充実している点がGREAT!

つまずいた点:サーバーの設定がこんなに大変だと思わなかった。Linux回りの知識をもっと鍛えないと!

サーバーの設定に飽きて来たので、ロゴを作ってみた。-> LOGO

既に合計で6時間30分経過。24時間で出来るのか?まだコード書き始めてないし。

今日まで、Djangoを使ったアプリはローカルのコンピューターで開発用サーバーでしか動かした事がないので、明日はコードを本格的に書き始める前に、アプリケーションのディプロイ方法に付いて確認しないと。

8月14日(木)

開発環境及びサーバー環境設定(続き) – 1時間30分

  • mod_pythonのインストール、Linuxにインストールするのは初めてなのでテストコードも書く。確認完了。
  • メール・サーバー (postfix)のインストール。その前に、DNSの設定。ヘルプを読みながら何とかこなす。オー、自分のホストから
  • メール・サーバのセッティング一つとっても、アドミニストレーターの仕事って結構難しいんだなー!
  • メール・サーバー・ホスティングする場合はブラック・リストに載らないようきっちりセキュリティの設定をする必要がある。

レンタル・サーバーの設定はこれで大体完了。初めてなので、ちょっと苦労したが、良い勉強になった。システム・アドミニストレーターの皆様、お疲れ様です。皆さんの凄さが分かりました。

コーディング – 2時間30分

  • 作業をしている間にDjangoのBetaがリリースされた。昨日、インストールしたばかりだが、Betaにアップグレード
  • モデル(ORM)の定義
  • MySQLインストールしっぱなしで設定がデフォルトのままだった。又設定だ。ウエブ・アプリのホスティングってサーバーの設定の仕事が多いのね。見積もりが甘かった。
  • アプリケーションをディプロイする為のsetup.pyを書く。Python初心者なので、全て調べながら書かなければならず、時間がかかる。何とかコマンド一つでアプリをディプロイできるようになった。
  • Django Adminを使用する為の定義を書く。
  • ホームページをDjangoから出力されるように書き換える。
  • 開発環境でテスト後、サーバーにディプロイしてみる。とりあえず、Mainページ、Django提供のアドミンページは動いた。

既に合計で10時間30分経過、ちょっと時間が足りないような。今のところ、モチベーションだけはある。明日は、ユーザー・レジストレーション・ページ、ブックマーク登録ページ、ユーザー用ブックマーク表示ページなどをViewとテンプレートを書く予定。

8月15日(金)

コーディング – 4時間

  • 昨日の作業の確認
  • Viewとテンプレート
  • CSS書いていたら時間を浪費した。

今現在、合計で14時間30分。残り、9時間30分。出来るのか?

8月16日(土)

コーディング – 8時間30分

  • 今日もCSS書いていたら時間を浪費した。
  • メイン・ページのデザインなど
  • ユーザー登録機能
  • ブックマーク登録機能
  • ユーザー用ブックマークページのデザイン+CSS
  • 進捗があまりないのに、時間は過ぎる。。。。

UIのデザイン及びCSSは苦手なのだが、そこに時間を取られて前に中々進めない。

今現在、合計で23時間。残り1時間。明日一日あるので、どこまで出きるのかな?予定通りにはいかなさそう。最低限の部分はがんばって作ろう。

8月17日(日)

コーディング – 7時間30分

  • まずはコードがなくなると困るので、Gitでチェックイン。Gitはまだまだ使いこなせていない。
  • UIの続き。苦手な部分に時間がかかる。
  • 今まで作った分を試しにサーバーにディプロイしてみる。”しかし”まずは、スタティック・ファイルをインストールするためのPythonのsetup.pyを書いたのだが、書き方が分からず1時間ロス。そして、ローカルのマシーンのApache + mod_python環境にディプロイしたのだが、また動かない。開発用Pythonウエブ・サーバーでは動いていたのに。。。ネーム・スペースの問題でした。そして、また時間のロス。そして、プロダクション・サーバーにディプロイ、今度はイメージが表示されない。環境設定の問題のようだ。これでOKかなと思って、一通り動くか試してみるが、いきなりログインできない。またバグFixだ。** Djangoで開発している人は結構いるようで、解決方法はインターネットですぐ見つかった。**
  • ブックマークの共有方法に付いて考える
  • 細かいバグの修正
  • 明日は寝坊できないので、後1時間程で今回のプロジェクトは終了しようと思う。
  • 今日2度目のディプロイをこれからしよう。
  • 今まで苦労した甲斐あってディプロイはスムーズ。Gitを使ってコードを全てUnfuddle上のGitリポジトリーにチェックイン、そして、サーバー側から全ての変更をGitリポジトリからPULL(コマンド名)して、そしてインストールスクリプトを走らせるだけ。多分、Apacheを再起動しなければならない修正は加えていないが、念のため、再起動。リリース完了。
  • アカウントを作って、テストしてみた。機能は少ないが一応動いている。
  • これで、今回のプロジェクトは終了とする。

まとめ

今回初めてウエブ・アプリと言えるもの(<-???)を、個人サービスとして作った。組織の中でのウエブ開発とは違って一歩踏み出せたと思う。作業に付いて:サーバーの設定にかなりの時間を割かれた。システム・アドミニストレーターの人達の大変さを、少しだけ垣間見れた。開発作業では、苦手なユーザーインターフェースのデザイン及びCSSにかなりの時間を割いてしまった。もう少し効率的にCSSを書けるようになるために、日々鍛錬が必要だな。今回は、時間がなかったのでJavaScriptの使用は控えた、そこでハマッテ前に進めないことが目に見えていたから。開発言語に選んだPythonに付いて、一ヶ月程前から始めたのだが、シンタックスを覚えてなくて苦労したが、特別なコードを書くような事もなかったので、なんとかなった。フレームワークに選んだ、Djangoに付いて、かなりの部分をフレームワークが行ってくれるので、開発するのが楽です。達成度に付いて、当初考えていた、タグ・クラウドとか、友達機能とか、RSSフィードとかまで実装する時間がなかった。最低限の機能しか実装できなかった。時間を見つけてコツコツアップグレードしていきたい。一時間作業したらリリース(ディプロイ)みたいな、アジャイルな開発を実践して行きたい。

トータルの開発時間: 24時間 + 6時間30分(オーバータイム) -> 30時間30分

ウエブサービスへのリンク you29.com

Hidekiのブックマーク: Hideki’s Bookmarks

you29は日本語読みで”ユニーク”と発音します。音の通りいつかは”Unique(ユニーク)”なサービスを目指します。今のところは、ぜんぜんユニークではないですが。

最後に、機能的にまだまだなので、使って下さいとは言えませんが、それでも使ってくださる人がいたら幸いです。

おしまい

Perlはサンプル・コードを試すのが簡単

僕がPerlを気に入っている理由の1つは、Perlはサンプル・コードを試すのが簡単であること。これは、他のスクリプト言語(Python、Ruby)にも当てはまる事であると思う。

僕のシナリオ:Perlの場合

0)ネット、またはPerldocでサンプルを見つける。
1)ターミナルでPerlコマンドを走らせる。(5キー・ストローク)
2)ターミナルに、コードをコピー・ペースト。(数回のマウス・クリック)
3)コントロール+D、サンプルコードが実行される。

サンプル・コードを見つけてから実行するまでに、1分以内?30秒以内?10秒以内?

僕のシナリオ:Javaの場合

0)ネット、またはPerldocでサンプルを見つける。
1)エディターを開く。VI、メモ帳、IDE?
2)サンプルコードを、コピー・ペースト
3)クラス名と同じ名前で、Javaファイルを保存。
4)Javaのコンパイラー(Javac)でコンパイル。
5)Javaを実行。

サンプル・コードを見つけてから実行するまでに、1分以上?30秒以上?確実に10秒ではサンプルコードを試せないと思う。

サンプルコードを試してみるという行為は、新しいライブラリーを使用したり、新しいテクニックを使用する時は、いつもやらなければならない。(<– 僕の場合)この行為を短縮できるPerlはアジャイル開発向きに思える。

僕は、長くJavaをやってきてJavaの事は大好きだし、JavaにはJavaの良さがあって、PerlにはPerlのよさがある。いくつかの言語をマスターして、目的に合わせて言語を使いわけるのがよいのだなー。

Perl: 関数呼び出しは値渡し or 参照渡し?

最近、こつこつPerlを学んでいるのであるが、僕が学んでいる情報元に、関数呼び出しは値渡しだって書かれていた。

Arguments are passed by value. They are copied to the default list variable (@_) where a subroutine can then access it.

ほんとに?Perlではリストとかハッシュとかガンガン使うのに値をコピーしちゃうの?うそでしょ?そんなんじゃスタックにメモリーがいくらあっても足りないじゃん。そこで、下記コードを書いてみた。

#!/usr/bin/perl
# To check if perl pass by value or reference when call subrutine
sub func{
$_[0] = 2008;
$_[1] = “Web 2.0”
}
my $number = 2007;
my $string = “Web 1.0”;
print “before $number & $string\n”;
func($number, $string);
print “after $number & $string\n”;

出力結果

before 2007 & Web 1.0
after 2008 & Web 2.0

この結果が示す通り参照渡である。

ではなぜPerlは値渡しだと言われるのだろう?少しネットで調べてみた。
関数方で、呼ばれるとすぐに

my ($abc, $def, …..) = @_;

のように、引数をローカルの変数にコピーするのが一般的なので、Perlは値渡しだと言われるらしい。

Perlには変数の前に(\)を付けてリファレンスを取得する事ができるようだ。

$string_ref = \$string;

ここは今学習中。

dankogaiさんが丁寧に説明して下さっています。
404 Blog Not Found perl – 暗黙的な参照 # @_ と $_

Chumbyウィジットを作ってみた。

ちょっとした機会がありFlashの勉強もかねて3つChumby用を作ってみた。
作ったウィジットのリスト

  • Y! Buzz
  • Y! Upcoming
  • Y! Weather

Virtual Chumbyへのリンク:
(*)Vitural Chumbyだとボタンのラベルが表示されない。左から、Back,Pause(Resume),Nextです。

翻訳:Use a Web Proxy for Cross-Domain XMLHttpRequest Calls

このエントリーは下記の翻訳です。ただ読むのもつまらないし、自分の血となり肉となるよう翻訳に挑戦。

JavaScript: Use a Web Proxy for Cross-Domain XMLHttpRequest Calls

JavaScript: クロス・ドメインXMLHTTPRequest呼び出しの為のウエブ・プロキシの利用
XMLHttpRequestオブジェクト(XHR)は、AJAXを利用したウエブアプリケーションの根幹となるオブジェクトです。しかし、ブラウザーによる、ドメインをまたがってのネットワーク・アクセス制限の為、クライアント・ウエブ・アプリケーションの開発は複雑です。このハウツーでは、単純なケースを用い問題点を説明し、一つの解決策(あなたのウエブ・サーバーから他のウエブ・サービスにリクエストを中継するウエブ・プロキシ)を提供します。

  • なぜプロキシが必要なのか?
  • Yahoo!ウエブサービス用のPHPプロキシ
  • 他の解決策
  • その他の情報

なぜプロキシが必要なのか?
全ての最新のウエブ・ブラウザーは、ネットワーク接続にセキュリティーの為の制限を加えている。その中にXMLHttpRequestも含まれる。この制限はスクリプトやアプリケーションが、元のウエブ・サーバー以外のサーバーに接続する事を禁止している。あなたのウエブ・アプリケーションとアプリケーションが利用するXMLデータが同じサーバーから来る場合は、この制限に含まれない。

しかしながら、あなたのウエブ・アプリケーションと、アプリケーションが利用するデータが違うサーバー(例えばYahoo! Web Services)から提供される場合は、ブラウザーは他のサーバーに接続する事を制限する。

この問題には、いくつかの解決策がある。もっとも一般的な解決策は、ウエブ・サーバーにプロキシを設定する方法である。XMLHttpRequestを使用し、直接ウエブ・サービスを呼び出す代わりに、プロキシに対して呼び出します。プロキシは呼び出しを実際のウエブサービスに中継し、そしてウエブ・サービスからの返答を、クライアントに中継します。ブラウザは、あなたのウエブ・サーバーに対して接続しているので、データはあなたのサーバーから返されます。

セキュリティー上の理由から、利用が制限されたウエブ・サーバーにプロキシをインストールする事は良いアイデアである。どのウエブサイトにも接続する開かれたプロキシは悪用にも開かれている。プロキシへの接続をあなたのアプリケーションのみに制限するのは難しいけれども、あなたはプロキシからの接続を指定したサーバー以外への接続を制限できる。接続するURLをプロキシ内にハード・コードしたり、オプションを制限することにより、あなた以外のアプリケーションにとって、利用価値を少なくする事が出来る。

Yahoo!ウエブサービス用のPHPプロキシ
Yahoo! Developer NetworkJavaScript Developer Centerにて、Yahoo! Search APIのためのPHPで書かれた単純なウエブ・プロキシを提供しています。あなたのウエブ・サーバーに、このプロキシをインストールすることが出来ます。

プロキシはグローバル・変数の中にHOSTNAMEという名前でYahoo!ウエブ・サービスのURLを組み込んでいる。あなたは、この変数をあなたが利用するウエブ・サービスに変更する必要があります。これはYahoo!ウエブ・サーチ・サービスに使われているドメインです。他のドメインにはYahoo!ローカル (http://local.yahooapis.com) や Yahoo! トラベル (http://api.travel.yahoo.com)があります.

define ('HOSTNAME', 'http://search.yahooapis.com/');

このPHPプロキシをあなたのクライアントアプリケーションから利用するためには、JavaScriptのコード内にあるウエブ・サービス・リクエスト用のURLに、ドメイン名以外のYahoo!ウエブ・サービスリクエストへのパスが含まれている必要があります。ドメイン名はプロキシにより付加されます。下記のコードは、JavaScript Developer Centerの、more complete XMLHttpRequest code sampleから引っ張って来ました。

// The web services request minus the domain name
var path = 'VideoSearchService/V1/videoSearch?appid=YahooDemo&query=madonna&results=2';

// The full path to the PHP proxy
var url = 'http://localhost/php_proxy_simple.php?yws_path=' + encodeURIComponent(path);
... // core xmlhttp code
xmlhttp.open('GET', url, true);

このサンプルではHTTP・GETを使用しているが、サンプルのPHPプロキシはPOSTもサポートしている。

あなたは、このプロキシを編集して、クライアントへの返答を、より扱いやすい形に変更できる。

他の解決策
プロキシの他にも、クロス・ドメイン・ブラウザ制限を回避するためのいくつかの方法がある。

  • アパッチのmod_rewrite、又はmod_proxyを利用し、あなたのサーバーから他のサーバーへリクエストを転送することが出来る。あなたのクライアント・コードからはあたかもウエブ・サーバー上にサービスがあるかのようにリクエストを送る。そしてアパッチがあなたのために他のサーバーへリクエストを転送してくれる。
  • JSONと、dynamic<script>タグをXMLとXMLHttpRequestの代わりに使用する。<script>タグの中で直接ウエブ・サービスを呼んでいるが、セキュリティーの問題を回避できる。もしあなたが使用するウエブ・サービスがJSONをアウトプット・フォーマットとする事が出来れば、ウエブ・サービスからのレスポンスをJavaScriptオブジェクトとしてeval出来る。このサンプルはJSON Documentationにある。
  • デジタルとしてあなたのスクリプトをサインする。Firfoxはあなたのスクリプトにデジタル・サインを当てる事ができ、そしてそれらのスクリプトはブラウザーにより信頼される。この方法で、FirefoxはXMLHttpRequestをたのドメインに対し使用できる。しかしまだ他のブラウザーはこの昨日をサポートしていない。

その他の情報
JavaScript、XMLHttpRequest, Yahoo! Web Service APIs、その他のJavaScript開発に関する情報は、Yahoo! Developer Network JavaScript Developer Centerを参照して下さい。

Windows版mod_pythonインストール方法

mod_pythonをWindowsにインストールする方法
1.mod_pythonをインストールする前に

  • pythonのインストール - 今回はActivePython2.5.2.2をインストール。
  • Apacheのインストール – 以前インストールしたApache HTTP Server 2.2.xを使用。 

2. Windows用mod_pythonのダウンロード

  • 色々バージョンがあるので、適切なBinary fileをダウンロードして下さい。
  • 私の環境に合ったものはmod_python-3.3.1.win32-py2.5-Apache2.2.exe

3. Exeファイルの実行
4. インストーラーがPtyhonのインストール先を自動で検出してくれる。
5. しかしApache HTTP Serverは自動検出してくれないので、自分で指定
6. 重要:最後のインストールスクリーンに重要な事が書いてある。ここには下記に添付したものと同じ事が書かれている。

Important Note for Windows users, PLEASE READ!!!
1. This script does not attempt to modify Apache configuration,
  you must do it manually:

Edit C:/Program Files/Apache Software Foundation/Apache2.2\conf\httpd.conf,
  find where other LoadModule lines are and add this:
  LoadModule python_module modules/mod_python.so

2. Now test your installation using the instructions at this link:
  http://www.modpython.org/live/current/doc-html/inst-testing.html

7. スクリーンに書かれているように、”LoadModule python_module modules/mod_python.so”を、httpd.confに追加
8. 変更を有効にするために、Apacheサーバー再起動
9. mod_pythonのインストールはこれで終了

インストールの確認
参照:http://www.modpython.org/live/current/doc-html/inst-testing.html
***** 適当翻訳 *****
2.4 Testing
1. テスト用のディレクトリを作成、例えば C:\public_html\test <-例えば私の環境
2.ディレクトリの設定をhttpd.confに追加、下記参照。.htaccessを使用する方法もある。

<Directory “C:/public_html/test”> <-例えば私の環境
   AddHandler mod_python .py
   PythonHandler mptest 
   PythonDebug On
</Directory>

3. 全ての.pyで終わるURLがmptest.pyにフォワードされる。
4.変更を有効にする為に、Apacheサーバーの再起動。
5.下記のPythonのコードをmptest.pyという名前でC:/public_html/testの下に保存

from mod_python import apache

def handler(req):
   req.content_type = ‘text/plain’
  req.write(“Hello World!”)
  return apache.OK

6.ブラウザからURLにアクセスしてみる。 http://localhost/test/mptest.py
7. Hello World!とブラウザーに表示される。

django

CNETのエントリー:How Google’s App Engine stacks up with Amazon’s EC2の中のイメージ(左参照)のGoogle App Engineの中にPython & Djangoとある。Djanogって何?最近他でも見かけたことがある、変な名前だなー。ちょっと調べてみた。DjangoはPythonバージョンのRubyOnRailsであるようだ。要するにPython用MVCウエブ・フレームワーク。Webアプリケーションをささっと書けるらしい。結構流行っているようだ。これで又、Pythonを勉強する理由が出来てしまった。

Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.

The Joel Test

前から読みたいと思っていた、Joel on Softwareを読み始めた。出だしから中々良いです。ソフトウエア開発に関して、今まで、当たり前の事だけど、言葉として上手に整理出来ていなかった事がいくつかあった。それらの事を彼の言葉を借りて再確認している状況。今日中々良いと思えたものThe Joel Testに付いて。

The Joel Test

  1. Do you use source control?
  2. Can you make a build in one step?
  3. Do you make daily builds?
  4. Do you have a bug database?
  5. Do you fix bugs before writing new code?
  6. Do you have an up-to-date schedule?
  7. Do you have a spec?
  8. Do programmers have quiet working conditions?
  9. Do you use the best tools money can buy?
  10. Do you have testers?
  11. Do new candidates write code during their interview?
  12. Do you do hallway usability testing?

これはJoelが考え出したソフトウエア開発チームの質をはかるテスト。

  1. ソースコードバージョン管理システムを使っているか?
  2. 1ステップでアプリケーションをビルド出来るか?
  3. 毎日コードをビルドしているか?
  4. バグ管理システムを使っているか?
  5. 新機能を追加する前にバグを修正しているか?
  6. スケジュールは絶えずアップデートしているか?
  7. コードを書き始める前にスペックは書いているか?
  8. プログラマーが仕事に集中できる環境であるか?
  9. 最高のツールを使っているか?
  10. QAエンジニアはいるか?
  11. 仕事の面接で候補者にコードを書かせているか?
  12. ユーザービリティ・テストをしているか?
僕が働いてきたソフトウエア会社は、どこも、1番、4番、10番は満たしている。しかし、その他の部分は会社に寄って違う。7番に関しては、ソースコードが仕様書だとか言って、いきなりコードを書き始める事もある。6番に関して、いざ開発が始まるとスケージュールのアップデートなどは後回しになってしまう。インタビューでは、僕が今日の面接官は出来る人だったなと感じた人は、インタビューの中で、実際のコードもしくはpseudoコードを書かせていたなー。上記の12リスト当たり前の事だけど、当たり前に出来ていないので、この本の中でJoelが上手に説明してくれていて大変役に立つ。この本は読むのが楽しい。
(*)この本はJoelのブログを元に書かれています。

はてなスターをブログに設置

読者が少ないのに、怖いもの見たさで、はてなスターをブログに設置してみた。
設置方法は下記を参照

2007-07-07 はてなスターをブログに設置するには

このブログにはWordpressを使っているのと、Themeがカスタムなので以下の変更が必要だった。

  • タイトルのタグが<h3 class=”h1″>なので下記のラインをheader.phpに追加Hatena.Star.EntryLoader.headerTagAndClassName = [‘h3′,’h1’];
  • もう一つシングルエントリーのケースのタイトルタグは<h1>だったので、メインのタイトルとタグを同じにする為に<h3 class=”h1″>に変更。

またTheme変えてしまいました。
あと、Flickr Badgeもサイドバーに追加

Flashの勉強再開

Flashの勉強を再開しました。Flickr APIでイメージを検索して、ランダムにイメージを表示するFlash。下に表示されているイメージはクリックして上に持ってくる事が出来る。

使用方法:テキストフィールドにキーワードを入力、そしてEnterキーをタイプ。