6月2007

Cocoa for Windowsを期待してしまう

CoreGraphics for Windows 暫定まとめ (最速チュパカブラ研究会)
Windows版Safariに秘められた野望 (OS X ハッキング! マイコミジャーナル)

上記リンク先にいろいろ書いてありますが、Safari for Windowsのついでに、Core GraphicsもWindowsに移植されたようです。普通のdllなので、ActiveBasicからも使ってみたいですね。まあ、そんな余裕はなさそうですが。前回、Safari for WindowsのGUIのエフェクトなんかが結構滑らかだったと書きましたが、それもCore Graphicsのおかげなのかな?と、勝手に想像しています。

ところで、やはりCore Graphicの移植とかを考えると、昔から噂されているCocoa for Windowsを期待せずにはいられません。もともとCocoaはNeXTSTEPをベースに作られていて、そのNeXTSTEPというのは、さまざまなプラットフォームに移植しやすいように作られているらしいです。

もし、Cocoa for Windowsなんてものが出れば、Cocoa好きな私にとってかなりうれしいことです。

Safari 3.0.2 Beta for Mac OS X

最近ちょっと時間がなくて、ブログの更新やら、需要も怪しくなってきたCP4の紹介が非常に遅れていますが、それもあってか、やはり簡単に書けるものに話題が偏ってしまいますね。というわけで、簡単に書けるSafariの話題です。

今日か機能あたりに、Safari 3のマイナーバージョンアップがあり、Windows,Macともにバグがいくつか修正されています。特に、Windows版の方は、日本語入力ができないようですが、とりあえず使えるレベルにはなってきていますね。Windows版でもMacと同じGUIのエフェクトが出て、Windowsもやればできるんだなーって思いました。ただ、シートダイアログはかなりガクガクでした。それ以外の、ブックマークバーから除外するときのエフェクトや、タブからウィンドウを出すエフェクトは割と滑らかに見えるんですけどね。

さて、Mac版のSafariですが、前回のウィジェットの検索ボックスのバグは、早速修正されたようです。これで、致命的なバグはとりあえずひとつ減りました。もうひとつ、日本語入力のバグは、まだ修正されていないようですが、これはmacのスペックにもよりそうなので、問題ない人もいるのではないかと思います。

とりあえず、今日Safarの為にwindowsを久々に使ってみましたが、ウィンドウの切り替えってあんなに遅かったでしょうか?チャットしながらブラウジングがスムーズに行かずに、ちょっとイライラしてしまいました。

Safari3 beta for Mac OS Xの致命的なバグ

Safari 3 beta for Mac OS Xは、Safari2より確実によくなっているのですが、まだ致命的なバグがいくつかあるのが問題です。数日間使って目立ったバグは、主に二つです。ひとつは、この前も挙げた、文字入力に関するバグです。一回しか打ってないキーが、二回反応したりするバグです。Safariが動画などを再生して重い時は特に症状が激しくなり、とてもブラウザ上で文章を打つことができません。

この検索窓のバグは、Safari3.0.2 betaで修正されました(07/06/26)
そしてもうひとつは、ウィジェット上の検索窓です。例えば、このWikipedia Widgetは、検索窓と文字が消えてしまい、なぜか下の画像のような、何も無い表示になってしまいます。

wikipedia widget on safari3 beta

これはかなり困ります。他にも検索窓があるウィジェットというのはたくさんあるので、かなり致命的なバグと言えるでしょう。ただし、多少ウィジェットのコード修正と、動作の違いを許容することができるのなら、次のような対処法を使うことで、とりあえずウィジェットを使うことができるようになります。

分かる人はこれだけで分かると思いますが、検索窓がDashboard上で表示されないようなので、inputタグの属性のtype=”search”を消してしまいます。

例えば、このWikipedia Widgetを修正する時には、まずウィジェットの中身のファイルを表示します。Spotlightでwdgtなどと検索し、Wikipedia.wdgtがインストールされているところをFinderで表示します。その後、メニューか右クリックでパッケージの内容を表示します。

中にHTMLファイルがありますが、これがWidgetのHTMLファイルです。これに修正を施します。適当なテキストエディタで開きtype=”search”というのを検索します。すると、inputタグ内に見つかるので、それを消してしまいましょう。これでHTMLを保存するだけで、修正は完了です。

