<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6927926871289397366</id><updated>2024-08-28T15:17:25.079+09:00</updated><category term="iOS"/><category term="objectivec"/><category term="aws"/><category term="maven"/><category term="mvn"/><category term="guice"/><category term="java"/><category term="jenkins"/><category term="nexus"/><category term="objectivec iOS"/><category term="one-jar"/><category term="subversion"/><category term="was"/><title type='text'>あとで楽するエンジニアリング</title><subtitle type='html'>AWSクラウドコンピューティング、iOS上でのObjective-Cを用いた開発などのノウハウ共有</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>35</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-2052212055953538249</id><published>2012-05-21T17:47:00.001+09:00</published><updated>2012-05-21T17:47:23.561+09:00</updated><title type='text'>Blockを用いたHookの利用</title><content type='html'>&lt;p&gt;
viewWillAppearで生成したオブジェクトをviewDidDisappearで解放する場合等に、ブロックを使うと関連するコードをまとめて記述できます。この方法であればプロパティが増えてもそれぞれにhookを記述できるので、記述漏れを予防しやすいと思います。

&lt;pre&gt;
- (void)viewWillAppear:(BOOL)animated
{
   [super viewWillDisappear:animated];
    
    self.viewWillDisapperHooks = [[NSMutableArray alloc]init];
 
    self.myobject = [[MyObject alloc]init];
    [self.viewWillDisapperHooks addObject:^{
            self.myobject =nil;
        }];
}


- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    for(void (^hook)(void) in self.viewWillDisapperHooks){
        hook();
    }
    self.viewWillDisapperHooks=nil;    
}

&lt;/pre&gt;
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/2052212055953538249/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2012/05/blockhook.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/2052212055953538249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/2052212055953538249'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2012/05/blockhook.html' title='Blockを用いたHookの利用'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-6673090880831713547</id><published>2012-05-18T12:53:00.002+09:00</published><updated>2012-05-18T12:53:54.764+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="objectivec"/><title type='text'>hidden or visible?</title><content type='html'>&lt;p&gt;
CocoaのUI Viewは、オブジェクトを非表示にするためのhiddenという属性を持っています。ただ、他のフレームワークでは同じ目的で意味が反転したvisibleという属性があることが多く、僕はちょっと混乱していました。特にenableと組み合わせる場合に、ユーザ操作可能なのがYESなのかNOなのかがわかりにくくないですか？

&lt;/p&gt;

&lt;p&gt;
この辺は設計思想に関わることなので、フレームワークのお作法に慣れる方が望ましいです。でも、嫌な人は我慢せずにさくさくっとカテゴリで拡張しちゃいましょう。当然プロパティアクセスも可能です。

&lt;dl&gt;
&lt;dt&gt;UIView+Visible.h&lt;/dt&gt;
&lt;dd&gt;
&lt;pre&gt;
#import &amp;lt;UIKit/UIKit.h&amp;gt;

@interface UIView (Visible)

@property(nonatomic,getter=isVisible) BOOL visible;

@end

&lt;/pre&gt;
&lt;/dd&gt;

&lt;dt&gt;UIView+Visible.m&lt;/dt&gt;
&lt;dd&gt;
&lt;pre&gt;
#import &quot;UIView+Visible.h&quot;

@implementation UIView (Visible)

- (BOOL)isVisible
{
    return !self.hidden;
}

- (void)setVisible:(BOOL)visible
{
    self.hidden = !visible;
}

@end
&lt;/pre&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/6673090880831713547/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2012/05/hidden-or-visible.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/6673090880831713547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/6673090880831713547'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2012/05/hidden-or-visible.html' title='hidden or visible?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-2490863743408118163</id><published>2012-05-18T00:31:00.000+09:00</published><updated>2012-05-18T00:31:56.842+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="objectivec"/><title type='text'>外からはreadonlyで、中からはreadwriteな@property</title><content type='html'>&lt;p&gt;
さっき気がついたことのメモ。&lt;br/&gt;
readonlyで定義したpropertyを、実装ファイル側でreadwriteに上書きできます。immutableなクラスでpropertyを使う場合にとっても便利。
&lt;dl&gt;
&lt;dt&gt;HOGEHOGE.h&lt;/dt&gt;
&lt;dd&gt;
&lt;pre&gt;
@interface HOGEHOGE : NSObject
@property(readonly,nonatomic,copy) NSString* title;
@end
&lt;/pre&gt;
&lt;/dd&gt;

&lt;dt&gt;HOGEHOGE.m&lt;/dt&gt;
&lt;dd&gt;
&lt;pre&gt;
@interface HOGEHOGE ()
@property(readwrite,nonatomic,copy) NSString* title;
@end

@implementation HOGEHOGE
@synthesize title=_title;
@end
&lt;/pre&gt;
&lt;/dd&gt;
&lt;/dl&gt;
ひとりでコードを書いていると、この手の基本的なことをずっと知らなかったりします。
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/2490863743408118163/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2012/05/readonlyreadwriteproperty.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/2490863743408118163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/2490863743408118163'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2012/05/readonlyreadwriteproperty.html' title='外からはreadonlyで、中からはreadwriteな@property'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-7239578876086143288</id><published>2012-05-17T11:39:00.001+09:00</published><updated>2012-05-17T11:39:12.352+09:00</updated><title type='text'>NSStringの定数定義</title><content type='html'>&lt;p&gt;
これも常識だと思いますが、備忘録としてメモ
&lt;/p&gt;

&lt;h2&gt;定数の命名規則&lt;/h2&gt;
&lt;p&gt;
歴史的にkで始まる定義をよく見かけますが、
&lt;a href=&quot;http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingIvarsAndTypes.html#//apple_ref/doc/uid/20001284-1001783&quot;&gt;Coding Guidelines for Cocoa&lt;/a&gt;にはそのようなルールはないようです。他の定数と衝突しないことが重要なので、僕は「クラス名」＋「k」＋「変数名」を使用しています。
&lt;/p&gt;
&lt;h2&gt;グローバルな定数&lt;/h2&gt;
&lt;p&gt;
他からも参照できるようにヘッダーファイルでextern宣言し、実装ファイル内に定義します。

&lt;dl&gt;
&lt;dt&gt;HogeHoge.h file&lt;/dt&gt;
&lt;dd&gt;extern NSString* const HogeHogekMogeMoge;&lt;/dd&gt;

&lt;dt&gt;HogeHoge.m file&lt;/dt&gt;
&lt;dd&gt;NSString* const HogeHogekMogeMoge = @&quot;HAGAHAGA&quot;;&lt;/dd&gt;
&lt;/dl&gt;
&lt;/p&gt;

&lt;h2&gt;ローカルな定数&lt;/h2&gt;
&lt;p&gt;
Headerファイルでは特に定義をせず、実装ファイル内でstaticに定義しスコープをコンパイル単位に限定します。

&lt;dl&gt;
&lt;dt&gt;HogeHoge.h file&lt;/dt&gt;
&lt;dd&gt;定義なし&lt;/dd&gt;

&lt;dt&gt;HogeHoge.m file&lt;/dt&gt;
&lt;dd&gt;static NSString* const HogeHogekMogeMoge = @&quot;HAGAHAGA&quot;;&lt;/dd&gt;
&lt;/dl&gt;
&lt;/p&gt;

&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/7239578876086143288/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2012/05/nsstring.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/7239578876086143288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/7239578876086143288'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2012/05/nsstring.html' title='NSStringの定数定義'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-2980015884277898862</id><published>2012-05-16T17:16:00.002+09:00</published><updated>2012-05-16T17:16:36.314+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="objectivec"/><title type='text'>ARC環境でweak pointerがnilになるタイミング</title><content type='html'>検証コードをまとめる余裕がないのでメモとして。

