新年明けましておめでとうございます。

新年明けましておめでとうございます。
ふとしたきっかけで始めた WordPress ですが、楽しくなってきたので続けてみようと思います。
はてなブログとどう棲み分けするか考え中です。

2ch Script version 0.3

利用している人はいないと思いますが、以前 [ id:KYoshiaki:20081026 ] 紹介した iPhoneiPod touchSafari 対応 2ch Script version 0.3 [ hhttp://kyoshiaki.sakura.ne.jp/osx/leopard.html ] を公開します。

時間がとれないので、厳密に動作確認をおこなっていません。問題があるかもしれません。コメント設定を許可にしておきます。だだし、コメントは承認後に公開されます。時間がとれる限り返事はするつもりですが、遅くなると思います。

ブログには書いていませんでしたが、随分前に値段は高かったのですが DS 版 Chessmaster: The Art of Learning を購入していました。

ニンテンドーDSi にリージョンプロテクトがないので、問題なく動作します。私自身めちゃくちゃ弱いのですが ELO レーテイングをこつこつあげています。

また iPod touch 用に iTunes StoreApp Store から

iChess (Free)
カテゴリ/ゲーム
無料
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=298074242&mt=8

をダウンロードして遊んでいたのですが、結構勝てそうなので

iChess
カテゴリ/ゲーム
\115
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=292985696&mt=8

を購入してみました。レベルをちょっと下げてみたら勝てたので驚いています。iChess はあまりにも機能がシンプルなので他のチェスソフトを物色中です。

また、将棋ソフトが発売されるのを待ち望んでいました。

柿木将棋
カテゴリ/ゲーム
\450
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=301163765&mt=8

とうとう、柿木将棋が発売されました。早速購入しました。勝てた時はうれしかったですね。レベルは内緒ですが!

あと前々回 [ id:KYoshiaki:20081207 ] 紹介した自作 iPhoneiPod touch 用アプリ iYKRSS や Safari を使ってウェブブラウジングしているのですが、わからない英単語を見つけた時、以前のように一度 Safari を終了して i英辞郎 で調べるのではなく、ニンテンドーDSi ‘漢字そのまま DS楽引辞典‘ で調べられるのは便利ですね!本当は iPod touchiPhone の両方があればよいのですが!

たのしいCocoaプログラミング[Leopard対応版]

Apple - September 2008 Special Event
http://events.apple.com.edgesuite.net/0809dt4bs89/event/index.html
Apple Keynotes (iTunes Podcast)
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=275834665

Apple – September 2008 Special Event で iPod シリーズが一新されましたね!

私は、古い第4世代 iPod をいまだに使用しています。iPod nano にも少し興味があります。

以前にも、ブログに書いたように、私の利用方法だと iPhone より iPod touch が最適です。早速、アップルストアで iPod touch 32GB を注文しました。出荷予定日 は 2008/10/10(Fri) です。楽しみです。

話は変わりますが、

を購入しました。Mac 関連のプログラミング本は、ほとんど購入しています。暇を見つけて二日ぐらいかかって読み終えました。Mac でプログラミングしようと思っている人が、最初に購入する日本語で解説されている本としては最適だと思います。

Part 2 Lesson 5
チュートリアル:Hello World!
5-7 アウトレットとアクションの接続

で説明されているアウトレットとアクションの接続方法以外にも、Inspector Panel を使った方法があります。詳細は Inteface Builder Version 3.1.1 (672) (最新バージョンは iPhone SDK に含まれています。) の Help メニュー から Inteface Builder Help を選んでください。

Interface Builder User Guide
Connections and Bindings
Creating and Managing Outlet and Action Connections
Making Connections Using the Inspector

に説明があります。Creating and Managing Outlet and Action Connections を読めば Connection についての知識としては十分だと思います。

また

Part 4 Lesson 11
チュートリアル:RSSリーダ

は、ソースについての説明は

Part 4 Lesson 15
XML と RSS
Part 4 Lesson 16
テーブルビュー

などで出てきますが、ソースについて一行一行の説明とそれぞれ利用しているクラスの説明があるといいなと思いました。Part 4 Lesson 11 で、つまずく人が一番多いと思います。とにかく、クラス名

NSURL
NSXMLDocument
NSXMLNode
NSTableView

Xcode のメニュー ‘ヘルプ/製品ドキュメント’ を選択し、検索してください。Class Reference を見つけたら、Companion guide のリンクをクリックして内容を理解していけば良いと思います。

NSURL場合

NSURL Class Reference
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/Reference/Reference.html

Companion guide の URL Loading System

URL Loading System: Introduction to the URL Loading System
http://developer.apple.com/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html

です。

Xcode のヘルプは検索などは便利ですが、体系的に理解するには

Apple Developer Connection
http://developer.apple.com/

にログインして Safari で見たほうが、ドキュメントの画面の占有率も広いですし、理解しやすいと思います。

また、フレームワークのクラスの説明は、古い書籍も参考になります。ただし、最新の環境 Mac OS X Leopard などでは、以前利用されていたメソッドが推奨されないメソッドになっている場合があるので注意してください。

私が持っている本で参考になったものを何冊か挙げておきます。入手困難な本もあります。

Cocoa Life Vol.1 ~ Cocoa Life Vol.4
Cocoa勉強会(関東)
http://www.cocoa-study.com/
Cocoa本インフォメーション
http://www.cocoa-study.com/book/

後、NSXMLDocument を理解すれば、Amazon から REST を利用してデータを取ってくることも簡単にできます。REST というと大げさですが、URL を使った簡単な仕組みです。
拙作、BookLibrary [ http://koyama-.cool.ne.jp/tiger.html#bl02 ] 、CDJacket [ http://koyama-.cool.ne.jp/tiger.html#cdj01 ]、DVDjacket [ http://koyama-.cool.ne.jp/tiger.html#dvj01 ] などのようなアプリケーションでも利用しています。Booklibrary などは作ってみると楽しいと思います。

拙作 OpenURLHatenaRSS [ http://koyama-.cool.ne.jp/tiger.html#opu01 ] も

Part 4 Lesson 11
チュートリアル:RSSリーダ

と同じ仕組みです。私が公開しているフリーウェアはソースも公開しています。きれいなソースではありませんが、よかったら参考にしてください。

Yoshiaki's HomePage
http://koyama-.cool.ne.jp/

Learning Python ( with/as statement )

ようやく Learning Python ( asin:0596513984 ) を読み終えました。

読み終えて気付いたのですが、最近の言語はどれも似たような機能が搭載されていまね。Objective-C 2.0 の Fast Enumeration

===== Objective-C 2.0 =====
Fast Enumeration
for ( Type newVariable in expression ) { stmts }

などは、RubyPython にも似たような構文があります。

Mac OS X に標準でバンドルされている Python 2.5.1 ではサポートされていませんが、Python 2.6 でサポートされている with/as statement などは ruby の ‘ブロックつきメソッド’ に非常に似ていますね。

===== Ruby ( with.rb ) =====
#!/usr/bin/env ruby
File.open("sample.txt") { |f|
f.each { |line|
print line
}
}
===== Python ( with.py ) =====
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import with_statement
with open(r'sample.txt') as myfile:
for line in myfile:
print line

上の例だと RubyPython のどちらもファイルをクローズする必要がありません。後、Lisp を多少なりにも勉強しておいて良かったですね。下記の2冊はお勧めです。Practical Common Lisp ( asin:1590592395 ) は途中までしか読んでいませんが!

話が変わりますが、VMware Fusion 上で Windows XP Professional を使えるようになって、今更ながら GyaOYahoo!動画を楽しんでいます。年のせいかほとんどアニメを見なくなりましたが、最近だと ‘電脳コイル‘ を見たぐらいです。

それでも GyaO の ‘RD 潜脳調査室‘ はかかさず見ています。ちょっと暇な時間があったので、Yahoo!動画のアニメページを見ると ‘精霊の守り人‘ と言うタイトルが目に付いたので、ちょっと見てみました。

結構面白かったので1話から5話まで見てしまいました。6話以降は有料だし、全話見るには相当時間がかかりそうなので、Amazonで書籍をとりあえず4冊購入してみました。

まだ続編があるみたいです。’精霊の守り人‘ は NHK-BS2 で 2007 年 4月に放映されていたようです。

うっかりしていたのですが、ハリー・ポッターの最終刊も発売されていたので、ついでに注文しておきました。ハリー・ポッターは全巻持っています。月日が経つので、以前の内容は結構忘れていますね!

list.py

iPhone いよいよ発売されましたね。私の利用方法が、主に自宅の Wi-Fi を想定したものだと考えると、 iPhone 16GB で 月額料金 \8720円(+通話料) は躊躇してしまいますね。
本体一括払いにすると、月額料金\5360(+通話料) になるようですが!
たぶん、iPod touch 32GB を購入することになると思います。ただし、iPod も 9月には一新される噂もあるので迷っています。

前回にも書いたように

を続けて読んでいます。574ページまで読みました。今月中には読み終わりそうです。

簡単なプログラムを作りたくなり、2ch 掲示板 ‘新・mac’ 板のスレッド一覧をダウンロードし、スレッドタイトル名でソートして表示するプログラムを作ってみました。

------------------[ list.py ]------------------
#!/usr/bin/env python
# coding: UTF-8
import httplib
import re
connection = httplib.HTTPConnection( 'pc11.2ch.net' )
connection.putrequest('GET', '/mac/subject.txt')
connection.putheader('User-Agent', 'Monazilla/1.00')
connection.endheaders()
connection.send('')
response = connection.getresponse()
print response.status, response.reason
data_shift = response.read()
connection.close()
data = data_shift.decode('shift-jis', 'ignore')
re_line = re.compile("(.*)<>(.*)\((\d+)\)")
subject = []
for line in data.splitlines():
match = re_line.match(line)
t = (match.group(1), match.group(2), int(match.group(3)))
subject.append(t)
subject.sort(lambda x,y: cmp(x[1], y[1]))
for f, t, d in subject:
print '%(f)s %(d)4d %(t)s' % {'f': f, 'd': d, 't': t}
------------------[ list.py ]------------------

利用しやすいように Zip で圧縮したものを以下のリンク先に置いておきます。

ダウンロードファイル list.zip
URL [ http://homepage.mac.com/yos_koyama/list.zip ]

実行結果

ターミナルの環境設定で下図の赤丸部分に注意してください。デフォルトの設定だと文字が汚い場合があります。
その場合は、ターミナルの環境設定を開き、テキストタブを選択し、’フォント’ を Monaco 11 pt. 、’ボールドフォントを使用’ のチェックを外してください。
次にウインドウタブを選択し、’ウインドウサイズ’ を 列 80、行 30 に設定してください。
気に入らない場合は、いろいろ試してみてください。ただし、文字コードUTF-8 以外だと正しく動作しません。


5行目
connection = httplib.HTTPConnection( 'pc11.2ch.net' )

の URL: pc11.2ch.net は変更になる可能性があるので注意してください。

変更された URL は、拙作 Search2chBBS [ http://kyoshiaki.sakura.ne.jp/osx/tiger.html#se201 ] か bbsmenu.html [ http://menu.2ch.net/bbsmenu.html ] から判断できます。

プログラムを作るためには、リファレンスが必要なので

Python Programming Language -- Official Website
http://www.python.org/

の DOCUMENTATION から Download Current Documentation をクリックし

Download Python 2.5.2 Documentation
http://www.python.org/doc/2.5.2/download/

から HTML 版の Zip ファイル [ html-2.5.2.zip ] をダウンロードしました。

Global Module の httplib、re の使用方法も、ダウンロードしたファイル html-2.5.2.zip を展開して作成されたドキュメントを参考にしました。正しい使用方法なのか、あまり自信はありません。

Python入門
http://www.pythonweb.jp/tutorial/index.html

も参考になると思います。

簡単なプログラムなので理解しやすいと思います。大ざっぱに言えば、ブラウザで

http://pc11.2ch.net/mac/subject.txt

にアクセスするのと同様な動作を行っています。

2ch の仕様については、拙作

2ch Script version 0.2 [ http://kyoshiaki.sakura.ne.jp/osx/tiger.html#2cs02 ]
2ch Script version 0.1 [ http://kyoshiaki.sakura.ne.jp/osx/tiger.html#2cs01 ]
Search2chBBS version 0.1 [ http://kyoshiaki.sakura.ne.jp/osx/tiger.html#se201 ]

の ReadMe やその中で紹介されている参考文献を参考にしてください。それほど複雑ではないと思います。

拙作、2ch Script version 0.2 [ http://kyoshiaki.sakura.ne.jp/osx/tiger.html#2cs02 ] は頻繁に利用しているので、暇があれば Python で書き直してみたいですね!(2ch Script version 0.2は、sh、curlruby で作成されています。)

Learning Python

Apple - QuickTime - WWDC 2008 Keynote
http://events.apple.com.edgesuite.net/0806wdt546x/event/index.html
iTunes Store Podcast - WWDC 2008 Keynote Adress
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?i=26717006&id=275834665

ちょっと遅れましたが、WWDC 2008 基調講演 (Podcast版) を iTunes でダウンロードして見ました。iPhone SDKにも挑戦しているので、iPhone はぜひ購入したいですね!

話は変わりますが、書籍

詳解 Objective-C 2.0

詳解 Objective-C 2.0

を購入しました。

以前、発売されていた

Objective-C Mac OS Xプログラミング

Objective-C Mac OS Xプログラミング

Objective‐C―MacOS Xプログラミング入門

Objective‐C―MacOS Xプログラミング入門

の2冊も持っています。

私は、以前説明されていた重複箇所は読んでいません。おおまかに

CHAPTER 6 ガーベジコレクション
CHAPTER 11 プロコトル
11-04 高速プロコトルと列挙子
CHAPTER 12 宣言プロパティとアクセサ

を読みました。特に11章の ‘高速列挙の実装例’ は大変参考になりました。基本的に

The Objective-C 2.0 Programming Language: Introduction to The Objective-C 2.0 Programming Language
http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/chapter_1_section_1.html

を読んで理解していることが正しいのか、確認に利用しました。日本語の資料は貴重なので、持っていて損しないと思います。

また、以前ブログ [ id:KYoshiaki:20080413 ] で書いたように

Practical Common Lisp (Books for Professionals by Professionals)

Practical Common Lisp (Books for Professionals by Professionals)

を読んでいる途中だったのですが、前々から Python に興味があったので、洋書

Learning Python

Learning Python

を購入してみました。Python に関しては

みんなのPython

みんなのPython

を読んだ知識しかありませんし、ほとんど忘れてしまいました。

Learning Python (asin:0596513984) は基本を学ぶには最適な本だと思います。

みんなのPython (asin:479733665X) では理解できなかった while 文の else の動作が理解できました。(他の言語では、あまり見かけない動作です。)

while :

if : break
if : continue
else:

の条件が False になり while ループから抜ける時に が実行されます。
が True で break した後 while ループを抜ける場合は は実行されません。

インタラクティブシェル (対話型シェル) を利用して、試すと

>>> x=5
>>> while x:
...     print x
...     x=x-1
... else:
...     print 'exit'
...
5
4
3
2
1
exit
>>> 
>>> x=5
>>> while x:
...     print x
...     x=x-1
...     if x==2: break
... else:
...     print 'exit'
...
5
4
3
>>>

のような動作になります。同様に for 文にも else があります。

また、何度も object reference、変更可能 (mutable)、変更不可能 (immutable) の違いを説明されます。

例えば、インタラクティブシェル (対話型シェル) を使って説明すると

>>> L = [1, 2]
>>> M = L
>>> L = L + [3, 4]
>>> L, M
([1, 2, 3, 4], [1, 2])
>>> 

ここで
L = L + [3, 4]
は、L = [1, 2] + [3, 4] となり、L に新しく作成したオブジェクト [1, 2, 3, 4] を割り当てています。
その結果
L = [1, 2, 3, 4]
M = [1, 2]
になります。

>>> L = [1, 2]
>>> M = L
>>> L += [3, 4]
>>> L, M
([1, 2, 3, 4], [1, 2, 3, 4])

この場合 L += [3, 4] は L、M が参照しているオブジェクトに [3, 4] を追加しているので L、Mの結果は同じ [1, 2, 3, 4] になります。下の append、extend を利用した例も同じ動作です。

>>> L = [1, 2]
>>> M = L
>>> L.append(3)
>>> L.append(4)
>>> L, M
([1, 2, 3, 4], [1, 2, 3, 4])
>>> L = [1, 2]
>>> M = L
>>> L.extend([3, 4])
>>> L, M
([1, 2, 3, 4], [1, 2, 3, 4])
>>> 

Learning Python (asin:0596513984) は暇を見つけて、こつこつ読んでいます。現在、420 ページほど読みました。Practical Common Lisp (asin:1590592395) は最後まで読んでいませんが、Learning Python (asin:0596513984]) は読破したいですね!

On Lisp

On Lisp

On Lisp

Lisp をより深く理解しようと思って購入しました。 入門Common Lisp asin:4839920818 を読んだ程度の知識なので、理解するのに苦労しています。

また、On Lisp に載っているサンプルに挑戦しているのですが、入門Common Lisp asin:4839920818 にも説明されていない関数がでてきて困ってしまいました。それでどこかにリファレンスがないか、探してみることにしました。

まず最初に Mac OS X で使える Common Lisp がないかと fink *1のリストを見てみると

~ $fink list
Information about 6199 packages read in 3 seconds.
clisp            2.35-1001    ANSI Common Lisp implementation

clisp を見つけることができました。

早速、インストールしました。

~ $fink install clisp

ターミナル上で man は使いづらいので、テキストファイルに保存しました。

~ $man clisp | col -bfx > clisp.txt

clisp.txt をエディタで見ると

REFERENCES
1. Common Lisp
http://www.lisp.org
6. CLISP
http://clisp.cons.org

参考になる URL が書いてあります。

上の2つを調べてみると

http://www.lisp.org

に 左下のリンク( Lisp Resources ) からCommon Lisp HyperSpec (TM) を見つけました。

Common Lisp HyperSpec (TM)
http://www.lispworks.com/documentation/HyperSpec/Front/index.htm

Symbol Index をクリックすればリファレンスを見ることができます。これで目的の関数を調べることができます。

50ページほど読みましたが、かなり苦労しました。最後まで読めるか自信はありません。それでも以前より上達したと思います。

*1: Fink – Home [ http://www.finkproject.org/index.php?phpLang=ja ]