アップル 2010年秋 スペシャルイベント、Twitter 用ライブラリ XAuthTwitterEngine に機能を追加して公開

アップル 2010年秋 スペシャルイベントが 9月1日 (September. 1, 2010 at 10 a.m. Pacific Time : 日本時間9月2日深夜午前2時) に Yerba Buena Center で開かれました。スペシャルイベントのストリーミング動画は

Apple - Apple Events - Apple Special Event September 2010
http://events.apple.com.edgesuite.net/1009qpeijrfn/event/index.html

で見ることができます。iTunes Podcast

Apple Keynotes - Apple Special Event, September 2010
http://itunes.apple.com/jp/podcast/apple-keynotes/id275834665

でも配信されています。

今回のイベントで発表されたのは新 iPod ラインナップ、iOSプレビュー、新 iTunes とサービス、新 Apple TV でした。

iPod nanoiPod shuffle には興味がありませんが、新 iPod touch は、拙作 iYKRSS を Retina ディスプレイには対応させるために購入しようか悩んでいます。カメラ機能も購買意欲をそそられます。

以前 id:KYoshiaki:20100627、紹介したように自作した iPadRSSリーダー iYKRSSHD と Twitter アプリ iYKTwitter は毎日使用しています。ところが、Twitter の認証方式が OAuth 認証必須になり、Basic 認証が廃止されました。それで iYKTwitter を OAuth 認証に対応させる必要が生じました。

ネットで調べてみると OAuth 対応は難しそうなので OAuth 認証の簡易版 xAuth が良さそうです。

xAuth を使うために以下のサイトを

xAuthを使うための手続き - タイトルは未定
http://d.hatena.ne.jp/nakaji999/20100623/1277306203
xAuthの申請をしてみた « Today’s Replay
http://tmokita.sakura.ne.jp/wpress/2010/06/28/xauth%E3%81%AE%E7%94%B3%E8%AB%8B%E3%82%92%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/

を参考にしました。

Create cool applications! | dev.twitter.com
http://dev.twitter.com/

まず、最初に上の URL で Twitter アカウントでサインインし、2. Register an app をクリックするとアプリケーション登録申請ページが開きます。自作アプリを登録します。ただし、アプリケーション名で Twitter という文字を含んでいるとエラーになります。私の場合、iYKTwitter では登録できませんでした。それでアプリケーション名を iYKTweetHD に変更しました。これで OAuth 認証が使えるようになりました。

OAuth 認証の簡易版 xAuth を利用するためには api@twitter.com にメールを送って、有効にしてもらう必要があります。メールに送る内容については、先ほど紹介した下記 2つのページが参考になります。

xAuthを使うための手続き - タイトルは未定
http://d.hatena.ne.jp/nakaji999/20100623/1277306203
xAuthの申請をしてみた « Today’s Replay
http://tmokita.sakura.ne.jp/wpress/2010/06/28/xauth%E3%81%AE%E7%94%B3%E8%AB%8B%E3%82%92%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/

それぞれ申請するアプリの platform に合わせて送信する内容を置き換えてください。私の場合は iPadiOS 3.2 です。また、下記本家サイトを確認すると

Using xAuth | dev.twitter.com
http://dev.twitter.com/pages/xauth
xAuth access is restricted to approved applications. If your application is a
desktop or mobile application and the standard web OAuth flow or PIN-code
out-of-band flow is not right for you, send a detailed message to api@twitter.com
to request xAuth privileges. Include the name of your application,
the consumer key, the application ID (if available), and a summary of how xAuth
is best-suited for your application.

consumer key も必要そうなのでメールで送りました。スクリーンショットについては、私は MobileMe に加入しているので、Sites フォルダにスクリーンショットファイルを置いて下記 URL をメールに書いて送りました。

http://homepage.mac.com/'メンバー名'/'スクリーンショットファイル'

次の日にメールで xAuth が使用可能になったと返事が届きました。

xAuth を自力で実装するのは無理なので、参考になるライブラリを探しました。XAuthTwitterEngine が良さそうです。

最初に見つけた XAuthTwitterEngine ライブラリは

aral's XAuthTwitterEngine at master - GitHub
http://github.com/aral/XAuthTwitterEngine

です。さらにフォークを探してみるとリストに対応した

penso's XAuthTwitterEngine at master - GitHub
http://github.com/penso/XAuthTwitterEngine

