SF2,3日目(WWDC0,1日目)

SF2日目

Registrationで名前が漢字で化けてる問題でさっそくちょっとトラブるなど。直してもらったあと、その場でお合いした日本人の方々と、Fisherman's Wharfと、そのあとApple本社につれていってもらいました。

Fisherman's Wharfまではケーブルカーで、帰りは路面電車(Historic Streetcar)に乗りました。ケーブルカーもおもしろかったんですが(なんか職人芸コントロールを人力でやってるところが)、路面電車は、車体も1950年代ぐらいのかなりレトロな感じで、風景がよい海岸沿いを走り、かなり良い感じでした。ケーブルカーでFisherman's Wharf → 路面電車(ミュニメトロFライン)とかいう組み合わせは、初めてSFに来た方とかにおすすめかもです。

そのあとApple本社にレンタカーで連れていっていただきました。念願のInfinity Loopです。本社前で写真撮ってきたり、本社併設の The Company Store でここでしか買えないT-shirtとか買ってきました。そのあと Infinity Loop (本社のまわりの道路がループになっている) を車でぐるっと1週してもらってきました。

1 Infinite Loop

1 Infinite Loop

The Company Store

クパチーノでこのInfinity Loopへの道すがらとか、この本社はとても緑が多く、しかも気候のせいかすばらしく緑が輝いている感じだったのが得に印象に残りました。こういう気候の地でApple製品は作られているんだなーとか。

SF3日目 (WWDC 1日目)

Keynoteが午前10時からだったので、午前5時ぐらいからKeynote待ち行列に並んできました。前からナンバリングしてくれてる人がいて(Appleの人だったのかな??)、自分は195番目だったみたいです。去年は7時ぐらいに並んでも2/3ぐらいで会場に入れたそうなのですが、今回はそれよりも速いペースでみんな並んでたっぽいです。

WWDC keynote Line

Steve Jobsを見れなかったのは残念だったのですが、Philip Schillerが5cmぐらいの距離で見れるぐらいの席で見ることができました。会場はWifiがあるのですが、そのWifiと、3Gまで入らないという状況で、なんとかEdgeネットワークでTwitter実況してました。

WWDC Keynote

Keynoteは色々既報がありますが、内容的にも充実してたので満足のいく感じでした。3.0が予想よりも早くリリース(6/17とか)になるようで、なんかちょっとドタバタしそうな予感です。iPhone 3G S もカメラとか強化されるのと、待望の(?)GLES2.0が入ることになったみたいで、それもちょっと楽しみです。グラフィック周りが更に強化されて、ゲームとかより面白いことになるかもしれません。

そのあとのセッションで@shao1555さんと合流し、セッション後、新MacbookProがあるかとかAppleStore (SF)を見てきました。残念ながらまだなかったようでした。(さっき確認してきたところ、今度は置いてあったようです)

夜は日本Apple主催??のレセプションパーティがあったので参加してきました。100人以上は集ってたようで、何人かの方にご挨拶させていただいてきました。ご挨拶させいただいた感じでは、やっぱりiPhone関係の人が多かった印象でした。

SF1日目(WWDC -1日目)

今日成田を発って、そのまま現地時間同日に到着しました。今回@shachiさんに非常にお世話になっていて、いろいろ手配までしていただいて本当に助かってます。ありがとうございます。空港からも@toshiakiさんにホテルまで送っていただいたりしました。ありがとうございます。

IMG_0167

@shachiさん@toshiakiさんと一緒にお昼をなぜかバーガーキングで食べて、早速アメリカンサイズの洗礼を受けました。そのあとPalmPreをもとめてうろうろしてたのですが、なぜかT-mobileと思い込んでたら実はSprintだったというオチでこれは明日見ようと思います。

IMG_0203

そのあと、Apple Store SFで@fladdictさんと合流し、SF MOMAを見てきました。MOMAの建物自体も凝ってるとか、@fladdictさんにマルセル・デュシャンの「泉」(実物がありました。どうみてもアレですが、そうアレです。) の話を聞いたりとか刺激になりました。あと写真もけっこう自由に撮れて(日本以外だと普通??)いいですねえ。

IMG_0170

