サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
faultier.blog.jp
今仕事でRailsアプリケーションを組むときに、test/unitじゃなくてRSpecを使ってる。mock周りの使い勝手がいいとか、語彙が馴染みやすいとかいろいろ魅力があるんだけど、その「可読性」を保つにはなかなかコツがいると思う。 言うまでもなくRSpecはRubyのコードを「英語の表現として自然に見える」ようにすることを意図して語彙や書き方を決めている。これは英語圏のエンジニアには非常に素敵なことではあるんだけど、英語が苦手で英作文なんて始めて数分で泣きたくなるようなへたれ外国語学部生にとっては正直やっかいだし、周りの人達の大半は英語に慣れていない人達*1だったりするので、せっかく可読性が高い綺麗な表記でさえむしろ意図を理解する妨げになったりする。いっそドイツ語で書いて「お勉強」に活用してやろうかという衝動に駆られたけども、誰一人として読めない上に一週間後の俺ですら理解に苦しみそうなの
先月Oculus Rift DK2が届いたので折角だしゲーム制作に挑戦してみよう、ということでニコニ立体ちゃんことアリシア・ソリッドの3DモデルをUE4で取り込んでOculusで戯れてみることにした。 Oculusを使って、と書いたけど別にOculusが無くても戯れられます。というか、Oculus表示が出来るというだけでOculusならではなことは特にしてません。 その1 モデルの見た目を調整してみる その2 モーションを付けてみる その3 AIを作ってみる 前編 その4 AIを作ってみる 後編 実際に出来たもの マップを用意する いきなり自分で1からマップ作ってくとなると結構ハードルが高いので、今回はマーケットプレイスから入手できるブループリントオフィスのマップをそのまま使わせてもらう。 Epic Gamesが提供しているサンプルプロジェクトはちょっと尋常じゃないクオリティなんだけど、サ
Rustで遊んでみよう第二弾、本当は並列処理を試してみたにする予定だったんだけど何故かHTTPパーサが出来てた。 経緯はこう。 ナマケモノ@faultierWhitespace飽きたし非同期のクローラでも書いて遊ぶか→HTTPクライアントライブラリ、死んでるのと始まってすらいないのとcurlバインディングのしかない→折角なので自分で作ってみるか→HTTPパーサが(ry→HTTPパーサ書くの楽しい←イマココ 2014/07/20 22:37:54 「並列実行できるクローラ作ってください」「作るってどのレベルで?HTTPパーサから?」みたいなのがRust村みたいです。まぁ言うてまだアプリケーション層だ。TCP/IPからなんとかしましょうとか言われなくてよかった。一応C国からの輸入は許されてるけど、TLSとかならともかくHTTPくらいなら自力でなんとかできるでしょ、普段そんなの車輪の再発明だしや
カメラを買って以来すっかり写真を撮るのに夢中になってて、その上最近はリスなんか飼っちゃったりしてて、んまーめっきり週末プログラマーしてなかったもんで、しまったこっちのブログ全然書いてないやーと思って久々に見たら最後の記事が去年の8月26日とかになってた。これはひどい。少しは書かないと。 久々の更新なのに大分周回遅れ感のある話題だけど、Androidアプリ内でFlashを表示するときに面倒な感じだったのでメモ。Flash PlayerがPlay Storeから消えてから大分経ち、時代はAndroid 4系だと言うのに今更Flashかよーって自分でも思ってるしなんならこのメモ二度と見返すことが無ければいいなーと心から願いながら書く。あれなんです。世の中には大人の事情が一杯あるんです。2系とか爆発しろって思ってるけど俺の端末はGalaxy SII LTE 2.3.6です。俺も爆発しろ。 Andr
ゴールデンウィークを利用して久々にろくでもないものができたので晒しておく。 「ごっこじゃないよ、兄ちゃん!」「才能の無駄遣いじゃなくて、無駄そのものだよ、お兄ちゃん。」 前のと何が違うの? そもそもの発端についてはプログラミング言語「DT」という記事を、実際の言語仕様についてはREADMEでも読んでもらうとして、何で再実装したのかという話。 3年前に作ったのは「Whitespaceのトークンを置換した処理系をインタプリタとしてRubyで実装」したものなんだけど、何を思ったかコンパイルしてみたいと思い立ってしまい、んでそれ自体はLLVMが良く分かんなかったとか、llvmruby自体がプロジェクトとして大分アレな感じになってしまっていたとか、そういう事情で挫折してたんだけど、時は流れ、なんか見返してみたら普通にLLVMアセンブリ読み書きできるようになってたし、ruby-llvmがちゃんと動くよ
随分長いことブログ放置してしまったのだけどネタ見付けたので久々の記事。 UnicornはPassengerより遅かった? なんかTwitterで「アクセス少ないときはPassengerよりUnicornのが速いのに、アクセス多くなってきたらその逆になった」って話をみかけたので、それ単にUnicornのworkerが足りないんじゃないの、と返したのだけど、どういうことかという話を少しまとめる。 まず、Unicornのworkerは1プロセスにつき1度に1リクエストしか処理しない。だから例えば、凄い大雑把な計算だけど、平均50msくらいでレスポンスを返すアプリだとすれば、1workerは20req/secくらいは返せるかなと見積もって、ピーク時に100req/secくらいアクセスがありそうだったらworkerを5個くらい立てとくかな、足んなかったらもうちょっとかな、みたいに考える。実際どんくら
どうも、「iOS Advent Calendar 2011」5日目担当のfaultierです。つい最近使ったのでNSURLProtocolネタで。 NSURLProtocolって何? Foundationフレームワークで最初から扱えるプロトコルはhttp、https、ftp、fileの4つ。これ以外のプロトコルでの通信をNSURLConnectionやNSURLDownloadなどで扱う場合や、特定のリクエストに限って特別な処理をしたい場合などに、NSURLProtocolを継承して登録することで使えるようになる。ちなみに、他のアプリからopenURLしたときにアプリを起動させるカスタムURLスキームとはまた別なので注意。こちらはアプリ内でURL Loading Systemを使うときにだけ影響するもの。 使い方 最低限必要なのは、+canInitWithRequest:、+canonic
前の記事で予告した通り、今度はNSRegularExpressionの話。 正規表現でマッチした部分文字列を取得する まずNSRegularExpressionオブジェクトを作って、それのメソッドにNSStringのオブジェクトを渡す、という形で使う。まぁ説明するよりコード見た方が早い。 NSString *string = @"「そんな正規表現で大丈夫か?」「大丈夫だ、問題ない」"; NSError *error = nil; NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:@"「そんな(.+)で大丈夫か?」「(.+)」" options:0 error:&error]; if (error != nil) { NSLog(@"%@", error); } else { NST
なんか金縛りにあって眠れなくなったのでTwitter見てたら面白いやりとりをみかけた。すげー大雑把に要約すると、こんな感じ。 Railsの勉強をしてる人が「なんでHello worldしたいだけなのにDB必要なの!?DB使うにしたってMySQLなんか今必要じゃないしチュートリアルではSQLiteとかにしといてくれたっていいのに!プリプリ!」みたいな呟きをする 「いやRails使うんなら普通DB要るでしょ。なんでそこに文句言ってるの。」とツッコミが入る 「とりあえずチュートリアルは一番簡単なやり方書いといてくれた方が親切じゃないですか。」と反論 「いやだから、Railsを使うのに一番当たり前の構成を作るのにはどうしたらいいかがチュートリアルでしょ。それが必要ないんなら別なの、例えばSinatraとか使えばいいじゃん。フレームワークの特性も分からずに使っておいてチュートリアルがおかしいとか筋違
あるいは、お遊びチーム2号は一体何をしていたのかについて。 ISUCONという大変白熱した楽しいお祭を開催するにあたって、その前夜祭的な環境試験のためのチューニング祭が社内の有志数名で行われていて、そのときに色々学んだことをおまけとして書いておきます。 ISUCONて何? 下記参照。 なんでもありのWebアプリケーション高速化バトル、#isucon 開催のお知らせ 【締め切りました】Webアプリケーション高速化バトル、#isucon 詳細と参加者募集開始 ISUCON に参加してきました #isucon に参加してきました&isuconツールを試してみました #isucon で優勝してきました isuconに参加してきた&チーム「いんふらえんじにあー」の戦略など isuconお遊びチーム(事前社内β組)の設定あれこれ #isucon で優勝させてもらってきました #isucon に参加して
「スマートフォンについて何か喋ってよ」というかなり大雑把なネタ振りをされたので、第五回ライブドア・テクニカルセミナーでこんな感じの話をしてきました。 140字で分かるfaultierの発表: 「iOSとAndroidは違うものだって認識しよう」「両方やってみたらどっちかが圧倒的に作り易いわけじゃなかった」「お前これやりたかっただけだろ http://bit.ly/e429B1」 #ldtech あとで動画や資料は公開されるはずですが、大変申し訳ないことにテンパりまくって見るに耐えない感じになっちゃってると思うので、一応何を言いたかったのかを補足しておきます。 iOSとAndroidは違うものだという話 開発環境の違いについてはまぁいいとして、例えばアプリの設計思想。iOSでは「まずアプリケーションという大きなプログラムがあって、その中で画面を表示したり通信したりしてる」って感じの構成になっ
ここのところ久しくObjective-Cをいじってなかったので、急にCocoaと戯れたい衝動に駆られた。そうだ、iPhotoライブラリのExporterを作ろう、と思い付きでいろいろ調べてみた。iPhotoとかろくに触ったことないけど、Objective-C+Cocoa環境だと、動的にロードしたバンドルでランタイムのクラスを書き換えるとかもできてしまうので、既存のアプリに新しい機能を付けるとかが比較的簡単にできる。その気になれば(Cocoaアプリでさえあれば)どんなものにでもプラグインを作れるので、まぁなんとかなるだろと楽観的発想をしてみる。 で、見付けた参考になりそうな情報はitok’s Labさんとこの一連の記事とそのリンク先。iPhotoには組み込みで写真のExporterを追加できる機能があるらしく、思ったより簡単にできそう。大雑把に言うと、「Exporterのプロトコルに準拠した
ちょっと前に書こうと思ってて忘れてたネタ。iOSアプリ内で正規表現を使ってごにょごにょしようと思ったらRegexKitLiteを導入するのが一番てっとりばやいのだけど、iOS 3.2以降はFoundation Framework内でも地味に正規表現が使えるようになってきてるのでメモがてら記事にしておく。 NSRegularExpressionSearch Cocoaで文字列中に別な文字列が含まれているかどうかを知りたいときは、NSStringの-rangeOfString:というメソッドを使う。RubyのString#indexみたいな感じで、見付かった文字列がどこにあるかの位置を返してくれる。こんな感じ。 NSString *string = @"I love Udon."; NSRange match = [string rangeOfString:@"Udon"]; if (matc
こないだ、と言っても2週間くらい前の話なんだけど、社内でZeroMQとMongrel2の勉強会をやった。Mongrelと言えば、俺がRails(たしか当時1.2くらいだったと思う)で仕事してた頃にアプリケーションサーバとして使ってたけど、最近だとThinとかPassengerとかUnicornとかの人気に押されてついぞ聞かなくなったアレだよなぁ、なんでPerlの会社の勉強会でMongrelなんだろう、と思ってたんだけど、Mongrel2はもはやRailsのアプリケーションサーバじゃなくて、通信にZeroMQなるものを使った汎用的なWebサーバになってたらしい。 大分野心的なプロジェクトではあるものの、今はZeroMQもMongrel2も「とりあえず出た」って感じらしく、今年一杯くらいは地雷原を突き進む気がある人だけ触るといいんじゃないかなという話だった。プロダクションで使うようなレベルにな
「RubyKaigiが終わったら真面目にやろう」とか言ってたくせに、中々やる暇無くて放置してたら大変に分かりやすい作り方講座が出てしまった上、弾さんまで乗ってきてしまって完全にタイミングを逃したfaultierですこんばんは。 悔しいので対抗してみる うどんげが出たならてゐもいてもいいだろう、ということでてゐ。AAは上記の記事同様こちらを使わせてもらった。初春もいいなーと思ったんだけど表示してみたら大き過ぎて自分のターミナルで表示できなかったのでやめといた。コードはこんな感じ。 # tewi.rb eval$s=%w't=true;e="eval($s=join("<<34<<34<<",qw{$t=1;$s=~/"<<92<<"[[0-9,]+"<<92< <"]/;$n=eval($&);$e= "<<39<<"eval$s=%w"<<39<< ".chr(39)."<<39<<($s
リロードする度に訪問回数がインクリメントされて、3の倍数の時には「奴」が疼き出し、5の倍数の時には「奴」が目覚めてしまうという、訪問回数カウンタとFizzBuzzを組み合わせたしょーもない何かです。まぁこれだけだと「そうですね…で?」みたいな話で終わりなんだけど、一応無駄にlocalStorageを使ってみてます。ちなみに「貴様は既に漆黒の闇に囚われている…」云々て表示されてる場合はlocalStorageが使えないブラウザなので、違うのが入ってたらそれで試してみてください。Firefox、Safari、Chromeあたりの最新版だと動いてるはず。多分。Operaも動いてるっぽい。 ろーかるすとれーじ? Web Storageって何なのって人はHTML5.JPにある資料でも読んでもらうとして、まぁ大雑把に言うとブラウザにKey-Valueストレージが付いててなってJSから簡単に扱えるように
どうも。「いらないって言ってたのに開発機をいじってたら欲しくなっちゃいましたの法則」が発動してiPadも先週結局買っちゃった僕です。 iPad買ったら当然JailBreakしてターミナルでコード書きまくってやる、と思ってたんだけど、いきなりmobileterminalが動かなくて躓く。ふぁっきん。とは言え自分で修正するとか新しく作るとかまでする気も起きず、あーそうだJSとかHTMLくらいだったらiPad上で書いたりデバッグしたりできるエディタあったよねーと思って、AppStoreで探してみたらちらほら見付かるも、コレ、というのはまだ無い様子。当たり前だけど、Syntax Highlightができるメモ帳程度なんだよなー。 エディタのViewを作る ここで「タッチインターフェースを有効活用したコードエディタ」ってのを思い付いたら一時代築けそうなんだけど、別に今のところなんかアイディアがあるわ
「Objective-Cで、参照先のオブジェクトから参照元に通知を送る方法。」を読んてで思ったんですが、若干冗長な気がする。 プロトコルを使う プロトコルを使うんだったら、最初からそのプロトコルに適合するオブジェクトしかdelegateになれないようにしちゃった方がいいと思う。こんな感じで。 @interface Foo : NSObject { id<SampleDelegate> delegate; } @property (assign) id<SampleDelegate> delegate; @end こうしちゃえば、そもそもSampleDelegateに適合しないオブジェクトはdelegateになれないので、conformsToProtocolのチェックは必要なくなる。UIKitでも(例えばUITableViewのdelegateとか)大体そうなってますね。あと、ObjCはレシ
scrollView.canCancelContentTouches = NO; [scrollView setCanCancelContentTouches:NO]; って書き方があってこれみんなどういう使い分けしてるんだろうなぁ。。って思ってます。 セッター - poohtarouの日記 セッターというか、ドット記法の話かな。 ドット記法と普通のメソッドの使い分け まぁ、まずはこんなクラスがあったとします。 @interface Book : NSObject { NSObject *title; } @property (retain) NSString *title; @end このクラスのオブジェクトを作ってtitleを設定/参照するコードはこんな感じです。 Book *book = [[Book alloc] init]; // ドット記法 book.title = @"Dyn
そろそろRuby会議もあるというのに、そういや最近Ruby全然書いてないfaultierですこんばんわ。じゃあリハビリを兼ねて久々にRamazeさんで遊んでみるか、ついでにいい加減NoSQLブームにも乗ってみるか、みたいな感じでRamaze+MongoDB+Candyで遊んでみることにした。ちなみに社内では今Cassandraがブームなのだけども、Cassandraはちょっと遊びで使ってみるにはオーバースペックだよなーとか思いつつ色々見てたら、HerokuでMongoDBが使えるらしいのでそれを狙ってのMongoDBいじり。 とりあえず入れてみる aptで探したらmongodbのパッケージもあるんだけど、2010年5月30日時点では1.2.2と若干バージョンが古い。この後オブジェクトマッパーを色々試してみたところ1.4系じゃないと動かなかったりしたので、本家のサイトから最新のバージョン落と
Rubyと比べながらBlocksをいじってみたり、BlocksでNSArrayにmapメソッドを生やしてみたりしてきたので、そろそろGrand Central Dispatch(GCD)も試してみる。あんま関係ないけど、グランド・セントラル・ディスパッチってなんか必殺技っぽいよね。じゃあ一緒に高らかに叫んでみようか。せーの、グランド!セントラル!ディスパッチ!! GCDってなにさ ドキュメント嫁。 …だけだと流石に不親切なので、一応簡単に説明すると、APIを通してぽんぽん処理をqueueにつっこんでってやると、ランタイムの方でそれを上手いこと並列実行しといてやるよ!安心しろチェリーボーイ共、スレッドのことは俺が面倒見てやるぜ!って仕組み。そんな口調なのかどうかはわかんないけど、まぁ大体そんな感じ(適当)。 例によってRubyと比較 まぁ、こんなコードがあったとします。 # ruby f =
RubyエンジニアのためのObjective-C Blocks入門に引き続き、Blocksネタ。そっちの記事ではBlocksはクロージャ的ななにかだって言ってるのに単なる関数ポインタみたいにしか使ってなかったので、せっかくなのでクロージャ的に使ってみる。 eachできるならmapも欲しい -[NSArray enumerateObjectsUsingBlock:]を使えば、Array#each相当のことができるとこまでは前回の記事でできた。そうすると、Array#map相当のこともNSArrayにさせられるはず。例えばこんなの。 # ruby array_a = %w(ひたぎ 真宵 駿河 撫子 翼) array_b = array_a.map {|x| "#{x}が可愛過ぎて生きるのが辛い" } Rubyistには説明の必要もないと思うけど、Array#mapが何をしてるかというと、 1引
書こう書こうと思ってたけど忘れてたのを、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に
お掃除 iPhoneアプリのコードのお掃除をしている。やれiPadだ新型iPhoneだOS4.0だ、うはぁ頼みの汎用ライブラリはUndocumentedなAPI使ってて動かない、なんですってー他の言語からのトランスレータは規約で禁止だってー、とまぁなんだかんだでiPhoneデベロッパはアプリの改修に追われててAppleに恨みつらみが募ってたりもするんじゃないかと思うけど、まぁ俺も大体そんな感じです。正確に言うとそうじゃなくてもしょっちゅう直してますけど。 リファクタリング そんなわけで内部のコードの整理とかバグ取りとかついでに切り出したAtomPubクライアント汎用フレームワーク化しようかなーとかやってて、そうなるとちゃんとしたテスト書いてないと辛いのでOCUnitでテストケースをもりもり増やしてるんだけど、非同期にAPIと通信してるところがいまいちテストし辛い。というわけでNSURLCo
もう、こなったら、iphone用livedoorアプリの出力するXML見て、自前でXML組み立てるかな。 誰か助けてください。(切実) 俺日記 : [HELP ME!]perlでlivedoorに投稿するときのカテゴリ設定方法 誰か助けてください、とのことなのでお助けします。…と、その前に一つ注釈というか弁明というかしておくと、実はそのAPI、AtomPubの仕様が完全に固まる前に実験的に作られたもので(まだAtomPPとか呼ばれてたはず)、色んなところがすごく古いです。 結果は惨敗。生成されたXMLを見てみると、ちゃんとcategory要素が追加されてるんだけどなー。 <?xml version="1.0" encoding="utf-8"?> <entry xmlns="http://www.w3.org/2005/Atom"> <title>ちょっとテスト(すぐ消します)</titl
次のページ
このページを最初にブックマークしてみませんか?
『As Sloth As Possible』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く