を発見しました。ところがファイルがすべて揃っていません。仕方がないので自分で作成しました。また statuses/home_timeline や retweeted_status も実装されていないようなので追加しました。私が個人的に利用するために作成したものなので status の id が文字列に変更されています。注意してください。それにしてもきれいなソースには驚かされました。大変勉強になります。

github の使い方がよく分からないので、はてなのファイルアップロード機能利用して機能を追加した XAuthTwitterEngine Zip ファイルをアップロードしておきます。下記リンクからダウンロードできます。ただし、下記リンクのファイル名をクリックするとダウンロードされたファイル名が変化しますので、横の矢印↓をクリックしてダウンロードしてください。

Yoshiaki-XAuthTwitterEngine.zip 直

Yoshiaki-XAuthTwitterEngine.zip
http://kyoshiaki.sakura.ne.jp/osx/Hatena/Yoshiaki-XAuthTwitterEngine.zip

簡単な説明は、Zipファイルに同封された ReadMe-j.rtf に記載しておきました。公開に問題があったら、取り消しするかもしれません。質問についてはコメントを利用してください。返事は遅くなるかもしれません。

最後に XAuthTwitterEngine を利用して作った自作 Twitter アプリ iYKTweetHD の実行画面を添付しておきます。



米Apple、アンテナ問題の記者会見、Xcode オーガナイザ による Application Data の管理、iTunes のファイル共有

Apple、アンテナ問題の記者会見のビデオを公開

アップル - QuickTime - 7月16日の記者会見
http://www.apple.com/jp/apple-events/july-2010/
アップル - スマートフォンのアンテナ性能
http://www.apple.com/jp/antenna/
アップル - アンテナ設計・試験室
http://www.apple.com/jp/antenna/testing-lab.html

個人的な意見ですが、iPhone 4 の外部アンテナが剥き出しで目視できることが問題なんだと思います。いろいろなウェブサイトから判断すると、性能的には欠陥というほどではないような気がします。

Statement by Apple on White iPhone 4
http://www.apple.com/pr/library/2010/07/23iphonestatement.html
アップル - iPhone 4 - ケースプログラム
http://www.apple.com/jp/iphone/case-program/

iPhone 4 ホワイト モデル発売が延期になったようですね!
2010年9月30日までに iPhone 4 を購入した方への iPhone 4 Bumper、または特定の他社製ケース無償配布の受付も始まったようです。

前回紹介したように iPhoneRSS リーダー iYKRSS を iPad に移植しました。

iPad Programming Guide: Starting Your Project
http://developer.apple.com/iphone/library/documentation/General/Conceptual/iPadProgrammingGuide/StartingYourProject/StartingYourProject.html#//apple_ref/doc/uid/TP40009370-CH9-SW3
▼Creating a Universal Application
Adding Runtime Checks for Newer Symbols
Using Runtime Checks to Create Conditional Code Paths

上記ページを参考にして iPhoneiPad 両方で動作する Universal Application を作成しようと思ったのですが、ソースが複雑になりそうだったので、iPhone 用 iYKRSS を iPad 用に iYKRSSHD というプロジェクト名で新規作成しました。

iPad Programming Guide: Views and View Controllers
http://developer.apple.com/iphone/library/documentation/General/Conceptual/iPadProgrammingGuide/UserInterface/UserInterface.html#//apple_ref/doc/uid/TP40009370-CH3-SW7
▼Views and View Controllers
▼Using Popovers to Display Content

上記ページを参考に popover を使用しました。一例が下図です。

ModalView を中央に表示するのに UIViewController の modalPresentationStyle に UIModalPresentationFormSheet を設定し、下記ソースのように利用しました。

- (IBAction)toolbarItemAddTapped:(id)sender
{
EditController *content;
if (self.gEditController == nil) {
content = [[[EditController alloc] initWithNibName:@"EditController" bundle:nil] autorelease];
content.gRootController = self;
content.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
content.modalPresentationStyle = UIModalPresentationFormSheet;
//		content.modalPresentationStyle = UIModalPresentationPageSheet;
self.gEditController = content;
}
[giYKRSSHDViewController presentModalViewController:gEditController animated:YES];
}

UIModalPresentationFormSheet の実行結果が下図です。

他の部分は iPhoneRSS リーダー iYKRSS とほとんど同じなので、難なく作成することができました。

RSS リーダーに登録したフィードなどのデータをファイルに保存するには、plist、NSKeyedArchiver、CoreData の3通りあります。