widget

あとはDashboardで既に表示されいている場合は、もう一度Widgetを配置し直します。これで、とりあえずは機能するようになるはずです。見ても分かる通り、Safari独自の検索窓を通常のフォームにして対処しているので、検索履歴や、×印のテキストを消去できるものがありません。これらも多少気になりますが、やはり一番の問題は見た目じゃないかと思います。

とりあえず、Safari3でスクロールがスムーズになったりして、バグも気になるけどアンインストールするのもためらってしまう、というような状況の方は、ぜひ試してみましょう。

停滞気味…

最近ニコニコ動画+Cocoaの話ばかりで、ActiveBasicの話を期待しているユーザーの人には申し訳ないですね。というわけで、そろそろ1週間経ってしまうので、ActiveBasicCP4の紹介を明日あたりに書こうかなーと思っているところです。いつも1時間もあれば余裕で終わると思って書き始めるのですが、実際は一度掲載するコードを確認するところで手間取ったりして2時間くらいかかってしまうので、時間へのダメージが結構大きいです。

最近ActiveBasicのフォーラム、開発ともにあまり動きが活発でないようですが、やはりこの時期は誰も忙しいでしょうかね?

コメントデータを並べてみる

RCとγのダウンロード仕様

ニコニコ動画(RC)が昨日から始まりました。ニコニコ動画のコメントダウンロードの部分は変更が無く、γ時代と同じように、HTTPのPOSTでXMLを送信すればダウンロードできるようです。RCでは、動画のメモリー機能が追加され、今見ている動画のコメントを編集して保存することができます。この機能により、以前のコメントにアクセスできると思ったのですが、実際にはそうはいかないようです。というのも、この機能はその時間のコメントを複製(もしかすると複製しているように見えるだけかもしれない)してメッセージサーバに新たに登録されるからです。つまり、登録した時のコメントしかダウンロードすることができないのです。

少々残念でしたが、まだ希望はあります。22日から、有料会員限定の機能で、任意の時間に遡って、その時のコメントを保存する機能が始まるようです。これでおそらく、現在の1000件制限が解除されると思うのですが、有料会員にならないと、この制限は取れないのでしょうかね?

コメントデータを並べる

さて、時間もあまりないのでかなり適当に作りましたが、コメントがあった時間に、縦線を引いてみるものです。

comment analyze

見方は、ウインドウの横幅が動画全体の時間としてみます。青い線は、10秒間隔の線です。そして、灰色の縦線が、コメントが付いた場所(時間)を表します。

単にコメントの位置を表しただけですが、これだけでも視覚的に読み取れることは十分にあると思います。例えば、線がたくさん入って、塗りつぶされるまでになっていることころは、コメントが大量にある、いわゆる「弾幕」の貼ってある部分と見ることができます。まあ、当たり前のことです。

この例でいくと、10-20秒, 70-80秒, 最後から10-30秒あたりに弾幕が貼ってあると考えられます。ちなみに、分析対象の動画をマイメモリーに保存してみたので、下記のリンクから見れると思います。興味があったらぜひ見比べてみましょう。

2007年06月19日 22:18:07 時点の
【ゴム】 ロックマン2 おっくせんまん!(Version ゴム)

コメント付きでの動画再生

前回、動画にコメントを付けて再生する方法を模索していましたが、やはりWebKitを使おうと思います。要は、アプリケーションにブラウザを埋め込んでしまうということです。最初のコメントから全てダウンロードできるのなら、やはり独自のプレイヤーを用意して、任意の時間を再生したり、いろいろやりたいとは思っていたのですが、どうやらコメントは最大1000件なので、どうせ自作プレーヤーでも、WEB上の公式のでも変わりません。というわけで、Browser + Comment Analyzer的なものを作成しようかなーと考えています。

あとは、比較的簡単にできる分析方法として、「w」の数とかがあります。これは結構面白そうなので、ぜひやってみたいですね。例えば、コメント中の「w」の数が、一定上か、そうでないかで、面白い動画、またはそれ以外に二分とかできるんでしょうかね?気になります。

NicoNicoDownloader