MOMAのショップでちょっといいかんじの折り畳みイスを入手しました。もちろんKeynote行列用の。あとはクッション的なものを入手すれば完璧。

WWDC2009に行ってきます

Appleが年一回開催している開発者向けカンファレンスのWWDC2009が、来週San FranciscoのMoscone Centerで開催されます。今年もiPhone開発関連で、すでに発表されているiPhone3.0関連の情報収集のため、多くの開発者の人達が集るようです。チケットもすでに4月には売り切れたりとか、だいぶ盛況っぽいですね。WWDCは僕は初参加になります(実はアメリカに行くのも初めてだったりして。)

現地土曜日到着ぐらいで、金曜日出発な感じです。WWDCに行かれる方、現地でよろしくお願いいたします。日曜日(現地7日)か次の月曜日のkeynote後ぐらいに、観光でApple本社のクパチーノとGoogleplexを見てこようかと思ってますが、またこれもどうなるかわかりません。すでに何人か志願者がいる感じなのですが、もしその時現地に居る方でご興味のある方、何らかの方法で僕までご連絡ください。一緒に行きましょう。

WWDC Keynote (日本時間の6/9午前2時ぐらい) 実況も、なにかやりたいなあと思ってます。おたのしみに〜

NatsuLion for iPhone 1.50 リリースされました

本日、NatsuLion for iPhone の初のメジャーアップデートとなる version 1.50 がリリースされました。主な更新ポイントとしては、見た目をあるていど変えたのと、いくつかの機能追加&強化があります。

とりいそぎ既知のバグ

Initial load設定がおかしいようです。これだけデフォルトの20のままご使用ください。デフォルトの20以外を選択すると、moreボタンを押したときや、autopagerizeしたときの挙動が変なようです。とりいそぎ、修正版(1.51)をリリース予定です。

メイン画面のスクリーンショット

メイン画面のぱっと見はあまり変ってないですが、タブが増えてたり、あと微妙にTimeline表示が変ってたりします。

主な新機能と、改善ポイントは以下です。

新機能: in_reply_to をたどって表示するスレッド表示

Timeline 上の Tweet を選択したこのTweet画面で、"in reply to ej" の部分を押すと、以下のような画面になります。

このスレッド表示では、@ejさんの元発言に対して、@evanさんがコメントをしているところですが、たとえば2人で会話している場合などは、これがつらなって表示されたりします。

Pair Timelineとの使い分け

この in reply to は、投稿した人が適切に reply を行っている場合は、どの tweet に対しての reply かが明確に分るのがポイントです。ですが、replyの元以外の発言も見ないとわけがわからなかったりする場合も多々あったりするので、その場合はPair Timelineを使うと便利かもしれません。

注意

このスレッド表示では、API消費がTweet1つあたり1消費するため、使いすぎにご注意ください。今はこのViewを出すために適切なAPIが無いためなのですが、他のクライアントでも同様のViewが出てきたりしているので(Twitterrific 2.0ではスレッド表示できます)、今後改善されるかもしれません。

新機能: 投稿画面にReply元の文章を表示

おもむろに Reply ボタンとかを押すと、Reply元のTweetの全文が引用表示のように表示されます。

これは表示だけで、実際にはポストには入らないですが、in reply to という情報は付加されるので、あとで他の人が見たときに、上記のスレッド表示などでたどって見ることができたりします。

この in reply to を消したい場合は、この状態でいちど del ボタンを押すと、消えたりします。clearボタンを押しても消すことができます。

新機能: Favorite タブ (自分のfavoritesを表示)

Favoriteは、とくにiPhoneのようなモバイルだと「あとで見る」的な用途にも良く使われると思います(実際僕はそういう使い方をしています)のでそれを表示できるようにしてみました。

追記

ちなみにタブについては、今までのsends, unreads, Settingsがmoreタブの方に行ってしまっていますが、気になる方は、カスタマイズも可能です。moreタブを押して、editボタンを押すと、カスタマイズ画面がでるので、タブの方に drag & drop すると入れ替えることができます。これは状態保存されるはずなので、次回起動時にもそのままの状態になります。

改善点: Tweet View などの大幅なデザイン変更

ボタンとかを画像化してちょっとリッチにしてみました。グラデも若干付けたりとかしてます。あとTimelineの名前と日付表示を若干薄くしたため、Timeline表示がちょっと読み易くなったと思います。