拙作 iYKRSS、iYKRSSHDでは CoreData を使うほど本格的なデータベースは必要ないし、plist を使うほど単純ではないので、NSKeyedArchiver を利用しています。

iYKRSS、iYKRSSHD で保存されるデータ構造は同一で同じファイル名 RSSArchive.iYKRSS です。ファイル RSSArchive.iYKRSS は、各々アプリケーションごとに作成される ‘アプリケーション’ フォルダの Documents フォルダに保存されています。

  • plist
Property List Programming Guide: Introduction to Property Lists
http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html#//apple_ref/doc/uid/10000048i
  • NSKeyedArchiver
Archives and Serializations Programming Guide: Introduction
http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/Archiving/Archiving.html#//apple_ref/doc/uid/10000047i
  • CoreData
Core Data Programming Guide: Introduction to Core Data Programming Guide
http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html#//apple_ref/doc/uid/TP40001075

iPhone 用 iYKRSS の RSS フィードデータファイル RSSArchive.iYKRSS を iPad 用 iYKRSSHD の Document フォルダに移動すれば iYKRSS の RSS フィードを iYKRSSHD で引き継ぐことができ便利です。iYKRSSHD 上で最初からフィードの URL を入力する必要もありません。

幸いにも Xcode でビルドしてデバイスにインストールしたアプリケーションの Application Data (Documents フォルダのデータも含む) は、Xcode のオーガナイザを使って読み書きすることができます。

オーガナイザは Xcode のメニュー(上図) ‘ウインドウ/オーガナイザ’ (下図) で開くことができます。

iOS Development Guide: Running Applications
http://developer.apple.com/iphone/library/documentation/Xcode/Conceptual/iphone_development/120-Running_Applications/running_applications.html#//apple_ref/doc/uid/TP40007959-CH6-SW4
▼Running Applications
Managing Application Data

上記URL が参考になります。

簡単に説明すると iPhoneiPad などのデバイスを USB で Mac に接続し、 Xcode のオーガナイザを開き、デバイス名をクリックします。’Summary タブ/ Applications’ のダウンロードしたいアプリを選び、三角を開くと ‘Application Data’ という名前が表示されます。右側にあらわれたダウンロードボタン(上図の赤枠部分)をクリックして保存してください。Finder 上にフォルダが作成されます。(下図参照) Documents フォルダに RSSArchive.iYKRSS を見つけることができます。



データを元に戻した時はダウンロードしてできたフォルダの中のデータを変更して、オーガナイザのダウンロードしたいアプリ名にフォルダをドラッグ・ドロップ (下図参照)することで変更できます。即ちファイルなどのデータを iPhoneiPad に書き込むことができます。

オーガナイザを使わずに iTunes のファイル共有を使って Documents フォルダのデータを読み書きすることもできます。

iOS Application Programming Guide: Implementing Standard Application Behaviors
http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/StandardBehaviors/StandardBehaviors.html#//apple_ref/doc/uid/TP40007072-CH4-SW10
▼ Implementing Standard Application Behaviors
▼ Files and the File System
Sharing Files with the User

上記 URL が参考になります。

iTunes のファイル共有に Documents フォルダを表示させたい場合は、info.plist に UIFileSharingEnabled キー Boolean 型 YES を追加するだけです。

UIFileSharingEnabled キーは、メニュー ‘表示/Property List Type/Default File for Type’ で None を選ぶと入力しやすいと思います。

ただし、注意する必要があります。UIFileSharingEnabled を追加する前に、デバイス iPhoneiPad 上にアプリケーションがあると、ビルドしてインストールするだけでは、iTunes 上のファイル共有に表示されません。デバイスからアプリケーションを一度、削除して再インストールすると iTunes 上で同期した後、ファイル共有に表示されます。

上図を例にすると、iTunes 上のファイル共有/App から iYKRSSHD を選択すると Documnets フォルダにあるすべてのファイルが表示されます。この場合、RSSArchive.iYKRSS という名前のファイルが一つあります。ファイル RSSArchive.iYKRSS をウインドウの外にドラッグ・ドロップすればファイルを取り出すことができます。逆に Finder からファイルを iYKRSSHDD の書類と表示されているテーブルにドラッグ・ドロップすると Documents フォルダに書き込むことができます。

PC-G850V、PC-G850VS 用 SDCC版 Minesweeper ver 1.0

SDCC - Small Device C Compiler
http://sdcc.sourceforge.net/

