PhoneGap is an HTML5 app platform that allows you to author native applications with web technologies and get access to APIs and app stores. PhoneGapチームは20日(米国時間)、PhoneGapの最新版「PhoneGap 2.0」を公開した。PhoneGapは、HTML5、JavaScript、CSSなどのWeb標準技術を使ってネイティブなモバイルアプリケーションの開発を可能にするプロダクト。Adobe SystemsおよびApache Cordovaの支援のもと開発されており、様々なモバイルプラットフォームに対応したアプリケーションを開発できる。 PhoneGapはiOS、Android、Blackberry、Windows Phone、Pa
不吉な匂いとは、リファクタリングを必要とするコードから感じられる雰囲気を、比喩で表したものです。 ここでは、感じ取った不吉な匂いに対して、どのような解決法を選ぶことができるかを取り上げます。 匂いとして示されているのは、次の22のケースです。ひとつずつ見ていきましょう。 また、解決法に添えられている数字は、参考書籍「リファクタリング」の何ページに記されているかを示しています。
指定したクラスの、実装されているメソッドを列挙する - すぎゃーんメモの、続きのようなもの。 クラスに実装されているメソッドの一覧を取り出すことはできたので、今度は一つ一つのメソッドについての詳細を調べる。 例えばNSIndexPathの中にある"initWithIndexes:length:"というメソッドについて知りたいとき。 #import <Foundation/Foundation.h> #import <objc/runtime.h> int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; unsigned int i; size_t buf_size = 256; char *buffer = malloc(buf_size); // ターゲッ
メソッドを構成する要素の最後になる、メソッドの実装を取り上げよう。IMP (implementation) 型になる。これを利用すると、劇的な高速化も可能だ。 IMP型の定義 メソッドの実装を表すIMP型について、前にも紹介したが、もう一度説明しよう。メソッドを表す構造体は、Method構造体。この中にmethod_impという名前の、IMP型のフィールドがある。このIMP型の定義は、objc.hにある。 objc.h typedef id (*IMP)(id, SEL, ...); つまり、C言語の関数である。Objective-Cでは、メソッドの実際の処理を行っている実装はどこにあるのかと、追いかけていけば、このC関数にたどり着く。 この関数には、2つの引数があらかじめ定義されてある。これが、前々回に紹介した、メソッドに渡される暗黙の変数だ。すべてのメソッドで、この変数を利用できる。
以下の関数を呼び出すことにより メソッドのSELオブジェクトから、関数へのポインタを取得することができます。 // クラスメソッド、インスタンスメソッド兼用 - (IMP) methodForSelector: (SEL)aSelector // インスタンスメソッド専用 - (IMP) instanceMethodForSelector: (SEL)aSelector IMP型の定義は下記のような関数へのポインタのtypedefになっています。 // id:呼び出し元オブジェクト // SEL:関数のセレクタ // ...:引数リスト typedef id (*IMP)(id, SEL, ... ); // [obj method: param1 p2:param2 ] 通常の呼び出し //関数へのポインタ経由の関数呼び出し。 SEL selector = @selector(meth
JavaやC#のInvokeはそのオブジェクトの持つメタ情報からメソッド実行する(メッセージを送る)が、Objective-Cでそれに相当するのがNSObjectプロトコル(クラスではない)performSelector:メソッドだ。 メソッドの実態であるセレクタをメタ情報や文字列から生成して、メソッドに引き渡すパラメタと共にメッセージを送ることができる。 NSObject Protocol Reference [self performSelector:aSelector]; [self performSelector:aSelector withObject:arg1]; [self performSelector:aSelector withObject:arg1 withObject:arg2]; ところでperformSelectorメソッドのオーパロードは上の三つであり、これ以
just another scala quantを日本語にしました。 ちなみに、私の解はこちらに。 最初の解答 はてブに書いた解答方針、Inverse Fizzbuzz (FizzBuzzの逆関数) - Qiita - 与えられた範囲内のすべての解を数え上げてます。 もっと簡潔な解答 逆FizzBuzz問題 解きなおし - Qiita それでは、問題の日本語訳をどうぞ。 逆Fizzbuzz問題 2012年ではなく、2016年のお話。 世の中は大して変わっていない。 OOPと書き換え可能なオブジェクトによって何度もひどい目にあった後、世界はやっとのことでJohn Hughesの考察が正しかったことに気づき、関数型プログラミングに移行した。GoogleはTypesafe社を買収し、ScalaがAndroid上でネイティブに動作するようになっている。Googleに負けず劣らず、AppleはHas
NSDate クラスに用意されている timeIntervalSinceDate メソッドを利用することで、ある日時からある日時までの経過秒数を取得することが可能です。 例えば、ある時点の日時を "pastData" という名前の NSDate 型で記録していたとします。 このとき、その "pastDate" の時点から現在までの経過秒数を取得したい場合には、次のようにします。 // 過去の時点 (pastDate) から現時点までの経過秒数を取得します。 NSTimeInterval passedTime = [[NSDate date] timeIntervalSinceDate:pastDate]; timeIntervalSinceDate メソッドは、自分自身の日時から引数で指定された日時を引いた日時を経過秒数で返すため、ある時点から現在までの経過秒数を取得したい場合には、まず現
どうも、俺@仕事中です。 今日はiPhoneアプリをNSLocalizedString()とNSString stringWithFormatを使って多言語対応する方法のめもめもです。 日本語環境のみに作ったアプリを NSString *str = @"にほんご"; 英語圏で使うようにするには NSString *str = NSLocalizedString(@"key", @"comment"); としておき、ターミナルから genstrings -a $(find ./ -name "*.m"); とすればLocalizable.stringsファイルができるので、Xcode内にドラッグ&ドロップ(Xcode4では「Supporting Files」が適当かな)します。 Localizable.stringsはUtilitiesのFile Inspectorから作成する言語とText
iPhone アプリのローカライズは多くの人が NSLocalizedString を使って行っていると思う。自分もそうなんだけど、今回 Xcode 4 でローカライズしようと思ってちょこっとだけハマったのでメモ。 [Update:2012/09/30] Xcode 4.5(もっと前からかも…)からはローカライズする言語を増やす手順がちょっと変わりました。 Xcode 4.5 でのローカライズ方法 まずはいつも通りの手順。 最初に NSLocalizedString を使ってコードを書く。こんな感じ NSString *titleString = NSLocalizedString(@"SettingTabItemTitle", @"Title of Setting Tab Item");次に genstrings コマンドを使ってローカライズに必用な文字列を抜き出す。 こんな感じにすると
あの頃は青かった。教えるどころか無知をさらけ出すというのはこの事だった。死ぬほど恥ずかしいので消したかったけれど、この記事が一番アクセスがあって長い間いくらか読まれていたらしい。ためらった。ただ、かつての自分といくらかの人に参考になればうれしいけれど、そろそろ役目を終えたと信じたい。もし書きなおすのなら、もう少し違う言い方か伝え方にすると思う。 内容としては 当時の自分のスペック Pythonの言語で、当時の自分が知った方法(3項演算子とか) mercurial の基礎(init, commit, push, update, log) WAF(Django)の知識 URL(ディスパッチャ)をトリガーにして Viewで処理をかく ModelにDBの内容がある ORMでリレーションを簡単に記述できる テンプレートでViewで処理した内容を表示させる チラ裏に移動させた。
こんにちは、鴨田です。 最近、アイコンがセットされたWebフォントを使うことで、 画像を使わずにアイコンを表示するという手法が流行っていますね。 すごく興味はあったのですが、なかなか使う機会もなく、 便利そうだなと思っていただけで、今まで使ったことがありませんでした。 しかし、先日、とある案件でやっと使う機会に恵まれたので、やり方をご紹介いたします。 (プロトタイプだけ作って、結局プロダクトとしては使いませんでしたが・・・) 最近話題になっていたこちらのサイトがとても便利です。 Fontello - http://fontello.com/ 使いたいフォントを選択します。 ここでは、「Entypo」フォントから5つ選択します。 選択が終わったら、上部のタブから「Edit codes」をクリックします。 アイコン画像の上部のバーをクリックして、アイコンに割り当てる文字列を決めます。 英語で頭
ついに明らかになった、iPhoneアプリのリジェクト基準条項。 Engadetが公開したPDFをベースに、リアルタイムに更新中。 とりあえずリアルタイムに翻訳を作成中。 おもいっきり意訳なので、間違いの指摘や突っ込みはコメント欄かTwitterでお願いします。 <このリストは、2010年9月10日現在のものです。また意訳なので、気になる条文は原典をチェックすること。> 2. 機能 2.1: クラッシュするアプリはリジェクト。 2.2: バグのあるアプリはリジェクト。 2.3: 開発者の申請したものと違うアプリはリジェクト。 2.4: アプリの紹介文にない隠し機能を持つアプリはリジェクト。 2.5: 非公開のAPIを用いたアプリはリジェクト。 2.6: サンドボックス外のデータを読み書きするアプリはリジェクト 2.7: 実行コードを外部からダウンロードするアプリはリジェクト 2.8: 他の実
タイムスタンプなどの用途に、 UNIX 時間( UNIX エポック[=1970年1月1日0時0分0秒]からの経過秒数)のミリ秒版 ( = UNIX エポックを起点としたシステム時間(システム時刻)をミリ秒で表現した値) を取得する方法です。 例えば Java では System.currentTimeMillis() といったメソッドでさくっと取得できるのですが、Objective-C ではいくつか注意点があります: 時刻取得関数 CFAbsoluteTimeGetCurrent() は2001年1月1日を起点としています CFAbsoluteTimeGetCurrent() は整数部分を秒とした小数値( CFAbsoluteTime 型 = double 型)を返します 1970年1月1日から2001年1月1日までの経過時間の値が定数 kCFAbsoluteTimeIntervalSin
iOS 5.1 では UIScrollViewにバグがあるようで慣性スクロールが終わるタイミングで少しずつメモリがリークしてしまうようです。 UIScrollView を継承している UITableView や UITextView も同じ不具合が発生します。 内部に UIScrollView を保持している UIWebView も同様です。 Xcode 4.3.1 の Single View Application に下記のコードを追加しただけのアプリケーションと Instruments の Leaks を使用して検証しました。 - (void)viewDidLoad { [super viewDidLoad]; UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 32
Conrad Irwinさんの「MVC is dead, it's time to MOVE on.」を訳してみました。 MVC is dead, it's time to MOVE on. この訳文も原文のライセンスを引き継いでCC-BY-3.0ライセンスで利用可能とします。 追記13:58 すでに訳してた方がいました。MVCの時代は終わった。MOVEを使い始めましょう。 - ふじこのプログラミング奮闘記 MVCは死んだ。MOVEするときがきた MVCはすばらしいアイデアだ。モデルを持ち、モデルは内部に少しの状態をもつ。ビューは内部に少しのUIをもつ。そして、コントローラは内部に少しの・・・ 何を持つ? 私は確かにこのことに気づいた最初の人物ではない。しかし示されたようなMVCの問題のために、あなたは最後には過剰なコードをコントローラに詰め込むことになる。なぜなら、他にどこに入れていいか
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く