改善点: Friend Timeline と Mentions Timeline を統合

Reply などの Mention の Tweet を受信した場合のバッジ表示(赤丸で表示されるアレです)を、Mentions タブのみに表示するようにしました。よってFriendタブには、バッジ表示はされません。Friendタブで、そのTweetを表示するなどして既読となると、Mentionタブのほうのバッジも減ったり消えたりすると思います。

改善点:リロードボタン

テーブルビュー (タイムライン表示) の一番上をリロードボタンとしました。リロードボタンを押して新着があると(Auto ScrollオプションをONにしてない限り)、もとリロードボタンのところに発言が出るので、上方向にスクロールしていくと新しいTweetが読めます。

ただこのボタンがあまり評判良くないようなので、とりあえず Autopagerize を ON にした時は、表示せず、Autopagerize のポリシー通り、上にスクロールするとリロード相当ができるようにしようと思っています。

あわせて、投稿ボタンが、右、未読のクリアボタンを左としました。(いままでとは逆にしました) この右と左は、Left-hand Control オプションで逆にできます。

追記

時計を押すと一番上に行くスクロール技(たぶんどのアプリでも使えるはずですが)と組み合わせると便利だと思います。

改善点:Tweetの未読状態まで含めた状態保存

最新100件のものを保存するようにしました。friend, reply, dm, favorites, sents タブで有効です。

改善点: DMとRepliesを分離

本家NatsuLion (Mac版) は統合されているのですが、分離されてた方が試してみて分りやすかったため、このように変更してみました。結果として、強調表示も要らなくなっため、「Replyタブ開くと真っ赤!」という事にはならなくなりました。なお、タブの消費が1つ増えてしまったので、本家互換オプションも近々入れて復活することもできるようにしようと思います。

そのほかの新機能

  • フッタ機能
    • いろいろ設定できます:)
  • API制限(Limit)の残量がのこり10になったときに、タイトルバーを赤く
    • 暫定対応です。将来的には、Reloadボタンのところに、のこりAPI数がなんとなく分るようなゲージ的なものを付けようかと思います。
  • Left-hand Control オプション
    • Friend, reply タブなどの右と左のボタンを入れ換えられます
  • natsulion:// スキーマ
    • natsulion:///post?message で message と投稿画面に入力されます。これについても暫定対応で、ブックマークレットはまだ用意していません。次のversionで正式対応としようと思います。

そのほかの改善ポイント

  • Tweetの読み込みの高速化(2倍ぐらい?)
    • Libxml2を使用しています。XMLのパースがだいぶ高速になりました。
  • 時刻表示を分表示+AM/PM にした。24時間以前のものについては日付表示
    • 本家に近づけています
  • max_id に対応
    • これにより、autopagerize などのページングが正確に抜けなく行えるようになりました
  • Tweetの読み込み時に、最後に読み込んだものまで最大200件読むようにした。
    • これにより、「抜け」がだいぶ解消されているはずです
  • 1.5分更新追加
  • API制限に達したときのエラー表示で、のこり時間などを表示するように

その他

  • Use Post Method オプションの廃止
  • HTML Escapeを導入
  • Autopagerizeした時とかにたまに表示がくずれる件修正

FAQと思われる何か

Q: カメラ機能まだつけないの?
A: twitpic対応をされたバージョンが github にあるので、マージすれば簡単に対応できそうです。ただ、カメラは意外にユーザーオペレーションが多いので、独立したTwitter連携の写真投稿アプリを使う方が僕は好きだったりします。僕はGyazickrを愛用しています。

Q: Follow機能まだつけないの?
A: 付けようと思ってますが、もうちょっとかかりそうです。とりあえずTwitterには投稿でのコマンドでも制御できたりするので、たとえば f takuma104 という感じで投稿すると @takuma104 を follow できたりします。

Q: **機能まだつけないの?
A: まずはTwitterを楽しむ上での基本機能(というか僕が基本機能だと思っているところ)を優先しているとご理解いただければ幸いです。(もちろんご要望や改善案とかはつねにお聞きいたしますよ!) それと、このアプリはオープンソースですので、patch等書いて送っていただければ、もしかするとこちらでマージできるかもしれません。たぶんそれが最も速い機能追加/改善の方法かもです。(patchは手間的にできればgithubでのforkでお願いできれば幸いです)

