ページ

2008年12月22日

植え木にもいるよ

エビラも健在さ

ガンダム

a2cのおくさんから

写ってているのは会長です。

サーバールームに閉じこめられた怪獣

夜景を見つめる怪獣

MacBookにHyperEstraierをインストールする

PyHyperEstraierのパッチがドイツ人と思われる人から送られてきたので、動作確認しようとしたら、まくぶくたんにHyperEstaierがインストールされていないことが発覚しました。なので、こっそりインストール。

1. QDBMのインストール

qdbmをダウンロードして、展開。次のコマンドを実行

./configure --enable-zlib --prefix=/usr/local/
make mac
sudo make install-mac
2. HyperEstraierのインストール

HyperEstraierをダルンロードして、展開。次のコマンドを実行。

./configure --prefix=/usr/local
make mac
sudo make install-mac

さて、パッチをあてよう。

2008年12月12日

こわーい電話

最近、また、英語で電話やメールがきて転職しろと言ってきます。それはまあ、いいのですが、英語しゃべれないし、読み書きもできないと言っても通じません。さらには、日本語が話せる人もいるので安心してと言ってきます。だったら、最初から日本語の人が相手してよ・・・。
まあ、何をするにしてもそういうところは通さないのでいいのですが。

さて、会社にはそれ以外の勧誘の電話も沢山かかってきているようです。大体は会社のおねーちゃんがシャットアウトしてくれています。すごいです。会社のおねーちゃんがいないときには時々、「どこどこから電話です」と取り次がれそうになります。知らない人からだと大体外出中にしてもらいます。

昔、電話で取り次いでもらえないと大きな電話会社の知り合いからメールが来ました。押し売りと間違われたようです。まあ、そういうこともあります。

Unicodeの正規化って・・・

Macだと、濁点のついている文字をコピペすると、濁点が一つの文字として正規化されるというお話。うーん、止めてください。

2008年12月9日

CodeReposにpyhyperestraierを引っ越し

ずーっとほったらかしにしていたPyHyperEstraierCodeReposに引っ越しました。それだけです。

そんな感じ。

2008年11月28日

作ったものリスト

以前作ったものの現在の置き場所リストです。

  • pyhabu : プラグインを組み合わせてRSSを取得・加工し、利用するためのPythonソフトウェア
  • pymixi : Pythonからmixiのサービスを利用するためのライブラリ
なんか忘れているような気もする。

2008年11月27日

Djangoのユーザ認証のあれこれ

Djangoでユーザ認証の仕組みはこのドキュメントにいろいろ書かれています。ログインの方法やユーザ情報の扱いはちゃんと書いてあるので、困ることはほとんどありません。

ログアウトはどうするのかなー、と思ってドキュメントを読んでもよくわかりません。結局urlpatternsに
(r'^accounts/logout/$', 'django.contrib.auth.views.logout'),

と書いてあげるだけでとりあえずは良さそうです。logout後の画面が/accounts/になってしまいますが、とりあえず、redirectさせて回避。こんなんでいいのだろうか?

ドキュメントを読んでいるとpassword_changeとかでパスワードの変更ができるらしいです。ログアウトを調べたついでにpassword_changeもやってみます。urlpatternsに次のように書けばよいらしい。
(r'^accounts/change-password/$', 'django.contrib.auth.views.password_change',
{'post_change_redirect': '/'}),
post_change_redirectを指定しないと例外がでたのでとりあえず、トップ画面に戻るようにします。でも、referの所に戻ればいいような気もしなくもないけど・・・。で、このpassword_changeはregistration/password_change_form.htmlがデフォルトのテンプレートして使われるので作ってあげます。僕のテンプレートはこんな感じ。

{% extends "base.html" %}

{% block content %}

{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}

<form method="post" action=".">
<table>
<tr>
<td>{{ form.old_password.label_tag }}</td>
<td>{{ form.old_password }}</td>
</tr>
<tr>
<td>{{ form.new_password1.label_tag }}</td>
<td>{{ form.new_password1 }}</td>
</tr>
<tr>
<td>{{ form.new_password2.label_tag }}</td>
<td>{{ form.new_password2 }}</td>
</tr>
</table>

<input type="submit" value="Change" />
<input type="button" value="Cancel" onclick="javascript:window.location='/';"/>
<input type="hidden" name="next" value="/" />
</form>

{% endblock %}

というか、login.htmlとほぼ同じ。formという変数に何があるかはdjango.contrib.auth.formを読まないといけない?というか、form.xxxといちいちテンプレートに書かないといけないものなの?まだ、あまり、フォームの取り扱い方は調べていないので、今はこの程度にしておきましょう。
どうでもいいけど、password1とpassword2っていうフィールドはないよなー。

それから、簡単に新規のユーザを作る方法はあるんだろうか?

2008年11月26日

Djangoのテンプレートのlinebreaksとか

Djangoのテンプレートの{% XXX %}とか{{ XXX }}とか、なんとなーくキモイです。なれません。免疫ができません。それでも、組み込みフィルタは便利です。UNIXのパイプみたいにフィルタをつなげられるのはいいです。UNIXに害されているだけかもしれません。

過去の経緯はしりませんが、デフォルトだと文字列は勝手にエスケープしてくれています。なので、エスケープ関係はどうでもいいです。今回はプレーンテキストの改行をHTMLとして処理したかったのですが、linebreaksもしくはlinebreaksbrで処理できます。その後、httpで始まるものはリンクにしたいなー、と思ったら、linebreaksbr|urlizeとすればいいだけです。urlizeだとリンクが馬鹿長くなることがあるので、切り詰めたければ、urlizetruncを使えばよいらしい。

でも、やっぱりなれない。そもそも、何を作っているかは企業秘密なのです。まあ、半分遊びなんですが。

2008年11月25日

Djangoのテンプレートのlinebreaks

最近、Djangoで遊んでいます。と言っても、自分で書いたコードの量はテンプレートを含めて300行に満たないですが。

さて、linebreaksを使えばプレーンテキストの開業をHTMLの形式に変換してくれるらしいです。{{ myvalue|linebreaks }}とすれば<p>hoge</p><p>fuga</p>のように変換してくれるらしいです。どこぞのテンプレートは自前でsplitlines()して<br/>を入れていたので、それに比べれば楽だなー、と一瞬思って、次の瞬間

hoge


fuga
が<p>hoge</p><p>fuga</p>になっていることを知り、がっくり。改行は無条件に<br/>に置換してほしいです。実は、置換してくれる魔法があるとか?教えてエロい人。

2008年11月18日

DjangoのO/Rマッパー

使いやすいような、使いにくいような、単に慣れていないだけのような・・・。
何使っても、レリーションは僕にとっては難しい。で、いろいろやってやりたいことはできそう。時々、SQLを直接書いちゃえという誘惑にかられる。


2008年11月17日

Ubuntuをインストール

LL温泉でMacのParallelsのUbuntuが壊れたので(壊れていることが判明した)、インストールし直しました。以前インストールしたときは少し苦労したような気がします。今回はParallels 4を使っていたのですが、新規のイメージを作るプラスボタンを押して、isoイメージを指定しただけです。Ubuntuのおかげか、Parallelsのおかげかしりません、楽ちんです。

再インストールして、起動すると、ParallelsのメニューからInstall Parallels ToolsでParallelsのツールをインストールします。といってもこれは、必要なものを/cdromにマウントするだけなので、cd /cdrom; sudo ./installでインストールします。ウィザードになっているのでNextを押して行くだけです。簡単です。

再起動した後、パッケージのアップデートです。これは時間がかかります。disk ioやネットワークへのアクセスがあるので遅くなります。そしてUbuntuがreadyの状態になりました。

Parallels 4になってCompizの3Dエフェクトが使えることを期待したのですが、残念ながら使えませんでした。さあ、これでPlaggerをインストールできるぜ。

ところで、ターミナルでemacsって打つと、

プログラム 'emacs' は以下のパッケージで見つかりました:
* emacs21-nox
* emacs22
* emacs-snapshot-nox
* e3
* emacs-snapshot
* emacs22-gtk
* emacs21
* emacs22-nox
* jove
次の操作を試してください: sudo apt-get install <選択したパッケージ>
bash: emacs: command not found
って表示されました。なんか、ubuntuすげー

2008年11月15日

とりあえず

今回のお泊まり会でこっそりやろうと思っていたことは、だいたいできた。えー、でもほとんど遊んでたのでちょっとだけしかやってないのですが・・・。それから最大のミッションは、日本では唯一のホーバークラフトにのることと、子供の本にのっていた「ゆふいんの森」にのることです。

ちなみに、お泊まり会とはLL温泉です。

Djangoでテーブルが作れない

Djangoでモデルを作ってpython manage.py syncdbをすると

Error: One or more models did not validate:
auth.message: Accessor for field 'user' clashes with related field 'User.message_set'. Add a related_name argument to the definition for 'user'.
logs.message: Accessor for field 'author' clashes with related field 'User.message_set'. Add a related_name argument to the definition for 'author'.
と言われて、怒られます。models.pyはこんな感じ。