&lt;p&gt;
weak pointerにselfを保存している場合、deallocが呼ばれるより前にnilになるようです。つまり下記のような実行順序と考えられます。
&lt;ul&gt;
&lt;li&gt;オブジェクトを指すstrong pointerの数が0になる&lt;/li&gt;
&lt;li&gt;オブジェクトを指すweak pointerがnullifyされる(nilになる)&lt;/li&gt;
&lt;li&gt;オブジェクトがdeallocされる&lt;/li&gt;
&lt;/ul&gt;
考えてみれば当たり前ですね。
&lt;/p&gt;
&lt;p&gt;
僕の場合、Notification Centerに登録する際に登録解除処理をブロックとして保存し、deallocで呼び出すつもりでした。ここでweak pointerを使うとdealloc呼び出し時にはnullifyされていて動作しません。逆に、strong pointerを使っているとそもそもdeallocされません。このような場合、unsafe_unretained pointerを使うことでオブジェクトを解放しつつ、nullifyを避けることができます。iOS4互換のためだけに存在すると思っていたんですが、こんな利用法があるんですね。
&lt;/p&gt;

&lt;p&gt;
でも多分、今回のケースにおける正解は「そんなコードは書かない」だと思います:-p
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/2980015884277898862/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2012/05/arcweak-pointernil.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/2980015884277898862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/2980015884277898862'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2012/05/arcweak-pointernil.html' title='ARC環境でweak pointerがnilになるタイミング'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-8792364979256294251</id><published>2012-05-02T15:20:00.000+09:00</published><updated>2012-05-02T15:20:34.282+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Javaプログラマ的なDynamoDBの捉え方</title><content type='html'>&lt;p&gt;
予測可能なパフォーマンスを、メンテナンスフリーで手に入れられるAmazon DynamoDB。非常に魅力的ではありますが、DynamoDBは徹底的にKey-Valueな考えが必要になります。というか、主キー以外でのルックアップは基本的に実行できないと考えた方が良いです。特にPrimary Keyの扱いが重要なので、ちょっとまとめみました。
&lt;/p&gt;

&lt;p&gt;
DynamoDBのPrimary Keyには「Hash Type Primary Key」と、「Hash and Range Type Primary Key」の二種類があります。詳しい解説は他のサイトにまかせるとして、これらをJavaプログラマ的に捉えると下記のようになります。

&lt;h3&gt;Hash Type Primary Key&lt;/h3&gt;
&lt;p&gt;
Map&amp;lt;HashKey,Object&amp;gt;&lt;br/&gt;
Hash Type Primary Keyを使用する場合には、本当に純粋なMapとして捉えられます。HashKeyが適切に分散さえしていれば、DynamoDBのすばらしい性能の恩恵を受けることができます。
&lt;/p&gt;

&lt;h3&gt;Hash and Range Type Primary Key&lt;/h3&gt;
&lt;p&gt;
Map&amp;lt;HashKey, SortedMap&amp;lt;RangeKey,Object&amp;gt;&amp;gt;&lt;br/&gt;
Hash and Range Type Primary Keyを使用する場合にも、Hash Keyの役割は変わりません。ただ、これに加えて、ソートされたRange Keyを用いることができます。Range Keyはソートされているだけでなく、Queryという機能を用いて柔軟にアクセスできます。ただし、Range Keyだけでは十分な分散は実現できません。
&lt;/p&gt;

&lt;h3&gt;Primary Keyを用いないアクセス&lt;/h3&gt;
&lt;p&gt;
Primary Keyを用いない場合には、Scanという機能で総当たり処理が可能です。ただ、Scanは主キーを無視した完全な総当たり処理であり、原則として実運用に用いるべきものではないと考えます。Primary Key以外で検索を行う必要がある場合には、別のTableをインデックスとして作成するか、DynamoDB以外と組み合わせることを検討した方が良いと思います。
&lt;/p&gt;

&lt;h3&gt;Use it well&lt;/h3&gt;
&lt;p&gt;
DynamoDBは強い癖がありますが、うまく使えば非常に強力な道具になります。エンジニアの腕の見せ所ですね。
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/8792364979256294251/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2012/05/javadynamodb.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/8792364979256294251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/8792364979256294251'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2012/05/javadynamodb.html' title='Javaプログラマ的なDynamoDBの捉え方'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-6130143593734018397</id><published>2012-04-28T20:54:00.000+09:00</published><updated>2012-04-29T12:34:43.382+09:00</updated><title type='text'>AWS Java SDK用のGuice Provider</title><content type='html'>&lt;p&gt;
AWS Java SDKに含まれるクライアントはすべてThread-Safeであり、クライアントを再利用すべきです。もちろん自前でClientを保持するクラスを書いても良いのですが、GuiceによるDIを使っているのであればProviderを定義するのがオススメです。
&lt;/p&gt;

&lt;p&gt;AWS SDKはもともとインタフェイスが定義されているので、そのインタフェイスに対してGuiceのProviderを定義し、共有クライアントをProvider内で管理します。クライアントを使う部分では、下記のように注入するだけなので、コードの見通しが非常に良くなります。&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
@Inject
AmazonDynamoDBAsync client;

もしくは

@Inject
Provider&amp;lt;AmazonDynamoDBAsync&amp;gt; clientProvider;
&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;
Provider自体はすぐに書けるコードなのですが、再利用性が高そうなのでgithubで公開しました。
&lt;/p&gt;

&lt;p&gt;
参考URL
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tomohisaota/guice-aws&quot;&gt;github : guice-aws&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/6130143593734018397/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2012/04/aws-java-sdkguice-provider.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/6130143593734018397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/6130143593734018397'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2012/04/aws-java-sdkguice-provider.html' title='AWS Java SDK用のGuice Provider'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-5775057100996281670</id><published>2012-04-27T09:07:00.000+09:00</published><updated>2012-04-27T12:26:11.848+09:00</updated><title type='text'>Snowflake的なID生成方法</title><content type='html'>&lt;p&gt;
作っているプログラムでランダムなIDが必要となったため、ちょっとリサーチしました。久しぶりにJavaでコードを書いています。
&lt;/p&gt;

&lt;h3&gt;UUID&lt;/h3&gt;
&lt;p&gt;
完全に分散した環境で使用するのには、UUID(Universally Unique Identifier)が最適です。1IDあたり16バイトの容量が必要となる点をのぞけば、理想的なIDと言えると思います。ただIDは大量に使用されるので、16バイトというサイズはちょっと気になります。
&lt;/p&gt;

&lt;h3&gt;Snowflake&lt;/h3&gt;
&lt;p&gt;
SnowflakeはTwitterが使用しており、Apache Licenseで公開しているID生成方法です。ある程度分散した環境でも、1IDあたり8バイトの容量で利用できます。また非常に重要な特徴としてIDの先頭部分にタイムスタンプ利用しており、生成されたIDはある程度時系列に並びます。8バイト、つまり64bitを下記のように振り分けて使用します。
&lt;ul&gt;
&lt;li&gt;先頭42bitにタイムスタンプ(ms)を割り当て、時刻を分散&lt;/li&gt;
&lt;li&gt;10bitのマシンIDを割り当て、ID生成を行うマシンを分散
&lt;li&gt;12bitのシーケンスIDを割り当て、同一時刻(ms)、同一マシンでのIDを分散
&lt;/ul&gt;
タイムスタンプに42bitしか割り当てないのは心もとないですが、基準時刻をシフトさせることで利用できる期間をのばしています。
&lt;/p&gt;

