2009年2月26日木曜日

input type="radio"でchecked指定しているにもかかわらずデフォルトでチェックが入らない?と思ったときは・・・

原因を調べるのにずいぶんと苦戦したので備忘録を作ります。
input name="calendar_1" value="1" type="radio" checked

こんな感じのチェックボックスが画面にあるのですが、何度試してもデフォルトcheckedにならないのです。
IEでもFFでも再現しました。

Firebugからcheckedを再度指定し直したり、きちんとchecked="checked"に書き方を変えてみてもダメ。HTMLのバグかと思いましたよ。

原因は・・・そう、ラジオボタン、カレンダーで使ってたんですよ。
3月の1日と4月の1日が同じカレンダーの上に乗っかることもありますよね。

input name="calendar_1" value="1" type="radio" checked
input name="calendar_2" value="2" type="radio" checked
input name="calendar_3" value="3" type="radio" checked
・・・中略・・・
input name="calendar_31" value="31" type="radio" checked
input name="calendar_1" value="1" type="radio" disabled checked
あ、同じ名前のラジオボタンがあるじゃーん。しかもcheckedだー。
そりゃだめだわーアハハハハというお話でした。
checkedが機能しないときはまず真っ先に同じ名前のラジオボタンがないか疑え、ということで。

2009年2月22日日曜日

Mac OS X LeopardでPYTHONPATHとPYTHONSTARTUPを設定してみました

  • 環境変数PYTHONPATHとは、Pythonがimportするときにモジュールを探しに行くパスのこと。JavaでいうところのCLASSPATHにあたる
  • 環境変数PYTHONSTARTUPとは、Pythonを対話モード(プロンプトモード)で実行した時に自動的に実行されるPythonスクリプトのこと。起動時に毎回読み込みたい設定とかを書いておくことができる
  • autoimpとPYTHONSTARTUPを組み合わせるとimportの手間から解放されて非常に便利

Pythonのモジュール名・関数名がわからないときや、ちょっとだけスクリプトを実験してみたいときなどPythonをコマンドラインから呼び出すことがよくあると思います。
ところが未設定のままのPython対話モードだと以下のような問題が生じます。
  • 毎回毎回使うimport osとかimport sysとかをいちいち手で実行するのが面倒くさい。自動でやりたい
  • 後からインストールしたライブラリ、特にGoogle App Engineのモジュールが利用できない
そこでこれらの問題を解決するべくPythonの環境設定を行ってみることにしました。
以下、すべてMac OS X 10.5.6と付属のPython 2.5.1 (Apple Build)で設定を行っています。python.orgからダウンロードしてきたPython 2.6や3.0の場合はファイルのあるパスが違ったりなどするかもしれません。


■PythonPathを通そう
PythonPathとは要するにJavaのクラスパスです。このパスが通っているところからPythonはモジュールをインポートしようとします。
現在のPythonPathを確認するためには、以下のPythonスクリプトを実行します。
>>> import sys
>>> sys.path

似たようなのにos.pathがありますが、アレは全く別物みたいです。まどろっこしいです。

さて、PythonPathを上手に利用するためには2通りの方法があります。
一つは自分で環境変数PYTHONPATHを設定してPythonPathに好きなパスを追加する方法です。
export PYTHONPATH=${PYTHONPATH}:/usr/local/google_appengine:/usr/local/google_appengine/lib/antlr3:/usr/local/google_appengine/lib/django:/usr/local/google_appengine/lib/webob:/usr/local/google_appengine/lib/yaml/lib

もう一つは最初からPythonPathが通っていて、かつユーザーが自由に使ってもいい領域「site-package」を利用する方法です。
詳しい理屈はよくわかりませんが、Pythonには最初からsite-packageとかいう自由にライブラリを追加するための領域があるみたいです。
現在のsite-packageを調べるためには、id:a2cさん曰く
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

これだけでいいそうです。試しにPython 2.5.1 Apple Buildで実行してみたところ、
$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/Library/Python/2.5/site-packages

こうなりました。たぶんpython.orgのPythonや、macportでインストールしたPythonだとまた全然違った値になるのではないかと。
ということでこの/Library/Python/2.5/site-packages以下に、ダウンロードしてきた外部のライブラリなどを配置していけば自動的にパスが通っていい感じになりそうです。