先週は休みなかったので、久々の週末でしたが、一昨日と昨日でちょっとしたアプリケーションを作りました。

コメントダウンローダ

この前試作した、ニコニコ動画のコメントをダウンロードし、保存するアプリケーションをちゃんと作ってみました。この前試作したものは、自分でコード中にリクエストを埋め込まなくてはいけなかったので、本当にダウンロードできるかどうか、を試すようなものでした。そんなわけで、今回は動画のURLを指定して、その動画のコメントをダウンロードし、デスクトップ上に保存するものを作りました。

ざっとプログラムの流れを説明すると…

1. URLの中のsm以下の番号の部分、動画のIDを抽出

2. “http://www.nicovideo.jp/getflv?v=sm%d”(%dは動画のID)のURLから、動画情報を取得

3. 取得した動画情報から、”thread_id=”以下の、メッセージのスレッドIDと、”msg”以下の、メッセージサーバーのIDを取得

4. “http://msg%d.nicovideo.jp/api/”(%dはメッセージサーバーのID)に、HTTPでPOSTリクエストをする。HTTP Message bodyには、以下のXMLを付加します。
<thread thread=”%d” version=”20061206″ res_from=”-1000″ /> (%dはメッセージのスレッドID)

5. ダウンロードされたデータをデスクトップに保存

ちなみに、今のところコメントは最大最新の1000件までしかダウンロードできないようになっているみたいです。明日でニコニコ動画(RC)になり、コメントの状態を保存するような機能もあるようです。これでおそらく、1000件より前のコメントにアクセスできるようになるのではないかと思っています。


ところで、目的はコメントをダウンロードすることではなく、コメントを分析することです。というわけで、このまま単にコメントのXMLを分析し、グラフィカルに表示するアプリケーションを作ってもいいのですが、やはり、実際に動画とコメントが再生されている様子も見ながら、そういう分析結果を表示したいところです。

というわけで、どうやって動画とコメントを再生すればいいかを調べていると、動画の再生はQuickTimeのフレームワークを使えば簡単にできることがわかりました(FLVプラグインが必要)。実際、動画の再生するアプリケーションは数分足らずで作成できたのですが、問題は動画上でのコメント表示です。

QTMovieViewは、NSViewを継承しているので、NSViewで描画させるときのように、QTMovieViewを継承したカスタムクラスを作り、そこでdrawRectメソッドをオーバーライドして、描画してみました。結果は予想通りというか、さすがに動画上でdrawRectメソッドのオーバーライドで描画というのは無理だったようです。

というわけで、他に何かないかといろいろ見ていると、QTMovieにちょっと面白いメソッドを見つけました。(QTMovie class Reference)

- (NSImage *)frameImageAtTime:(QTTime)time
- (void)addImage:(NSImage *)image forDuration:(QTTime)duration withAttributes:(NSDictionary *)attributes

あまりヘルプが読めなかったのですが、おそらくこの二つのメソッドは、動画中から画像をキャプチャ、また、画像データを動画に追加するというものです。つまり、まず、動画からNSImageで画像を取得し、そこでNSImageに対してコメントを描画、そして、そのNSImageからまた動画に戻せば、コメント付き動画に変換できることになります。

動画にコメントを付加して変換するソフトは、これはこれで欲しいですが、これは変換してからでないと結果が見えないのが問題です。そんなわけで、やはり動画上に文字を描画できるようなものを引き続き探してみました。すると、今度はようやく目的のものにたどり着けたようです。

何を使えばいいのかというと、どうやらCore Videoを使うと、動画に処理を施しながら再生できるようです。この辺はOpenGLと絡んできたり、いろいろ複雑になっていて、動画を再生することすらちょっと難しそうなので、簡単には手を出せなそうです。

ということで、次はいつプログラミングができるかわかりませんが、近いうちに作りたいとは思っています。ちなみに、Cocoa Break!の翻訳文書はいつもありがたく活用させてもらっています。Core Videoとか英文だとよくわからない方は、こちらの日本語訳を使うのも手です。他にも翻訳の量が凄いので、ドキュメントが読めなかったら、こちらで探してみると見つかるかもしれません。

4.[ライブラリ]Pathクラス