参考&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/twitter/snowflake/blob/master/README.mkd&quot;&gt;github : Twitter Snowflake&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Snowflake的なID生成方法&lt;/h3&gt;
&lt;p&gt;
Snowflakeは魅力的なのですが、テスト環境等も含めてマシンIDを管理するのは意外に面倒です。ただ、この体系の本質的な特徴は「先頭にタイムスタンプを割り当てた分散ID生成」であり、このテクニックはいろいろ応用できそうです。&lt;/p&gt;

&lt;p&gt;
今回使用する構成ではAmazon DynamoDBでDHCPのようにworkerを管理することにしました。DynamoDBをアトミックカウンターとして使用するという超贅沢仕様で、ついでにidの取得時刻、開放時刻等も記録してみました。worker idが枯渇するリスクを下げるため、worker idは24時間に一度更新しています。

&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKFxMIIk0dij3GMEzOPHCnB9WdhVZlq3dYn6tTdxRD_Y1gh9dcWsSl8xKYV4NCTuRNSDfr63NJhO7UhyiYgmsg92Dt0NWTs4C7UEFIl-yiXov7-998mIGA_XXGGRP4C6kkyrxRLLiMxAvX/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-04-27+12.09.48.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;80&quot; width=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKFxMIIk0dij3GMEzOPHCnB9WdhVZlq3dYn6tTdxRD_Y1gh9dcWsSl8xKYV4NCTuRNSDfr63NJhO7UhyiYgmsg92Dt0NWTs4C7UEFIl-yiXov7-998mIGA_XXGGRP4C6kkyrxRLLiMxAvX/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-04-27+12.09.48.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/5775057100996281670/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2012/04/snowflakeid.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/5775057100996281670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/5775057100996281670'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2012/04/snowflakeid.html' title='Snowflake的なID生成方法'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKFxMIIk0dij3GMEzOPHCnB9WdhVZlq3dYn6tTdxRD_Y1gh9dcWsSl8xKYV4NCTuRNSDfr63NJhO7UhyiYgmsg92Dt0NWTs4C7UEFIl-yiXov7-998mIGA_XXGGRP4C6kkyrxRLLiMxAvX/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-04-27+12.09.48.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-3602934378164797322</id><published>2012-04-25T12:19:00.000+09:00</published><updated>2012-04-25T12:19:13.983+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="objectivec"/><title type='text'>@propertyとAutomatic Reference Counting (ARC)</title><content type='html'>&lt;p&gt;
Objective-Cは段階的に進化してきたため、ネットで情報を検索する際には対象としている世代に注意する必要があります。特に、ARC導入前後はかなり考え方が変わっているので、簡単にまとめてみました。
&lt;/p&gt;

&lt;h3&gt;共通の考え方&lt;/h3&gt;
&lt;p&gt;
オブジェクトには参照カウンタが存在し、参照カウンタが0になった時点でオブジェクトは解放されます。JavaのGCのように定期的にメモリ解放が行われるのではなく、カウントが0になった時点ですぐにメモリが解放されます。
&lt;/p&gt;

&lt;h3&gt;@property導入前&lt;/h3&gt;
&lt;p&gt;
Next STEP時代から続くメモリ管理手法で、参照カウンタはすべてプログラマが手動で管理します。retainで参照カウンタを増やし、releaseもしくはautoreleaseで参照カウンタを減らします。setterもプログラマが明示的に記述し、必要に応じてretain/releaseを行います。
&lt;/p&gt;

&lt;h3&gt;ARC導入前の@property (retain,assign世代)&lt;/h3&gt;
&lt;p&gt;
@propertyに「retain」を指定した状態で@synthesizeを利用してメソッドを生成すると、「setするオブジェクトをretainし、以前setされていたオブジェクトをreleaseする」という処理を自動的に生成してくれます。あくまでも「プログラマの代わりにsetterを書いてくれる」だけなので、@synthesizeされたsetter以外では効果がありません。
&lt;/p&gt;

&lt;h3&gt;ARC導入後の@property (strong,weak世代)&lt;/h3&gt;
&lt;p&gt;
Automatic Reference Countingの名が示す通り、retain/releaseはすべて自動的にコンパイラが生成します。逆に、プログラマは明示的にretain/releaseを行うことはできません。簡単に書くとポインタを強参照(strong)と弱参照(weak)で区別し、強参照が増える場合にはretain、減る場合にはreleaseがコンパイラによって挿入されます。@propetyのstrong,weakで、その変数を強参照にするか弱参照にするかを定義します。当然、@synthesizeされたsetter以外でも効果があります。
&lt;/p&gt;

&lt;h3&gt;ARCを使用するべきか？&lt;/h3&gt;
&lt;p&gt;
使わない理由はないと思います。&lt;br/&gt;
ARCはコンパイル時のオプションであり、プロジェクトの一部分だけにARCを使用することもできます。また、ターゲットがiOS4の場合でも使用可能です。(ただしiOS4ではweakポインタが使えないので、zeroingのない__unsafe_unretainedポインタを使用します。)
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/3602934378164797322/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2012/04/propertyautomatic-reference-counting.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/3602934378164797322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/3602934378164797322'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2012/04/propertyautomatic-reference-counting.html' title='@propertyとAutomatic Reference Counting (ARC)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-7772379474439876906</id><published>2012-04-25T09:10:00.001+09:00</published><updated>2012-04-25T09:10:50.884+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="objectivec"/><title type='text'>XCode4.3環境でCocoaPodsをインストール</title><content type='html'>&lt;p&gt;
&lt;a href=&quot;http://d.hatena.ne.jp/Watson/20111204/mac_dev_jp_advent_calendar_cocoapods01&quot;&gt;CocoaPods ではじめる Objective-C ライブラリ管理&lt;/a&gt;を参考にCocoaPodsをインストールしようとしたら、最初からハマりました...
&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;sudo gem install cocoapods
Building native extensions.  This could take a while...
ERROR:  Error installing cocoapods:
 ERROR: Failed to build gem native extension.

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
mkmf.rb can&#39;t find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h


Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/xcodeproj-0.1.0 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/xcodeproj-0.1.0/ext/xcodeproj/gem_make.out
&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;最初はmacrubyをインストールしてmacjemでも試したのですが、同じようなエラーでした。調べてみると、まずXCode4.3環境ではmacrubyは必要ないようです。さらに、XCode Command Line Toolを追加でインストールする必要があります。さっそくインストールして再度トライ！&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIMbtJdChFMzZ_RB_pyik-DCLYl8SKTcAxtkQAD-vhFYT593G32mHtkHbq2jGJ1eTjCT8kFSib1MPP4rP6tuRLcknc1pTtZNr-GGRlCUOZad4710CRsOFwzxbsU2yHnPLwzAmURu3Kk0jT/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-04-25+8.44.31.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;238&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIMbtJdChFMzZ_RB_pyik-DCLYl8SKTcAxtkQAD-vhFYT593G32mHtkHbq2jGJ1eTjCT8kFSib1MPP4rP6tuRLcknc1pTtZNr-GGRlCUOZad4710CRsOFwzxbsU2yHnPLwzAmURu3Kk0jT/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-04-25+8.44.31.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;pre&gt;
sudo gem install cocoapods
Password:
Building native extensions.  This could take a while...
[!] If this is your first time install of CocoaPods, or if you are upgrading, first run: $ pod setup
Successfully installed xcodeproj-0.1.0
Successfully installed cocoapods-0.5.1
2 gems installed
Installing ri documentation for xcodeproj-0.1.0...