from django.db import models
from django.contrib.auth.models import User

class Message(models.Model):
    author = models.ForeignKey(User)

のようにしているだけです。a2cのDjango 0.7とかではちゃんと動いています。下手にDjangoに手を出した僕が悪いのでしょう。Pylonsでもいいような気がしてきた。

そして、ここのお達しによると、エラーメッセージに書いてあるようにForeignKeyの引数にrelated_nameを指定すればよいらしいです。related_nameを指定したらちゃんとデータベースができました。

ついでにエラーメッセージのcrashがclash。それとも僕の知らない単語?

金鱗湖

Komodo EditをVersion5にする

ParallelsのUbuntuのイメージが壊れていました。Parallelsをバージョン4にしたせいじゃなく、多分、古いMacBookから持ってくるときに失敗したのでしょう。なので、Komodo Editのバージョンが5になったらしいので、バージョンアップしました。LLとは関係ありません。

バージョンアップしたら設定がすべて消えていました。悲しいです。アドインももう一度インストールし直さないといけません。ありえない・・・。しかも、5に対応していないものも沢山あります。まあ、僕は最低限、Source TreeとTabSwitcherさえ動けばいいので大丈夫そうです。ただ、無料のKomodo Editならまだしも、割と高いKomodo IDEだったら許せないかもしれません。

あとは、まあ、そこそこ快適です。

紅葉だ

X-MAC-JAPANESEって何だ?

Djangoで遊んでいたらX-MAC-JAPNESEでデコードできないと怒られます。自分で調べるのがめんどくさいので、a2cに聞くとここを教えてくれます。あとは、システムのデフォルトエンコーディングをutf-8に書き換えた方がいいというお達しも。前者はともかく、後者はいやです。以前Zope3で似たような問題があってutf-8にすれば動くけど、システム全体の設定を変えちゃうので動かないものがあるかもよ、とありました。また、他の環境に持って行くときにめんとっちいことなると。なので、前者のやつだけ対応します。

該当するtzinfo.pyをみるとなんかがんばっています。無条件にDEFAULT_ENCODING = "utf-8"でいくね?と、始めたばかりの初心者は思ってしまいます。文字コード周りはバグの温床になりやすいので、なるべく複雑にしたくないし、プログラマが指定できるのであれば面倒でもそうした方がよかったりもします。まあ、そんなこんなで、tzinfo.pyを書き換えればちゃんと動きました。作りかけなので、他のところが動きませんが。

2008年11月14日

Djangoのプロジェクトを作る

a2cにせかされてインストールしたままになっていたDjangoでプロジェクトを作ります。

$ django-admin.py startproject myproj

で、「Python2.6では動かないぞ」と脅されたので

$ cd myproj
$ python manage.py runserver

します。ちゃんと動きます。だまされました。

ゆふいんの森

ホーバー乗った

ホーバー

羽田だ

こいつに乗るんだ。

2008年11月11日

マクブクたんはやっぱり重い

体を鍛えるためにMacBookは重いのである、とどんなに主張してもことあるごとに軽いノートが欲しくなります。欲しくなるだけで踏み込めませんが。

先週、ルータを買うためにヨドバシに行って、ついでにNetBookたちをみてきました。NECのNetBookですが、上品な佇まい?僕にはすごーくかっこわるいノートにしか見えませんでした。EeePCとかの方がまだましです。10年前であれば、かっこ良かったのかもしれません。でも、キーボードとかは実用的に使えそうです。でも、どんなに実用的であろうと、自分の美意識を満たせないんじゃな・・・。ついでに言うと、僕はMacBookAirが出た頃からあの手の色や質感が好きになったので、NetBookではHPのやつがいいけど、CPUが・・・。でもって、NetBookどれも重すぎ。Letsに惹かれてしまうけど、高い。なので、iPhoneがあるからいいのさ。

2008年11月7日

マクブクたんにDjangoをインストールしたよ

でも、インストールしただけだよ。

DjangoのページからDjango-1.0.tar.gzをダウンロード。そして、

$ tar xf Django-1.0.tar.gz
$ cd Django-1.0
$ sudo python setup.py install
で終わり。ブログのエントリにするほどのことか?で、Djangoで何をしようとしているかは秘密。

2008年11月5日

子供は上から降ってくることもある

写真は先週末、わが家の4歳児。3歳ぐらいから時々登ってい
る。

2008年11月4日

MobileFilesを使う

MobileFiles」というiPhoneからiDiskにアクセスするソフトがでたのでインストールしてみました。iPhoneをストレージとして使うソフトはいくつかあり、僕はAirSharingというソフトを入れていますが、まあ、使いかってはあまりよくありません。どちらかと言えばMobileMeのiDiskがみれればいいと思っていたので、このソフトはいい感じです。

で、iDiskにアクセスしてパワーポイントのファイルを開くと編集はできませんが、中身はみれます。いい感じです。いい感じついでにKeynoteを開いてみます。おー、だめじゃん。Keynoteは一個のファイルじゃなくって複数のファイルを寄せ集めたディレクトリ構造になっているので、そのディレクトリが見えるだけです。残念。まあ、そのへんはそのうちなおるとして、iPhoneだけ持ち歩けばプレゼンできる日は来るのでしょうか?(ちなみに追加のケーブルはなしね)

2008年10月29日

IBMのJVMにはPermGenがないのか!

SunのJDKを使ってアプリケーションサーバを動かしていると時々OutOfMemoryの例外が出てしまいます。ヒープのサイズを変えても(ヒープは余っているのに)メモリがたらなくなることがあり、それは大体、PermGenが足りないせいでした。SunのJVMでは-XX:MaxPermSize=256mのように指定することでPermGenのサイズをコントロールしています。

さて、IBMのJVMでもOutOfMemoryが発生しました。PermSizeを指定し忘れていると思ってJVMに上のオプションを指定して起動しようとすると「Unrecognized Option」と言って怒られます。IBMのマニュアルらしきものを見るとオプションはあるのですが、指定できません。このスレッドを読んでいると、SunのVMと違ってIBMのVMはPermSizeを気にしなくてもいい作りになっているそうです。

