3月度勉強会で調べた事項


[Nagoya.Swift+ の3月度勉強会](https://nagoyaswiftplus.connpass.com/event/38982/)で話題になった事柄とその時調べた事項について。


Swift, iOS
==============================

久しぶりにSwiftとかiOSとかの開発について議論。

画面遷移
------------------------------

やり方を忘れていたので復習しました。

* [[Swift]コードで画面遷移を行う3つの方法 | Yuuの悠々自適Blog](http://yuu.1000quu.com/screen_transition_in_swift)

``` ダメなコード
let nextView = NextViewController()
self.presentViewController(nextView, animated: true, completion: nil)
```

``` 正しいコード
let storyboard: UIStoryboard = self.storyboard!
let nextView = storyboard.instantiateViewControllerWithIdentifier("next") as! NextViewController
self.presentViewController(nextView, animated: true, completion: nil)
```

* [present(_:animated:completion:) - UIViewController | Apple Developer Documentation](https://developer.apple.com/reference/uikit/uiviewcontroller/1621380-present)

* [【Swift】アラートを表示する（Alert／ActionSheet） - Qiita](http://qiita.com/fishpilot272/items/b76e62eb82fc8d788da5)



Replay Kit
------------------------------

参加者が作成されたアプリで利用されていたので調べました。

* [ReplayKit | Apple Developer Documentation](https://developer.apple.com/reference/
replaykit)

画面のブロードキャストができるのが素晴らしい！

iOS 10になってから落ちるようになってしまったそうなので、カメラライブラリにアクセスすると落ちるケースで典型的に調べるべき内容はこれじゃないでしょうか。

* [[iOS 10] 各種ユーザーデータへアクセスする目的を記述することが必須になるようです ｜ Developers.IO](http://dev.classmethod.jp/smartphone/iphone/ios10-privacy-data-purpose-description/)


AutoLayout
------------------------------

「AutoLayout辛いんだよおおお！」との声が。AutoLayoutはこんな感じで簡単にオフにできます。

* [特定のViewだけAutoLayoutをオフにする方法のメモ - 開発メモ](http://seeku.hateblo.jp/entry/2015/04/27/051428)

オフにするのをオススメしているわけではないです。

Swift仕様周り
------------------------------

### 循環参照

`UIViewController`で`self`が`weak`ってどの程度気にすればいいのか僕の中で話題になったので調べました。

* [【Swift】ハマりがちな循環参照について - Qiita](http://qiita.com/1234224576/items/2241266f7d307cd25ba9)

* [Swift 3 の @escaping とは何か - Qiita](http://qiita.com/mishimay/items/1232dbfe8208e77ed10e)

* [Swiftのクロージャにおける循環参照問題でunownedとweakの使い分けがわからない - Qiita](http://qiita.com/susieyy/items/39efd4d34cf4c1f9d3ef)

### Generics

こんな感じの議論をしました。

Q. Genericsっていつ使うの?

A. 例えばTwitterみたいなRESTでAPIを利用して結果を取得すると、複雑なJSONが得られるのでそれをパースして複数のクラスを作成すると、複数のクラスで共通してアップデートする系の処理が必要になるので、そういうときに使うんじゃない?

Q. 短く言うと?

A. 最初は使わなくてもできそう、そのうち使うと便利かも

* [The Swift Programming Language (Swift 3.0.1): Generics](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Generics.html)

* [Swiftらしいコーディングを学ぶ 「Generics」 - Qiita](http://qiita.com/shoheiyokoyama/items/31eca0d4b27bc9608eb8)

その他
------------------------------

### Xcodeでのデバッグ方法

* [Xcodeでのデバッグ方法 | Cyber Passion for iOS](http://blogios.stack3.net/archives/776)

### SwiftでHTMLパーサ

* [tid-kijyun/Kanna: Kanna(鉋) is an XML/HTML parser for Swift.](https://github.com/tid-kijyun/Kanna)


### BSMachError

参加者の中で、BSMachErrorが発生していたので調べました、が、そもそもこれは一体何のエラーなのか探してみたが確たる結論は得られず…。

Storyboard周りっぽいとか、画面が回転するとAutolayoutが崩れているんじゃないかとか諸説ありました。

* [objective c - Error '_BSMachError: port 1607; (os/kern) invalid capability (0x14) "Unable to insert COPY_SEND" in Cordova app on iOS 10 - Stack Overflow](http://stackoverflow.com/questions/39676762/error-bsmacherror-port-1607-os-kern-invalid-capability-0x14-unable-to-i?noredirect=1&lq=1)

* [Objective-C - [iOS 10]アップロード処理中に強制終了する(54942)｜teratail](https://teratail.com/questions/54942)


機械学習
==============================


Tensorflow
------------------------------

GPUを利用できるように環境構築して、チュートリアルをこなしていました。

### 環境構築(GPU)

Dockerで環境構築して使っていたけれど、限界を感じたのでGPUを使えるようにしました。

* [Installing TensorFlow on Mac OS X  |  TensorFlow](https://www.tensorflow.org/install/install_mac)

* [Installation Guide Mac OS X :: CUDA Toolkit Documentation](http://docs.nvidia.com/cuda/cuda-installation-guide-mac-os-x/#axzz4cP5QrOS2)

* [TensorflowでOSXのGPUが対応されたよ - Qiita](http://qiita.com/tawago/items/15160c6aa0ebd1c61715)

* [How to enable cuda support for tensor flow on Mac OS X (Updated on April:2016 Tensorflow 0.8)](https://gist.github.com/Mistobaan/dd32287eeb6859c6668d)

Cudaがなかなか参照できなかったのですが、結局次の内容に従ってSIPを切りました(もちろん自己責任で)

* [How to enable cuda support for tensor flow on Mac OS X (Updated on April:2016 Tensorflow 0.8)](https://gist.github.com/Mistobaan/dd32287eeb6859c6668d)


### 正規化周り

Dropoutの書き方を調べて[tensorflow/3_regularization.ipynb at master · tensorflow/tensorflow](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/udacity/3_regularization.ipynb)をこなしてました。

* [tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None, name=None)  |  TensorFlow](https://www.tensorflow.org/api_docs/python/tf/nn/dropout)

頑張ってこの記事を越えようとして時間切れ。

* [Regularization with TensorFlow | Machine Learning, Deep Learning, and Computer Vision](http://www.ritchieng.com/machine-learning/deep-learning/tensorflow/regularization/)



Scikit-Learn
------------------------------

今回はほどんど書かなかったけれど、何故か少し調べました。

* [Plot multinomial and One-vs-Rest Logistic Regression — scikit-learn 0.18.1 documentation](http://scikit-learn.org/stable/auto_examples/linear_model/plot_logistic_multinomial.html#sphx-glr-auto-examples-linear-model-plot-logistic-multinomial-py)

* [sklearn.datasets.make_blobs — scikit-learn 0.18.1 documentation](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_blobs.html#sklearn.datasets.make_blobs)

Keras
------------------------------

手を出そうとして時間切れだったKeras。TensorFlowでニューラルネットの層を定義しようとしたら型エラーを連発してイラッと来たのでぜひ次は手を出したいと思います。

* [Keras Documentation](https://keras.io/)

* [Blog - GoogLeNet in Keras](http://joelouismarino.github.io/blog_posts/blog_googlenet_keras.html)


Online Training
------------------------------

勉強会の最中にはやらなかったんですが、オンライントレーニングが充実しているので面白かったものをご紹介します。

### Mooc

* [Deep Learning - Udacity](https://classroom.udacity.com/courses/ud730/lessons/7320377048/concepts/375715a0-343a-4e9e-b312-405dc5ad79b0)

TensorFlowで書けるのでオススメです、内容も超ざっくりしているので分かりやすいかも。

* [Neural Networks for Machine Learning | Coursera](https://www.coursera.org/learn/neural-networks/home/welcome)

突っ込んだ内容になってくるし内容も文字の読み上げがメインなので最初にやるといい睡眠導入動画になってしまうかも。

環境はOctave。これ見て諦めて導入しました。要求されるプログラミングスキルは低いけれど、線形代数と初歩の代数学のスキルは必要。

* [Machine Learning | Coursera](https://www.coursera.org/learn/machine-learning/home/welcome)

超有名なコース。環境はOctave。挫折3回目に突入しました。

### Sample Code

Jupyter Notebookで色々配布されているのが機械学習界隈いい感じですね。

* [jakevdp/PythonDataScienceHandbook: Jupyter Notebooks for the Python Data Science Handbook](https://github.com/jakevdp/PythonDataScienceHandbook)

* [donnemartin/data-science-ipython-notebooks: Continually updated data science Python notebooks: Deep learning (TensorFlow, Theano, Caffe, Keras), scikit-learn, Kaggle, big data (Spark, Hadoop MapReduce, HDFS), matplotlib, pandas, NumPy, SciPy, Python essentials, AWS, and various command lines.](https://github.com/donnemartin/data-science-ipython-notebooks)