No definition for generate_uuid

No definition for read_plist

No definition for write_plist
Installing ri documentation for cocoapods-0.5.1...
Installing RDoc documentation for xcodeproj-0.1.0...

No definition for generate_uuid

No definition for read_plist

No definition for write_plist
Installing RDoc documentation for cocoapods-0.5.1...
&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;今度は無事にインストールできました。XCode4.3環境の人は、「XCode上でCommand Line Tools」をインストールしてから「sudo gem install cocoapods」するだけなのでとってもお手軽です。&lt;/p&gt;

&lt;p&gt;
参考リンク&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/CocoaPods/CocoaPods/issues/192&quot;&gt;CoreFoundation is needed to build the Xcodeproj C extension&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/7772379474439876906/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2012/04/xcode43cocoapods.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/7772379474439876906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/7772379474439876906'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2012/04/xcode43cocoapods.html' title='XCode4.3環境でCocoaPodsをインストール'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIMbtJdChFMzZ_RB_pyik-DCLYl8SKTcAxtkQAD-vhFYT593G32mHtkHbq2jGJ1eTjCT8kFSib1MPP4rP6tuRLcknc1pTtZNr-GGRlCUOZad4710CRsOFwzxbsU2yHnPLwzAmURu3Kk0jT/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-04-25+8.44.31.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-8395028492565132027</id><published>2012-04-24T10:23:00.001+09:00</published><updated>2012-05-21T08:47:15.644+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="objectivec"/><title type='text'>DelegateをBlockを使って実装</title><content type='html'>&lt;p&gt;
iOS、というかCocoa Frameworkが利用しているdelegateは非常に便利なのですが、複数のDelegateに対応する場合コンポーネントに関する記述が分散して読みにくくなる面があると思います。
&lt;/p&gt;

&lt;p&gt;
iOS4からはBlockが利用できるので、delegateで実現されている一部の機能はBlockで記述した方が簡潔に記述できます。ちょっと調べてみると、やはりUIActionSheet等でdelegateを使うことに不満を持ち、サブクラスやカテゴリを利用してBlockに対応させている人も多いようです。
&lt;/p&gt;

&lt;p&gt;
調べている過程でBlockも@propertyに設定できることがわかったので、それを利用してDelegateをBlock対応にするクラスを書いてみました。このDelegateオブジェクトにプロトコルを中継させることで、呼び出し元からはBlockのみで記述できるようになります。Delegateは通常弱参照しかされないので、オブジェクトの参照管理には注意してください。
&lt;/p&gt;

&lt;p&gt;
具体的な実装例があった方がわかりやすいと思うので、UIImagePickerController用のコードを引用します。@property + @synthesizeを利用することで、かなり簡潔に記述できることがわかると思います。ダイアログ表示、通常処理、キャンセル処理が一カ所で記述できるので、非常に読みやすいコードになりました。
&lt;/p&gt;

&lt;p&gt;
2012/5/12 追記&lt;br/&gt;
Delegateを実装していない場合の挙動に影響を与えないように、Blockを設定しているかどうかをrespondsToSelectorで確認するようにしました。
&lt;/p&gt;

&lt;block&gt;
&lt;font size = -1&gt;
&lt;pre&gt;

#import &amp;lt;Foundation/Foundation.h&amp;gt;

@interface BTKUIImagePickerControllerDelegate : 
    NSObject&amp;lt;UIImagePickerControllerDelegate,UINavigationControllerDelegate&amp;gt;

//UIImagePickerControllerDelegate
@property(readwrite,copy) void (^didFinishPickingMediaWithInfo)(UIImagePickerController *,NSDictionary *);
@property(readwrite,copy) void (^imagePickerControllerDidCancel)(UIImagePickerController *);

//UINavigationControllerDelegate
@property(readwrite,copy) void (^willShowViewController)(UINavigationController *, UIViewController *,BOOL);
@property(readwrite,copy) void (^didShowViewController)(UINavigationController *, UIViewController *,BOOL) ;

@end


#import &quot;BTKUIImagePickerControllerDelegate.h&quot;

@implementation BTKUIImagePickerControllerDelegate

@synthesize didFinishPickingMediaWithInfo=_didFinishPickingMediaWithInfo;
@synthesize imagePickerControllerDidCancel=_imagePickerControllerDidCancel;

- (BOOL)respondsToSelector:(SEL)aSelector
{
    if(aSelector == @selector(imagePickerController:didFinishPickingMediaWithInfo:)){
        return self.didFinishPickingMediaWithInfo!=nil;
    }
    if(aSelector == @selector(imagePickerControllerDidCancel:)){
        return self.imagePickerControllerDidCancel!=nil;
    }
    if(aSelector == @selector(navigationController:willShowViewController:animated:)){
        return self.willShowViewController!=nil;
    }
    if(aSelector == @selector(navigationController:didShowViewController:animated:)){
        return self.didShowViewController!=nil;
    }
    return [super respondsToSelector:aSelector];
}

- (void)        imagePickerController:(UIImagePickerController *)picker 
        didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    self.didFinishPickingMediaWithInfo(picker,info);
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
{
    self.imagePickerControllerDidCancel(picker);
}

@synthesize willShowViewController=_willShowViewController;
@synthesize didShowViewController=_didShowViewController;

- (void)navigationController:(UINavigationController *)navigationController
      willShowViewController:(UIViewController *)viewController
                    animated:(BOOL)animated
{
    self.willShowViewController(navigationController,viewController,animated);
}

- (void)navigationController:(UINavigationController *)navigationController
       didShowViewController:(UIViewController *)viewController
                    animated:(BOOL)animated
{
    self.didShowViewController(navigationController,viewController,animated);
}

@end

&lt;/pre&gt;
&lt;/font&gt;
&lt;/block&gt;

&lt;p&gt;呼び出し元からは、下記のようにBlockを設定できます。（ARC使用）&lt;/p&gt;
&lt;block&gt;
&lt;pre&gt;
self.imagePickerDelegate = [[BTKUIImagePickerControllerDelegate alloc]init];
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self.imagePickerDelegate;

__weak BTKViewController* bself = self;       
imagePickerDelegate.imagePickerControllerDidCancel = 
        ^(UIImagePickerController *imagePicker){
            //Close Dialog
            [imagePicker dismissModalViewControllerAnimated:YES];
            
            //Cleanup
            bself.imagePickerDelegate = nil;
        };
