at iPhoneOS 3.1.2

shouldAutorotateToInterfaceOrientationじゃなくて任意のタイミングで roateする方法を探していたんだけど、見かけるのはUIViewのtransformでrotateすることばかり。確かめてないけど。この方法だとUIViewControllerのinterfaceOrientationと齟齬も発生するじゃないかと思う。

それで無理くり何とかする方法を考案した。けど、この方法では(もう少し改善すればできるかもしれないが)重力方向への回転しかできない。 shouldAutorotateToInterfaceOrientation:を使ってrotateすのはいつもとどおり。だけど先に方向を決めておいてNSNotificationを投げて強制的にshouldAutorotateToInterfaceOrientation:を発生させることによって 任意のタイミングでviewを回転させる事ができる。

   1  - (void)rotateNow{
   2    UIDevice *device = [UIDevice currentDevice];
   3    self.toRotate = device.orientation;
   4    NSNotification *notification = [NSNotification notificationWithName:@"UIDeviceOrientationDidChangeNotification" object:device];
   5    [[NSNotificationCenter defaultCenter] postNotification:notification];
   6  }
   7  
   8  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
   9    if(self.toRotate){
  10      return interfaceOrient == self.toRotate;
  11    }else{
  12      return NO;
  13    }
  14  }

こんな感じ。何をしたかったかと言うと向きが変わったときにいきなり回転させるんじゃなくて、ちょっとボタンをだして確認を取りたかった。だからタイミングだけずらして回転方向は重力方向だけでいいやって話しなんだけど。

もしかすると、このNSNotificationを作ってる部分でobject:deviceってUIDeviceを渡してる部分。このオブジェクトのプロパティorientationを任意の方向を返す様なオブジェクトを作ってViewControllerを更に騙すことができるならば、タイミングだけじゃなくて方向も変えれるんじゃないかな?そこまでは確認を取ってません。

まぁ何にせよ。かなりhackな方法だからOSのバージョン上がったら使えなくなるかもしれない。

posted by Png bopper on Sun 31 Jan 2010 at 14:02

ちょっとレンダリング結果を動画にして確認したい場合に、.txt形式で出力してconvert (ImageMagick)すると便利です。

   1  /*
   2   * Output image
   3   */
   4  std::vector<unsigned char> buf(3*width*height);
   5  glFlush();
   6  glReadBuffer(GL_BACK);       
   7  glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
   8  glReadPixels(0, 0, width, height,
   9      GL_RGB, GL_UNSIGNED_BYTE, &buf[0]);
  10      
  11  char filename[1024];
  12  sprintf(filename, "%s_%04d.txt", basename, frame);
  13  FILE *fp = fopen(filename, "w");
  14  fprintf(fp,
  15      "# ImageMagick pixel enumeration: %d,%d,%d,rgb\n",
  16      width, height, 255);
  17  for(int y = 0; y < host->height; ++y){
  18      for(int x = 0; x < host->width; ++x){
  19          int idx = (host->height - y - 1)*host->width + x;
  20          fprintf(fp, "%d,%d: (%d,%d,%d)\n",
  21              x, y, 
  22              buf[3*idx + 0],
  23              buf[3*idx + 1],
  24              buf[3*idx + 2]);
  25      } 
  26  }
  27  fclose(fp);

出来上がったら、

   1  % convert basename_*.txt basename.mp4

posted by Png genki on Sat 30 Jan 2010 at 15:13

fltkもGLUTも気がつけばFATになっていっている気がします。

  • FrameBufferにpixelsをput出来る
  • 最低限のマウス、キーボードからの入力をさばける
  • Windowは1個. resizeとかは不要

だいたいこのぐらいで十分なので、

  • 外部ライブラリに依存しない
  • OS/アーキテクチャに依存せず 32bit/64bit で動く
  • 初心を忘れない鉄の意志でメンテナンスされている

GUI toolkitが欲しいです。無かったら作ろうかな。

posted by Png genki on Sat 30 Jan 2010 at 06:17

Widnowsの時代にはBSoD (Blue Screen of Death) というのがありましたが、 Macの場合は画面がグレーアウトするので、Gray Screen of Deathと呼んでるみたいです。

uncluttered_panic.jpg

悲しいです。

最近GSoDが頻発するのですが、Geniusバーに持っていっても原因不明。いっそ綺麗に壊れてくれれば交換してくれるんですけどね。 道具として使い物になるかならないかギリギリのところ。

posted by Png genki on Fri 29 Jan 2010 at 03:02

iPadのCPUはApple独自開発のA4というものでした。Qualcomm Snapdragonだと思っていたので意外。A4についてちょっと調べてみました。

  • GPUの機能などを集約したSystem on chip構成
  • 1GHz
  • GPU部分はPowerVR SGX series 5 core の可能性が高い
  • OpenGL ES 2.x, OpenGL 3.2, OpenCL 1.0が走る