Or you can switch to a JVM that does not use a permanent generation (or doesn't use it to store class files) like the IBM JVM.
さて、このすれっどから、「クラスローダーがリークしている」とか、「SunのJVMのPermGen」のお話とかで、以前IBMの人が言っていたJVMを定期的にリロードしたいと言うのが少し分かった気がします。

2008年10月28日

Eclipseにpydevも入れてみた

EclipseはJavaの開発以外はほとんど使いません。簡単に言えば、Eclipseがあまり好きではありません。一番好きな開発環境はVisual Studioなのです。でもMacじゃ使えないし、JavaはVisualStudioでは使えないし、ぶつぶつぶつ。

なので、PyDevもついでにインストールしてしまいました。http://pydev.sourceforge.net/updates/をSoftware Updateのサイトに追加して、インストールします。めんどーなのでEclipseの再起動はスキップ。で、Preferenceを開いてPyDevの「Inerpreter - Python」でNewボタンをおして、pythonの実行ファイルを指定します。

あんまり必要性を感じないのですがpylintも入れます。コンソールで

$ sudo easy_install pylint

してから、PyDevの設定のpylintのLocation of Pylintでlint.pyを指定して、Use Pylintにチェックをつけます。これで、うごくんですよね。きっと。

多分、僕はJythonは使わないので、このぐらいにしておきます。

MacBookにEclipseもインストールしてしまった

会社の仕事は、主にJavaを使っています。Javaのいい悪いや好き嫌いは別として、Javaの開発環境としてはEclipseはとても便利です。以前のMacBook(白)はハードディスクの容量が足りなくてEclipseをインストールしたり、製品のソースコードをチェックアウトするのは厳しかったです。

新しいマクブクたんは当分容量は心配しなくても良さそうです。

Filesystem       Size     Used  Avail    Capacity  Mounted on
/dev/disk0s2     233Gi   80Gi  152Gi   35%          /
なので、Eclipseをインストールしました。Eclipseはここからダウンロードしてインストール。僕はメニューが日本語でも英語でも気にしないので、日本語化するやつはいれません。次にSubclipseをインストールします。Eclipseのプラグインの管理画面でhttp://subclipse.tigris.org/update_1.4.x を指定します。

うーん、Eclipse速い。初めてマクブクたんの速さを実感した瞬間です。

2008年10月23日

マクブクへインストールしたもの

新しいMacBookにインストールしたもの。

  • iWorks
  • xcode
  • SafariStand
  • Firefox + Firebug, Tab Mix Plus
  • CotEdit
  • TwitterPod
  • Python関連いろいろ
  • Microsoft Remote Desktop
  • Flip4Mac WMV
  • Skype
  • Google Earth
  • Parallels
  • Komodo EditとExtensionたち
ちなみに、僕はEmacs使いじゃなくってKomodo Edit使いになっています。

マクブクたん来た

キーボードが光る方のメモリー4G。

2008年10月21日

Python 3.0にみんなすぐに移行しようとしているのか?

Python 3.0で大きく変わる言語仕様」は全体の論調が,「Python3.0は言語仕様が変わるので移行が大変。なので,大きな混乱のもと」と言う感じです。なんだか,3.0がでたらすぐに移行しないといけない,移行したくないならPython使うな,みたいな(僕の受けた印象)。

これから新しいプロジェクトを始めるなら3.0を使うべきですね。

って,作ったものを稼働させるシステムにPython 3.0が入っていなかったらどうするのさ?いろんな事情を考えると2.xを使い続けることになるし,そんなにあわてて3.0を使う必要もあんまりないし。

で,Zope 3.0みたいなパターンもあるし,3.0は暖かく見守っていればいいと思うんだけど。で,えらーい人たちが移行したら検討を初めてもいいかな,と。

で,僕?多分,メインは2.xで3.xの環境も作るかも。でも,必要なモジュールが対応しないと何もできないので,やっぱり,何もしないかな?

ちなみに僕は言語についてはかなり保守的です。

2008年10月20日

出荷日

出荷日:: 2008/10/20 配送業者: Eagle ASIA PACIFIC HOLDINGS

明日には届くか!?ウギャー。ちなみにお届け予定日は23日。

ブラッディ・マンデイを見た

週末に「ブラッディマンデイ」の1話と2話を見ました。一応マンガでは読んでいるのですが,主人公がカッコいいし,音弥が仮面ライダー電王だからいいらしいです。

Pythonがでているとかはどうでもいいですが,WindowsのPython使いはクラッカーの危険性があるということでいいんでしょうか?でもって,USBメモリにLinuxを入れている人は危ないと・・・。

で,ウィルスをばらまこうと言うドラマですが,それを見たせいなのか,主人公がクラッカーなせいなのか,週末風邪をひいてしまいました。馬鹿は風邪を引かないと信じていたので,僕は馬鹿じゃなくなったと言うことでしょうか?でも,久しぶりだった。

出荷準備中

「出荷準備中」になっていました。
今週かのう?待ち遠しいのう。仕事が手につかないのう。

2008年10月16日

MacBookのいらないもの

MacBookのDVDドライブですが,いつも思うのは,「いらねー」。ここにメディアを突っ込んだのがLeopardをインストールしたときだけです。それだけです。MacBookではCDをリッピングしたりしないし,映画を見ることもありません。Airだけじゃなく無印も無くすべきです。オプションか外付けがいいです。今時ソフトのインストールをCDからするだなんて,ほとんどないです。

それから,有線LANのポート。ここにケーブルを突っ込んだことはありません。ほとんどが無線LANです。滅多に使わないもののために穴を開けっ放しにしておくのはもったいないです。

それから,Firewireですが,これ,なんのことだか僕には分りません。わからないのでいらないです。

でも,新しいMacBookの光るキーボードは重要です。僕は薄暗い部屋で作業するのが好きなので,とても素敵なアイテムです。光るCPUクーラーとか大好きです。

2008年10月15日

Byline 2.0が凄いらしいので買ってみた

Byline 2.0が凄いらしいので,買ってみました。もともとGoogle Readerを使っていたので,Google Readerと同期ができるのは魅力的でした。でも,1.0だとオンラインのGoogle Readerより機能が遥かに劣っていたことと,それでいて1200円もするので,買う気がしませんでした。

2.0はしばらくは450円だそうです。300円ぐらいであればもっといいのに・・・。で,機能的にもまあ,いい感じで,Google Readerよりはさくさく動くし,使い易いので満足です。

この手のソフトはTouchとか使った場合にいいものだと思っていましたが,実際にiPhoneで使ってみても,データが手元にあると快適に動く(3Gはちょっと遅いのかも,もしくはSafariやそのJavaScript)ので,今までの考え方が間違っていたかもしれません。

でも,データの同期中は操作がめちゃくちゃ重くなるのが難点。

2008年10月14日

金沢動物園は意外と面白いかもしれない

週末に金沢動物園に行きました。当日に突然行こうと決めたので,実はあまり期待していませんでした。横浜にはズーラシアとか有名な動物園があるし,かなりしょぼい動物園を想像していました。でも,思ったよりいい感じかもしません。

コアラがいます。コアラは枝から枝へジャンプすることがあります。地上をのそのそ歩いているコアラは見たことがありますが,ジャンプするコアラは初めてです。それ以外の動作は鈍いですが。
カワセミという鳥がいます。お昼時はこのとりの餌の時間です。餌は生きた金魚です。小さな鉢に生きた金魚が入っています。カワセミはそれを捕獲して食べています。くちばしにつまんだ金魚がぴちぴちしています。子供は衝撃を受けています。

それ以外にもとてつも長いローダー滑り台があります。お尻に敷くものがないと,すべったあとお尻がかゆくなります。700円でお尻にしくものを売っています。

景色はいいです。房総半島が眺められます。
かなり広くて起伏が激しいです。なので、疲れます。

2008年10月10日

大分は日本です

まっちゃんに,一緒に大分行こうと誘ったら,「パスポートないから無理です」。

って,大分は日本です。パスポートいりませんから。

今度は一年続くのか?

そういえば,
日曜からガンダムが始まっています。
今回は1年間続くのでしょうか?

そういえば,
前々回は,途中で主人公が変わったし
前回は9ヶ月ぐらいでうちきられたし

今回は・・・。

でも見てしまう。

2008年10月8日

SMTPのRFCが新しくなっとる

SMTPのRFCが新しくなっとる。Internet Message Formatも。jpcertによると,


RFC 5321 では IPv6 への対応や、spam への対応に関する記述が追加されています。例えば、MUA からのメール送信に Submission ポートの使用を推奨しています。またその他、フォーマットやプロトコルに関してより厳格に記述するなどの変更がなされています。

スレッドとプロセスのできるまでの時間を比べる

昨日のエントリで,multiprocessingの方がthreadよりパフォーマンスがよいと言うお話でした。ただし,昔ながらの言い伝えによると,プロセスの生成はスレッドより遥かにコストがかかる処理です。どれくらいのコスト差があるのか,比較してましょう。テストに使ったスクリプトは次のものです。

import time, sys
import thread
from multiprocessing import Process

def doIt(start):
end = time.time()
print end - start

if __name__ == "__main__":
if len(sys.argv) > 1 and sys.argv[1] == "thread":
thread.start_new_thread(doIt, (time.time(),))
time.sleep(1)
else:
Process(target=doIt, args=(time.time(),)).start()

doIt関数が実行され始めるまでの時間です。これは実際にはプロセスやスレッドの作成のための正確な時間がでるわけではないですが,大体の目安にはなります。次のテーブルはスレッドによるものとmultiprocessingのものの時間(秒)です。
スレッドmultiprocessing
0.00019693374630.0215649604797
0.00020098686210.0210480690002
0.00069308280940.0213701725006
0.00007104873650.0214710235596
0.00031495094290.0205829143524

で,プロセスの生成はスレッドの生成に比べて100倍近く遅いです。昨日の計測では,重い処理をやっていたのでプロセスやスレッドの生成は誤差の範囲内ですが,処理自体が0.02秒以内でおわるようなものだと,いろいろとトレードオフが発生しそうです。もっともプロセスプーリングすればその辺は解消されるので,一概にだめとは言い切れませんが。

2008年10月7日

Python 2.6のmultiprocessingで性能を見てみる

Python2.6がリリースされて,気になっていたmultiprocessingとthreadを比較してみました。動作マシンは,MacBookでCore2Duoの2Gです。時間がないので,サンプルコードはかなり必要最小限になっています。ロック関係のオーバーヘッドがないようにthreadはjoinせずにsleepして終了するのを待っています(本当は結果が速く見たかったのでさぼった)。

それから,fibonacciは適当に重そうな処理だったので選んだけで深い意味はないです。

threadを使ったサンプルコード

import time
import thread
import threading
import sys

def fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)

def doInThread(i):
    start = time.time()
    for x in range(0, 30):
        result = fibonacci(x)
    end = time.time()
    print "%d Time %d sec" % (i, end - start)


if __name__ == "__main__":
    count = 1
    if len(sys.argv) >1:
        count = int(sys.argv[1])
    for i in range(0, count):
        thread.start_new_thread(doInThread, (i,))
    time.sleep(300)
multiprocessingを使ったサンプルコード

import time
import sys
from multiprocessing import Process

def fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)

    def doInThread(i):
        start = time.time()
        for x in range(0, 30):
            result = fibonacci(x)
        end = time.time()
        print "%d Time %d sec" % (i, end - start)


if __name__ == "__main__":
    count = 1
    if len(sys.argv) >1:
        count = int(sys.argv[1])
    for i in range(0, count):
        Process(target=doInThread, args=(i,)).start()
です。これで,それぞれ,スレッド数を増やしていって処理時間を見ます。下がその表です。単位は秒です。

スレッド数threadmultiprocess
122
262
3113
4144
5185
103610

