Hatena::ブログ(Diary)

Windchase

2008.11.27

LimeChatgithub の featured project に選ばれて1ヶ月に

LimeChat が、github の featured project に選ばれてから1ヶ月になりますが、まだ featured project のままのようです。

github の中の人が気に入ってくれたのかも知れません。

f:id:Psychs:20081127191108p:image:w400

github にログインしていない状態で、トップページに行くと確認できます。

2008.11.25

Wikiamo 1.5 リリース

iPhone 用の Wikipedia ビューア、Wikiamo 1.5 をリリースしました。

http://limechat.net/wikiamo/

今回は細かいバグの修正のみです。

2008.11.20

iPhone デバッグ用のマクロ

iPhone アプリをデバッグするときに、ソースに NSLog をそのまま書いてしまうと、リリース時に削除するのが面倒なので、以下のようなマクロを使っています。

#ifdef DEBUG
#  define LOG(...) NSLog(__VA_ARGS__)
#  define LOG_METHOD NSLog(@"%s", __func__)
#else
#  define LOG(...) ;
#  define LOG_METHOD ;
#endif

使い方は、まずプロジェクトの設定を開き、「Debug」構成を選択してから、一番下のユーザ定義カテゴリの「GCC_PREPROCESSOR_DEFINITIONS」に「DEBUG」を追加しておきます。

f:id:Psychs:20081121155659p:image:w353:h96

こうすることで、Debug build のときにだけ「DEBUG」が定義されます。

あとは、NSLog の代わりに LOG を使うようにすれば ok です。

LOG(@"initialized %@", obj);

また、LOG_METHOD と書くと、Debug build のときだけメソッド名をデバッグログに表示します。

- (void)applicationDidFinishLaunching:(UIApplication*)application
{
  LOG_METHOD;
}

出力:

-[AppController applicationWillFinishLaunching:]

追記 (2008/11/21)

SDK 2.2 向けに更新しました。

追記 (2009/4/23)

NSStringFromSelector(_cmd) ではなく、__func__ を利用するように変更しました。

2008.11.19

Wikiamo 1.4 リリース

iPhone 用の Wikipedia ビューア、Wikiamo 1.4 をリリースしました。

http://limechat.net/wikiamo/

要望が多かった機能を追加しました。

  • ランダムページとメインページへのリンクを追加
  • 記事の URL をメールで送るボタンを追加
  • シェイクするとランダムページを表示する設定を追加 (デフォルトはオフ)
  • 起動時に検索画面を表示する設定を追加
  • 画面サイズに合うように大きな画像のサイズを制限するようにした

2008.11.10

Wikiamo 1.3 リリース

iPhone 用の Wikipedia ビューア、Wikiamo 1.3 をリリースしました。

http://limechat.net/wikiamo/

検索できる言語を増やしたほか、他のアプリケーションから openURL で Wikiamo を起動できるようにしました。

ページを表示

wikiamo://en.wikipedia.org/wiki/{title}

検索画面を開く

wikiamo://en.wikipedia.org/search/{word}

アプリケーション開発者の方は、ぜひご活用ください。

2008.11.9

Lingr for iPhone 1.1 リリース

http://limechat.net/lingr/

  • 接続が切れにくくなるように HTTP タイムアウトを調整した
  • lingr://room_id でアプリケーションを起動できるようにした

2008.11.7

UIWebView の touch イベントをフックする方法

http://son-son.sakura.ne.jp/programming/iphone_sdk_hach_uiwebview_how.html

この方向でいろいろやってみたけど、やはりズームの挙動があやしくなってしまって、結局うまく動かなかった。

そこで、method swizzling でやってみたらうまくいったので、紹介しておきます。

http://github.com/psychs/iphone-samples/tree/master/WebViewTappingHack

@implementation UIView (__TapHook)

- (void)__touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
{
  [self __touchesEnded:touches withEvent:event];
  
  id webView = [[self superview] superview];
  if (touches.count > 1) {
    if ([webView respondsToSelector:@selector(fireZoomingEndedWithTouches:event:)]) {
      [webView fireZoomingEndedWithTouches:touches event:event];
    }
  }
  else {
    if ([webView respondsToSelector:@selector(fireTappedWithTouch:event:)]) {
      [webView fireTappedWithTouch:[touches anyObject] event:event];
    }
  }
}

@end

static BOOL hookInstalled = NO;

static void installHook()
{
  if (hookInstalled) return;
  
  hookInstalled = YES;
  
  Class klass = objc_getClass("UIWebDocumentView");
  Method targetMethod = class_getInstanceMethod(klass, @selector(touchesEnded:withEvent:));
  Method newMethod = class_getInstanceMethod(klass, @selector(__touchesEnded:withEvent:));
  method_exchangeImplementations(targetMethod, newMethod);
}

@implementation PSWebView

- (id)initWithCoder:(NSCoder*)coder
{
  if (self = [super initWithCoder:coder]) {
    installHook();
  }
  return self;
}

- (id)initWithFrame:(CGRect)frame
{
  if (self = [super initWithFrame:frame]) {
    installHook();
  }
  return self;
}