ソースコード

AppStoreでのリリースに伴い、1.50のコードもgithubにpushしておきました。

http://github.com/takuma104/ntlniph/tree/master

いままで Private なリポジトリで開発をしていたのですが、かなり fork されている方もいらっしゃるので、そろそろこの githubリポジトリでメインの開発をやっていこうと思います。マージもしていきたいですし。

(追記: 5/10 22:00)
Favoriteタブの箇所に、タブのカスタマイズ方法を追記しました。また、リロードボタンの箇所に、いちばん上にスクロールする方法のtipsを追記しました。

NatsuLion for iPhone クローン (略) から学んだこととかまとめ

NatsuLion for iPhone クローンがライセンス違反で売られてる件 - @takuma104 log
はてなブックマーク - NatsuLion for iPhone クローンがライセンス違反で売られてる件 - @takuma104 log

たくさんのブクマ & コメントありがとうございます。こんなに反響があるとは思いませんでした。。やっぱりライセンス問題は気になりますよね。ということで、今回の件でいろいろ勉強したこととか、コメントいただいてたのの回答とかまとめてみました。

(追記)
ちなみに上記のエントリに追記しましたが、Twittervilleの中の人からメールをもらっていて、事態は収束の方向です。現時点で先方はTwittervilleアプリの販売を取り下げているようです。

New BSD License (と MIT License) について

コメント欄でご指摘いただいたのですが、New BSD License について、一部僕が勘違いしていた節がありました。バイナリにクレジットが必須だと思っていたのですが、そうではないようです。

いろいろ検索して、弁護士さんの書かれた物と思われる非常に分りやすい文章を見つけました。

「名義と免責事項については、最終使用者が使用にあたって確認しようと思えば確認しうる状態となっている必要があります (略) BSDライセンスのライセンス条件の第2項で、バイナリ配布の際にドキュメントに、ライセンス条件と免責事項を記載するよう要求しているのもその趣旨と言えます。」

http://www.homu.net/2007/06/post_cd47.html

とあります。つまりバイナリではなく、付属ドキュメントとかに記述する形で良いようです。あと免責事項も入った License 文書全体をちゃんと入れないと「正し」くはないようです。

まず、AppStoreのアプリは、基本的にドキュメントというものが存在しません。なぜか。それは、iPhone Application Human Interface Guideline という文書に、「アプリはドキュメントを読まないでも使えること」と書いてあるからです。実際にこれが審査基準になっているものと思われます。MacWindowsでいうヘルプ文書みたいなものはシステム上存在しません。アプリに組込みのチュートリアルとして、使い方を説明している、というものはありますが、それもゲームのチュートリアルのように、せいぜい数画面分程度のものです。

AppStore で配布する際の iPhone アプリで、New BSD License のコード等を使用する場合の適切な方法は、僕の考える限り、以下ぐらいの手法ではないかと思います。

  1. EULA に License 文書をそのまま入れる
  2. アプリのどこか、たとえば「設定」や「このアプリについて」とかに、License 文書を全文表示できるような仕組みを作る (webViewっぽいViewで組み入れているものも見かけますね)
  3. AppStore からリンクされているサポートページが事実上ドキュメントなので、そこに License 全文記載されているページへリンクする

まず1のEULAですが、インストール時に一度表示され、その後表示されないような気もしますので(されるんでしたっけ??)、「確認しようと思えば確認しうる状態」では無いような気もしますが、ライセンス文章を出すタイミングのUIとしては良いと思います。2のアプリは、いつでも確認しようと思えばできますので、これは一番安全そうな気がします。3は、厳密に "provided with the distribution" されているのかどうか良く分りませんが、すくなくともいつでも確認しようと思えばできそうです。

あまり厳密な考察でもなんでもないですが、アプリの都合上2が取れない場合は、1と3を併用が良いのかなあとか思いました。

ちなみに、MIT License だとまた話が変って、上記の弁護士さんのエントリによると、最終使用者つまりアプリを入手して使う人に対して、クレジットを表示する義務はまったく無いようです。ただ入れたほうが良いぐらいなニュアンスとのこと。入れる義務があるのは、むしろソースコードのほうだそうです。MIT License と BSD License の差もあまり良く分ってない状態でしたが非常に勉強になりました。