&lt;/pre&gt;
&lt;/block&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/8395028492565132027/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2012/04/delegateblock.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/8395028492565132027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/8395028492565132027'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2012/04/delegateblock.html' title='DelegateをBlockを使って実装'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-7206075287888474597</id><published>2012-04-22T17:03:00.000+09:00</published><updated>2012-04-22T17:15:41.109+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="objectivec"/><title type='text'>MKUserLocationのcalloutを非表示にする</title><content type='html'>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5zDs1XQEO7Th45YFN8JT0AOzO3mEhVr2SjBXhmVwnjfLIwDgMDuzHTnh89FUFfcsl1ZuzHqbrCBTVZMYCWeOzuFd0b9aoSrqnPZtDiEuWPWkjI0uCzy6JwynFCdG7LV3WQS1JvlIf95am/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-04-22+17.12.27.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5zDs1XQEO7Th45YFN8JT0AOzO3mEhVr2SjBXhmVwnjfLIwDgMDuzHTnh89FUFfcsl1ZuzHqbrCBTVZMYCWeOzuFd0b9aoSrqnPZtDiEuWPWkjI0uCzy6JwynFCdG7LV3WQS1JvlIf95am/s200/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-04-22+17.12.27.png&quot; width=&quot;106&quot; /&gt;&lt;/a&gt;MKMapViewには現在地を表示する機能があります。現在地には見慣れた青丸のマーカーが自動的に表示され、タップすると「現在地」と表示されます。これは便利なんですが、マーカーが現在地というのは自明なので吹き出しは不要に思えます。そこで、この表示（callout)を消せないか調べてみました。
&lt;br /&gt;
MKMapViewでは、Mapに追加されたAnnotationを表示する際に、delegateのviewForAnnotationが呼び出されます。通常はここで対応するviewを生成し、calloutの設定も行うのですが、MKUserLocationではnilを返すことで標準のMKUserLocationViewが生成される仕組みになっています。
&lt;br /&gt;
そこで、MKUserLocationViewを自分で生成しようと思ったのですが、どうやらこのクラスは非公開のようです。とはいえ、実際にviewが生成されるのはこの関数の呼び戻し後なので、viewの設定を書き換えることはできません。
&lt;br /&gt;
そこで、このviewを返すタイミングでMKUserLocationのタイトルをnilに設定してみました。予想通りMKUserLocationViewはtitle属性をチェックしてcalloutの表示、非表示を決めているようで、タップに応答しなくなりました。&lt;br /&gt;
&lt;blockquote&gt;
&lt;pre&gt;- (MKAnnotationView *) mapView:(MKMapView *)targetMapView 
             viewForAnnotation:(id &lt;mkannotation&gt;) annotation
{
    if([annotation isKindOfClass:[MKUserLocation class]]){
        ((MKUserLocation *)annotation).title = nil;
    }
    return nil;
}
&lt;/mkannotation&gt;&lt;/pre&gt;
&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/7206075287888474597/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2012/04/mkuserlocationcallout.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/7206075287888474597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/7206075287888474597'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2012/04/mkuserlocationcallout.html' title='MKUserLocationのcalloutを非表示にする'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5zDs1XQEO7Th45YFN8JT0AOzO3mEhVr2SjBXhmVwnjfLIwDgMDuzHTnh89FUFfcsl1ZuzHqbrCBTVZMYCWeOzuFd0b9aoSrqnPZtDiEuWPWkjI0uCzy6JwynFCdG7LV3WQS1JvlIf95am/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-04-22+17.12.27.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-5624752463965509090</id><published>2012-04-22T12:56:00.000+09:00</published><updated>2012-04-22T12:56:02.214+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="objectivec iOS"/><title type='text'>Network Link Conditioner</title><content type='html'>&lt;p&gt;Appleの配布している「Network Link Conditioner」を利用すると、ネットワークの遅延、帯域等を自由に制限することができます。もちろんiOSシミュレータにも制限は適用されるので、より実機に近い環境での検証が可能になります。もっと早くこの存在を知りたかった...&lt;/p&gt;

&lt;p&gt;以前はXCodeと一緒に配布されていたようなのですが、今は追加ダウンロードになっています。XCode上でメニューからXcode &gt; Open Developer Tool &gt; More Developer Tools...を選択するとダウンロードページに飛ぶので、「Hardware IO Tools for Xcode」をダウンロードしてください。&lt;/p&gt;

参考&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/9659382/installing-apples-network-link-conditioner-tool&quot;&gt;stackoverflow : Installing Apples Network Link Conditioner Tool&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/5624752463965509090/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2012/04/network-link-conditioner.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/5624752463965509090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/5624752463965509090'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2012/04/network-link-conditioner.html' title='Network Link Conditioner'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-4099069534709364466</id><published>2012-04-21T23:13:00.001+09:00</published><updated>2012-04-22T17:10:44.398+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="objectivec"/><title type='text'>gcdタスクを途中で中断する</title><content type='html'>&lt;p&gt;iOS上で時間のかかる処理を実行する場合には、GCDを利用してバックグラウンド処理するのが効果的です。
ただ、GCDにはcancelの仕組みがないため、cancel方法は自分で実装する必要があります。&lt;/p&gt;

&lt;p&gt;良くあるのは、viewのdidChange系通知を使用する場合です。ユーザレスポンスを高めるためにはdidChangeにはすぐ応答したいですが、ユーザの操作によってはdidChangeは連続して送られてきます。使用されないデータを計算するのは時間的にも消費電力的にも無駄になるため、最後の一回だけを実行することが望ましいです。&lt;/p&gt;

&lt;p&gt;僕の場合には、下記のようなキャンセル状態を保存するクラスを作成し、それをGCDで実行するブロックに渡すようにしました。&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;
@interface Sample : NSObject
@property(readonly) BOOL isCanceled;
-(void)cancel;
@end

@implementation Sample
@synthesize isCanceled=_isCanceled;

-(void)cancel
{
　　@synchronized(self){
　　　　_isCanceled = true;
　　}
}
@end
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;新しくGCDに処理を投入する場合には、cancelFlagを生成してそれをブロックに渡します。もしすでに使用中のcancelFlagがある場合には、先にロックを取得した上でFlagをキャンセルしておきます。&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;
 -- ジョブは完了済みか、実行中 --
[cancelFlag cancel];
 -- ジョブは完了済みか、キャンセル済み --
cancelFlag = [[Sample alloc]init];
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;GCDで実行するブロックの中では処理の合間にcancelFlagを確認します。この際に必ずしもロックは必要ありませんが、処理を完了する時には必ずロックを取得することで、ジョブの二重実行をさけることができます。&lt;/p&gt;