で,Twisted教の教義からマルチスレッドは体に悪いし,Pythonのスレッドはインタープリタをロックしちゃうのでもともとパフォーマンスがよくないと言うことですが,思っていた以上に遅いです。Twistedのようにシングルスレッドで処理する方がよりよいパフォーマンスがえられます(単純に一度のメソッドの実行が2秒とすれば,10回で20秒なので)。

muliprocessingだとcoreが2つあるので,スレッド数(正確にはプロセス数)が2つまでは同じような結果です。その後,スレッド数に応じて速度が遅くなっていますが,正比例に遅くなるだけなので,OSのプロセス管理がちゃんとしているのでしょう。

まとめると,threadよりmultiprocessingの方が圧倒的に速い。
あれ?multiprocessingがどういうものなのか,書いていない。それはまた,いつか。

2008年10月6日

MacにPython2.6をインストール

Python 2.6がでたので,Macにインストール。python.orgからMac OS X用のバイナリをダウンロードしてインストールします。とりあえず,コンソールで

$ python -V

として「Python 2.6」が表示されればOK。次にeasy_installが使えるようにここからez_setup.pyをダウンロードして実行します。

$ sudo python ez_setup.py
次にPILをインストールします。Mac用のバイナリが見つからなかったので,自分でビルド・インストールします。PILでjpegを使えるようにするためには,jpegsrcと言うのが必要なのでダウンロードします。次に展開したディレクトリで

$ ./configure
$ make
$ sudo make install-lib
でインストールできました。次にPILのサイトからSource Kitをダウンロドして展開します。展開先のディレクトリで

$ python setup.py build
$ sudo python setup.py install
次にIPython。

$ sudo easy_install ipython
でおしまい。

あとは,
  • Twisted
  • Pylons
  • TurboGears
  • Django
ぐらいかな。もっと沢山忘れている気がする。とりあえず,これでmultiprocessingを試せるぜ。

2008年10月1日

CSSのハック,すげー

IE6で擬似的にmin-heightを指定する方法」,なかなか思い白くって凄いです。IEのバグを利用してCSSを書くらしいです。そこまでしてIE6に対応させないといけないのでしょうか?まあ,そうしないといけないケースと,そうしなくてもいいケースとあるとは思います。こうしたことはできることならしたくないですが,しないといけなければやるべきです。

CSSはまあ,特に多いのかもしれません(僕の印象)が,この手のものって言うのは昔から形を変えてありました。それがOSのバグだったり,MFCのバグだったりSTLのバグだったり・・・。相手のコードに手を入れられないのであれば,それがたとえ汚いやり方だったとしても,そのバグを迂回するコードを作るべきです。ただ,バグを利用したコードはかなり危険かもしれませんが,まあ,IE6はもう直さないだろうからいいのかもしれません。

でも,ぼくはこんなことはできません。でも,IEでもmin-heightは使いたい。

2008年9月30日

会社の中の鉢3

会社の中の鉢2

会社の中の鉢 1

ケータイ小説を読む

世間では「あたし彼女」というケータイ小説が流行っているらしいです。いろんなところでほめられたりけなされていたりします。けなしている人も,全部読んだ訳ではなさそうです。こういうものは全部読んでからじゃないと語るべきではないと思っているので,全部読みました。会社のTさん(女性)もまだ,半分ぐらいしか読んでいないそうです。anakaさんに至っては5ページぐらいらしいです。勝った。

読んでみて,これはこれでありなんじゃないかな?ただ,小説と言われると違和感があるけど,新しいジャンルとしてならいいかも。まあ,これを全部読んだので多分,もうケータイ小説と言うものを読まないとは思いますが。ちなみに,そこそこ面白かったです。昔,「サラダ記念日」と言う本があって,そのときも,いいと言う人と悪いと言う人がいましたが,まあ,似たような感じかな?昔の僕であれば,悪いと言っていると思いますが,今はあまり否定しません。凄くほめている人もいますが,それはどうかな?

で,性的な話が多いとか言う人もいますが,どうなんでしょう?学生のころ好きだったホイットマンの方が凄いぞ。じゃなくって,それにくれべたら,まあ,かわいいものでしょう。

まあ,好きになれない人は好きになれないだろうな・・・。

2008年9月29日

Dual Core Atomのべアボーン

サーバが壊れてからいまだ傷心中ですが,Dual Core Atomがでて,べアボーンもでました(ASCII.jp)。べアボーンじゃなく,製品でも気にしないのですが・・・。適当に見積もるとすべて合わせて3万5千円からから4万円ぐらいで作れるようです。

必要な機能の一つが,ファイルのバックアップ用のサーバ(TimeMachineのような世代管理は必要ない)なので,そこそこの容量のディスクが必要です。バックアップと言ってもデジカメの写真とiTunesの音楽たちぐらいなんですが。
それ以外のデータはAppleのMobile Meの中にいます。いいのか?

それから,Webサーバです。とりあえず,static fileがフィードできればいいですが,tracと過去のblogは復活したいです。データはほとんどがPostgreSQL(tracのデータもね)に入っているのですが,Atomってどれくらい速いのでしょう?前のサーバが超低電圧版PentiumM 900Mぐらいだったので,スペックアップになる?

それからAtom 330って64bit?まあ32bitでも気にしませんが。

と言うことで欲しいのですが,うーん,もう少し安くなんないかな?

2008年9月25日

Concurrency Utilitiesは面白い

はじめに言っておくと,僕はJavaが嫌いです。でも,仕事ではJavaを使って開発しています。
そんなJavaですが,ServletでWebアプリケーションを作っていると,至る所にマルチスレッドの罠が待っています。そもそも,Servletがマルチスレッドで動くと言うことを分っていない人が多いですが,その次に,どう変数を守るか,ということが大事になってきます。もっともグローバルな変数を使うなということはもっともですが,それだとパフォーマンスがでなかったり,不便すぎたりと,問題があります。

会社のまっちゃんが「Concurrency Utilityのすすめ」「パート2」と言うドキュメントを見つけてきました。なかなか面白いです。Java固有のお話もありますが,マルチスレッドの問題点は言語を問わず共通の問題を抱えています。それに対しておもしろいアプローチです。まあ,単に僕がjava.util.concurrentパッケージを知らなかっただけですが。まあ,ロックをいかに局所化してブロックしないようにするか,と言う話です。

まとめると,「スレッドは体によくない」と言うことです。

2008年9月24日

煙がでないさんまの塩焼き

秋と言えばさんまです。秋のさんまはおいしいです。今日はお昼にさんまの塩焼きを食べようとしましたが,残念なことに売り切れでした。悲しいです。家でさんまの塩焼きを作ろうとするとすごく煙がでて作れないと思っているそこの奥さん,フライパンで簡単に作れます。

  1. さんまを買ってくる(目が充血していない人がいいですよ)
  2. 洗ったさんまを拭いて水気をとる
  3. 塩を表と裏に適量かけてあげる
  4. さんまを真ん中ぐらいに頭としっぽにわけてまっぷたつにきる(フライパンにはそのままでは入らない)
  5. フライパンに油を引いて,ついでにニンニクもいれてあげる。(最近ニンニクを入れ忘れることが多いですが,大丈夫です)
  6. 中火で中に火が通るまで頑張ります。そのあと,反対側を焼きます。
  7. 中まで火が通ったら出来上がり。
ちなみに,急いでいるときは,強火で表面がいい色になるまで焼いて,レンジでチン!

2008年9月22日

おれおれきんぴらごぼうの作り方

なぜか、突然、料理講座です。とりあえず、僕は料理が作れると言うことの証明です。第一回目はきんぴらごぼうです。

  1. ごぼうを5cmぐらいの長さで細長く切って、水に浸す。気が向いたら水を取り替えてあげる。水に浸すことを「あくをぬく」ことだと信じて疑わない。
  2. 人参をごぼうと同じようにきる。
  3. あくがぬけた気分になったら、ごぼうの水をきる
  4. フライパンに油をひいて、塩を少々入れる。一度別の料理で塩を入れ忘れたことがあるので、塩だけは最初に入れるようにしています。
  5. フライパンを暖める
  6. 暖まったと思ったら、ごぼうと人参をいれて、七味唐辛子を入れる。うちは子供がいるので、最近はいれてないです。
  7. 強火で適当にいためてあげる。火のそばにいるとあつくなるので、僕は一分か二分ぐらいでしびれを切らしてこの作業はおわりにします。
  8. 醤油を適当に、みりんと酒を少々入れます。
  9. 水気がなくなるまでいためればできあがり。気分によってはごまをいれてもいい。最後にごま油で香りづけしてもよい。
あとは、食べるだけです。適当すぎるレシピです。そんなものです。

2008年9月17日

iPhoneのアンテナの数

iPhoneを買った直後は,家の中でアンテナは1本か2本しか立っていませんでした。電話はできるのでアンテナの数は重要ではありません。その後のファームウェアのアップデートなどで圏外になって,家ではiPhoneを電話として使用できなくなりました。iPhoneが悪いのかSoftBankが悪いのかは分りません。3Gの携帯を買った直後も圏外だったので,我慢できます。と言うか、ほとんど電話しないんですが。