使い分けとしては、

  • ライブラリなど、ソースコード自体をよく改変して使うと想定されるもの → MIT License
  • アプリケーションなど、そのままコンパイルしてバイナリ配布される可能性もあるもの → New BSD License

とするのが良いのかなあと。

BSDライセンスでの過去の同様(?)な事例

t_yano さんから。

ソースコードダウンロードしてアートワークだけ変えて配布、て話は「シイラ」でも過去にあった(これはiPhone用じゃなくMac用ソフトだけど)。油断してると普通にあるので注意した方がいいと思う。

はてなブックマーク - t_yanoのブックマーク / 2009年3月29日

シイラのこの件について調べてみました。作者のHMDT木下さんの日記にそれらしい記述を見つけました。

VersionTracker に、iSurf とかいうブラウザが登場しているけど、これはシイラの名前とアイコンを変えただけのもの。

シイラの再配布条件は BSD ライセンスで、コピーライトさえ明記してあれば改変、再配布は自由。だから、iSurf でもなんでも別に構わない。BSD ライセンスにしたのは、シイラをもとにして、いろいろな機能を持ったブラウザが出てきたら嬉しいから。iSurf がこの後独自機能を持つかどうか、見守ることにする。ま、無理だろうけど。

http://hmdt.jp/archives/2005_01.html#sec2005011301

とあります。残念ながら、すでにもう4年も前のためか、webからこのドメインごと消失しまっているので詳細が不明です。ちゃんとドキュメントにクレジットするとかされていたのかが気になります。

あと同じ日のその下の文

その点、SunriseBrowser はとても面白い。こういうソフトの助けになったら、シイラソースコードを公開しているかいがあった、というものです。

http://hmdt.jp/archives/2005_01.html#sec2005011301

こちらの SunriseBrowser のリンク先にあった Sunrise は、現在も修正BSDソースコード付きで配布されているようです。しかし、copyright が、この会社のプロジェクト名になっているようです。以下2つの可能性が考えられます。1つは、すでにシイラのコードは一切無くなっているので、copyright の表示が要らなくなった、もう1つは、なんらかの理由でクレジットしてない、です。ちなみにたぶんforkしたであろう2005年時点のシイラのコードと現状とを比較すれば何か分るのかもしれません。

(追記)

@t_yanoさんからtwitterでリプライいただきまして、どうもこっちのようです。

メールをいただいたのですけど、jungle という Web ブラウザがあるらしい。どっかで見たようなブラウザだが。
別に再利用するのはかまわんのだけど、コピーライトとライセンスは付けてくれ。と、メールしておこう。

http://hmdt.jp/archives/2004_09.html#sec2004091405

なるほど、今回の事例そのままっぽいですね。残念ながらこれもリンク切れてて詳細不明。

この件をどう解決するかの案

shi3zさんから。

アップルに英文で訴状を送ればアップル側で削除要求を出してくれます

はてなブックマーク - shi3zのブックマーク / 2009年3月29日

というそのものズバリな回答をいただきました。なるほど。最終的にはこれしかなさそうですね。まだ当面事態を注視しつづける必要がありそうですが、とりあえずなんとか丸く収まりそうな気配なので、この手段は取らないで済むのではないかと期待しています。訴状となるとおそらく弁護士さんに頼むしかなさそうで、個人でやってるようなプロジェクトだと若干ハードルが高いところがありそうです。

ageha0さんから。

正しいかどうかはわかりませんがこの記事を英文化してみてはどうでしょうか?

http://b.hatena.ne.jp/ageha0/20090329#bookmark-12718967

なるほど。これもごもっともだと思うので、記録の意味も含めて、githubのprojectページに英文にして貼っておこうと思います。

今回新ためて思ったのは、やはり「何かあったら(blog)エントリ書く」はかなり強いということです。自分の主張が、客観的に見て相当間違ってるものでもないと自分として信じられる限りは、おそらく賛同や助けてくださる方は居るのではないかと。

