Swift For TensorFlow を Mac に インストールして Xcodeで使えるようにしてみた

概要

以下の環境で確認しています。

macOS High Sierra 10.13.4
Xcode 9.3

Swift For TensorFlowがオープンソースGithubに公開されたそうです。

github.com

[公式サイトのInstall方法] (https://github.com/tensorflow/swift/blob/master/Installation.md)を参考にしてインストールしてみました。

Swift for TensorFlow について

Swift for TensorFlow is a new way to develop machine learning models. It gives you the power of TensorFlow directly integrated into the Swift programming language. With Swift, you can write the following imperative code, and Swift automatically turns it into a single TensorFlow Graph and runs it with the full performance of TensorFlow Sessions on CPU, GPU and TPU.

機械学習の新しい手法として発表されたものです。

It gives you the power of TensorFlow directly integrated into the Swift programming language. とあるように Swift の中に ビルドされた TensorFlowが直接組み込まれていて、以下 レポジトリの tensorflow ブランチで開発が行われています。

f:id:ikkitang1211:20180430122750p:plain

なんというか、 Apple社 の swiftレポジトリをフォークして Googleが開発を行っている、ってのが感慨深いですよねー。(雑)

Install 方法

さて、本題です。

必要環境

macOS 10.12.4 (以上)
Xcode 9.0 (以上)

Pre-built Packages をダウンロードする.

tensorflow/swift #Pre-built Packages にリンクがあります。

ダウンロードしてください。

.pkg の指示に従ってインストールをする。

スクショ取るの忘れちゃった笑
指示に従ってインストールしてください。

正常にインストールされると、以下のように /Library/Developer/Toolchains/ に 入ります。

f:id:ikkitang1211:20180430104125p:plain

下の swift-tensorflow-DEVELOPMENT-2018-04-26-a.xctoolchain がそれです。

.xctoolchain って・・?

公式サイト によると、

An Xcode toolchain (.xctoolchain) includes a copy of the compiler, lldb, and other related tools needed to provide a cohesive development experience for working in a specific version of Swift.

ってありました。

まあ、swiftのバージョンに応じた依存関係を良いように解決する為のパッケージ的な認識で良いんだろうか?

今回インストールしたものは ビルドされたTensorFlowがインストールされたSwift なので、 この ビルドされたTensorFlowがインストールされたSwift を動かす為の依存関係が定義されてる、といった感じでしょうかね。

Xcode で使用する Swift を変更する

Xcode を起動して、 左上の Xcode > Preferences を選択します。

f:id:ikkitang1211:20180430105121p:plain

Preferences を表示した後、 Components > ToolChains を選択してください。

f:id:ikkitang1211:20180430105218p:plain

現在は ToolChain が Xcode9.3 になっているので、これを Swift For TensorFlow Development Snapshot に変更します。

これで このXcodeに限り、 ビルドされたTensorFlowが入ったSwift で動作(コンパイル)するようになります。

もし、 コマンドライン上で使用するSwiftのバージョン等を変更したい場合は パスを変更する事でそれを変更します。

(公式サイトより引用)

$ export PATH=/Library/Developer/Toolchains/swift-latest/usr/bin:"${PATH}"

これでインストール方法については終わりです。

次回の予定

次回は以下の公式サイトを参考にして、 playground で 動かしてみたいと思います。

github.com

第五回岡山iOSアプリ開発もくもく会 終了レポート by @ikkitang

お陰様で、iOSアプリ開発もくもく会も第五回を迎えました。

レポート書きまーす。

今回は2つの初めてがありました。

これまでに無い大盛況

okandroid側: 7名

okios: 6名

全員で13名の応募がありました!

バングラデシュの方。ポケモントレーナー。 などなど沢山の方がいらっしゃってました!笑

ギー岡カフェも超満員でしたねー。

国際化

今回は、岡山大学にいらっしゃっている外国人の方が、もくもく会に参加してくれました。

なんと、「iOSのイベント」を探されていたそうで、「DoorKeeper」で見つけてきてくださったそうです。

「Japanese is so difficult.」

僕はその時、震撼しました。。。

「English is so difficult, too.」\(^o^)/

午前中は、ほぼ全ての会話が英語で、聞き取るのでやっとでした。 よう話せなかったです。。。

プログラミング言語の前に、今我々にもっとも習得が必要な言語は、英語みたいです。

なんと、この方、次回もいらっしゃってくださるそうなので、英会話ついでに皆様是非いかがでしょうか!笑  

また、万が一のために、是非、英語話せる方の参加を求めます!!!

というか、この方の経歴がすごすぎて、(母国の仕事で)作成されたアプリもレベルが高すぎて、8割方英語は聞き取れなかったですが、アプリの画面を見せてもらって、機能だったり、そもそもの規模の大きさに驚愕しました。

当日の進捗

忘れちゃいけません。

#今日の進捗 #okios #okandroid 特製支那そばだったのにー(´・ω・`)

残念ながら、今回、人数が多かったので、3人しか入れなかったですが、相変わらずのお味でした。
そろそろ・・・飽きt

#ポケモン #pokemon #ポケモンgo #pokemongo #今日の進捗 27匹~( •̀ω•́ )/ 一時間さまよい歩いた笑

自分の進捗をば

f:id:ikkitang1211:20160725082438j:plain

DoorKeeperからの進捗イベントを取得する際、表示させるのをカスタムセルにしました。

さーて。。。自動でセルの大きさを変えるってのが今後の課題ですね。  

というか、本当、前は、仕事が遅くなっても、毎日仕事以外の事でコード書いてたのに、最近書いてない。。

やっぱり、仕事以外で毎日コード書くってのは重要です。

自分もこう、聞かれたら、すぐ答えられるぐらいにはなりたいですね。

次回

2016/08/27 (土) に行います!

岡山駅から、ギー岡までの道のりは、ポケストップが沢山あるので、是非、岡山駅から歩いて来られる事をおすすめします笑

では、またの機会にm( )m

ViewControllerを閉じる方法 (Unwind Segueを使う)

ViewControllerを閉じる

今、自分で、iPhoneアプリを作っているのですが、

ボタンをタップした時、segueで遷移した先のViewControllerにて [登録]ボタンを押して、登録完了後に、現在、起動中の登録画面の ViewControllerを閉じて、元の遷移元の画面に戻る

みたいな実装をしてたんですが、遷移先のViewControllerで

self.dismissViewControllerAnimated(true, completion: nil) 

とか書いても、ViewControllerが閉じないんですよね。

参考先のサイト on Qiita ViewControllerを閉じる

理解が足りないなー、と。

まずは、画面を閉じる方法から。

割りと、[ViewController 閉じる] ってやっても、あんまり引っかからないんですね笑

ちょっと、書いてみました。

参考にさせて頂いた所

[Swift]初心者向け!Segueを使った画面遷移方法

いや、すげー、分かりやすかったです。ありがとうございます。

Unwind Segue

Using Unwind Segues By Apple

Appleの公式サイトからすると、 UnwindSegueってのは、PushとかのSegueから戻る一つの方法って感じですかね。

他にも方法がある、って事なのかな。

Close Sample

今回のソースを Github にあげてます。

[TakahashiIkki/CloseSegueSample @github]

作成方法

サンプルプロジェクトの作成

Single Page Applicationを選択します。 f:id:ikkitang1211:20160623234342p:plain

プロジェクト名をCloseSegueSampleとしました。 f:id:ikkitang1211:20160623234412p:plain

OrgnizationNameとか隠してるけど、Githubに上げてるなら意味ないのかな?笑

初回は、ViewControllerが一つだけある状態です。 f:id:ikkitang1211:20160623234611p:plain

遷移先ViewControllerの作成

まずは、 あるViewController から遷移する遷移先のViewControllerを作成していきます。

今回は、 ViewController から ToViewControllerへ移る事とします。

ToViewControllerクラスを定義します。

f:id:ikkitang1211:20160623235116p:plain

NewFileをクリックして、 f:id:ikkitang1211:20160623235217p:plain

Cocoa Classs から、ToViewControllerクラスをUIViewControllerを継承して作成します。

f:id:ikkitang1211:20160623235246p:plain

はい。出来ました。 f:id:ikkitang1211:20160623235331p:plain

必要な簡単なクラスとimportとかだけ整理しました。 f:id:ikkitang1211:20160623235505p:plain

InterfaceBuilder上でSegueを定義

InterfaceBuilder上で画面遷移を作成していきます。

画面遷移を作成するのは簡単です。

まず、Main.storyboardを開いて、ViewControllerを追加します。

この追加したのが、ToViewControllerになります。

f:id:ikkitang1211:20160624000526p:plain

View Controllerをドラッグして、 現在ある、ViewControllerの横に置きます。

f:id:ikkitang1211:20160624000642p:plain

置いたら、こんな感じになります。

わかりやすいように、遷移元のViewControllerを黄色に。 遷移先のToViewControllerを緑色にします。

f:id:ikkitang1211:20160624000811p:plain

f:id:ikkitang1211:20160624000835p:plain

また、忘れないように、遷移先のToViewControllerを先ほど作ったToViewControllerクラスと結びつくようにします。

f:id:ikkitang1211:20160624001418p:plain

次は、ボタンを作成していきます。

開くボタンをクリックすれば、ToViewControllerが開く。 というイメージです。

f:id:ikkitang1211:20160624001222p:plain

では、画面遷移を作成します。
controlボタンを押しながら、 開く をクリックして、 そのまま、 ドラッグして、ToViewControllerまでドラッグします。

f:id:ikkitang1211:20160624001737p:plain

このようなポップアップが出てくるので、 Show を選択します。

開くをクリックした時の遷移が作成出来ました。

f:id:ikkitang1211:20160624001814p:plain

戻る処理の作成

次は、 戻る処理を 作成していきます。

ここからが、 Unwind Segue の話です。

例によって、戻るボタンを作成します。

f:id:ikkitang1211:20160624002147p:plain

ここで、少し、コーディングします。

遷移元ViewControllerに 記述します。

※ ToViewController側に記述して、はまりました笑

f:id:ikkitang1211:20160624002601p:plain

@IBAction func returnToMe(segue: UIStoryboardSegue) { }

これだけです。
また、このメソッド名、 returnTome() とかじゃなくても何でもいいです。 引数と @IBAction の指定だけすればいいみたいです。

次に、戻るを押した時と、このreturnToMe() function を結びつけます。

Main.storyboard を開いて、ToViewController側を表示します。

戻る ボタンを control ボタンを押しながらクリックして、 ドラッグして、 ToViewControllerの上部の一番右にある Exit のアイコンに結びつけます。

f:id:ikkitang1211:20160624003016p:plain

また、ポップアップが出てくるので、 ここには、先ほど定義したメソッド名が表示されています。 先ほど定義した、 returnToMe() メソッドを指定します。

以上で、チェック完了です。

動作確認すると、以下の様な感じです。

動作チェック

初回起動時、ViewController が開きます。 開くをクリックします。 f:id:ikkitang1211:20160624003223p:plain

ToViewController が show segue で表示されました。 戻るボタンで戻ってみます。 f:id:ikkitang1211:20160624003235p:plain

スクリーンショットだとあまり説得力はありませんが、ちゃんと戻れました。 f:id:ikkitang1211:20160624003416p:plain

github のソースにあげています。

今回のソースを Github にあげてます。

[TakahashiIkki/CloseSegueSample @github]

ViewController を閉じる他の方法

NavigationControllerを使う方法は、まあ置いておくとして、他にあるんだろうか?

そもそも、

self.dismissViewControllerAnimated(true, completion: nil) 

なんで動かなかったんだろう?

Qiita読む限りは遷移先で呼ぶメソッドっぽいしなー。

って事でまだまだ、 Swifter には程遠いです。

。。。ってか、ブログなっがーー。。

書くので疲れた。

第四回岡山Swiftもくもく会 終了レポート by @ikkitang

第四回岡山Swiftもくもく会

f:id:ikkitang1211:20160619234327p:plain

今回は最近流行りの? 技術だらけのもくもく会でした。

岡山Androidもくもく会 & 岡山Swiftもくもく会 & 岡山WindowsPhoneもくもく会 & 岡山Arduino探検会 という・・笑

全員で7名の方に参加いただいて、充実したもくもく会でした!

お約束

#okandroid #okios #岡山アプリ開発もくもく会 #今日の進捗今日の進捗が上がりました。

今回も進捗を上げました。
そして・・祝、しんのすけの全ラーメンを制覇しました。

支那そば
支那そば塩
・ 和風そば

やっぱ、支那そばが美味しいねー。 支那そば塩も捨てがたいよ。

今回の内容

今回は学生さんが二人もいらっしゃてました!

18歳とかの子も来られてまして、「AndroidってJavaで書くんですね!」 とかそういう驚きが新鮮でした。

えぇ、Javaで書きます\(^o^)/ お互い、これからも頑張りましょう。

さて、今回は、参加者の方が、Arduinoの体験会を開催してくださいまして、皆、そこで楽しんでました。

#arduino #okios #岡山アプリ開発もくもく会神龍呼べそう。

こういう奴? Arduinoでエルチカと呼ばれる LEDライトをチカチカさせたり、音を鳴らしたりやってました。

#arduino #エルチカ #岡山アプリ開発もくもく会 #okandroid #okios LEDをフェイドイン・フェイドアウトさせてます!

楽しかったです。ありがとうございました。

もくもく会でハンズオンとかもいいですね。

早く、自分のアプリリリースして、ハンズオンとか開催したいよ。僕は\(^o^)/ まだまだ、初心者なもんで。。

自分の進捗

さて、今回ですが、自分のiOSアプリの進捗については、進捗特になかったですかねー。

取り敢えず、まとめるとこんな感じでした!

登録画面・編集画面を一個のUIViewで持ってたのですが、そこに登録のボタンとかも一緒に作ってました。

ただ、ボタン押した時にUIAlertControllerを使ったりとか、登録後、登録画面のViewを閉じて、前の画面に戻るとか。

こういうのってやっぱり、設計的によく無いらしい。

UIViewControllerがあって、その下にUIViewがあるみたいな画面のつくりなので、UIViewから親のUIViewControllerを色々操作する、っていう設計は本来すべきで無いらしい。

まあ、ごもっともなので、カスタムのUIViewの中から、ボタンだけ、取り除いて、各ViewController上に置きました。

まあ、そんな所でした。

次回予定

2016/07/24 (日) に行います!

岡山Androidもくもく会 & 岡山Swiftもくもく会 を統合した名前にしました。

一応、意図としては、岡山Swiftもくもく会 。。。 Swift ってiOSアプリを作りたい初心者の方に伝わるのかなー、って。

iOSアプリを作るプログラム言語の名前をSwiftである、って知ってるのかなー?と見つめなおした結果です。

だって。。。今回、okswift側の応募者、僕一人だけだったんだもの。。。。泣

って事で! 次回もぜひよろしくお願いします。

第三回岡山Swiftもくもく会 終了レポート by @ikkitang

第三回 岡山Swiftもくもく会

無事、今回も第5回岡山Androidもくもく会 & 第三回岡山Swiftもくもく会、終了いたしました。

7名の方が参加してくださいました。
参加してくださった皆様、ありがとうございました!!

今回の振り返り

BGMを掛けてもらってました!割りとそれで、賑やかな雰囲気を味わいながら、集中できる良い環境になったと思います。

今後も続けていこうかね。

今日もラーメン美味しかった。

特製支那そば++ って感じの注文でした笑

LTをして頂きました。

一人目: Android Instant Apps について (Kasseさん)

LTの様子 f:id:ikkitang1211:20160521202758j:plain

Android Instant Apps について、LTして頂きました。

先日の Googleの開発者向けイベント [Google I/O] (http://gigazine.net/news/20160519-googleio2016-matome/)にて、発表された所、ぐらいの出来たてホヤホヤの話だったので、質問がすごいあって、めっちゃ白熱した議論になりました。

二人目: Swift Package Manager (JPMarthaさん)

LTの様子

Swift Package Manager は Appleが発表した新しいパッケージツールで、今後、Swift3.0 以降にて、使えるようになる、との事でした。

しかも、何がすごい、ってJPMarthaさん・・
ここの・・・apple/swift-package-manager contributors

↓ こういう方でした。 f:id:ikkitang1211:20160521204951p:plain

Apple公開ソースFolk して、バグ発見して、 修正して、 Pull Request を送って、Merge された。

すごい、ゲストの方に来て頂きました。ありがとうございました。

ちなみに、この方、先日のオープンセミナー岡山2016 お知り合いになった方です。

自分の進捗

今日は、公開したいアプリを作っていました。
リリースの主目的は、初の自作アプリの作成と、Realmを使う です。

で、作ってるものは、 有給休暇の管理アプリです。
まあ、いつ休んだか、後、有給が何回残ってるか、ぐらい。
まあ、当面の目標としは、登録だけで。。

何回残ってるか、なんて、絶対バグ出るので笑 (削除時とか・・・有効期限切れとか・・・頭いたいよね。)

ちなみに、

一応、Githubにあります笑 どうだろう。。 まずかったりする?
APIで連携したりとかじゃなくて、スタンドアロン的な使い方だから、セキュリティ面の所を見つけられて・・とか無さそうだし、別に良いかな、と思ってるんだけど・・。

別にソースパクられて、公開されるとかは別になんとも。。笑

むしろ、ソース汚くてすみませんm(_ _)mとしか、思えない。

なんというか、Githubの草生やし が自分の性根にあっているな、と思った。

自分の頑張りが草生やしで見えるから、モチベーションが続けやすそう。

現在、こんな感じで進んでます。 

最終的に、有給休暇の登録画面ぐらいを作りかけ中です。

次回告知

2016/06/19 (日) に 行います!!

予定があえば、是非お越しください。

下の使えるかなー。。↓ 申し込みフォークの埋め込みだってー。
第六回「岡山Androidもくもく会」& 第四回「岡山Swiftもくもく会」

ではではm(_ _)m

RealmSwift でハマったのでリベンジしてみた。 #realm

先日、こんな所ではまりました。
再挑戦してみました!

参考にしたサイト

Realm公式サイト を参考にさせていただいております。

テストプロジェクトを作成

testRealm1 ってプロジェクトを作りました。
Master-Detail Application f:id:ikkitang1211:20160515231632p:plain

※ まずは、動作チェック f:id:ikkitang1211:20160515231804p:plain

ターミナルでアクセスして、CocoaPodsでインストールを試みます。

$ pod version
    1.0.0.beta.3
$ pod init 

$ vi Podfile で PodFileを修正します。 f:id:ikkitang1211:20160515232256p:plain

$ pod install 結果はこんな感じ。 f:id:ikkitang1211:20160515233642p:plain

入ったように見える。 フォルダ内部はこんな感じに変更になりました。

f:id:ikkitang1211:20160515233936p:plain

$ open testRealm1.xcworkspace 

取り敢えず、Realmを何も使っていない状態で、動くかどうかの動作チェックとして、ビルドしてみました。

f:id:ikkitang1211:20160515234425p:plain

f:id:ikkitang1211:20160515234439p:plain

。。。。??? (´・ω・`) 同じ、エラーだな、、、

とりあえず、もう一回、トライしてみよう。

解決したら、次回にアップします。

解決方法? 追加ー!

どうやら、 CocoaPods 1.0 以上が、Realm対応していない、みたいな話らしいです。 参考: realm / realm-cocoa

cocoapods の バージョンを指定して、インストールしてみる事とします。

皆、大好き、Qiitaより、調べました。 参照先

bundler を インストールします。

$ gem install bundler
$ cd ~~/testRealm1
$ bundle init

vi Gemfile で、設定を指定します。

f:id:ikkitang1211:20160516004047p:plain

$ bundle install --path vendor/bundle で、Gemfileに従って、インストールを行います。

$ bundle exec pod --version
   0.39.0
$ bundle exec pod install

って事で、CocoaPods のバージョンが 0.39.0 で指定されて、Realmがインストールされました。

解決して、ビルドも通りました!! よっしゃ!!