そして,iPhone2.1。今まで圏外だったiPhoneのアンテナがすべて立っています。圏外から一気にアンテナ前回だと,うさんくささを感じてしまいます。でも,圏外だと電話できませんでしたが,今は電話機としても使えます。マジックです。

2008年9月16日

密かにNetBookとか言うものを検討しているのだけれども・・・

密かにNetBookと言うものを検討しています。検討しているだけで,買うかはまだ分りません。何に使うのかあまり決まっていません。

検討している製品と言うかメーカはDellとAcerとAsusです。まあ,有名どころです。もうすぐDual CoreのAtomがでるらしいので,それが乗っている製品がでるまで我慢するかもしれません。

さて,基本性能はどれも大して変わらないと思うので,とりあえずは気にしません。で,everseさんがDellのキーボードは変なところにキーがはみ出していると言っています。そんな馬鹿なことしないだろうと思って調べてみると,これ。はみ出している・・・。キーピッチはある程度までならなれますが,キー配列が標準じゃないキーボードは,ブラインドタッチできなくて,そのうち使わなくなるので,却下です。

Acerはタッチパネルの横のボタンがいけてないけど,許容範囲内。EeePCは調べてみないと・・・。

NetBookは欲しいような,いらないような・・・。MacBook Airを買えばいいような気もする今日この頃。結局MacBookが重すぎると言うことで・・・。

2008年9月13日

iPhone 2.1

iPhone 2.1になりました。アップデートされました。時間帯が「日本」から「クパチーノ」に変わっていました。僕は巡礼に行くつもりはないので、日本のままでいいです。

それ以外は・・・。よくわかりません。撮った写真の位置情報は常に北緯の西経になるというやつはなおっているんでしょうか?

2008年9月12日

Python Code Reading 04

Python Code Reading 04に行きました。僕が参加したのは今回が2回目です。お題はstringモジュールのTemplateでした。感想は、うーん、やっぱり使わないや。

メタクラスを使っていて面白くはあるんですが、なんとなく、メタクラスを使ってみたいから使ってみました。的な感じがします。多分、僕がTemplateクラスを拡張して何かをしてみたいとは思わないからかもしれません。

それから、知らない人(多分)が一杯きていました。

2008年9月10日

型なんて飾りです

僕は牛乳が嫌いです。だからCappuccinoは飲めません。でも,会社の若き魔法使いさんは僕の横でCappuccinoを飲むと言う暴挙にでました。

CappuccinoはObjective-JをコンパイルしてHTMLとJavaScriptを吐き出すものだと思っていたら,コンパイルと言うか,そのような変換はしないようです。基本的にはJavaScriptで[]の中と@のブロック(?)の中で,Objective-J固有の特殊な処理が実行されるようです。

若き魔法使いさんは次のコードを試してみました。


@implementation X : CPObject {
    CPString value;
}
- (void)setValue: (CPString) v {
    value = v;
}
- (CPString)getValue {
    return value;
}
@end

function main() {
    var x = [[X alloc] init];
    [x setValue:"a"];
    [x setValue:1];
    alert([x getValue]);
}



文字列のフィールドに数値を入れてみたそうです。普通に動くそうです。Objective-Jでは型なんて飾りです。まあ,Objective-Cも似たり寄ったりですが。

お預けになったMacBook

モデルチェンジするとささやかれていたMacBookですが,9/9に新しいやつがでればいいなー,と期待していました。まあ,MacBookでもAirでもどっちでもいいのですが。でも,新しいiPod nanoでした。いろいろ変わったところがあるのかもしれませんが,「デブnanoは流行らなかったのでもとに戻ったんだ」と。Touchはスピーカがついていてちょっとうらやましいです。うちのTouchにもスピーカがついていれば子供のけんかが少し減るのに・・・。

さて,そろそろと言うか,年末ぐらいまでに新しいノートPCが欲しいとおもっていたのに,MacBookはでませんでした。まあ,すぐに必要と言う訳ではなく,年末までにでればいいので,気長に待つだけです。でなければ,Airか,NetBookを買っちゃうかもしれません。

その前におうちのサーバを買いたいけど,Dual CoreのAtomがもうすぐです。

2008年9月9日

SproutCoreに興味があるんだけど・・・

僕は牛乳が嫌いなので,Cappuccinoは飲みたくありません。で,Dojoもいいんですが,SproutCoreも面白そうです。多分,MobileMeのUIを悪くないと思っているせいかもしれません。

SproutCoreとCappuccinoはよく似ています。CappuccinoはObjectiveJというObjectiveCの親戚を作ってHTMLとJavaScriptを生成する変態的な仕組みです。SproutCoreはちゃんとHTMLとJavaScriptで書きます。
でも,ドキュメントを読んでもよくわかりません。Railsっぽいからでしょうか?会社の隣にすわっている19才魔法使いの藤田さん(まっちゃんと同じように凄いエンジニア)もSqroutCoreがいいと言っていたので,きっといいものなのでしょう。

CappuccinoとSproutCoreの二者択一であれば牛乳を使っていないSproutCoreのほうがいいのかな?

2008年9月8日

Cappuccinoは面白そう

Cappuccinoと言うものがリリースされたらしいです。Objective-CのようなObjective-Jという言語でプログラミングすると280slidesのようなカッコいいプレゼンソフトが作れるらしいです。Objective-Cっていうのは言わずと知れたMacのプログラミング言語で,CocoaプログラマをWebアプリケーションプログラマに仕立て上げる変態的フレームワークです。ObjectiveCがかければ,Macだろうと,iPhoneだろうと,Webアプリケーションだろうと,ほとんど教育なしで何でも作れると言うことです。

でも,僕は使わないでしょう。

2008年9月5日

Google Chromeが凄いらしい件

最近はプロセス間通信のおもしろいことが多いと,勝手に想像しています。
さて,Google Chromeが至る所で話題になっています。テクニカル以外のことはそのうち「あすなろ」に書くとおもいます。Google Chromeが面白いと言うことですが,Google ChromeのDesign Noteがとても面白いです。WebKit(Safariのレンダリングエンジン)とV8のJavaScript engineの組み合わせの話ではなく,プロセス管理の話です。

電車に揺られながら読んだので,すっ飛ばしているところがあるかもしれません。
基本的にタブ一つにつき一つのプロセスで動きます。Chromeを起動した直後は,全体をマネージメントするプロセスと,最初のタブのプロセスの二つが起動します。タブが増えるに従って,プロセスが増えます。どれか一つのタブ(プロセス)が変なことをしても,他のタブが影響を受けることは少ないです。Webアプリを必須のアプリにするためには必要な機能なのでしょう。だって,Wordが落ちたら,一緒にExcelまで落ちたりとかしたら悲しいよね。
さて,今まではWindows一つにつき,一つのプロセスと言う常識でした。アプリケーションのバッググラウンドで複数のプロセスが動くことはありましたが,UIを担うものは一つのプロセスです。でも,Chromeはタブごとにプロセスを割り当てると言うへんな発想です。凄いです。また,タブだけじゃなくって,サイトごとにプロセスを切り替えると言うこともやっているようで,メモリーリークの影響が最小限に抑えられているようです。

で,プロセスを沢山動かすと,プロセスの起動のオーバーヘッドや,プロセス間通信のオーバヘッドでスレッドよりも遅くなるとおもっていましたが,Chromeを使った感触では,速いです。プロセス間通信については,Python2.6のmultiprocessingなど,最近気になることが多いです。

僕は数個のタブを開いただけですが,社内で30個ぐらいタブを開いて実験した人がいます。開いたのは普通のサイトだそうです。プロセスの数を数えると9つぐらいしかいなかったそうです。単純に1タブ1プロセスじゃなく,JavaScriptを使っているかなどで,いくつかの判定基準でプロセスの起動を制御しようとしているのかもしれません。

プロセス間通信の仕組みは,あんまりよくわかりませんでした。なんか大事なことが抜けているような気がする。

2008年9月3日

Google ChromeのJavaScript V8が凄いらしい件

グーグル「Chrome」、JavaScriptベンチマークで競合ブラウザを圧倒」と言う驚きの結果です。グラフを見ると,V8のパフォーマンスが桁が違います。きっと,名前が速そうだからでしょう。このベンチマークはGoogleが提供しているものなので,話半分にきいても凄いですが,JavaでJITが導入されたときや,IBMのJITがCのコードより速くなると言うときのベンチマークを思い出せます。

Design Elementsを読むと面白いところとやっぱりと言うところがあります。基本的に3つのポイントがあって,
  • プロパティへのアクセスを高速化した
  • コンパイルしちゃえ!JITみたいなもん。
  • おれらのがベージコレクションは凄いんだぜ,どうだ!
ということらしいです。最初のプロパティへのアクセスは,プロパティが追加されるたびにクラスをつくってアクセスするらしいです。なかなか富豪的です。同じクラスを何度もインスタンス化すると高速ですが,一度しかやらないと,かえって遅いはず。あとは,各クラスのプロパティへはオフセット(配列)でアクセスするので,辞書やハッシュよりは速いと言うことらしい。