あと、iPhone SDKデベロッパの人に限った話ですが、 http://twitter.com/iphone_dev_jp はいざというとき、かなり頼もしい存在になりつつあると思うので、何かあったらここに投げるというのも1つの手だと思います。*1 (NDA事項以外であれば)何かあった場合誰かが助けてくれているようですし、もし僕が力になれることであれば力になれるよう努力します。

おまけ

ヘタクソな英語でTwittervilleの中の人にメールしたのですが、それを貼っときます。何か同様なことが起きた場合とか(?)もし使えればと。重要なのは、何が問題かというのを客観的に示すということだと思い、この文章構成になってます。今回の場合は、まず、Twitterville が見た目上ソックリであっても、中身まで NatsuLion for iPhone のソースを使ったと示せないので、バイナリを otool してシンボルを全て比較するという手法を取りました。otoolの使い方教えてくれた @norio_nomura さんに感謝です。

ちなみに diff は一部自重しています。

To Whom It May Concern:

We found your Twitterville app on the AppStore today, Twitterville seems almost same as our NatsuLion for 
iPhone 1.06 on our github.
http://github.com/takuma104/ntlniph

While investigating the possibility of your Twitetrville app on the AppStore, it was discovered that otool result 
indicates almost same excepting 'NTLN' prefix. The following is the diff of otool result.

$ otool -tv Twitterville | grep : | sort > twitterville.txt
$ otool -tv ntlniph | grep : | sed -e s/NTLN// | sort > natsulion.txt
$ diff twitterville.txt natsulion.txt 

> +[AboutViewController creditTextView]:
48a50
(snip)

Please read carefully the license terms and don't delete original our credit notices 
in "About Twitterville for iPhone" screen. 

(from LICENSE file)
Copyright (c) 2007-2008, Akira Ueda
Copyright (c) 2008 Takuma Mori
 All rights reserved.
 Redistribution and use in source and binary forms, with or
 without modification, are permitted provided that the following
 conditions are met:
 * Redistributions of source code must retain the above copyright notice,
   this list of conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.
 * Neither the name of the Akira Ueda nor the names of its contributors
   may be used to endorse or promote products derived from this software
   without specific prior written permission.
   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Sincerely,

Takuma Mori
takuma104@gmail.com
Natsulion.org

*1:Twitterやってない人には敷居高いかもしれませんが、twitter.comでアカウント作って、iphone_dev_jpをフォローして、@iphone_dev_jp ほげほげ で、ここに「ほげほげ」とメッセージが流れるという簡単システムになってます

NatsuLion for iPhone クローンがライセンス違反で売られてる件

最近出た Twitterville というアプリを教えてもらったのですが、唖然としました。どうやら github に上っている NatsuLion for iPhoneソースコードをそのままコンパイルして、名前とアートワークとクレジットだけを変えて、ほか機能いじらずに販売されてしまっているようです。ライセンス的には New BSD License ですので、もちろん第三者コンパイルして(改変してもソース公開なしに)売ることも可能ですが、アプリのクレジットが明確に消されてしまっています。(購入して確認しました。ついでに返金請求してみた。) あと個人的には、起動画面のやっつけ具合もちょっと無いんじゃないかなあ、と。。

クレジットのところは明確に New BSD License 違反なので、この Twitterville の作者に入れるようにとのメールを出しました。残念なことになってしまいましたが、ソースは今後のversionについてもこのまま公開を継続します。ライセンスはGPLに変更した方が良いのかもと一瞬思いましたが、たとえ GPL にしたところで、何かあっても、FSF が copyright されて無いものだと、FSFがヘルプ(提訴とか)してくれるというような事は無いようですね。(その権利がないのであたりまえ、といえばあたりまえですが)

とくにiPhone SDK用のソースを公開している、あるいはしようと思っているアプリの作者さんに影響が無いかも心配です。たとえば有料アプリケーションでソースコードを公開されている方もいらっしゃいますが、それが成り立たなくなるのか、とか。有料&ソース公開は、非常に良い流れだと思っていたのですが。。

たとえばこの作者が、僕のメールの要求に従ってくれず、クレジットを入れないなどの場合、どうするのが正しいのでしょうか? もし類似の経験などお持ちの方いらっしゃいましたら、あるいは何か御助言ありましたら、コメントいただければ幸いです。

