木曜日, 1月 22, 2015

CarthageでGPUImageをSwiftから使う

CarthageでGPUImageをSwiftから使う

XCodeで何かを作ろうとした場合、標準のframework以外のフレームワークを導入したくなります。
Objective-Cな時代にはCocoaPodsを使うのが定石だったようですが、Swift時代にはどうしたらよいのか、調べていたところCarthage(カルタゴ)というものが存在している事を知りました。

https://github.com/Carthage/Carthage

備忘録代わりに、Carthageを使ってGPUImageを使ったアプリケーションを作成してみます。Carthageの使い方の説明を主とするため、アプリケーション自体は、GPUImageのSimpleSwiftVideoFilterExampleをそのまま用います。

https://github.com/BradLarson/GPUImage/tree/master/examples/iOS/SimpleSwiftVideoFilterExample

0. 前提

この記事はYosemite 10.10.1、XCode 6.1.1の環境で確認しています。
Carthageは0.4.0を使いました。
実機確認する場合、実機とiOS Developer Programへの登録が必要となります。

1. Carthageのインストール

CarthageのREADME.mdを読めば分かりますが、pkgファイル、Homebrew、makeの3通りの方法でインストール出来ます。
私はHomebrewでbrew install carthageしました。
2015-01-19時点で、Homebrew経由でインストールされるのは0.4.0でした。
pkg版は0.5.2まで上がっており、いろいろ機能が追加されているようですが、今回の場合は0.4.0の機能でも問題ありません。

2. XCodeプロジェクトを作る

ベースとなるXCodeプロジェクトを作ります。
XCodeを開き、”File -> New -> Project…”を選択し、”iOS -> SingleView Application”を選んで、Nextを押します。
次の画面でLanguageにSwiftを、DevicesにiPhoneを選びます。
他の項目は適当に入力してください。
Nextを押すと、プロジェクトの保存場所を選択すると、新しいプロジェクトが作られ、XCodeに表示されます。

3. Cartfileの作成

Cartfileを作成します。Cartfileは利用したいframeworkを記述したファイルです。npmのpackage.json、mvnのpomです。

作成したプロジェクトのディレクトリの*.xcodeprojと同じ階層に、Cartfileという名前のテキストファイルを作成し、以下のように記述します。

git "https://github.com/BradLarson/GPUImage.git" == 0.1.6

==の部分には他にも~>>=が使えます。バージョンはsemverで解決されるそうです。
対象となるリポジトリがgithubの場合、以下のような指定も出来ます。

github "BradLarson/GPUImage" == 0.1.6

4. 外部フレームワークのビルド

ターミナルで、プロジェクトのディレクトリに移動します。
その位置でcarthage updateを実行すると、対象のgitリポジトリからソースコードがプロジェクトディレクトリ下の”Carthage/Checkouts/”以下にコピーされます。
その後、ビルドが実行され、生成物がプロジェクトディレクトリ下の”Carthage/Build”以下に出力されます。

5. 外部フレームワークをプロジェクトに追加

XCodeのプロジェクトのTARGETSのGeneralタブにある、”Linked frameworks and Libraries”に、”Carthage/Build/iOS/GPUImage.framework”をドラッグアンドドロップします。

次にBuild Phasesタブの左上にある”+”を押し、”New Run Script Phase”を選びます。
Shell欄の下の”Type a Script or …”と書いてある欄に、/usr/local/bin/carthage copy-frameworksと入力し、”Input Files”に$(SRCROOT)/Carthage/Build/iOS/GPUImage.frameworkと入力します。

ここまででCarthageを使って、frameworkを導入するという作業は終わりました。後はコードを書いていくだけです。

6. コードを書く

ここからはCarthageとは関係なく、GPUImageViewの使い方になります。
最初にMain.storyboardを開き、ViewのCustom ClassをGPUImageViewに変更します。

次にViewController.swiftの内容を、SimpleSwiftVideoFilterExampleのそれと同じにします。

https://raw.githubusercontent.com/BradLarson/GPUImage/master/examples/iOS/SimpleSwiftVideoFilterExample/SimpleSwiftVideoFilterExample/ViewController.swift

7. 実行する

iPhoneに転送して実行してみましょう。

8. 感想

他言語における依存性解決ツールに比べると、やっていることは単純ですが、XCodeというGUIが大前提のツールと共存させようとすると、これが正解な気がします。
CocoaPodsとは違い、ソースのダウンロードとビルド以上の事は一切行わないところも、個人的には好感が持てます。
Bridging Headerもいらないので、これからは積極的に使っていき、かつ自分でライブラリを書くときも、*.frameworkを吐くように作ろうと思います。

水曜日, 12月 24, 2014

bingから画像をダウンロードしてMacの壁紙に設定するツールをGoで書いた

bingから画像をダウンロードしてMacの壁紙に設定するbinggoというツールをGoで書きました。

https://github.com/kmtr/binggo