参考&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/5449469/can-you-use-cancel-iscancelled-with-gcd-dispatch-async&quot;&gt;stack overflow : Can you use cancel/isCancelled with GCD/dispatch_async?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/4099069534709364466/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2012/04/gcd.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/4099069534709364466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/4099069534709364466'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2012/04/gcd.html' title='gcdタスクを途中で中断する'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-5134469009645967380</id><published>2012-03-16T09:14:00.000+09:00</published><updated>2012-03-16T09:15:52.561+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><title type='text'>AWSのエンドポイント</title><content type='html'>最新のエンドポイント一覧を探している場合にはこちら&lt;br /&gt;
&lt;a href=&quot;http://docs.amazonwebservices.com/general/latest/gr/rande.html&quot;&gt;Amazon Web Services Glossary : Regions and Endpoints&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
AWSの各リージョンは完全に独立しているため、各リージョンのendpointを設定して使用する必要があります。日本から利用する場合にはAsia Pacific (Tokyo)リージョンですね。&lt;br /&gt;
FQDNの命名規則が統一されていないので、必要に応じて上記Glossaryを確認することをお勧めします。</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/5134469009645967380/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2012/03/aws.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/5134469009645967380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/5134469009645967380'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2012/03/aws.html' title='AWSのエンドポイント'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-4036176820539228610</id><published>2011-09-24T23:30:00.000+09:00</published><updated>2011-09-25T10:04:40.013+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="was"/><title type='text'>Amazon Route 53でドメイン管理</title><content type='html'>EC2で遊ぶ際にドメインがないと不便なのでappbatake.comドメインを取得してみました。&lt;br /&gt;
現在はUnicode Charのプログラムを動作させています。&lt;br /&gt;
&amp;nbsp;&lt;a href=&quot;http://appbatake.com/unicodeinfo/&quot;&gt;http://appbatake.com/unicodeinfo/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;必要な情報はいろんな人がまとめているので、簡単な作業メモだけ書きます。&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;ドメインを取得する&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;Amazon Route 53はDNSサービスであり、ドメイン取得サービスではないため、ドメインは別サービスで取得、管理する必要があります。僕はお名前.comを使いました。&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;EC2のインスタンスを準備する&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;AWSのアカウントがない場合、まずAWSアカウントを取得します。&lt;/li&gt;
&lt;li&gt;テストに使うインスタンスがない場合、インスタンスを起動し、IPアドレスを確認します。&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;Amazon Route 53にサインアップする&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;Amazon Route 53にサインアップします。&lt;/li&gt;
&lt;li&gt;IAMでAmazon Route 53専用ユーザを作成します。&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;次のステップでSecret Keyを外部サイトに入力するため、Amazon Route 53の権限のみを与えたユーザを作成します。&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: &#39;Trebuchet MS&#39;, Tahoma, Verdana, Arial, sans-serif; font-size: 13px; line-height: 15px;&quot;&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;&lt;a href=&quot;https://nephelai.org/&quot;&gt;nephelai.org&lt;/a&gt;を使ってドメインの設定&lt;/span&gt;&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 19px;&quot;&gt;@レコードにEC2インスタンスのIPします。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 19px;&quot;&gt;Elastic IPやELBを使いたい場合には、そちらを設定してください。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;DNSを切り替える&lt;/span&gt;&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;ドメインに設定しているDNSをAmazonのDNSに切り替えます。&lt;/span&gt;&lt;/li&gt;
&lt;ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
空きのあるドメインを探すのが大変だったぐらいで、あとはさくさく進みました。やっぱりJava使うんだったらApp EngineよりもEC2の方が気楽ですね。</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/4036176820539228610/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2011/09/amazon-route-53.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/4036176820539228610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/4036176820539228610'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2011/09/amazon-route-53.html' title='Amazon Route 53でドメイン管理'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-4470732066227299770</id><published>2011-09-09T22:54:00.002+09:00</published><updated>2011-09-09T22:54:40.265+09:00</updated><title type='text'>Unicode Infoのページ（絵文字対応）</title><content type='html'>Unicode InfoをUnicode6対応にしてみました。&lt;br /&gt;
OS X Lionから入力する絵文字も正しく処理されます。&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Hiragino Kaku Gothic Pro&#39;; font-size: large;&quot;&gt;&lt;a href=&quot;http://easylater.blogspot.com/p/unicode-info.html&quot;&gt;Unicode Infoのページ&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
実装にはicu4j 4.8.1を使用しています。ver 4.6.1以降はUnicode 6対応です。&lt;br /&gt;
&lt;a href=&quot;http://site.icu-project.org/&quot;&gt;http://site.icu-project.org/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://site.icu-project.org/download&quot;&gt;http://site.icu-project.org/download&lt;/a&gt;&lt;br /&gt;
App Engineでも問題なく動作しました。</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/4470732066227299770/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2011/09/unicode-info.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/4470732066227299770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/4470732066227299770'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2011/09/unicode-info.html' title='Unicode Infoのページ（絵文字対応）'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-4174652101352892941</id><published>2011-09-08T09:25:00.000+09:00</published><updated>2011-09-08T09:25:21.841+09:00</updated><title type='text'>OS X Lionにおける絵文字の混乱</title><content type='html'>OS X Lionの絵文字はUnicode 6に追加されたコードを使っており、フォントとしてはApple Color Emoji.ttfがバンドルされています。ここまではシンプル。ただ、ふたを開けると大混乱です。&lt;br /&gt;
&lt;br /&gt;
一例として、絵文字の「☀」を取り上げます。
この文字はもともとUnicodeで定義されている「BLACK SUN WITH RAYS」という文字であり、Unicode6の絵文字としても従来の文字が採用されました。&lt;br /&gt;
&lt;br /&gt;
実際に文字パレットで確認すると、同じ「BLACK SUN WITH RAYS」が、絵文字と象形文字で異なる表示になっていることがわかります。この時点でUnicode的には微妙な気がします。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeZ57-GuU5ETV-4_ctao0Z-E9f0MjfqmJv3viwmQYZV6jzHo1acVRkZFhP2lt_INCSWRW0ZaUN7uICzYkHJAgiIMCuOZ26G8gF2zcAQfXfpyTMVT0KYLfRfCsUCeRJzFDVsjc8gDLLrUqw/s1600/BLACKSUNWITHRAYS1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;132&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeZ57-GuU5ETV-4_ctao0Z-E9f0MjfqmJv3viwmQYZV6jzHo1acVRkZFhP2lt_INCSWRW0ZaUN7uICzYkHJAgiIMCuOZ26G8gF2zcAQfXfpyTMVT0KYLfRfCsUCeRJzFDVsjc8gDLLrUqw/s320/BLACKSUNWITHRAYS1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif43wcUwpnL_Bp-jVTQ-Ev7NHW5YifM1f2LqHaX3dvO2YFVwY4cTS-DqIx5voj6b1GMOU9X7YlWCr7GD5UPwtlEXE2rG7Z2wHGeXhJ_M5eenz2chBNLPLDUjXm-itgB2l6eeTGR3CjR4OX/s1600/BLACKSUNWITHRAYS2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;132&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif43wcUwpnL_Bp-jVTQ-Ev7NHW5YifM1f2LqHaX3dvO2YFVwY4cTS-DqIx5voj6b1GMOU9X7YlWCr7GD5UPwtlEXE2rG7Z2wHGeXhJ_M5eenz2chBNLPLDUjXm-itgB2l6eeTGR3CjR4OX/s320/BLACKSUNWITHRAYS2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
さらに調べて行くと面白いことがわかりました。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKDBmXK58QW_w0eYW_qvVCoU6iWiBjNU9wj_qhUniG1wx8QKDI2nQMMoxQxgaH4BnxWH_YkXLwjkOeh6lV-bKKh5ssDvuccqZwEECMIX8LhIcf0euFl_YPxItEk1gzt2Io1YKrCSvb-Zu0/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2011-09-08+8.56.08.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;29&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKDBmXK58QW_w0eYW_qvVCoU6iWiBjNU9wj_qhUniG1wx8QKDI2nQMMoxQxgaH4BnxWH_YkXLwjkOeh6lV-bKKh5ssDvuccqZwEECMIX8LhIcf0euFl_YPxItEk1gzt2Io1YKrCSvb-Zu0/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2011-09-08+8.56.08.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
これはSafariの検索窓です。「SMILING FACE WITH OPEN MOUTH AND SMILING EYES」「BLACK SUN WITH RAYS」の順で入力すると普通に表示されます。&lt;br /&gt;
次に、この二文字をまとめてコピーし、ペーストしてもそのまま表示されます。しかし、「BLACK SUN WITH RAYS」だけをコピーしてペーストすると黒い文字になります。&lt;br /&gt;
&lt;br /&gt;
以下は僕の予想です。&lt;br /&gt;
Appleの文字表示ポリシーは「表示する」ことを重視しており、選択中のフォントで表示できない文字があると自動的に表示できるフォントに切り替わります。これは描画レイヤーに近い部分で行われており、フォント選択できない領域でも発生します。&lt;br /&gt;
「SMILING FACE WITH OPEN MOUTH AND SMILING EYES」は通常フォントにないためEMOJIフォントに切り替わり、絵文字に存在しない文字が現れるまで絵文字フォントが使用されます。&lt;br /&gt;
これで説明はつくのですが、かなり混沌としていますね。</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/4174652101352892941/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2011/09/os-x-lion.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/4174652101352892941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/4174652101352892941'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2011/09/os-x-lion.html' title='OS X Lionにおける絵文字の混乱'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeZ57-GuU5ETV-4_ctao0Z-E9f0MjfqmJv3viwmQYZV6jzHo1acVRkZFhP2lt_INCSWRW0ZaUN7uICzYkHJAgiIMCuOZ26G8gF2zcAQfXfpyTMVT0KYLfRfCsUCeRJzFDVsjc8gDLLrUqw/s72-c/BLACKSUNWITHRAYS1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-3596694670938188899</id><published>2011-09-08T06:34:00.000+09:00</published><updated>2011-09-08T06:34:01.727+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="guice"/><category scheme="http://www.blogger.com/atom/ns#" term="one-jar"/><title type='text'>Guice + One-Jar</title><content type='html'>最近はGoogle Guiceがマイブームです。&lt;br /&gt;
&lt;br /&gt;
One-JarからGuiceを使用する場合には、One-Jarのバージョンを0.98にした上で、META-INF/MANIFEST.MFに下記の記述が必要です。&lt;br /&gt;
&lt;blockquote&gt;
One-Jar-URL-Factory: com.simontuffs.onejar.JarClassLoader$OneJarURLFactory&lt;/blockquote&gt;
&lt;a href=&quot;http://one-jar.sourceforge.net/index.php?page=frameworks&amp;amp;file=frameworks&quot;&gt;One-Jar Frameworks&lt;/a&gt;