コンパイルしちゃえ!がベンチマークのあの性能差に繋がっていると思います。Safariは知りませんが,Firefoxとかもコンパイルしちゃえ戦略をとろうとしていたような気がするので,暫くすれば,ここまでの性能差はなくなるかもしれません。

ガベージコレクションはまあ,そんなものです。ガベージコレクションを行なっているときはプログラムがブロックするので,タイミングによってはブラウザが反応しなくなるとかもあるんでしょうか?

V8恐るべし。

2008年9月2日

スレッドとプロセスと

大昔のLinuxはスレッドはプロセスでした。プロセスの生成コストなどの問題があって本物のスレッドになりました。さて,Pythonのスレッドは,ジャイアントロックで,インタープリタ一つに対して本当に同時に実行されるスレッドは一つだけです。yieldを使って擬似的によりマルチスレッドにすることはできましたが,そんな酔狂なことを好んでやるのはTwisted関係者ぐらいでしょう。

Python2.6でmultiprocessingという機能が入ります。これ,面白そうだと書いたのは昨日です。で,本当に面白そうなんです。まあ,カーネルのスケジューラとか好きだったので・・・。で,Pythonとスレッドに関しては,もっとpreemptiveな実装にしようと言う動きがありますが,こちらは,標準ライブラリだけじゃなくって,膨大ないろんなライブラリを書き換えないといけないので,現実的じゃありません。まあ,ほとんどのライブラリがマルチスレッドで動きが怪しかったり,import自体大丈夫なのかとか・・・。
で,2.6のmultiprocessingです。これって,結局,threadでやるとメモリを共有しちゃうから問題だよね,それじゃ,プロセスでやれば?と言うことです。と言うことで,この点だけ見れば,スレッドからプロセスへと,Linuxなどの流れに逆行しちゃっています。
今までのグローバルなロックがいけなかったかと言うと,よほど特殊なCPUじゃない限り問題なかったのです。以前は,なんだかんだ言って,同時に走るスレッドはシステム全体で一個でした。でも,マルチコアになっちゃって,複数のスレッドが本当に同時に走るので,ちゃんとスレッド対応すれば性能が2倍とか数倍になります。で,これをもっとも低コストでやるのが,子プロセスでやることだったのでしょう。

でも,これだけだとそんなに面白くも何ともないです。これがそのうち,一つのPC内じゃなくってネットワーク経由で別のPCのプロセスとイチャイチャすれば,そのうちMapReduceになる?という妄想がわいてくるのです。


2008年9月1日

言語のバージョンアップ

Pythonに限らず、基本的にJavaでもなんでもそうなんですが、僕は言語自体のバージョンアップはあまり興味がありません。もっともそうな理由はいろいろあります。ターゲットとしているOSのデフォルトのパッケージかどうかや、ある程度枯れているかや、誰かと開発する場合はその人がその機能をちゃんと知っているかとか、です。でも、多分、一番大きいのはめんどくさいからです。

さて、最近のJavaのバージョンアップは、割とこじんまりしていて面白くありません。まあ、昔から面白くなかったのですが・・・。それに、その機能、他の言語だと既にあるよとか、あります。Pythonはデコレータとか面白そうなんだけど、自分でデコレータなんて作れないよ!とか、知らずに新しい機能使っちゃったせいで、ちょっと古いシステムじゃそのまま動かない(これ、Javaに多い)とか。で、現実的な程度に古いシステムにあわせるんですが、Python2.6の新機能を眺めていると面白いです。しまった。ポリシーに反して眺めてしまった。multiprocessingのパッケージってわくわく(こういうの、好きなんです!)するけど言語標準にすべきなのか?とか、withって何気に便利だけど、うかつに使っちゃいそうとか。

2008年8月29日

Ubiquityの中身メモ

Ubiquityの続きです。とりあえず、ソースをダウンロードして中身を見てみます。chrome/contentのディレクトリの中におもしろそうなコードが転がっています。

まずは、builtinfactories.jsです。名前からすると組み込み関数を作成するコードが書かれていそうです。makeBuiltinGlobals関数で、グローバルに使える変数を定義しています。 XPathResult、 XMLHttpRequest、 jQuery、 Template(何だ?テンプレートへのパス?)、  Application、 Components、 window、 windowGlobals、 globals、 displayMessageが定義されています。jQueryみたいに名前から想像がつくものから、Componentsのように調べないと分からないものまであります。

cmdutils.jsの中には昨日のエントリのCreateCommandのようなユーティリティ関数が定義されています。CmdUtilsの関数は20個ぐらいいます。このファイルをそれらの関数が何をしているかわかります。

builtincmds.jsはあらかじめ組み込まれている関数が定義されています。ここが教科書的なコード置き場です。(僕は時間がないときはドキュメントを読まずにサンプルコードやテストコード、組み込みのコードを読むので・・・)
ここを読んでいるとUtilsのAPIがいるらしいです。その人たちは、utils.jsの中に隠れています。こっちは10個ぐらいのAPIです。

これで、参照すべき所は大体分かったはず。

Gears for Safari

GoogleのGearsがSafari対応のベータ版がでたらしいので,インストールしてみました。僕が何も考えないで使えそうなのはGoogleのReaderとDocsなので,その辺を試してみます。英語じゃないと使えない(日本語だと使えない)のは昔と同じです。Readerの設定で言語を英語にすると,オフラインで使用するかどうかのアイコンが右上に現れます。
オフラインにすると同期が始まります。2000個のアイテムを同期したとでます。何となく,ちゃんと使えてそうです。
次にDocsを使ってみます。オンラインで一度開いたアプリはオフラインにしても動くのですが,一度も開いたことがないアプリは,オフラインで開こうとしてもLoadingのまま何もできません。データ自体は同期しているみたいですが,JavaScriptとかその辺がちゃんとなっていないみたい。Firefoxではどうなんだろう?

とりあえず,Readerについて言えば,iPhoneがあるのでいらなくね?

2008年8月28日

FirefoxのプラグインUbiquityで遊んでみる

MacBookFirefoxを昨日やっと、バージョン3にしたばかりで流行から取り残されている今日この頃です。最近はUbiquityというFirefoxのプラグインが流行っている(?)ということで、インストールしてみました。

Webと言語を結びつけてユーザーがもっと早く簡単に一般的なWebタスクを実行できるようにする、実験的なブラウザプラグイン
というものらしいです。手軽にマッシュアップができるとか書かれていますが、難しいことはさておき、まあ、コマンドを実行するためのもので、コマンドはJavaScriptで書きます。とりあえず、helpと打つとヘルプがでるし、command-listと入力するとコマンドの一覧がでます。command-editorと打つと自分でコマンドを作成するためのウィンドウがたちあがります。と言っても単なるテキストエリアがあるページが出るだけですが…。ただし、入力したそばから保存してくれるので、明示的に保存しなくてもいいし、自分で入力したものはすぐに使えます。

コマンドの作り方は、「Creating Command Tutorial」に書かれていますがAPIがよく分かりません。サンプルのコードをざっと眺めますが、とっても簡単そうです。でも、APIは・・・。

さて、僕が作りたいというか、欲しい機能が簡単にTracのチケットを開いたり、チケットを作成できたりすればいいだけなので、特定のURLが開くだけの単純なものでいいのです。コードだけを書いちゃうとこんな感じ。

CmdUtils.CreateCommand({
name: "ticket",
takes: {"Ticket Number": noun_arb_text},
execute: function(ticket_no) {
openUrl("http://私のTracサーバ/ticket/" + ticket_no.text);
}
})

別の書き方もできますが、小さな脳みそでは一度に沢山は覚えられません。

CmdUitls.CreateCommandでコマンドが作れます。引数にハッシュを指定して名前とか実行する関数とかを定義していきます。JavaScriptじゃよくあるやつですね。nameはコマンドの名前になります。executeで実行したい処理を書きます。openUrlは指定したURLを開いてくれます。openUrlInBrowserという人もいるみたいです。takesを指定するとコマンドに引数を指定できます。でも、translateとかのコマンドを見ると、引数にもっといろいろ指定できるようです。

簡単でしょ!

もっと詳しいことはそのうち書くかもしれませんが、忘れるかもしれません。

追記
ubuquity 0.1.1にしたらopenUrlじゃなくってUtils.openUrlInBrowserにしないと動かない。

2008年8月27日

MacBookのFirefoxを3.0.1にアプデート

僕のMacBookのFirefoxは今まで2.0を使ってきました。UbuntuのFirefoxはもちろん3.0ですが,Macはものはダウンロードしてあるのですが,インストールせずにそのままになっていました。理由はFirebug1.2のリリースを待っていたと言うのが,もっともらしい理由です。Firebug1.2もリリースされてしまったので,インストールしないもっともらしい理由を失いました。仕方なく,Firefoxのバージョンをあげます。メインはSafariを使っていて,僕の最近の生活ではSafariで困ることはほとんどないので,Firefoxは開発用です。つまり,動作確認とJavaScriptのデバッグですね。

