ここ数日Swiftを触ってみた印象など、良くなることを願いつつ雑にメモしておきます。 Xcode6.1の頃の話です。
代数的データ構造を彷彿とさせる魔改造を施されたenumですが、再帰的データ構造が出来そうで出来ないのでガッカリ感が有ります。
webrtcのObj-Cポーティングもそろそろ落ち着いてきた(?)頃合いなので、iOSの実機にWebRTCを組み込んでみます。 本記事中でSVNのバージョンは http://webrtc.googlecode.com/svn/trunk のr7864を使用しています。
この記事でも書きましたが、webrtcのiOSビルドは、 How to get started with WebRTC and iOS without wasting 10 hours of your life ↑この記事が親切かつ、まめにアップデートされているのでオススメです。
大枠としてのUXは画面上の表現に留まらずビジネスデザインと直結するものであるため、UIがUXの全てであるという認識は完全に間違っていますが、一方で目的のUXを極力妨げないようにUIを詰める作業に関しては両者は狭い問題領域で密結合しています。
特にデザインとコーディングが分業している場合、そうした細部の詰めを全て仕様として言語化するのは無理があります。ここで開発サイドが主体的に働きかけずに仕様を満たす事だけに専念してしまうと、結果そこが空白地帯になってしまい、全体としては雑な印象の残念なプロダクトになってしまいかねません。
というわけで、とりあえずここの辺りの一種の職人的な領域について、個人的に気をつけていることをメモっておきます。全体的にモバイルアプリ/ハイブリッドWeb寄りで、多くは既に言われていることの焼き直しかもしれませんが、自分の言葉でも書いてみます。
基本的な方針は3つです。
[追記 2014/10/11]
既にこの記事の内容は古くなってしまったため、ヘッダサイズの値はより詳しい次の方のポストを参照してください。
iOSの通信をWireSharkでみる時の話: http://parochially.hatenablog.com/entry/2014/06/07/182217
またパース出来なくなったらペイロード冒頭のff ff ff ff ff ff
の手前までをHeader Sizeにするとうまくいくかもしれません
iOS実機のネットワーク解析にはrvictlとWiresharkを組み合わせると非常に便利なのですが、 久しぶりに使ってみようとしたらMavericksではrvictlの仕様が変わってしまった事情で、 単にインタフェースを開くだけではパケットがパース出来なくなってしまったようです。
#import <AVFoundation/AVFoundation.h> | |
#import "RTCEAGLVideoView.h" | |
#import "RTCMediaStream.h" | |
#import "RTCPeerConnectionFactory.h" | |
#import "RTCMediaConstraints.h" | |
#import "RTCPeerConnection.h" | |
#import "RTCPair.h" | |
#import "RTCVideoCapturer.h" | |
#import "RTCVideoTrack.h" |
#import "AppDelegate.h" | |
#import <dlfcn.h> | |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { | |
void *lib = dlopen("/System/Library/PrivateFrameworks/OpenCL.framework/OpenCL", RTLD_LAZY); | |
printf("%p\n", lib); | |
return YES; | |
} |
#ifndef unlikely | |
# ifdef __builtin_expect | |
# define unlikely(x) __builtin_expect((x), 0) | |
# else | |
# define unlikely(x) (x) | |
# endif | |
#endif | |
#define ERROR(fmt, ...) do { \ | |
fprintf(stderr, "\x1b[1;31mERROR:%s:%s:%d: " fmt "\x1b[0m", __BASE_FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__); \ |