- (void)fireZoomingEndedWithTouches:(NSSet*)touches event:(UIEvent*)event
{
  if ([self.delegate
         respondsToSelector:@selector(webView:zoomingEndedWithTouches:event:)]) {
    [(NSObject*)self.delegate
       webView:self zoomingEndedWithTouches:touches event:event];
  }
}

- (void)fireTappedWithTouch:(UITouch*)touch event:(UIEvent*)event
{
  if ([self.delegate
         respondsToSelector:@selector(webView:tappedWithTouch:event:)]) {
    [(NSObject*)self.delegate
       webView:self tappedWithTouch:touch event:event];
  }
}

@end

追記 (2008/11/7)

実用時に必要なチェックを追加しました。

  • method swizzling が 1度しか行われないようにした
  • UIDocumentView の superview の superview が自前の WebView クラスであることを確認してからイベントを投げるようにした

2008.11.5

JTPA シリコンバレー・カンファレンス 2009 参加者募集のお知らせ

JTPA からお知らせがきたので、貼っておきます。

ぼくも、1ヶ月半くらい SF ベイエリアにいたことがあるんですが、しばらく向こうにいると、日本とはこんなに空気が違うもんなんだなと驚きました。

ひとことで言うと、pragmatic かつ creative。

その空気を体験することは、これから software developer として成果を出すために役立つと思います。

http://www.jtpa.org/event/svtour/000412.html

JTPA シリコンバレー・カンファレンス 2009 参加者募集のお知らせ

開催日 2009年3月21日(土)

JTPAシリコンバレー・カンファレンスに参加しよう!

[シリコンバレーの「空気」を体感しよう!]

「空気読め」という言葉が世にでてしばらくになります。

この言葉が多くの人の心をとらえ、流行語となり、さらには日本語のコアに定着しつつあるのはなぜでしょうか?

それはこの言葉が、日本社会の現実を正確に切り取っているからでしょう。

日本においては、「空気を読んで」行動することへのプレッシャーが高く、窮屈感がある反面、予定調和的な居心地の良さもあるでしょう。

ただ、日本の空気のみにどっぷりと浸かっていると実感しにくいけれど重要なことが一つあります。

「その空気はたったひとつの空気ではない。」という事実です。

シリコンバレーには日本とは全く違った空気が流れています。

GoogleやAppleを生み出す「空気」

自分を貫くライフスタイルを実現できる環境の「空気」

不況など関係なくイノベーションを生み出し続けるエコシステムの「空気」

JTPAでは、日本からシリコンバレーでのキャリアを目指す人たちに、まずはシリコンバレーの「空気」に触れてもらおうと、毎年シリコンバレー・ツアーを開催してきました。

[シリコンバレー・ツアーはシリコンバレー・カンファレンスとして生まれ変わります!]

「今年のツアーはどうしようか?」という話になったとき、話題に上がったのは、「ちかごろの若い人たちはすごい!」ということでした。

多くの参加者たちが、用意されたコースの前後にプラスアルファで自ら企画して、ツアーで知り合った仲間を巻き込み、自分たちが見たいものを見に行き、会いたい人に会いに行く。

そのうち、「もう私たちが手取り足取りする段階ではないのかもしれない」という方向に話が向かいました。

シリコンバレー・ツアーの存在をアンテナに引っかけ、それに反応し、応募してくる若者たちの意識は十分に高い。

彼ら彼女らの意識の高さと行動力に、シリコンバレー・ツアーを委ねてみてはどうだろうか?

私たちは、ツアーの核となるきっかけだけを提供して、核の周りに結晶が成長するように参加者の自助努力にまかせる、そんな実験的試みもシリコンバレーらしいかもしれない。

そんなわけで、今年、JTPAは「シリコンバレー・ツアー」ならぬ「シリコンバレー・カンファレンス」を開催します。

あなたもその盛り上がりの中に巻き込まれてみませんか?

プログラム概要

講演

シリコンバレーで活躍するビジョナリーによる講演。

梅田 望夫 - MUSE Associates

大澤 弘治 - Global Catalyst Partners

金島 秀人 - Bio-Xcelerator, Inc

渡辺 千賀 - Blueshift Global Partners

海部 美知 - ENOTECH Consulting

パネル・ディスカッション

シリコンバレーの企業で活躍する技術者や起業家、大学で学ぶ留学生や研究者などによるパネルディスカッション。

就職・転職・職場関係などのキャリアライフ、ビザ・グリーンカードなどの移民手続き、生活のセットアップや日々の暮らし、などなど

実体験を交えてシリコンバレーでのキャリア構築のヒントを参加者と共有します。

募集内容

参加費

社会人: 200 USD, 学生: 150 USD

早期申込み割引(アーリーバード): 社会人: 150 USD, 学生: 100 USD

募集期間

11月15日から12月15日 (アメリカ西海岸時間)

アーリーバード割引期間 11月15日から11月22日

募集人数

先着200名

応募方法

JTPA ウェブよりご案内いたします。

ご興味のある方は、JTPA のメーリングリストに登録しておいていただければメールでご連絡します。

ご登録は下記のリンクからどうぞ。

http://three.pairlist.net/mailman/listinfo/jtpa-list

JTPA ボランティアスタッフ一同、皆様の応募をお待ちしております。