Firefoxのプラグインはもともとあまり入れていませんでしたが,次のものです。
  • Firebug
  • TabMix Plus
  • Gears
  • bbs2chreader
Firefox3だとbbs2chreaderは使えないらしいですが,もともと使っていなかったので気にしません。TabMix Plusは開発版だと動くらしいので,開発版を入れちゃいます。Firebugはもちろん1.2にします。Gearsは,うーん,調査用に入れているだけですが,単にまだ,入っているだけです。何もしていません。

UbuntuでFirefox3を使っているので,MacBookのFirefoxのバージョンがあがってもなーんとも感じません。ちゃんちゃん。

2008年8月25日

iPhone固有のCSS

元ネタ:

前回のviewportに加えて,CSSでiPhone固有のカスタマイズが出来ます。iPhone固有のCSSのプロパティは「-webkit-」で始まります。-webkit-border-imageや-webkit-border-radiusでボーダの画像や角の丸みを制御できます。

-webkit-text-size-adjustでテキストのサイズを指定できます。noneかautoか倍率やサイズを指定します。デフォルトはautoのようですが,viewportのサイズとの組み合わせで調整した方がいいかもしれません。横幅が320pxより大きいときは考えた方がいいかも。

-webkit-tap-highlight-colorでリンクをトンっ!ってタップしたときの色を変えられるそうです。デフォルトは灰色です。あまりこれを使いたい理由が分りません。

2008年8月22日

Internet Exploreのシェア

blogを引っ越してから2週間弱です。引っ越してからはアクセスがまだ、少ないです。アクセス数はもう気にしていないので、どうでもいいです。

さて、いろんなところで、Firefoxのシェアが増えているとききます。ここのアクセスをみると、

  1. Firefox                     46.88%
  2. Safari                        29.6%
  3. Internet Explore   21.88%
Firefoxのシェアが断然多いです。Safariもブレイク直前でしょうか?IEは悲惨です。

OSは相変わらずWindowsが多いです。ほぼ同じぐらいMacがいます。Linuxはかなり少ないです。以前はLinuxが幅をきかせていたので、Linuxのシェアは落ち込んでいるんでしょうか?

まあ、サンプル数が以前に比べて二桁減っているので、全然当てになりません。

夏は行ってしまった?

今日は涼しいです。電車の中は寒いです。まだ,8月です。夏はもう,過ぎ去ってしまったのでしょうか?

北海道では115年ぶりの記録更新だそうです。寒いはずです。寒くなってきたと言うことは,そろそろPCを買ってもよいと言うことでしょうか?

2008年8月21日

WEB-DB Press Vol.46に記事を書きました

WEB-DB Press Vol.46にPythonの記事を書きました。そして、今日、雑誌が届きました。

僕の記事のタイトルは、「特集3 そろそろ試してみませんか?
文法&日本語,MVC,フレームワークPylons[速習]Python」と言うことらしいです。うーん、長い。

要約は

Django,TurboGears,Pylonsなどの各種フレームワークの活発な開発,Google App Engineの登場により,プログラミング言語「Python」への注目度が高まっています。本特集では,「WebプログラマのためのPython」をテーマに,Pythonの機能と文法,気になる日本語環境,そしてO/Rマッパ,テンプレートエンジンなど,開発基礎となる部分を丁寧に解説します。さらに,フレームワークPylonsを使ったサンプルアプリケーションの作成にも挑戦し,開発の流れを押さえつつ,Pythonの旬の情報をふんだんにお届けします。
と言うことです。目次は、

特集3
ろそろ試してみませんか?
文法&日本語,MVC,フレームワークPylons[速習]Python

* 第1章:Java&他言語プログラマも楽々スタート! Python入門
……対話モードで文法を学ぶ……大谷弘喜
* 第2章:Pythonとデータベース
……豊富な稼働実績を持つSQLAlchemy……大谷弘喜
* 第3章:Pythonのテンプレートエンジン
……新世代Makoテンプレートエンジン……大谷弘喜
* 第4章:いますぐ始めるPythonアプリケーション作成
……WSGI,フレームワークPylons,一行掲示板……大谷弘喜
です。新世代は新世代でも何でもないです。SQLAlchemyの稼働実績もどうなんでしょう。本になってから目次をまじまじと見ました。恥ずかしい。

2008年8月20日

CodeRepos

個人リポジトリを共有しよう!計画。」と言うのがあるらしいです。

みんながそれぞれ作って公開してる公開レポジトリを一緒くたにしちゃいたい。参加してる全員がどのファイルもみたり変更したりできるような。

パッチ送られてくる代わりに「後で見とくからコミットしといて」とかいえたりとか、つくりかけで放置したもので他の人が興味もったら続き作ってもらうとか、メンテするのめんどくなったのだれかにやってもらうとか、突発的に誰かと一緒にプロジェクト始めたりとか、できる!
と言うことらしいです。ちょっと面白いです。と言うか、サーバが壊れてしまって,いくつかのプロジェクトはSourceforgeに引っ越そうと思っていましたが,こちらでもいいかな?いや,決して捨てるんじゃないんです。きっと。ただ,理想は分るんですが,ちょっと疑問なところもあります。でも,僕のプロジェクトの引っ越し先にはいいかも。

どうでもいいことは,FAQでSubversionの使い方で,僕の記事へのリンクが張ってあります。少しは役に立っているかもしれないと思うと,ちょっと嬉しいです。でも,LinusはSubversion嫌いなんだよな(また,自虐的)。

2008年8月19日

viewportって何だ? その2


このあたりをベースに。iPhoneの画面サイズはこの画像のような構成になっているらしい。で,横の画像のvisible areaの領域がviewportです。普通のブラウザだと,スクロールバーとかでviewportの領域は小さくなりますが,iPhoneは固定です。

普通のWebページをレンダリングするときは,横幅を980pxとしてレンダリングして,画面サイズに合うように縮小します。横幅を決めないとレンダリングしようがないので,まあ,妥当な実装だとは思います。でも,980pxって言うのはどういう根拠なんでしょう?このサイズはちょっと納得できません。

viewportを指定することで,横幅などをそのサイズでレンダリングします。320pxとか480px(横にしたとき)にすると,縮小されずにきれいに表示さます。拡大,縮小はscaleを指定すれば,制御可能です。

viewportの指定の仕方は,「WebページのiPhone対応について調べてみる その2」「iPhone/touch向けのmeta要素viewport」に。まあ,幅と高さ,拡大倍率が指定できます。また,倍率はユーザが変更可能かどうかも制御できます。

基本的には,横幅は980pxより大きいWebページはMobileSafariが頑張ってかっこ良く見えるようにレンダリングしてくれます。980pxより小さい場合は,左右に余白が出来ちゃいます。そのため,980pxより狭い場合は,viewportを指定せよ!高さを固定したい場合もviewportを指定せよ!必要であれば倍率も制御できるので心の片隅に止めておけ。と言うことでいいのかな?


MobileMeまた延長か・・・

Mobile Meがまた無料で延長なんですね。僕の使い方だと,そんなに困ったことになっていない,もしくは気づいていないので,延長されると嬉しいです。

で,前回の分とあわせて,合計3ヶ月分です。最大の売りの一つのプッシュサービスが来年まで延期されちゃった(機能がおちた)のに加えて収束に3ヶ月かかるって,かなり大変なことになっていたのか?

2008年8月18日

PythonでExifの編集

iPhoneで撮った写真の位置情報が常に北緯の西経になる問題で,せっかく位置情報がついているので修正したくなるのが人情です。しかも,iPhoneで撮った写真は沢山あるので,GUIのツールでちまちま作業することは出来ません。コマンドラインのツールは何があるか知りません。まあ,シェルで計算させるのもつまらないので,PythonでExifを扱ってみました。

Python Imaging LibraryもExifを読み込めますが,出力は出来ません。Exifのついた写真を編集して保存すると,Exifがなくなるみたいです。仕方なく他のものを探すとpexifと言うのがいます。pyexifと言うのもいて,これは読み込みしかできないです。名前が異常に紛らわしいので注意。

今回はpexifを使って位置情報の編集します。と言っても,get_geoで位置情報をとってきてset_geoで設定し直すだけ。

from pexif import JpegFile

ef = JpegFile.fromFile("image.jpg")
geo = ef.get_geo()
ef.set_geo(geo[0], -geo[1])
ef.writeFile("image.jpg")

うーん,簡単。

iPhoneの北の西

iPhoneで撮った写真にGPSの位置情報を入れてあげると,必ず北緯の西経になるらしい。どうりで,奄美大島がカリフォルニアの近くの海の上にあるはずです。納得しました。

さて、僕のMacで位置情報をどうやって編集すればいいでしょう?

ダークナイト