iPadiOS 4 に熱中している合間に Mac 上で動作する SDCC の C言語を使って、PC-G850V、PC-G850VS 用マインスイーパーを作成していました。何とか動作するようになったので、需要があるかどうかわかりませんが、下記ページで PC-G850V、PC-G850VS 用 SDCC版 Minesweeper ver 1.0 と自作のライブラリを公開します。(自作ライブラリの著作権は放棄しますので、良かったら自由に使ってください。)

PC-G850V
SDCC 版 Minesweeper ver 1.0
http://kyoshiaki.sakura.ne.jp/osx/pcg850v.html

まるひろさんの PC-G850V エミュレータを使って、拙作 SDCC 版 Minesweeper ver 1.0 実行した動画を添付しておきます。 (動画の録画には、QuickTime Player バージョン 10.0 の ‘新規画面収録’ を使用し、編集には iMovie ’09 を利用しました。)

Version 0
http://www16.ocn.ne.jp/~ver0/index.html
http://ver0.sakura.ne.jp/
Linux/Windows/MacOSX用ソフトウェア
SHARP PC-G850/G815/E200エミュレータ g800 version 0.9.8
http://www16.ocn.ne.jp/~ver0/pc/index.html#g800
http://ver0.sakura.ne.jp/pc/index.html#g800

動画
http://youtube.com/watch?v=_Xf9NC514bo

公開されている SDCC 版 Minesweeper ver 1.0 はソースも含まれています。Makefile の書き方は

Pocket Game Library - INDEX
http://pocketgame.web.fc2.com/
Pocket Game Library - PC-G850 GAME
SDCC用ライブラリ + サンプルゲーム ギャラクシーウォール
http://pocketgame.web.fc2.com/game_g.html#g04

を参考にしました。

sdcc で -mz80 を指定するとライブラリ /Developer/sdcc/share/sdcc/lib/z80/z80.lib (Mac OS X 専用パス) をリンクします。z80.lib に含まれる関数は

/Developer/sdcc/share/sdcc/lib/src/z80 $ ls
README		divsigned.s	memmove.s	mulchar.s	stubs.s
crt0.s		divunsigned.s	mod.s		putchar.s
crt0_rle.s	fstubs.s	modsigned.s	shift.s
divmixed.s	heap.s		mul.s		strlen.s

/Developer/sdcc/share/sdcc/lib/src/z80/ (Mac OS X 専用パス) に関数名のファイルとして含まれています。

拙作 Minesweeper ver 1.0 を make で作成中にできる minesweeper.map を参照すればリンクされる関数名や関数の番地も分かるので PC-G850VS の機械語モニタでブレークポイント設定するのに便利です。

PC-G850VS の画面描画の仕組みについては

COSMO PATROL
http://orange.kakiko.com/cosmopatrol/
1ドットの誘惑
http://orange.kakiko.com/cosmopatrol/1dot/dot.html

で学びました。

IOCS について

SHARP PC-G850 解析資料
http://www.akiyan.com/pc-g850_technical_data

が参考になります。

Mineswepper ver 1.0 を作成中に乱数をどうやって発生させるのか、皆目見当も付かなかったのですが!たまたま、まるひろさんの

Version 0
http://www16.ocn.ne.jp/~ver0/index.html
http://ver0.sakura.ne.jp/
PC-G850/G815/E200用ソフトウェア
PC-G850用ライブラリ
http://www16.ocn.ne.jp/~ver0/g800/index.html#libg800
http://ver0.sakura.ne.jp/g800/index.html#libg800

PC-G850用ライブラリで 線形合同法を利用することを知り Wikipedia で調べました。

擬似乱数 - Wikipedia
http://ja.wikipedia.org/wiki/%E7%96%91%E4%BC%BC%E4%B9%B1%E6%95%B0
Pseudorandomness - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Pseudorandom_numbers
List of random number generators - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/List_of_random_number_generators

下記ページが一番理解しやすいと思います。

 Linear congruential generator - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Linear_Congruential_Generators

こんな簡単な式

