XCode 7を入れたらnode-gypが動かなくなった件

npmを実行すると以下のエラーを得る:

ld: library not found for -lgcc_s.10.5
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Release/.node] Error 1

gccなのでXCodeが関連している模様。
関連情報:

I got the same error here, a possible error after upgrading xcode version.
I fix it with a temp solution:
cd /usr/local/lib sudo ln -s ../../lib/libSystem.B.dylib libgcc_s.10.5.dylib

とりあえず以下で対処できるらしい:

cd /usr/local/lib;
sudo ln -s ../../lib/libSystem.B.dylib libgcc_s.10.5.dylib 

んーむ・・

AWSでiOS向けに動画を自前配信する方法

iOSではHLS(HTTPS Live Streaming)という規格に則らなければならない。
AWSのElastic Transcoderで変換できるようだ。
[HTML5] Amazon Elastic Transcoder で変換した HLS(HTTPライブストリーミング)形式の動画を video タグで再生する | Developers.IO
CloudFrontで配信して、videoタグでシンプルに表示できる。

PC向けもやる場合はRTMPでの配信が必要となる。
これもCloudFrontはプロトコルに対応している模様。
AWS S3 + CloudFront で動画ストリーム – Qiita

videoタグの記述例:

  <video width="320" height="240" preload="none" controls
     src="http://d18672pjq89e1s.cloudfront.net/hlsdemo/index.m3u8">
  </video>

  <video width="320" height="240" preload="none" controls>
     <source src="rtmp://s2ev6wge2z2w04.cloudfront.net/cfx/st/&mp4:PyConAPACTW2014terada.mp4” type='rtmp/mp4' />
     <source src="http://dgk03b4kg3q7d.cloudfront.net/ios/hls_400_.m3u8” type="application/x-mpegURL" />
  </video>

かかる費用の参考:

Caffe学習チューニングメモ: batch_size変更の注意点

GPUモードで動かすと、環境によってはout of memoryで怒られる場合がある。
その場合は train_val.prototxt ファイル内の batch_size を小さく変更する事で避けられる。
しかし、TRAINフェーズのbatch_size に合わせて solver.prototxt ファイル内の base_lr も小さくする必要がある。

base_lr: 0.01 * sqrt(X)
X: batch_size / 256

つまり、batch_sizeを64にしたなら、base_lrは:

base_lr = 0.01 * sqrt(64 / 256) = 0.005

闇すぎるよCaffeちゃん!

参考

ObjectMapper+RealmでTo-Many relationshipsを実装する方法

Person [1]-[0..*] Dog の関係を考える。

説明するよりコード見せたほうが早い:

import UIKit
import RealmSwift
import ObjectMapper

class Person: Object {
  dynamic var dogs = List<Dog>()
}

extension Person: Mappable {

  class func newInstance(map: Map) -> Mappable? {
    return Person()
  }

  func mapping(map: Map) {
    result <- (map["dogs"], ArrayTransform<Dog>())
  }

}

class Dog: Object {
  dynamic var name: String = ""
}

extension Dog: Mappable {

  class func newInstance(map: Map) -> Mappable? {
    return Dog()
  }

  func mapping(map: Map) {
    name <- map["name"]
  }

}

ArrayTransformこちらから拝借。作者に感謝!

// Based on Swift 1.2, ObjectMapper 0.15, RealmSwift 0.94.1
// Author: Timo Wälisch <timo@waelisch.de>

import UIKit
import RealmSwift
import ObjectMapper

class ArrayTransform<T:RealmSwift.Object where T:Mappable> : TransformType {
    typealias Object = List<T>
    typealias JSON = Array<AnyObject>

    func transformFromJSON(value: AnyObject?) -> List<T>? {
        var result = List<T>()
        if let tempArr = value as! Array<AnyObject>? {
            for entry in tempArr {
                let mapper = Mapper<T>()
                let model : T = mapper.map(entry)!
                result.append(model)
            }
        }
        return result
    }