(追記)
Twittervilleの作者の方(boland6氏)からメールの返事が来て、次のリリースではちゃんとクレジット入れるよとのこと。というか、現時点では AppStore から取り下げているようです。

Twitterville remove from sale!

http://twitter.com/boland6/status/1409312898

あと1つ教えてもらったので謎なのが、from twitterville をクリックすると、なぜか、 http://domness.wordpress.com/twitterville-app/ にリンクされています。これは多分また別の人が作ってるアプリっぽく、こちらはまだリリースされていないもののようです。1つ考えられるのは、こちらの source parameter を申請した人(おそらく、このリンク先の人)とはまた別の人(boland6氏)が同じ名前を使っていて「偶然一致した」ということ(?)でしょうか。。

ライセンス関係は色々コメントいただいていたのもあるので、ちょっとまとめてみようと思います。

(追記2)

まとめました。こちら。
NatsuLion for iPhone クローン (略) から学んだこととかまとめ - @takuma104 log

GraphvizでC関数のcallgraphを描く

ちょっと必要だったので、gcc専用ですが、実行中のC関数が呼び出される様子(callgraph)をいろいろな組み合せてつくってみました。こんな図が描けます。(これはサンプルなので、実際のモノによってはもっと巨大な図が生成されます)


使い方

まずこの辺からダウンロードします。

http://github.com/takuma104/hacktools/tree/99ea8c9e71a4eae67f34f44f0054c466c78520ba/callgraph

実行には、GNU binutils が必要です。MacOSX で確認しているのですが、インストールされていないので、MacPort でインストールしました。

$ sudo port install binutils

とかでいけます。あとは make してOKであれば*1

$ ./sample
$ ruby trace2dot.rb sample > sample.dot

とかして、Graphviz (Mac版はこれがよさそうです) に sample.dot を読み込ませるだけです。sample.c が callgraph を記録している対象です。

しくみとか

実行時のすべてのC関数に対して gcc 拡張を使って hook し、それが trace.txt に記録されます。これは、

http://www.ibm.com/developerworks/jp/linux/library/l-graphvis/index.html

の instrument.c を使っています。何か関数が呼ばれる or その関数から抜けると、trace.txtに、その関数のアドレスを書き出します。

このアドレスだと何の関数だか分らないので、通常 GNU binutils に含まれる addr2line を使うようなのですが、どうも上手く動いてくれないのと -g オプションが必要だったりするみたいなので、binutilsを使った別の実装で addr2name というのを作りました。といってもこれも

http://homepage1.nifty.com/herumi/prog/binary.html

の bfd.tgz から GetBFDSymbol 関数を拝借して、それを改造しています。addr2name は、実行形式中に含まれるすべての関数のアドレスとシンボルの対を標準出力に出力するだけのものです。

これらを組みあわせて、trace.txt から Graphviz で読める dot ファイルを作っているのが trace2dot.rb です。出力される dot ファイルの label には call された順番が入っているので、1、2、3と読み進めていくと、どの順番で call されたかが分ると思います。

あと、この sample 以外の図を書きたい場合ですが、instrument.o を、コピーして、通常 configure するところを、

$ CFLAGS=-finstrument-functions LDFLAGS=instrument.o ./configure

とかして make してあげると*2、実行形式で実行したときに、trace.txtが出力されるようになります。ちなみに、-O2 とかで最適化されていると、関数名が抜けたりするので、最適化は切っておいたほうが無難なようです。あとは trace2dot.rb の引数に、その実行形式を指定してあげると dot で出力してくれます。

おまけ

これを使って Ruby 1.9.1p0 の miniruby で main.c の ruby_run_node() からを出力してみました。

Ruby 1.9.1 (miniruby) callgraph

$ miniruby -e'p 1+2'

の実行結果です。オリジナルのサイズはこちらから。
http://www.flickr.com/photos/takuma104/3373460048/sizes/o/

Dotファイルはこちらから
https://dl.getdropbox.com/u/136792/ruby_191_miniruby_p_1_plus_2.dot

*1:MacPortでない場合は、おそらくbinutilsのパスがダメだと思うので、適宜 Makefile を修正してください

*2:要は、-finstrument-functionsオプションを付けてコンパイルし、なおかつ instrument.o をリンクしてあげればOK