エラー記録 日記の検索 詳細 一覧 カテゴリー お知らせ リンク集 チップス ページビュー 20131
書こう書こうと思ってたけど忘れてたのを、PerlエンジニアのためのObjective-C Blocks入門を見て思い出した。すいませんタイトルは便乗です。 試しに書いてみる Blocksってのが何者なのかはさっきの記事なりAppleのドキュメントなりを見てもらえばいいと思うんですが、まぁウケが良さそうなので付けたタイトルにのっとってRubyと比較してみる。 f = lambda {|x| puts "#{x}のこと以外は何も考えられない" } f.call("うどん") void (^f)(id) = ^(id x) { NSLog(@"世界の全てを敵に回しても、僕は%@の味方だ", x); }; f(@"うどん"); なんだ、そっくりじゃない。似てる似てる。 上がRuby版、下がObjC版。下は普通引数にはNSString*とかを使うと思うけど、まぁRuby版と挙動を合わせるためにidに
OS X 10.6 以降の xcode では Objective-C に Blocks というシンタックスが追加されている。 Blocks Programming Topics: Introduction Perl でいうところの無名関数(コードブロック)を作ることができる機能で、Perlでいうところの my $f = sub { ... }; $f->(); は void (^f)() = ^{ ... }; f(); のように書ける。書式がきもいのはObjective-Cの定めなのであきらめましょう。 より詳しい書式については上記ドキュメントを見ると良い。 しかしデフォルトではPerlのコードブロックとはレキシカル変数の扱いが異なる。 my $i = 0; my $f = sub { return $i + 1 }; $i++; $f->(); # 2 を返す perlではこのようにレ
UVC Camera Control for Mac OS X For a recent computer vision project I needed to pull images out of a Logitech QuickCam 9000 and track some markers with the help of the ARToolKitPlus library. I connected the camera to my Mac and was quite surprised to see that it just works. There was no need to install any drivers. As I learned later, that's because the QuickCam 9000 is a UVC webcam for which Mac
Objective-Cを勉強しているんですが、とりあえず気楽に持ち運べるEeePCの環境でCUIの開発が出来ればいいなと思いLinux環境で開発ができるようにしてみました。 いや、だってMacBook重たいんですもん。。あと、キーボードがめちゃくちゃ熱くなるからHHKを接続していないと入力する気になれないし。。 まぁそれはおいといて。色々調べた結果以下のライブラリ群をインストールすればコンパイルが可能になりました。 sudo apt-get install build-essential sudo apt-get install gobjc sudo apt-get install libgnustep-base-dev sudo apt-get install gnustep sudo apt-get install gnustep-devel コンパイル方法は次のようになります。 gc
なんでもターミナルで完結させたい病 最近Objective-Cをお仕事で書いてたりするんだけど、試行錯誤しながらじゃなくてある程度量書くようになってくるとXcodeじゃかったる過ぎるので、ObjC対応済みのctagsをインストールしたりxcodebuildをよしなに叩いてくれるRakefile書いたりしてvimで作業する環境を整えた。もちろんiPhoneシミュレータを起動したりリファレンス読んだりするのでXcodeは開きっぱなしなんだけど、それでも書くのをvimでやれるようになったら大分楽になった。 書くのは楽になったけど、そうなると今度は動作の検証もいちいちシミュレータ起動してあれこれ操作してってのが馬鹿馬鹿しくなってくる。そもそもテストも書かないでアプリ開発とか泣けてくる。幸いiPhoneSDKでもOCUnitが使えるので、ライブラリとして切り出せる部分を別プロジェクトに切り出した上で
Growl.framework なしで Objective-C から Growl に通知を送るライブラリ、TinyGrowl をリリースしました。 http://github.com/psychs/tinygrowl 他のアプリに組み込むプラグインから Growl に通知を送りたい場合などに使えると思います。(プラグインで Growl.framework をロードしてしまうと、アプリ本体や他のプラグインで Growl.framework を使えなくなってしまうので) 使い方は、いたって簡単です。 まずは初期化。 growl = [TinyGrowlClient new]; growl.delegate = self; growl.allNotifications = [NSArray arrayWithObjects:@"Alert", @"Info", nil]; allNotifica
おもむろに Xcode のドキュメントを検索すると CGGetOnlineDisplayList とかいう関数が見つかったので #include <CoreFoundation/CoreFoundation.h> #include <ApplicationServices/ApplicationServices.h> int main (int argc, const char * argv[]) { CGDisplayCount displayCount; CGDirectDisplayID displays[4]; int i; CGGetOnlineDisplayList(4, displays, &displayCount); for (i = 0; i < displayCount; ++i) { CGRect rect = CGDisplayBounds(displays[i]
UIViewControllerと同じで、継承してshouldAutorotateToInterfaceOrientation:でYESを返します。 #import <UIKit/UIKit.h> @interface MyTabBarController : UITabBarController @end #import "MyTabBarController.h" @implementation MyTabBarController - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } -
iPhone で San Francisco の鉄道・バス路線図を表示するサンプルアプリを作ってみたのでソースを公開します。 http://github.com/psychs/iphone-samples/tree/master/SFMap 単純に地図の PDF を描画するとすごく重くなってしまうので、大きさの違う画像をいくつか用意して、ズームに従って表示する画像を変えていくようにしています。 UIScrollView を使ってナイーブに実装すると、UIScrollView のズーム状態を外からコントロールすることができないので、ズームが終了するたびに UIScrollView 自体を作り直したりする必要があります。 そこで、今回は UIImageView のサブクラスを作り、 - (void)setTransform:(CGAffineTransform)value; { float s
新しいことにチャレンジしたいと思いつつも、そのために新しい技術を習得するとなるとコストが高くなってしまう。もっと手軽にはじめられるとスムーズではないだろうか。特にプログラミング言語は習得コストが高く、気軽にはじめようと思うまでには相当時間がかかってしまう。 iPhoneでRubyCocoaが使える! 幸いにして、Objective-Cには他言語とのブリッジを行う技術がある。そこで注目したいのがiPhone RubyCocoaだ。 今回紹介するオープンソース・ソフトウェアはiPhone RubyCocoa、その名の通りiPhone向けネイティブアプリケーションをRubyで開発するためのフレームワークだ。 iPhone RubyCocoaはRubyCocoaをiPhone向けに展開したフレームワークだ。RubyのスクリプトでiPhone向けの記述ができ、コンパイルすることでネイティブなアプリケ
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
nib2objc akosma/nib2objc · GitHub 以下のように、パラメータにXIBファイルを指定すると、標準出力にコードが出力されます。 $ nib2objc WebView.xib > WebView.m このようなビューから下記のコードが出力されます。 XIBファイルをソースコードに変換する場合というのは、パフォーマンスのために、XIBファイルを使わないようにしたい場合がほとんどだと思うので、このコードをもってXIBファイルを置き換えるのは難しいです。 インスタンス変数やアクションの接続が無くなってしまうので、それらを再構築する手間を考えると、自分で書いた方が早いと思います。 ただ、ソースコードが公開されているので、工夫して改良すれば、便利なツールになりそうです。 UIBarButtonItem *view39 = [[UIBarButtonItem alloc] i
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
http://mtl.recruit.co.jp/blog/2009/01/iphoneiphonesdk.html つまり、デフォルトでは、autoreleaseされたインスタンスは、このプールにどんどん、追加されてゆく。ちょっとした文字列であっても NSString.stringWithFormatを乱発すると、メモリ不足になりかねないということです。注意、注意。 http://mtl.recruit.co.jp/blog/2009/01/iphoneiphonesdk.html NSAutoreleasePoolはイベントループが一周するたびに生成と破棄を繰り返します。 ですので、アプリケーション終了まで、オブジェクトが溜まっていくということはありません。 たいていは、autorelease済みのオブジェクトはメソッドを抜けた後に解放されます。 ひとつのメソッドで、一時オブジェクトを
たいしたものではないですが、 iPhoneアプリ開発用に Linked ListとLRUCacheを実装したユーティリティライブラリを公開します。 http://github.com/genki/s21gutils/tree/master 本当はサードパーティフレームワークの形にしたかったんですが、 iPhoneでサポートされてないようなので、ソースとUnitTest用プロジェクトの形で公開します。 ヘッダファイルをコピーとかするのが面倒なので、 Gitでソースを管理してるプロジェクトで使う場合は、 以下のようにGit submoduleとして追加するとメンテナンスが楽かもです。 1 % git submodule add http://github.com/genki/s21gutils/tree/master Classes/s21gutils
1 #define BM_START(name) NSDate *name##_start = [NSDate new] 2 #define BM_END(name) NSDate *name##_end = [NSDate new];\ 3 NSLog(@"%s interval: %f", #name, [name##_end timeIntervalSinceDate:name##_start]);\ 4 [name##_start release];[name##_end release] iPhoneアプリを開発している場合、シミュレータ上の動作時間と 実機での動作時間は全く異なるので、 実際に実機で動かしてみた場合にどの程度の時間がかかっているかを 測定するのに使っています。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く