    func transformToJSON(value: List<T>?) -> Array<AnyObject>? {
        if (value?.count > 0)
        {
            var result = Array<T>()
            for entry in value! {
                result.append(entry)
            }
            return result
        }
        return nil
    }
}

UIImageをaspect fill/fitでリサイズする方法

Appleのサンプルコードがそのまま使える(Objective-C):

上記をプロジェクトに追加して、ブリッジヘッダでインポートしておく。

使い方(Swift):

// Aspect fillでリサイズ
var imageResized = UIImage(image: image, scaledToFillToSize: CGSize(width: 300, height: 300))

// Aspect fitでリサイズ
var imageResized = UIImage(image: image, scaledToFitToSize: CGSize(width: 300, height: 300))

写真で好みを分析!らーめん屋推薦アプリ『麺利き』をリリースしました

Men-kiki-icon

App Storeでダウンロード

らーめんを愛するすべての人に捧ぐ!
ありそうでなかったらーめん屋推薦アプリです。
名前は『麺利き』。

写真で「こんな感じ!」が伝えられる新しい探し方

食べておいしかったらーめん、ありますよね。
その写真をアプリに入力してください。
すると、アプリが似た雰囲気のらーめんを出すラーメン屋を探します。

例えば、野菜たっぷりのらーめんを入力すると・・

iphone6-03

見事に二郎系のらーめん屋が提示されましたwww

ぜひ、みなさんのお気に入りらーめんで試してみてください。
きっといいお店が見つかりますよ!

開発には30万枚のらーめん画像を使用

開発には、最近何かと話題のディープラーニングという機械学習アルゴリズムの一つを使用しました。

推薦アルゴリズムのために、30万枚のらーめん画像を集めて学習させました。

つまり、このアプリは「らーめんとは何か」を理解しているのです!(どーん)

開発の裏話はまた別のエントリで書きますので、お楽しみに!!

App Storeでダウンロード

Deep Learningツール「Caffe」が簡単すぎる件

Deep Learning

最近はChainerとか出てますが、友人のススメでCaffeを使ってみました。

率直にいうと、「なにこれ、簡単すぎる!!」。
とにかく画像を放り込んでCaffeにもぐもぐさせるだけで、チューニングしなくてもそこそこの精度が出る。

ワタクシ、機械学習はツールの使い方を知っているだけで、理論の理解は概要レベルでド素人のミーハーです。
そんなぼくでも出来たんだから、未来は明るい。

インストールが面倒なだけ

コンパイルがね、躓くと泥沼です。
リンカエラー恐怖症になるかと思いました。

~~そんなのいつもやってる事なので、大したことではない。~~

データ集めるのが面倒なだけ

正解データを集めるのがね、面倒です。
どこからどれだけの量を取ってくるか、あるいは取ってこれるのかは、運です。

~~そんなのいつもやってる事なので、大したことではない。~~

チューニングが面倒なだけ

チューニングがね、ハードル高いです。
概要レベルのド素人では分からないので、このへんの資料を穴が空くほど読みましょう。

~~そんなのいつもやってる事なので、大したことではない。~~

計算量のハードルはかなり下がっている

Deep Learningと言えばGoogleさんがゴリゴリやってるイメージですよね。
じゃあ自分もやるためにはGoogle並の計算リソースが必要かといえば、そんなことありません。
ぼくらでも手元のPCですぐに始められます。

まず、nVidiaが提供するCUDAをインストールしておけば、ツールのフラグを立てるだけでGPUを利用できる。
これだけでCPUモードより数倍のスピードが出る。
データセットの量などにもよるけど、お試しニューロンならiMacで一晩寝かせるだけで作れる。

アイデア次第で充分面白いものが作れる

ツールやインフラは手元に揃っているので、あとはアイデア次第。

問題は、「何を分類させるか」だけです。
これはアプリ屋さんの得意分野のはず。

近いうちに、どんどん賢いアプリケーションが増えるでしょう。
スマホのカメラはますます大活躍、というわけだ。

とりあえずデータ集めをがんばろうと思います。