Skip to content

Instantly share code, notes, and snippets.

View ykst's full-sized avatar

YUKISHITA Yohsuke ykst

  • Mount Fuji, Japan
View GitHub Profile
@ykst
ykst / gist:e2123636203d5b26fd11
Created January 28, 2015 14:06
Swiftで気になった所

Swiftで気になった所

ここ数日Swiftを触ってみた印象など、良くなることを願いつつ雑にメモしておきます。 Xcode6.1の頃の話です。

微妙だったところ

enumが再帰出来ない

代数的データ構造を彷彿とさせる魔改造を施されたenumですが、再帰的データ構造が出来そうで出来ないのでガッカリ感が有ります。

@ykst
ykst / gist:d54cd1f40e93087646be
Created January 28, 2015 14:05
iOSでWebRTCアプリを作ってみる (組み込み編)

iOSでWebRTCアプリを作ってみる (組み込み編)

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 ↑この記事が親切かつ、まめにアップデートされているのでオススメです。

@ykst
ykst / gist:c1b38bbea93df28da3ed
Created January 28, 2015 14:05
iOSでもOpenCLを使えるか調べてみた

iOSでもOpenCLを使えるか調べてみた

いつまで経ってもPrivate Frameworksに引き蘢っているiOSのOpenCL APIは果たして本当に使えるのか? というわけでアプリから引き摺り出してみます。Jailbreakはしません。

とりあえずdlopen(3)してみる

Private Frameworksは基本的にSDK配下のものと同じパスでランタイムにdlopen(3)する事が出来るので、実機で開いてみます。

#import "AppDelegate.h"
@ykst
ykst / gist:4930d8fef81edfee8349
Created January 28, 2015 14:04
いつものASSERTマクロ

いつものASSERTマクロ

gccな環境でいつも使ってるASSERTマクロ。printfが頼みの組み込みな環境で特に威力を発揮します。

#ifndef unlikely
# ifdef __builtin_expect
# define unlikely(x) __builtin_expect((x), 0)
# else
# define unlikely(x) (x)
# endif
@ykst
ykst / gist:f8f24f1ed313cacf9c86
Created January 28, 2015 14:02
UXを損なわないUIについて個人的に気をつけていること

UXを損なわないUIについて個人的に気をつけていること

仕様外のUXの改善は開発サイドが攻めなければ放置される

大枠としてのUXは画面上の表現に留まらずビジネスデザインと直結するものであるため、UIがUXの全てであるという認識は完全に間違っていますが、一方で目的のUXを極力妨げないようにUIを詰める作業に関しては両者は狭い問題領域で密結合しています。

特にデザインとコーディングが分業している場合、そうした細部の詰めを全て仕様として言語化するのは無理があります。ここで開発サイドが主体的に働きかけずに仕様を満たす事だけに専念してしまうと、結果そこが空白地帯になってしまい、全体としては雑な印象の残念なプロダクトになってしまいかねません。

というわけで、とりあえずここの辺りの一種の職人的な領域について、個人的に気をつけていることをメモっておきます。全体的にモバイルアプリ/ハイブリッドWeb寄りで、多くは既に言われていることの焼き直しかもしれませんが、自分の言葉でも書いてみます。

基本的な方針は3つです。

@ykst
ykst / gist:6e80e3566bd6b9d63d19
Last active May 5, 2024 03:40
WebAudio+WebSocketでブラウザへの音声リアルタイムストリーミングを実装する

WebAudio+WebSocketでブラウザへの音声リアルタイムストリーミングを実装する

WebRTCでやれよ!と言われそうなところですが、 WebSocket+WebAudioの組み合わせで音声ストリーミングをシンプルに構成する方法を紹介してみます。

サーバーサイド(Node.js + ws + pcm)

サーバーサイドは何でも良いのですが、 とりあえずNode.jsでtest.mp3というサンプルファイルをpcmモジュールでデコードし、 wsでクライアントに垂れ流す作りにしておきます。

@ykst
ykst / gist:82359e34becde54fee40
Created January 28, 2015 14:01
MavericksのWiresharkでiOSデバイスのパケットキャプチャを行う

MavericksのWiresharkでiOSデバイスのパケットキャプチャを行う

[追記 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の仕様が変わってしまった事情で、 単にインタフェースを開くだけではパケットがパース出来なくなってしまったようです。

@ykst
ykst / ViewController.m
Last active August 29, 2015 14:11
iOSでWebRTCアプリを作ってみる (組み込み編) ref: http://qiita.com/ykst/items/fa1968b9a886d1505d61
#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"
@ykst
ykst / AppDelegate.m
Created December 7, 2014 14:42
iOSでもOpenCLを使えるか調べてみた ref: http://qiita.com/ykst/items/342685c50336a2894ff2
#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;
}
@ykst
ykst / file0.c
Created November 21, 2014 17:13
いつものASSERTマクロ ref: http://qiita.com/ykst/items/f368e6ec8d0160b19ba8
#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__); \