go get github.com/kmtr/binggoでインストール出来ます。

なぜ書いたのか

私はbingのトップページの画像が大好きで、Windowsの壁紙はBingデスクトップを使って、毎日bingの画像が設定されるようにしています。 ですが、残念ながらBingデスクトップのMac版は存在していません。 無いのであれば作るしかないということで、書いてみました。 ちなみに同じことを考える人はそれなりにいるようで、Pythonやbash、Automatorによる同様のツールがすでに存在しています。 ただインストールが面倒であったり、私の環境での動作が不安定だったりと不満があったので、自分で書いてみました。

なぜGoなのか

Goが好きだからというのが最大の理由です。

前々からGoには少し触っていたのですが、Go Conference 2014 autumnに参加して自分の中のGo熱が高まり、何か書きたいけど丁度良いネタが無いかと考えていたところ、bingに「今日の画像をダウンロード」という機能が追加され、Goで書いてみようと思いつきました。 ただ機能が単純なのでchannelどころかgoroutineすら使わなかった(使うまでもなかった)のが少し残念でした。

おまけ

bingの過去画像が欲しい場合は、Bing Homepage Galleryが便利です。

土曜日, 7月 12, 2014

gulp-coffeekupを作りました

CoffeeKupというcoffee-scriptのソースコードがそのままテンプレートになるテンプレートライブラリがあります。
どういう意味かは、公式サイトのデモを見ればなんとなく分かるかとおもいます。

coffeekup.org

テンプレート言語としてはなんとなくjadeっぽいので、coffee-scriptを知らない人でも使うのは難しくないはずです。テキストをいちいちクォートしているあたりにcoffee-scriptそのものを使っている感が見て取れるかと思います。

さて、これを静的HTMLの生成に使おうとしたのですが、CLIなコマンドは提供されているもののうまく動作せず、gulp経由でやってみようかと思ったら、今時にしては珍しくgulpプラグインがありませんでした(検索力不足かも)。
想像ですが、サーバサイドでレンダリングするために利用する事がメインで、静的HTML出力はあまり力を入れていないのかな?
ということでgulpプラグインを書いてみました。

https://github.com/kmtr/gulp-coffeekup

手元ではとりあえず、動作を確認しています。

(テンプレート言語がcoffee-scriptそのものである利点って何か実はよく分かっていない)

火曜日, 6月 10, 2014

丁目番地を聞かれたのでiPhoneで道案内

今年は道案内の回数が多い気がする。 今回は家の近所で、丁目番地指定で道を聞かれた。 分かるわけが無いので、すぐにiPhoneを使用。 目的地はもう少し歩いたところだったのでそれを伝える。 年配の二人連れだったけど、無事辿り着けただろうか。

水曜日, 3月 05, 2014

都庁への入り方

都庁、北庁舎外の中央公園側をふらふらしていたら、外国人カップルに英語で話しかけれられる。 都庁の中に入りたいが入り口が見つからないらしい。 あのあたり、ガラス張りで中に入れそうな雰囲気はあるのだけど、入るにはぐるっと回る必要がある。 聞く方はなんとかなるが、話せないのでついてくるようにジェスチャーして誘導。 若干適当な扱いだったかもしれないけど「アリガト」と言われたのでよしとしよう。 「Follow me.」 ぐらいは言えば良かったかな。

火曜日, 2月 25, 2014

2014年初道案内

今年初めての道案内の相手は外国人の方。 ビジネスビルの場所を聞かれたけれど、六本木ヒルズとかヒカリエみたいに商業施設がついているならともかく、ビジネスビルとなると即答出来ず。 今回もiPhoneを使って案内。 ほぼ夜だったけど、何かカンファレンスでもあったのかな?パーティーな服装ではなかった。

木曜日, 10月 17, 2013

小規模企業によるFOSS開発のモデルケースになりうるかもしれない事例

最近は企業によるFOSS活動も活発になっています。
そんな中で、今注目している一連の流れ。


そもそもの発端。20人/月のほとんどはサーバではなくアプリ側に使われているのだろうか。
世界初 メッセンジャーアプリ「Spika」を完全オープンソースで公開、フロントからバックエンドまで提供


問題点の指摘。最大の問題点である問題が指摘されているDBの部分は2013/10/16時点のコミットで完全に消去されているみたい。
レガシーズ公式ブログ PHPerはSpikaのどこを見たのか?


そして有志?によって直す会が開かれるらしい。
spika hackathon Spika-Server のコードを15年ぐらい若返らせます

行数は少なめでやる事は決まっているので、設計上の問題が無ければ割と簡単なはずだけど、モダンになった後のコードで、元の企業の人たちがカスタマイズやコンサルティングができるようになるのかが気になるところ。

一番最初の記事中で、WordPressのような存在になりたいと言っているけど、WordPressもこんな問題を抱えている。せめてPSRの議論と投票には参加して欲しい。
レガシーズ公式ブログ 活動報告 「レガシーコード in WordPress」