{X_{\fs{+1}n+1}  = (a{X_{\fs{+1}n} + c) \text { mod m}

で疑似乱数を発生できるのですね!

私の理解不足か、拙作 Minesweeper ver 1.0 の疑似乱数発生の周期が小さいような気がします。

SDCC - Snapshot Builds
Documentation
Full documentation, including HTML and PDF files; zip is for Windoze (docs)
http://sdcc.sourceforge.net/snap.php#Docs
sdccman.pdf

sdcc、sdasz80、sdcclib、packihx の使用方法やコマンドラインは、上記ページからダウンロードできる Zip ファイルに含まれる sdccman.pdf を参考にしました。

作成中のPC-G850用Cライブラリ - Tosikの雑記
http://d.hatena.ne.jp/tosik/20061023/1161551560

インラインアセンブラのサンプルとして上記ページも参考にしました。最近の SDCC では、文法が

誤) _asm  -> 正) __asm
誤) _endasm;  -> 正)  __endasm;

に変更されているので注意してください。

IOCS ルーチンを C とインラインアセンブラで作成する時に

sdcc -mz80 -c --opt-code-size -o iocs.rel iocs.c
iocs.c:22: warning 85: in function printchar unreferenced function argument : 'x'
iocs.c:22: warning 85: in function printchar unreferenced function argument : 'y'
iocs.c:22: warning 85: in function printchar unreferenced function argument : 'ascii'
iocs.c:45: warning 59: function 'inkey' must return value
iocs.c:45: warning 85: in function inkey unreferenced function argument : 'keycode'
iocs.c:59: warning 59: function 'inkeyWait' must return value
iocs.c:79: warning 85: in function vram unreferenced function argument : 'x'
iocs.c:79: warning 85: in function vram unreferenced function argument : 'y'
iocs.c:79: warning 85: in function vram unreferenced function argument : 'size'
iocs.c:79: warning 85: in function vram unreferenced function argument : 'address'

上のような警告が表示されます。関数の引数を参照しなかったり、返り値を宣言していないためです。
警告を防ぐため

/*=====================[ iocs.c ]=====================*/
#pragma disable_warning 59
#pragma disable_warning 85
/*================================================*/

と宣言しました。

~/Minesweeper/Sources $ make
sdasz80 -gl -o crt0.rel crt0.asm
sdcc -mz80 -c --opt-code-size -o minesweeper.rel minesweeper.c
sdasz80 -gl -o data.rel data.asm
sdcc -mz80 -c --opt-code-size -o iocs.rel iocs.c
sdcclib iocs.lib iocs.rel
sdcc -mz80 -c --opt-code-size -o library.rel library.c
sdcclib library.lib library.rel
sdcc -mz80 --code-loc 0x108 --data-loc 0 --no-std-crt0 -o minesweeper.ihx crt0.rel minesweeper.rel data.rel iocs.lib library.lib -L .
packihx minesweeper.ihx > minesweeper.hex
packihx: read 723 lines, wrote 523: OK.
~/Minesweeper/Sources $ 

上のようにうまくビルドすることができました。

BASICマインスイーパーと違って旗を立てたり、開いたセルに書かれている数字の数だけ、周りのセルに旗を立てて、数字の書かれたセルをスペースキーで押すと自動的に旗を立てていないセルを開くことができます。パソコン版のマインスイーパーでよくあるダブルクリック機能と同じ動作です。

SDCCの C コンパイラには、いろいろ苦労させられました。何とか動作できるものができました。

ブログとホームページ [ http://kyoshiaki.sakura.ne.jp/osx/pcg850v.html ] にアクセス解析を設置しているのですが、ブログを検索エンジンからキーワード ‘PC-G850VS’ などで訪れる人は、私が確認した限りすべて Windows ユーザーです。

PC-G850V
http://kyoshiaki.sakura.ne.jp/osx/pcg850v.html

を訪れる人もほとんどが Windows ユーザーです。折角公開した PCG-LinkMac もあまり使われていないうようです。残念です。

私自身 VMware FusionWindows XPSHARP 製 ‘PC-Gリンク’ で、インテルヘキサ形式ファイルの送信時にエラーが出るので ‘拙作 PCG-LinkMac’ には重宝しています。

最近の Mac だと PCG-LinkMac が正しく動作するか心配ですが!

対処方法として ’アプリケーション PCG-LinkMac’ を右クリックして ‘パッケージの内容を表示’ を選び ‘Contents/Resources/Japanese.lproj/’ フォルダの ‘Localizable.strings’ ファイル

PCG-LinkMac.app/Contents/Resources/Japanese.lproj/Localizable.strings
"pcg_send_duration"="0.001";
"pcg_receive_duration" = "0.005";

上の値を変更すればうまくいくかもしれません。’Localizable.strings’ ファイルの文字コードUTF-16 なので注意してください。