最近忙しくて少々遅れ気味ですが、ActiveBasic5.0CP4新機能,ライブラリ紹介の第四弾です。今回は小難しい話は置いといて、とりあえず即使えるPathクラスを紹介します。本当はEnvironmentクラスあたりを紹介しようと思っていたのですが、こちらは私自身まだ使ったこと無いので、保留ということにしておきます。

A.概要

Pathクラスは、System.IO名前空間のクラスで、パスを示す文字列について、さまざまな機能を提供しています。パスはファイルパスのことです。ちなみに、Pathクラスは私が実装したのですが、とりあえず動くレベルで、割と適当に作ってありますので、Windowsファイルパス以外のパスについての動作は保証していません。また、今後もう少し複雑なパスや、無効なパスが引数に指定されたときの動作なども実装したいので、一度作り直す予定です。作り直すからといって、動作を変更する訳ではないので、今使っても問題はないと思います。

名前空間についてですが、CP4時点のライブラリでは、System.IOは名前空間が適応されていません。また、デフォルトの状態では、Pathクラスはイングルードされてませんので、コードの先頭に”#require <Classes/System/IO/Path.ab>”と、記述する必要があります。この辺は開発者メンバーの対応が悪かったとしかいいようが無く、申し訳ないところで、現時点ではイングルードして使用するPathクラスですが、おそらく次のバージョンで宣言がこれと代わり、先頭に”Imports System.IO”の宣言をするようになるかと思われます。

B.機能紹介

Pathクラスは、パス文字列を操作する、便利な静的メソッドの集まりです。従って、Path.という名前で始まる便利な関数郡と捉えていいでしょう。

1.GetFileName

GetFileNameメソッドで、パス文字列からファイル名を取り出すことができます。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
MessageBox(0, Path.GetFileName(path), "ファイル名", MB_OK)
2.GetFileNameWithoutExtension

GetFileNameWithoutExtensionメソッドで、パス文字列から、拡張子を除いたファイル名を取得することができます。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
MessageBox(0, Path.GetFileNameWithoutExtension(path), "ファイル名(拡張子なし)", MB_OK)
3.GetExtension

GetExtensionメソッドで、パス文字列から拡張子の部分だけを取得することができます。拡張子の”.”も含んで取得されますので、先頭の文字列は必ず”.”から始まることになります。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
MessageBox(0, Path.GetExtension(path), "拡張子", MB_OK)
4.ChangeExtension

ChangeExtensionメソッドで、指定した拡張子に変更したパス文字列を作成することができます。1つ目の引数には、拡張子を変更したパス文字列を指定し、2つ目の引数には、変更したい拡張子を指定します。注意点として、拡張子は先頭の”.”を含む形で指定してください。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
MessageBox(0, Path.ChangeExtension(path, ".abp"), "拡張子変更", MB_OK)
5.HasExtension

HasExtensionメソッドで、パス文字列に拡張子が含まれているか、を調べることができます。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
If Path.HasExtension(path) Then
	MessageBox(0, "拡張子が含まれる", "確認", MB_OK)
Else
	MessageBox(0, "拡張子が含まれない", "確認", MB_OK)
End If
6.GetTempPath
7.GetFullPath

本当は、この2つも紹介するつもりでしたが、名前空間への対応が済んでいないためうまく動作しないのと、なぜかコンパイラが落ちるので、今回は見送ります。

8.GetDirectoryName

GetDirectoryNameメソッドで、指定したパス文字列が示すファイルの、親ディレクトリを取得します。簡単言うと、どのフォルダにファイルが入っているのかを取得します。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
MessageBox(0, Path.GetDirectoryName(path), "ディレクトリ名", MB_OK)
9.GetPathRoot

GetPathRootメソッドで、パス文字列のルートディレクトリを取得します。Windowsの絶対パスを指定した場合は、大抵の場合、”C:¥”などのドライブ名が返ってきます。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
MessageBox(0, Path.GetPathRoot(path), "ルートディレクトリ", MB_OK)
10.IsPathRooted

IsPathRootedメソッドで、指定したパス文字列に、ルートディレクトリが含まれるか、を調べます。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
If Path.IsPathRooted(path) Then
	MessageBox(0, "ルートディレクトリが含まれる", "確認", MB_OK)