See Also

posted by Png genki on Thu 28 Jan 2010 at 02:11 with 2 comments

優れた点もいっぱいありますが、欠点を並べてみます。

CUDA

  • NVidia依存
  • 1回のkernel実行で同一テクスチャへのread/writeができない

OpenCL

  • まだバグが多い
  • 1回のkernel実行で同一imageオブジェクトへのread/writeができない(少なくともversion 1.0では)

GLSL

  • 実装がWindow systemに依存している。アプリケーションの起動にXが必要になるなど。

GLSLはレンダーターゲットテクスチャを使うことで同一テクスチャへの読み書きができるのが便利。これはテクスチャへの書き込み位置をVertexシェーダを通して指定する必要があるという制約とのトレードオフ。CUDA/OpenCLのようにテクスチャ書き込みにランダムアクセスを許す仕様では実装の困難度が高いので、まだ実現出来ていない。OpenCLの仕様では、__read_write が予約されているので、将来はサポートされるかもしれない。

posted by Png genki on Mon 25 Jan 2010 at 07:15

ABMultiValueCopyValueAtIndexの二つ目にいつもidentfierを渡したんですが、バグてました。メモメモ。
ABMultiValueGetIndexForIdentifierでidentifierをindexに直してやる必要があります。

   1  - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
   2  
   3    CFTypeRef list;
   4    CFIndex index;
   5    CFStringRef email;
   6  
   7    list = ABRecordCopyValue(person, property);
   8    index = ABMultiValueGetIndexForIdentifier(list,  identifier);
   9    email = ABMultiValueCopyValueAtIndex(list, index);
  10    (中略)
  11  
  12    CFRelease(email);
  13    CFRelease(list);
via http://stackoverflow.com/questions/1875135/get-email-address-from-iphone-address-book

posted by Png satoko on Fri 22 Jan 2010 at 16:14

もう何日も悩んだので、メモしておきます。
読み方から勉強しましたです。

MacとWindowsで見え方が異なる

「~」と「〜」。同じに見えるだろうか。Macからは同じに見えるが、Windowsからは違って見えるかもしれない。前者のは全角チルダ、後者は波ダッシュ、Unicodeでは異なる文字として扱われている。

Macの"Mail" 「波ダッシュ」への対応(その1 背景)
http://toshiohattori.blogspot.com/2009/10/macmail-1.html

その他の参考:その他の「Macの"Mail" 「波ダッシュ」への対応」
その2
その3
その4

wikipedia 全角チルダの項

Unicodeは下記:

0x301C 波ダッシュ wave dash
0xFF5E 全角チルダ fullwidth tilde

via http://ja.wikipedia.org/wiki/%E3%83%81%E3%83%AB%E3%83%80#.E5.85.A8.E8.A7.92.E3.83.81.E3.83.AB.E3.83.80

10進、16進、HTML内での表記

波ダッシュ「〜」
&#12316; (10進表記)
&#x301C; (16進表記)

全角チルダ「~」
&#65374; (10進表記)
&#xFF5E; (16進表記)

via http://blog.magical-remix.net/cssclips/archives/86

Unicode版 文字コード表

http://www.m-hoz.com/jsp/unicode.jsp?Bgn=0&End=65536

文字コード:ISO-2022-JP

charset=ISO-2022-JP
半角カナを除くJISコードの日本語文字セット
実際には、半角カナが入っている場合もある
http://ash.jp/code/code.htm

RubyでUnicodeから文字を得る方法

   1  [0x3000].pack("U")
via http://blog.s21g.com/articles/1454

posted by Png satoko on Fri 22 Jan 2010 at 08:58

めもめも。

MacPortsでステキなUNIXツールをインストール
http://d.hatena.ne.jp/hakobe932/20061208/1165646618

portを最新に+ソフトウェア一覧を更新。

   1  sudo port -d selfupdate
   2  sudo port -d sync

一覧

   1  port installed

インストール

   1  sudo port -v install php5 +apache2
via http://javaflavor.cocolog-nifty.com/blog/2007/07/macportsapache2_43a4.html

*「ruby +mactk」と「ruby +mactk +thread_hooks」は別物として認識されるので、「ruby +mactk」をインストールした後に「thread_hooks」を追加する場合、「ruby +mactk」をアンインストールまたは無効化する必要がある。
http://oamaxa2.u-abel.net/wordpress/?p=30

posted by Png satoko on Fri 22 Jan 2010 at 06:16

opencolladaはsconsで以下のオプションでbuildする。

   1  scons RELEASE=1 PCRENATIVE=0 XMLPARSER=expat NOVALIDATION=1

posted by Png genki on Thu 21 Jan 2010 at 04:07