&lt;br /&gt;
&lt;br /&gt;
One-Jarの最新版は0.98 RC-2となっています。 ただ、&quot;release early, release often&quot;といいながら、2010/8/25以降変更がありません。&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;a href=&quot;http://one-jar.sourceforge.net/index.php?page=downloads&amp;amp;file=0.98_rcs&quot;&gt;One-Jar 0.98 Pre Release&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
One-Jarについて詳しくはこちら&lt;br /&gt;
&lt;a href=&quot;http://www.ibm.com/developerworks/jp/java/library/j-onejar/&quot;&gt;One-JARでアプリケーションの配布を単純化&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/3596694670938188899/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2011/09/guice-one-jar.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/3596694670938188899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/3596694670938188899'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2011/09/guice-one-jar.html' title='Guice + One-Jar'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-3413577301999446294</id><published>2011-07-20T09:36:00.004+09:00</published><updated>2011-07-20T16:40:02.026+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><title type='text'>AWS Tips : EBSのスナップショット</title><content type='html'>EC2上の外付けハードディスクにあたるEBSには、スナップショットという非常に便利な機能があります。この機能によりEBSの内容を瞬時にS3にバックアップしたり、バックアップから新しいEBSを作成したりできます。&lt;br /&gt;
&lt;br /&gt;
EBSはAvailability Zone内で冗長化されているのに対して、Snapshotが保存されるS3はリージョン内で冗長化されるため、より高い信頼性を得る事が出来ます。また、EBSにSnapshotを作成しておくことで、EBS自体の信頼性も高まるとのことです。&lt;br /&gt;
&lt;br /&gt;
ソース&amp;nbsp;&lt;a href=&quot;https://forums.aws.amazon.com/thread.jspa?threadID=37676&quot;&gt;https://forums.aws.amazon.com/thread.jspa?threadID=37676 &lt;/a&gt;&lt;br /&gt;
&lt;blockquote&gt;Taking EBS snapshots is not just for restoring in the event of an EBS failure. &amp;nbsp;It actually reduces the failure rate of the EBS volume itself as a failed block on the EBS volume will transparently fail through and be read from the EBS snapshot on S3.&amp;nbsp;&lt;/blockquote&gt;&lt;br /&gt;
「瞬時に」と書きましたが、スナップショットをとる瞬間は高速ですが、その後のS3への書き出しは非常に遅いです。今実行している800GBのスナップショット作成は24時間で60%程度しか進んでいません。ただ、S3書き出し中もEBSには通常通りアクセスできますし、データを修正してもスナップショットには影響ありません。&lt;br /&gt;
&lt;br /&gt;
ソース&amp;nbsp;&lt;a href=&quot;https://forums.aws.amazon.com/message.jspa?messageID=108982&quot;&gt;https://forums.aws.amazon.com/message.jspa?messageID=108982&lt;/a&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: verdana, arial, sans-serif; font-size: 12px; line-height: 18px;&quot;&gt;When your call to ec2-create-snapshot returns, any future writes to the volume will not be reflected in the snapshot.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;a href=&quot;http://easylater.blogspot.com/p/aws.html&quot;&gt;AWS関連まとめ&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/3413577301999446294/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2011/07/aws-tips-ebs.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/3413577301999446294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/3413577301999446294'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2011/07/aws-tips-ebs.html' title='AWS Tips : EBSのスナップショット'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-628709230000792196</id><published>2011-06-10T10:19:00.000+09:00</published><updated>2011-06-10T10:19:31.676+09:00</updated><title type='text'>ユニコードの文字コードを調べる（国際化ドメイン名）</title><content type='html'>&lt;div&gt;下記のURLの違いわかりますか？&lt;/div&gt;「&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;素朴な疑問&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;http://example.com&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;と&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;http://еxample.com&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;って表示がわかれるのかな？」&lt;/span&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 19px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 19px;&quot;&gt;&lt;div style=&quot;color: black; font-family: &#39;Hiragino Kaku Gothic Pro&#39;; font-size: medium; line-height: normal;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 19px;&quot;&gt;下記ページにコピーしてみると、実際のUnicodeでの表記がわかります。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: black; font-family: &#39;Hiragino Kaku Gothic Pro&#39;; font-size: medium; line-height: normal;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: black; font-family: &#39;Hiragino Kaku Gothic Pro&#39;; font-size: large; line-height: normal;&quot;&gt;&lt;a href=&quot;http://easylater.blogspot.com/p/unicode-info.html&quot;&gt;Unicode Infoのページ&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 19px;&quot;&gt;最初のURLはよく使われるサンプル。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 19px;&quot;&gt;二番目のものは&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;e(U+65)をキリル文字のе(U+435)に置換したものです。このような非ASCII文字を使ったドメイン名は国際化ドメイン名と呼ばれており、内部ではpunycodeと呼ばれるエンコードが行われています。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 19px;&quot;&gt;http://еxample.com&amp;nbsp;-&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;http://xn--xample-2of.com/&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 19px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 19px;&quot;&gt;迷惑メール等に含まれるURLはこのような偽装がされている可能性もあるため、原則として怪しいメールのリンクはクリックしない方が良いと思います。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 19px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 19px;&quot;&gt;2011/6/10時点で確認した範囲では、facebook、twitterはそのままURLを表示しますが、iphone上のTwitterアプリはpunycodeでの表示を行っていました。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #444444; font-family: Arial, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 19px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF1Ie4XY4d5vylsUir45oiFQoevAzjNfqZ1_yLluFvKfDAlLxQQyaELEcEUrkfIQr8V33_QMhdLRohdBMz3rl2mG7tQdehaHHLBljg_hfE4sfQwAFiJOxSE_rAuGzKRgbXfRcT5s0KbKuo/s1600/1yzrv.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF1Ie4XY4d5vylsUir45oiFQoevAzjNfqZ1_yLluFvKfDAlLxQQyaELEcEUrkfIQr8V33_QMhdLRohdBMz3rl2mG7tQdehaHHLBljg_hfE4sfQwAFiJOxSE_rAuGzKRgbXfRcT5s0KbKuo/s320/1yzrv.jpg&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/628709230000792196/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2011/06/blog-post_10.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/628709230000792196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/628709230000792196'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2011/06/blog-post_10.html' title='ユニコードの文字コードを調べる（国際化ドメイン名）'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF1Ie4XY4d5vylsUir45oiFQoevAzjNfqZ1_yLluFvKfDAlLxQQyaELEcEUrkfIQr8V33_QMhdLRohdBMz3rl2mG7tQdehaHHLBljg_hfE4sfQwAFiJOxSE_rAuGzKRgbXfRcT5s0KbKuo/s72-c/1yzrv.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-5283945140603484008</id><published>2011-06-06T23:35:00.000+09:00</published><updated>2011-06-06T23:35:48.579+09:00</updated><title type='text'>ユニコードの文字コードを調べる（絵文字）</title><content type='html'>GoogleとAppleが提唱したマッピングをもとに、携帯電話の絵文字がUnicode6に採用されました。Mac OSX Lionでは絵文字に対応するという噂もあり、絵文字はさけて通れない問題になりつつあります。&lt;br /&gt;
&lt;br /&gt;
Googleのemoji4unicodeプロジェクト&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/emoji4unicode/&quot;&gt;emoji4unicode&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Unicode6の正式規格&lt;br /&gt;
&lt;a href=&quot;http://unicode.org/Public/UNIDATA/EmojiSources.txt&quot;&gt;EmojiSources.txt&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
標準化により簡単に絵文字を使えると思いきや、Unicode6の定義は意外と曲者です。&lt;br /&gt;
Unicode6規格の問題は主に３点&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;ベンダ固有の記号が符号化されていない&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;ドコモロゴ等は符号化されていないため、独自にPUAに割り当てる必要があります。&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;合字の使用&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;一部の文字は単一のコードポイントではなく、複数のコードポイントによる合字で表現されています。&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;定義がShift JISベース&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;これに対して、emoji4unicodeに含まれるGoogleの定義は、すべての絵文字が定義されているだけでなく、それぞれに単一のコードポイントが割り当てられています。Unicode6という標準は魅力的ですが、内部コードとしてはGoogle PUAの方が向いているようです。&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/5283945140603484008/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2011/06/blog-post_06.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/5283945140603484008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/5283945140603484008'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2011/06/blog-post_06.html' title='ユニコードの文字コードを調べる（絵文字）'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-8156799266324211594</id><published>2011-05-29T11:24:00.003+09:00</published><updated>2011-06-15T13:17:36.166+09:00</updated><title type='text'>ユニコード文字のコードを調べる</title><content type='html'>追記&lt;br /&gt;
Wicket版をGWTで作り直してしまいました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wicket + Guiceの勉強をかねてユニコード検索ページを作ってみました。WicketでJavaScriptを１行も書かずにAJAXしてます。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://easylater.blogspot.com/p/unicode-info.html&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Unicode Infoのページ&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;開発環境&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;eclipse3.6&lt;/li&gt;
&lt;li&gt;Apache Maven 3.0.2&lt;/li&gt;
&lt;li&gt;Wicket 1.5 M3&lt;/li&gt;
&lt;li&gt;Guice 3.0&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;&lt;u&gt;&lt;br /&gt;
&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Wicket&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
Web用のフレームワークとしてはWicketを使用しています。&lt;br /&gt;
XML設定は最小限で、ほとんどがHTML+Javaで完結するのが非常に書きやすいです。Jettyと組み合わせるとさくさく開発が進められます。&lt;br /&gt;
WicketではAJAXもサーバサイドで書けるのですが、AJAXを使うと強制的にStatefulなページになってしまいます。回避する方法がないわけではないのですが、AJAXするならサーバ側Wicket、クライアントjQueryの方がわかりやすい気がします。&lt;br /&gt;
また、今回のテーマである「補助漢字」の扱いにバグがあるようで、そのまま出力すると文字化けしました。今回はユニコード実体参照に変換することで回避しています。&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;div&gt;&lt;b&gt;&lt;u&gt;&lt;br /&gt;
&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;実行環境&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
通常のServletとして作成したので、Amazon EC2のMicro Instance上にTomcat6をインストールして動作させています。本当はApp Engineで動かしたかったのですが、ちょっとハマったので断念しました。</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/8156799266324211594/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2011/05/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/8156799266324211594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/8156799266324211594'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2011/05/blog-post.html' title='ユニコード文字のコードを調べる'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-9150504884903540825</id><published>2011-05-11T10:18:00.000+09:00</published><updated>2011-05-11T10:18:30.806+09:00</updated><title type='text'>AWS Tips : availability zone割り当てはアカウントによって異なる</title><content type='html'>考えてみれば当たり前なのですが、AWSのavailability zoneに付いている名前は論理的なマッピングであり、物理的な割り当てはアカウントによって異なります。&lt;br /&gt;
availability zone間の通信は課金対象となるので、複数アカウントを使用する場合には注意が必要です。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://easylater.blogspot.com/p/aws.html&quot;&gt;AWS関連まとめ&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/9150504884903540825/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2011/05/aws-tips-availability-zone.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/9150504884903540825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/9150504884903540825'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2011/05/aws-tips-availability-zone.html' title='AWS Tips : availability zone割り当てはアカウントによって異なる'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6927926871289397366.post-8219621090094873806</id><published>2011-05-06T10:20:00.001+09:00</published><updated>2011-09-03T08:59:30.135+09:00</updated><title type='text'>MVN Tips : Maven + Eclipse</title><content type='html'>&lt;div&gt;
&lt;div&gt;
Mavenでビルド環境を構築しても、開発用のIDEは必要です。&lt;/div&gt;
&lt;div&gt;
IDEとしてeclipseを使用している場合には、m2eclipseによりmavenと統合して使用することができます。主な機能は下記のものです。&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;依存関係の管理&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Maven Dependencyという機能により、POMに記述した依存関係をそのままeclipseから使用できます。もちろん、UnitTestも可能です。&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;さらに、JavaDoc、Sourceのダウンロードも行えます。&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Workspace Resolutionという機能を使うと、依存関係に含まれるプロジェクトをeclipse上で開いている場合には、jar依存ではなく、プロジェクト依存として利用できます。&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Profileの適用&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;プロジェクトにactiveにするProfileを登録できます。Profileを適用した状態でプロジェクトが構築されるので、開発用の設定などを切り替えるのに便利です。&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;POMからeclipseプロジェクトの設定&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;POMの記述からEclipseのプロジェクト設定を更新できます。&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;WTP Integration&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Extraに含まれるWTP Integrationを使用すると、eclipse WTPプロジェクトをそのままMaven管理出来ます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
プラグインのダウンロードについてはこちらから。&lt;/div&gt;
&lt;div&gt;
m2eclipse&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://m2eclipse.sonatype.org/installing-m2eclipse.html&quot;&gt;http://eclipse.org/m2e/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
基本的には、下記をEclipse Update Sitesとして追加するだけです。&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, sans-serif; font-size: 12px; line-height: 16px;&quot;&gt;&lt;a href=&quot;http://download.eclipse.org/technology/m2e/releases&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #7036be; font-size: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none;&quot;&gt;http://download.eclipse.org/technology/m2e/releases&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
もともとはSonatypeとMavenプロジェクトの創始者であるJason van Zylが作った会社が開発していましたが、Eclipseに移管されました。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://easylater.blogspot.com/p/maven.html&quot;&gt;Maven関連まとめ&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://easylater.blogspot.com/feeds/8219621090094873806/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://easylater.blogspot.com/2011/05/mvn-tips-maven-eclipse.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/8219621090094873806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6927926871289397366/posts/default/8219621090094873806'/><link rel='alternate' type='text/html' href='http://easylater.blogspot.com/2011/05/mvn-tips-maven-eclipse.html' title='MVN Tips : Maven + Eclipse'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05704055583176068678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>