Else
	MessageBox(0, "ルートディレクトリが含まれない", "確認", MB_OK)
End If
11.Combine

Combineメソッドは、二つのパスを結合して、ひとつのパスにします。具体的には、”C:¥Windows”というパスと、”ActiveBasic¥notitle.ab”を結合すると、”C:¥Windows¥ActiveBasic¥notitle.ab”というパス文字列になります。結合されるパス文字列(C:¥Windowsの方)には、パスの終端にディレクトリ区切り記号の”¥”が、あってもなくても正しいパスを取得することができます。

#require <Classes/System/IO/Path.ab>
Dim path1 = "C:¥Windows" As String
Dim path2 = "ActiveBasic¥notitle.ab" As String
MessageBox(0, Path.Combine(path1, path2), "結合", MB_OK)

C.補足

Pathクラスは、あくまでもパスも文字列に対して操作を行うものなので、実際にファイルが存在するのか、といったこととは全く関係がありません。これらのメソッドは、全て与えられたパス文字列を元に実行されます。


今日はこんなところで終わりです。開発者フォーラムの方では一度言った気がしますが、今年はある事情により、私はほとんどライブラリのコーディング作業を支援することはできそうにありません。ただでさ4人くらいしかコミットする人がいないので、開発速度に影響が出てしまうかもしれませんが、どうかご理解いただきたいです。

Safari 3 beta for Mac OS X

昨日というか、日本時間では今日になりますが、WWDC2007が開催されました。特に驚くようなものは発表されませんでしたが、地味にいいものがたくさんあり、Leopardはとても期待できそうです。

さて、恒例のone more thing…では、Safari for Windowsが発表されました。bonjourでブックマークが共有できたりするらしいので、IEからの乗り換えにちょうどいいかなーと思っていましたが、インストールしてみると、まだ日本語に対応していなかったり、かなり動作が不安定なので、まだ使い物にならないです。

一方、OS X版でリリースされたSafari beta 3の方ですが、これはなかなか良いです。インストールする際には、既存のSafariを上書きしなければならないので注意が必要ですが、付属のアンインストーラを使用することにより前のバージョンに戻すことができます。私が使っている範囲での不具合は、文字入力に関してです。あとで詳しく説明しますが、これは割と致命的なものなので、ブラウザ上で文章を大量に打ったりする人には、あまりインストールすることをお勧めできません。

インストールすると、初回起動時には少し時間がかかりますが、設定はすべて引き継がれるので、メニューバーが英語になったところ以外は、変化ありません。

Safar 3 beta

ブラウジングしていてまず気づくのは、今でも十分速いのに、さらにページのレタリング速度が向上していることろです。以前のバージョンでも、すでに最速のブラウザだったのにも関わらず、ちょっと体感できるほどレタリング速度が向上しているのは、凄いと思いました。それに伴って、今まで無駄に重かったページなど、かなりスクロールが軽くなりました。非常に滑らかになり、iPhoneに負けないくらいです。

次に、タブの機能強化です。Safari2にもタブは存在しましたが、OS XにはExposéが存在するのと、若干タブの使い勝手が悪かったので、使用していませんでした。しかし、beta 3では、タブの移動が自由になり、かなり使い勝手が良くなっています。タブの移動に関しては、他のブラウザではもう既にある機能で、Safariでなかった方がおかしいのですが、今回はタブの移動だけではなくて、タブを下にドラッグすることで、ウィンドウから切り離して、独立したウィンドウにすることができるようになっています。

こんな感じのタブを下にドラッグ:
safari tab

すると、こんな感じの小さなウィンドウがタブから出てくる:
safari 3 tab2

この状態ドロップするとウィンドウが普通のサイズになって出てくる:
safari 3 beta2

これだけでなくて、他のウィンドウ間でタブを移動したりすることができます。

最後に、Safari 3では文字の検索が非常に見やすくなりました。Firefoxに似た感じです。インクリメンタルな感じで、入力中に絞られて行き、その都度状況に合わせたちょっとしたエフェクトが出てきます。ページにいくつか一意するワードが出てきた場合、下の画像のようにちょっと画面が暗くなり、検索ワードがハイライトされます。