■autoimpを使ってみよう
autoimpというライブラリを利用すると、いちいち最初にimport osとかimport mathとかしなくても直接os.path.join()とかmath.piとかが呼び出せるみたいです。
http://www.connellybarnes.com/code/autoimp/
使い方は簡単、まずはライブラリのソースを↑のページからダウンロードしてきて、
先ほどご説明したsite-packages以下に置くだけ。

あとは、
>>> from autoimp import *
>>> os.stat('.')
>>> sys.path
>>> math.pi
>>> google.appengine.ext.db.Model

一度from autoimp import *してしまえばimportなしで何でも自由に使えるという寸法らしいです。すごい。
でもこれでは結局最初にfrom autoimp import *と書く手間がかかってしまいますので、
Python起動時に自動的にfrom autoimp import *してくれるように設定してみましょう。


■PYTHONSTARTUPを設定しよう
環境変数PYTHONSTARTUPを利用すると、Pythonの起動時に毎回決められたスクリプトを実行することが出来るらしいです。
たとえば自分のホームディレクトリに、以下の.pythonstartup.pyというファイルを作ってみます。
#!/usr/bin/env python
#coding: utf-8
print 'hogehoge'

そして環境変数PYTHONSTARTUPを以下のように設定します。
export PYTHONSTARTUP=~/.pythonstartup.py

一端ターミナルを再起動してからpythonを実行してみると・・・
akisute ~$ python
Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
hogehoge
>>>

ほら、print 'hogehoge'が実行されてますよね。
同様にして、以下のように.pythonstartup.pyを設定すれば・・・
from autoimp import *

Pythonを実行すると・・・
akisute ~$ python
Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> os.path
<module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/posixpath.py'>
>>> math.pi
3.1415926535897931
>>> google.appengine.ext.db.Model
<class 'google.appengine.ext.db.Model'>

ごらんの通り!importなしに自由にモジュールが利用できています!

2009年2月15日日曜日

14 Essential Xcode Tips, Tricks and Resources for iPhone Devsを試してみた


Mobile Orchidで紹介されていた14 Essential Xcode Tips, Tricks and Resources for iPhone DevsというTipsを試してみました。
本当は全部試してみたかったのですが、そこまでXcodeを使い込んでいるわけでもないのでまずは手軽なところだけを試しました。


■プロジェクトビューのスタイルを変更してみる
現在開いているプロジェクトを全部閉じてから環境設定>全般>レイアウト。

閉じないとこんな風になっていて変更できません。

オールインワンビューがお勧めです。ウィンドウがたくさん開いてうざったらしかったのが、タブにまとめられてすっきりします。

すっきり!


■ショートカットいろいろ
  • Command+Shift+Dで「すばやく開く」。EclipseでいうCtrl+Shift+T、TextMateでいうCommand+T
  • Command+Shift+Eで「ソースコード以外を隠す」。Eclipseで言うソースコードビューの最大化
  • Control+1で「最近開いたファイルのポップアップ」。ポップアップの中でさらにタイピングしてメニューを選択できる。
Control+1がおすすめです。


こんな感じのポップアップが開きます。この状況でjweekly...とタイプしていくと、
マッチする選択肢を選択してくれますので、SpaceキーやEnterキーを押して確定。
確定したファイルが開きます。
キーボードだけで次々とファイルが切り替えていけるのが便利です。


■テンプレートを作る
Xcodeのプロジェクトテンプレートを自分で作ることが出来るらしいです。
試してみたいのですが断念。喫緊の必要が迫ったときにまたやってみます。
http://www.turkeysheartrhinos.com/?p=8#custom_project_templates


■gitと連携する
特にgitを使ってファイル管理をされている方に便利かと思います。
Xcode Project用の.gitignoreを作る:http://shanesbrain.net/2008/7/9/using-xcode-with-git
gitにコミットしたときの番号をXcodeプロジェクトののCFBundleVersionに自動的に登録してくれるスクリプト:http://www.cimgf.com/2008/04/13/git-and-xcode-a-git-build-number-script/
どちらも非常に便利そうですが、そもそもほとんどプログラムを書いていない自分には今のところ必要が無く・・・
こちらもまた喫緊のニーズが発生したときのお楽しみに取っておきます。

jweekyforecast近況報告(2009/02/15)


