プログラミング

Router::Simpleいいね

RestなWebアプリケーションでは一意なURLとHTTPメソッドによって処理を行う。そういった目的ではURLとそれに対応する処理へディスパッチするライブラリが開発されている。 CGI環境変数のPATH_INFOとHTTPメソッドを使用するということになるが、煩雑な処理で…

plackの勉強始めました。

plack/PSGIというのが発表されてずいぶん経つけのだけども。 use strict; use warnings; use Plack::Request; use Plack::Response; my $app = sub { my $env = shift; my $req = Plack::Request->new( $env ); my $res = Plack::Response->new(); $res->sta…

10進数を2進数に直すなど。

まずは10進数の1桁1桁を分解する方法を考えてみる。例えば2011を1桁ずつ分解するには、 2011 を10で割って 余り1 201 を10で割って 余り1 20 を10で割って 余り0 2 を10で割って 余り2以上を逆順に並べて 2, 0, 1, 1 となる。上の桁から取り出すより下の桁か…

webdriverを使ってフォームの入力項目を埋めるライブラリをgithubに置いてみた

GitHub - fn7/form.py: webdriverでfillFormするよpythonのパッケージってあまり作たことないのですごく適当な仕上がりだ。 __init__.py なにそれ テストコード => sample.py実行して目視でよろ。サンプルのフォームは適当に作ってw [追記]テストコードは後…

UIPanGestureRecognizerでUIViewを回転させる

すんげー久々の更新にもかかわらず対したネタでもないのが残念だけど。 - (void)panAction:(UIPanGestureRecognizer *)gr { if (gr.state == UIGestureRecognizerStateBegan || gr.state == UIGestureRecognizerStateChanged ) { UIView *view = gr.view; CG…

簡単な実験するだけであってもwindow-basedアプリ作成は避けようかな

window-basedアプリを作成して適当に作ったUIViewのサブクラスをはりつけて実験ということをよくやるのだけれども、できるだけView-basedアプリを作った方が、いらんところではまることはなくなると思われる。 今回シミュレータでは正常動作なのに、実機でお…

円運動

円運動を10分くらいで書いてみたけど、 開始点の位置がなぜあそこなのかと、1週したら数秒停止する理由がわかんない。とりあえず後で理由を調べるとしてコードを公開する。 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions…

多重連結バネをやってみた

wonderflにあった面白いものをiPhone(iPad)用に書き直してみるシリーズ。元ネタはここ。 wonderfl build flash online | 面白法人カヤック MeshViewを作る。ViewController.viewにでもはりつけて表示すれば使えまする。 @interface MeshView : UIView { @pri…

iPadの回転対応

iPadアプリを作る場合には、かならず回転に対応した状態で作らなければならぬらしい。結論を先に言うと、Window-basedを使わずView-basedを使えと。回転対応するにはUIViewController追加する。これはきっと常識。 Window-basedなアプリを作成して、そこに必…

NSZombieEnabled を有効にしてEXC_BAD_ACCESSに耐える

アプリ開発をしているときに、EXC_BAD_ACCESSが発生してしまうと原因不明でアプリが落ちてしまう。デバッガでどこで落ちるのか探して、原因となる行を特定して修正ということになるけども、もっと楽な方法が欲しい。そこで出てくるのがNSZombieEnabledを有効…

1枚のマスク画像から色とりどりのインベーダを生成する方法

目的 このマスク画像から色を指定して様々なインベーダを生成します。 ※ CGContextDrawImageをするので上下逆様でマスク画像を作成してください。(20100820 追記あり) コード window-basedアプリを作成してapplicationDelegateに以下のとおり記述してくださ…

CALayerにアニメーションを追加して、NSOperationからレイヤの位置を確認する方法

コード TestViewをwindowに追加して、コンパイルし、画面をクリックするだけ。TestViewヘッダファイル @interface TestView : UIView { NSOperationQueue *operationQueue_; } @property (nonatomic, retain) NSOperationQueue *operationQueue; @end TestVi…

NSMutableArrayに追加するオブジェクトの autorelease VS release のベンチを取ってみた。

コード #import <Cocoa/Cocoa.h> @interface TT : NSObject { id obj; CGPoint position; } @property (nonatomic, retain) id obj; @property (nonatomic) CGPoint position; @end @implementation TT @synthesize obj; @synthesize position; - (void)dealloc { self.obj </cocoa/cocoa.h>…

NSRunLoopのrunMode:beforeDate:がわからん。

以下のコード。 NSLog(@"start stage"); UIView *view; //view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; view = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 240)]; NSDate *date = [NSDate dateWithTimeIntervalSinceNow:5.…

スレッド使ってCALayerでアニメーションする場合

最終的にこんな画面に。この一つ一つのマスがばらばらと表示されてくる感じのものを作る。スレッド処理として以下のようなNSOperationのサブクラスを作る。CALayerを追加時にはopacityを0.0fにしておくので、アニメーションは0.8f秒かけて単純に透明度を1.0f…

NSOperationQueueを使ったスレッド処理の簡単な例

目的 NSOperationQueueを使った処理をする 仕様 全10スレッド生成する 3スレッドずつ動く スレッドが完了する前にプロセスが終了しないようにする ソース #import <Cocoa/Cocoa.h> @interface TTOperation : NSOperation { int number; } @property int number; @end @imple</cocoa/cocoa.h>…

リスト内包表記スゲー

今さらながら、リスト内包表記のスゴさに触れたので記録しとく。perlの場合、 @a = (0..9); # 0から9までの数値を要素とした配列 @b = map {$_ * 2} (0..9); @c = map {$_ * 2} @b; @d = grep {$_ % 3 == 0 and $_ % 5 == 0} (0..99); # 0〜99までの 3と5の…

xrangeはなくなるそうだ

xrangeはrangeに似ているが、rangeがリストを返すのに対してxrangeはxrangeオブジェクト(generatorのようなもの)を返す。 2008年12月4日、Python 3.0がリリースされたそうだが、rangeでgeneratorを返すようになったのでxrangeの必要性がなくなったそうだ。ge…

Appleのカレンダーライブラリの祝祭日を処理する

当初はGoogleCalendarの日本の祝祭日を処理しようと思っていたのだが、Appleが公開しているiCalの方が良いらしい。 必要なライブラリ icalendar dateutil (httpでデータを取得する場合にはurllib2等が必要)iCalendar形式についてはこちらを参照振替休日につ…

マスク画像なしで角丸矩形を作る方法

CSS3で角丸が作れるんだからできるはずということで方法を探してみるとあった。しかもめちゃ簡単。 CoraAnimationを使ってUIViewからデフォルトのCALayerを取りだして角丸にしてしまう。 まずはフレームワークQuartzCoreを有効にしておく。(フレームワークの…

iPhoneでパーフェクトシャッフル

懲りないなw[注意]最初のカードと最後のカードを動かすシャッフル方法なので、52枚を8回で戻すことはできません。前のFlash版もそうね。50枚なら8回で戻るけどw 62枚も64枚も12回でもどる。そっくりなのだが色が違うのがおもしろい。 その他12回で元に戻るも…

XPathで要素を取得するなど

$url = '[適当なURL]'; $dom = new DOMDocument(); $dom->loadHTMLFile($url); $xpath = new DOMXpath($dom); $links = $xpath->query('//a'); if (is_null($links)) { echo "no links in this page\n"; exit(); } foreach ($links as $link) { echo "linkto…

GAEからim.kayac.comを使ってGmailの新着をPush通知

Gmailの新着がAtomフィードとして提供されていることを知ったので作ってみました。Push通知を受けとるアプリもiTunesStoreで販売されていますが、メールの内容をPush通知させるということは外部のサーバにメールの内容(一部?)を送信しているということになる…

Googleスタイルガイドのプロパティ定義でアクセサを強制

Google Objective-Cスタイルガイド 日本語訳 ↑こちらにあるプロパティ定義のガイドに添って実装すると、アクセサを通さないで直接代入してしまうコーディングミスを防げそうです。 @interface Foo : NSObject { @private NSArray *hoge_; } @property (nonat…

SwitchCaseの怪

怪というほどのことでもないかw ネットワーク疎通確認の為に、下記のサイトを参考にしたのだけど、 まったく関係ないところでハマリそうになったのでメモ。iPhoneアプリケーションで圏外を通知する。 - 24/7 twenty-four seven Reachabilityがバージョンアッ…

アクセサ通さないとretainされない件

self.hogeと書かないとアクセッサ通さない→retainされない(これは知らなかった) 上記のようなブコメがあったので、 実際のコードで検証したいと思います。 #import <Cocoa/Cocoa.h> @interface Foo : NSObject { NSArray *hoge_; } @property (nonatomic,retain) NSArray *h</cocoa/cocoa.h>…

コマンドラインでコンパイル

意外と簡単にコンパイルができるようだ。 Xcodeから適当なプロジェクトを作成してmain.mだけとり出す。 main.mを適当に編集しちゃう。 #import <Cocoa/Cocoa.h> int main(){ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog(@"Hello World!"); [pool r</cocoa/cocoa.h>…

Objective-C 最速基礎文法マスター

Java基礎文法最速マスター - いろいろ解析日記を参考に、Objective-Cのものを書いてみた。まだまだ歴が浅いので間違っている所があるかもしれません。[2012-08-03追記] ARCやリテラル表記など新しい記法が導入され、このページに記載されていることは多少古…

KissXMLを使ってみる

-(NSArray *)friendsPictures{ NSURL *url = [NSURL URLWithString: @"http://movapic.com/feed/user/fn7"]; NSData *data = [NSData dataWithContentsOfURL: url]; NSError *error = nil; DDXMLDocument *doc = [[DDXMLDocument alloc] initWithData:data o…

幅優先探索 perl版

以下、ソース。 use strict; my ($start,$goal); my @value = (); { my $_board =<<"EOD"; ************************** *S* * * * * * * ************* * * * * ************ * * * * ************** *********** * * ** *********************** * * G * * …