safari 3 beta find

こんな感じなSafari 3 betaですが、web clipの機能はleopardオンリーなので、今回のbetaにはもちろん含まれていません。インストールする際に関しての注意点としては、やはり最初にあげたいくつかの不具合です。

まず、文字入力がおかしいときがあります。たまに、1回しかキーを打ってないのに、2回打ったことになったりします。たまにというよりは、結構頻繁になるので、気になる方はインストールしないほうがいいです。

また、いくつかのウィジェットの表示がおかしくなる現象もあります。ウィジェットについている検索ボックスが、全く表示されなくなったりするので、使えなくなってしまいます。

さて、まだまだ最適化が進むSafariのように、OS XもLeopardでさらに最適化されていることを望みます。Finderのアイコン表示やCoverFlow、そしてQuicklookなどは、速さが命です。これらの発想、特にFinderのアイコンでのプレビューなどは昔からあったのだと思います。そして、やっとコンピュータの性能も、技術も追いついてきて実現できた機能なんだと思います。そんわけで、あまりインパクトのないLeopardですが、技術的にはかなり高度なことをやっているのかなーと、勝手に想像しています。

うっかりIEを使ったばっかりに…

最近はほとんどiBookを使っていて、WindowsはActiveBasicとエンコードするとき(Windowsの方はデスクトップPCなので性能がいい)くらいにしか使っていないので、結構管理が適当になっています。

今日もCP4のライブラリを紹介しようと思い、EnvironmentかOperatingSystemあたりを見ていたのですが、どちらも開発Wikiのほうに書かれていなかったので、それを先に書こうと思って、IEを立ち上げて、wikiを編集していました。

ある程度編集したので、確認しようとプレビューボタンを押し、しばらく待ってみると、「このページはIEでは表示できません」的なものが出てきたので、おそらくサーバーのレスポンスが遅れただけだろうと思って、とりあえず戻るボタンを押しました。

すると、今度は「ページの有効期限切れ」的なメッセージが表示され、普通に戻るだけでいいのに,,,とか思いながら、さらに戻って、編集中のデータが残ってそうなページまで遡ろうと思ったのですが、残念ながら既に編集中のデータはどこかに消えてしまったようです。

そもそも、よく考えれば今回の場合、戻れたとしてもIEはフォームの内容がリセットされてしまうので、戻っても編集中のデータは返ってこないんですよね。FireFoxとかOperaとかは、どうなんでしょうか?ブラウザの戻るを使った時に、フォームの内容はきちんと残っているんでしょうかね。

一番よく使っているSafariの場合、戻ったときにページの有効期限切れになりませんし、フォームの内容も保持されたままなので、ついIE上でいつも通り長時間編集してしまいましたが、いつデータが吹っ飛ぶかわからないので危険ですね。今後wikiなどを編集するときは絶対にIEは使わないことにします。というかIE自体使いたくないです。ところで、このフォームの内容リセットとか、ページの有効期限ってのは、何かセキュリティ上の配慮なんでしょうか?よくわかりませんが。

というわけで、結局いつも通りSafariでwikiを書き、Environment クラスだけ仕上げました。本当はOperatingSystem クラスも書きたかったんですが、上に書いたハプニングにより時間がなくなったのと、やる気がなくなったので後にします。あと、今週の土日はどちらも休日でないのが、主な理由だったりもします。

ところで、wikiに書き出したEnvironment クラスで、HasShutdownStartedと
FailFastメソッドの内容がよくわからなかったので、説明はとりあえず何も書いていません。どなたか分かる方がいらっしゃったら、ぜひ書いてもらえるとありがたいですね。あと、実際にEnvironment クラスを使ったことが無いので、説明に間違ってる部分もあるかもしれません。

明日こそは、CP4のEnvironmentやPathクラスあたりを紹介できるといいかなって思ってます。

leopardとかiphoneとか

LeopardではファイルシステムがZFSになる予定らしいです。トップシークレットにあってもいいような話が、なぜこのタイミングでリークしたんでしょうか。WWDCにもっと期待を寄せていいでしょうかね。

iPhoneの新しいCMがappleのサイトで公開されています。Safariのレタリング速度がヤバいですね。
Watered Down