ようやく予報区のマスターメンテができるようになりました。
天気予報区のデータをアプリケーションに登録して、それをAPIを通じてiPhoneに引き渡すというような処理を行おうと思っています。


天気予報区には大きく分けて一次細分区域と二次細分区域がありますが、今のところ一次細分区域しか対応していません。二次細分区域を対応させようと思ったら親子関係を持たせないとなぁ。

何より問題はこのマスターメンテが死ぬほど面倒くさいことかなぁ・・・と思います ;(

さてさて、次はAPIを作らないとシステムとして成り立たないですね。

2009年2月12日木曜日

jweeklyforecast (server) のリポジトリを公開しました

http://github.com/akisute/jweeklyforecast/tree/master

先日話題にいたしました、天気予報用API提供用サーバーjWeeklyForecastのリポジトリを作成いたしましたので、取り急ぎご報告だけさせていただきます。


ちなみに中身はスッカスカです。まだGoogle App Engineの本番サーバーにもアップできていない状況なので、何とか今週末までにはアップしたいです!

2009年2月8日日曜日

生粋のWindowsユーザー向け、初めてのVim設定 on Mac OS X 10.5

  • vimはきちんと設定しないとただのメモ帳
  • きちんと設定すると地上最強クラスのエディタになる
  • でもvimの設定って意味がわからない、難しすぎる。ということで適当に調べて適当にやってみました
  • 設定は.vimrcファイルと、.vimディレクトリで行う
  • .vimrcは全体設定、.vimディレクトリは主にファイルタイプごとの設定
  • :help runtimepathとか:help ftpluginするといろいろ教えてくれる

「Windowsには秀丸があるけど、Linuxには秀丸がないし、Linuxにはろくなテキストエディタがないよね」
・・・あるWindowsユーザのぼやき


「Linuxにはvimがあるけど、WindowsだとCygwin入れないといけないから面倒だよね。GUI付きのエディタなんてろくなのがないし」
・・・あるLinuxユーザのぼやき


「TextMate + vim + emacs = pWnAgE!!」
・・・あるアメリカ人Mac OS Xギークのぼやき


「Mac OS Xで日本語の使えるテキストエディタを探しています。TextMateやvimというソフトをお勧めされたのですが、どちらも日本語が使えなくて困っています」
・・・ある日本人Mac OS X初心者のぼやき


会社で必要に迫られ、つい最近Linux環境でvimを使い始めました。
同じLinux環境のエディタ、emacsとどちらにしようか非常に悩んだのですが、なんと私が作業するRHESのサーバにはemacsがインストールされていないという驚愕の事実が明らかになり、やむなくvimに流れることになりました。
(噂には聞いていましたが、本当にvimしかないシステムってあるんですね・・・)

しかしながら、vimはWindowsのGUI付きエディタで慣れ親しんだ操作方法と全く異なる非常に独特な操作感を持ち、操作するだけでもなかなか苦労します。そして何より、適切に設定していないvimはWindows付属のメモ帳程度の機能しか持ち合わせていません。設定しなくてはならないのですが、その設定の仕方すらわからない。「設定ファイルはどこ?設定をするための画面はどうやって出すの?」という具合です。

自分も最初はquitの仕方すらわからずターミナルごとたたき落とすしかなかったのですが、使い込んでいくうちにコマンドに慣れ親しんできて、むしろ秀丸やSakuraよりも優れていると思えるほどになってきました。
ですが、設定方法だけが未だにいまいちよくわかっていません。ということでちょっと時間を取ってまとめてみることにしました。

○設定ファイル一覧
主な設定ファイルは2つ。~/.vimrcファイルと~/.vimディレクトリです。
.vimrcはvim全体の設定を行うためのファイルです。
対する.vimディレクトリは、ファイルタイプごとに異なった設定を行うための設定ファイルを配置するディレクトリになります。

○.vimrc
まずは.vimrcファイルから書いていきます。
検索時の挙動、画面の色やシンタックスハイライトの設定、ステータスバーの設定、それからもっとも大事なファイルタイププラグインの設定などを行います。
実際のファイルは以下のような感じになりました。
" .vimrc

" General
set nocompatible
set history=50

" Search
set ignorecase
set smartcase
set wrapscan
set hlsearch

" View
colorscheme desert
syntax on
set number
set title
set ruler
set list

" File system
set nobackup

" Filetype specific settings
" Set any other file type specific settings
" in ~/.vim and ~/.vim/after
" Type :set runtimepath to see you runtime path.
filetype plugin indent on

" Other programming staffs
set showmatch

個々の命令の詳しい解説は探せばたくさんありますのでそちらにお譲りしますが、
とりあえずWindowsユーザーだった人に覚えて欲しいのは、syntax onを書くこと、filetype plugin indent onを書くこと、
そしてこのファイルに書いてある内容をvim上で:(コロン)に続けて書くとこのファイルに書いたのと全く同じ効果が得られるということです。
たとえばvim上で:filetypeとタイプするとファイルタイプの設定が表示されますし、:syntax onや:syntax offとvimからタイプすると、シンタックスハイライトの設定がon off切り替わると思います。:colorscheme とタイプしてTabキーを押すと次々に利用可能なcolorschemeを表示してくれます。

この「.vimrcの内容=コロンに続けて書くことが出来る」というルールを覚えてしまうと、vimの設定がずいぶんと楽になると思います。

で、上記の.vimrcを書くことでファイルタイプごとのデフォルト設定とデフォルトインデントが有効になります。
これだけですばらしく強力なエディタになるのですが、デフォルト設定のままではいくつか気になる箇所があったり、不満が出てくる場合があります。
たとえばPython。Pythonのファイルを開いて編集してみればわかるのですが、
ごらんの通り、インデントがタブになってしまいます。PythonはPEP8でインデントを半角スペース4個でやれと規定されているので、それにあわせたいですね。


○.vimディレクトリ
そんなときこそ.vimディレクトリの出番です。
~/.vim/after/というディレクトリを作成し、その中にファイルタイプごとの設定ファイルを作成して配置することで、自由自在にファイルタイプごとの設定を行うことが出来るようになります。

ここでは自分の行った設定だけをさらしますので、
より深く知りたい方は、「runtimepath」とか、「ftplugin」とかでvimのhelpを検索してみたりググったりしてみるとよろしいかと思います。

じゃ早速やってみます。
$ mkdir -p ~/.vim/after/indent
$ cd ~/.vim/after/indent
$ vim python.vim

何やってるかよくわからんという方は、とりあえず「インデントの設定したいときは~/.vim/after/indentってディレクトリの中にファイルタイプ.vimって名前のファイル作ればよい」と覚えておけばよいかと思います。
(もちろん詳細は全然違うのできちんと調べられることを推奨いたします)

で、python.vimを書きます。
setlocal shiftwidth=4
setlocal expandtab

これだけです。

じゃ、もう一回Pythonのファイルを開いてみましょう。

ばっちりですね!!これでPythonのファイルをvimでストレス無く編集できるかと思います。

最大の問題は、vimで日本語を使うためにはさらに設定が必要だというところでしょうか。
その上vimは日本語入力が非常に大変です。
モード切替→日本語入力に切り替え→タイプ→英字に切り替え→モードを元に戻す
という非常にかったるい操作が必要になります。
(私の場合、vimで書くソースはコメント含めてすべて英語で記述するようにしています)

ほんと、コンピューターは英語以外の言語に優しくありません。


○おまけ、LeopardのTerminal.appでANSIカラーを変更するツール
vimのcolorschemeとかTerminal.appの色設定を触っているときに偶然発見したツールです。
端末のANSIカラー設定を変更することが出来ます。
http://niw.at/articles/2007/11/02/TerminalColoreopard/ja
ANSIカラーというのは、UNIX系のOSでは端末で使える色がANSIカラーとして8色決められていて、
その色を指定して自由にカラーを出力することが出来るという仕様です。

UNIX系のOSで色指定をしたいときはこのカラーコードを設定ファイルに指定してやればよいらしいのですが、この作業はとても大変です。
ということで、出来る限り端末自体の色設定を変えてやって対応するようにしたいですよね。そんな願いを叶えてくれるのがこのTerminalColorLeopardというわけです。
TerminalColorLeopardを使えばll黒背景のときと白背景の時でいちいちシェルの設定ファイルの色設定を書き換えたりしなくてすみそうです。おすすめです。
まぁ、これぐらいの機能は標準で搭載して欲しいものですが・・・