週末にダークナイトを見ました。バットマンの映画です。映画のチケットをもらったので,一人で行ってきました。ポニョを見ようかと思ったのですが,「いい年下オヤジが一人で行くの?」と蔑まれたので諦めます。スターウォーズのR2D2も出演しているらしいインディージョーンズはかなり込んでいるらしいです。ハンナプトラ3も込んでいます。込んでいるだけで,ちゃんと座ってみられるのですが,のんびりと見たいので,ダークナイトにしました。

ダークナイトですが,映画の途中まで「dark night」だと思っていました。夜の方です。映画の途中でwhite knightとかってでてきて初めて騎士の方だったんだと分りました。

で,バットマンビギンズの続きだろうと思ってみていたのですが,結構面白いです。いいヤツが悪いヤツになっちゃって,そのことをバットマンが隠蔽して・・・。ふっふっふ(意味不明)。

2008年8月15日

Macもそろそろ

僕は大体2年周期でノートPCを買い替えています。今のMacBookは年末頃に2年になります。そして,PCとかを買うのは大体決まって冬です。

さて,新しいMac Book Airがでるとか,新しいMacBookはデザインが変わるとか,いろいろ噂は聞こえてきます。悲しいことは,昔と違って今使っているハードウェアの性能に不満がほとんどないことです。ハードウェアのスペックは買い替えるときの理由にはなりません。ただし,違いが体感できないとしてもスペックが下がることは避けたいです。まあEeePCみたいな全く違うセグメントであればスペックは下がってもいいですが・・・。
ハードウェアのスペックより,重さとデザインが選択の基準になります。MacBookはまだどんなものか分らないので,楽しみです。Airは噂によると,今のMacBookと同じぐらいか,ちょっと上っぽいので,買い替えの対象になります。両方見比べて年末ぐらいまでに買っちゃうかもしれません。まあ,お財布と相談なんですが・・・。
何となく,MacBookをまた買っちゃいそうな気がしますが・・・。

2008年8月13日

iPhoneのデータの転送料

iPhoneの設定の使用状況にある「携帯電話ネットワークデータ」によると,一ヶ月間での受信データは200MB(Bはbyte? bit? byteだよね)もありました。送信量は少なくって14MBでした。って,多い!一体何に使っているんでしょう?ぼくは至って普通の使い方しかしていないつもりです。マップが沢山ダウンロードしているんでしょうか?

おそるべしiPhone。

gihyo.jpのWSGIの記事

gihyo.jpにWSGIの連載があります。今度でるWeb DB PressにPylonsの記事を書いたのですが,本当はPylonsじゃなくって,WSGIだけでアプリケーションを作っていって・・・という内容にしたかったのですが,ページ数が足りないので,諦めました。WSGIって単純な分,説明が難しくって,ある程度経験のある人ならすぐに分ってもらえて,そうじゃない人は,「何が嬉しいの?」みたいになっちゃうんじゃないかな?

で,この連載,とっても楽しみなんです。

ちなみに,社内では「WSGIはフィルタです」で大体分ってもらえます。でも,この言い方も危険で誤解を招くんですが・・・。

WebページのiPhone対応について調べてみる その2

前回から引き続いてWebページのiPhoneへの対応の仕方です。今回は「Webコンテンツの最適化」をざっと眺めてみます。

CSSの切り替え

最初はCSS3で条件に応じてCSSを使い分ければ,iPhoneに最適化したページが作れると言うものです。CSSはあまり詳しくない(かなり昔の知識のまま止まっている)のですが,screenとかprint以外の条件で切り替えられることは知りませんでした。

条件はscreenでなおかつdevice-width、min-device-width,max-device-widthで切り替えると言うことです。

max-device-width : 480px : iPhone
min-device-width : 481px : 普通のブラウザ

こんな感じで書くらしい


<link media="only screen and (max-device-width: 480px)" href="small-device.css" type= "text/css" rel="stylesheet"/>

<link media="screen and (min-device-width: 481px)" href="large-device.css" type= "text/css" rel="stylesheet"/>

onlyがついているのはCSS3に対応していない古いブラウザには無視してもらえるそうです。外部CSSファイルがおけないbloggerとかだと,次のようにテンプレートの中に書けばいいらしい。

@media screen and (min-device-width: 481px) { ... }
ユーザエージェント

ユーザエージェントは決まり事がいろいろありますが,「Mobile.*Safari」にマッチすればOK。えっ。はしょり過ぎ?

WebページのIcon

faviconのiPhone/touch版ですね。apple-touch-icon.pngをトップにおいておけばいいらしい。サイズが書いていないんだけど,縦横32pxぐらいでいいのか?

<link rel="apple-touch-icon" href="/custom_icon.png"/>
って書いておけばページごとにアイコンを切り替えられる。

と言うことで,のこりはまた今度。

iPhoneのネットワークスピード

彼の偉大なS氏(って誰だ?)は,「ブロードバンド回線になって最初にやることはスピードテストである」と言われた。その伝統は64kbpsのISDN回線がブロードバンドと呼ばれていた頃にさかのぼります。それ以前はブロードバンドと言う言葉を聞かなかったような気がします。

iPhoneのスピードをiPhone Speed Testで計ってみました。家のネットワーク(なんとかnのやつ)は2Mbpsでした。本当はもっと速いのかもしれませんが,このぐらいのスピードが出ていれば十分です。

次に通勤途中の東海道線の電車の中で計りました。電波さえ来ていれば0.3〜1Mbpsぐらいはでています。遅いときはちょっと気になりますが,ISDNの5倍近いです。ちなみに実家はまだISDNです。横浜駅で動いていないときは1〜1.2Mbpsぐらいでていました。無線LANほどではないですが,十分速いです。

ちなみに近所のMacでYahooの公衆無線LANにつなげると,電波がしょっちゅう途切れて使い物にならないです。なので、公衆無線LANが使えるところでも3Gのネットワークに負荷をかけてしまいます。

2008年8月12日

悪ガキどもの夢の跡

お盆の前後になると,上の子供二人は田舎のおじいちゃんの家に島流しにされます。うるさい子供が二人いないと,家の中は穏やかです。一才の娘が走り回ったりしますが,上の子二人の比ではありません。

子供が二人いないつかの間は,朝から静かです。さらに,お盆になると,嫁も里帰りするのでしばしの独身です。ふっふっふ。

WebページのiPhone対応について調べてみる

会社ではWebアプリをSafariに対応させればiPhoneに対応したことになると思っている人がいるようですが,Safari対応とiPhone対応は違います。そもそも,iPhone対応ってどういうこと?と言うことで調べてみます。ドキュメントがちゃんとしているので,ドキュメントを読めばすみます。僕は英語しか見つけられませんでしたが,日本語が存在しているという噂もあります。

さて,第2章にiPhone対応ページの作り方の説明があります。ざっと見てみると
  • HTML4などの標準を使いましょう
  • よいWebデザインのプラクティスに従いましょう
って,当たり前すぎます。
  • フレームセットはやめましょう
これは,Safariがページを拡大,縮小するときに表示が崩れるためです。ここからが,iPhone固有のものっぽいです。
  • カラムやブロックを使いましょう
ブロック要素や画像とかをダブルクリックするとその領域が拡大できるので,ユーザビリティが向上します。
  • リソースの制限があります
具体的には,gif, png, tiffは2Mバイトまで,jpegは32Mバイトまで。HTMLやCSSなどのファイルサイズは10Mバイトまで。割と大きなリソースが扱えます。JavaScriptの実行は5秒で打ち切って,それ以降の動作は知らないと言うことらしいです。あまり重い処理をやると悲しい結末になりそうです。また,JavaScriptで使用できるメモリの上限が10Mバイトだそうです。あと,同時に開けるページの最大数が8ページです。

  • select要素を使うとiPhoneに最適化したselectボックスが使えるのでおすすめ
  • videoやpdfはそのまま見られるよ

  • ベクターグラフィックスやアニメーションにキャンバスを使え
僕には何のことだか分りません。そしてまた,一般的なお話に戻っていきます。
  • JavaScriptのwindowやalertを使ってね。
  • サポートメディアはvideo関係とaudio関係でそこそこ豊富よ
  • HTTPSとかのセキュリティ関係の機能は使えるよ
それから,最後に
  • flashなどのサポートしていない機能は使うな
って,使いたくても使えないでしょ。

2008年8月11日

viewportって何だ?

さて,諸般の事情で,blogをbloggerに引っ越しました。bloggerはかなりシンプルですが,ほとんどのテンプレートがページの横幅が固定されています。横幅は可変にしたいのですが,やたらと面倒そうです。我慢します。

さて,iPhoneでページをみると,横の方に無意味なスペースが出来てしまいます。iPhoneは画面がもともと小さいので,余分なスペースは嬉しくありません。調べてみるとhtmlのヘッダーでviewportを指定するとその横幅になるそうです。iPhone用にページを最適化するためには,そこそこカスタマイズしないといけないのかもしれません。

2008年8月9日

サーバが壊れました

サーバが壊れてしまいました。これで、今年になって2台目です。最近のPCは根性がありません。代替用のマシンも余っていないので、こっちに引っ越します。

過去の記事は、そのうち復旧したいですが、URLは変わるかな。その前にそもそも復旧できるのか?