Androidアプリ開発日記#1
ユースケースからスクラッチでソフトウェア設計をする方法は知っているけれど、Androidアプリを開発する上でモダンな設計方法は知らなかったりする。 ユースケースを書いて、ユースケース図を描いて、ロバストネス図を描いて...と、ICONIXが好みで使うことが多いから、いつもの調子で(思考停止で)設計をしていたが、これでよいのだろうかと立ち止まる。組込ソフトウェアを自社開発しているわけではないのだから、もっと良い(スマートな)方法が用意されているはずだし、先人が考案してくれているはずである。ということで調べてみると、以下の記事が参考になりそうである。簡単なMVPを作るにしても、何も知らずぐっちゃぐちゃというのもよろしくないので、はまり込まない程度に一通り目を通してみたい。
GO日記#2 A tour of Go.
A tour of Goの続き:
- 大文字で始まる関数は、外部から参照できるExported name.
Exported nameの場合、コメントの付与をコンパイラから推奨される。 関数の型名は後ろに書く...直感的には気持ち悪い。
理由は↓にあるらしい。後で読む。 blog.golang.org変数型名の省略が可。//これが有効な場面とは?
- := は、型の省略ができる変数定義 //後で出てくる。
- 関数は複数の戻り値を返せる
package main import "fmt" func swap(x, y string) (string, string) { return y, x // 複数の戻り値 } func main() { a, b := swap("hello", "world") fmt.Println(a, b) }
- Named return value. "Naked" return returnには何も書かず、冒頭で定義した変数が戻る。 関数の冒頭で、何が戻るか判るから可読性が向上する? こういう書き方もできると知っておけばよい気がする。 A tour of Goの説明にもあるように、一目でわかるレベルの関数であれば有効か。(5行程度までかな。)
package main import "fmt" func split(sum int) (x, y int) { //ここで定義 x = sum * 4 / 9 y = sum - x return //ここは何も書かなくとも、x,yが戻り値になる。 } func main() { fmt.Println(split(17)) }
- var 変数宣言を、一度に行える。
package main import "fmt" var c, python, java bool //ここ。 func main() { var i int fmt.Println(i, c, python, java) }
- 初期化子 Initilaizer 初期化子が持つ型によって、型宣言を省略できる。 // 何がうれしいの?いつうれしいの?デメリットは?
package main import "fmt" var i, j int = 1, 2 func main() { var c, python, java = true, false, "no!" //型宣言の省略 fmt.Println(i, j, c, python, java) }
- := 変数定義かつ初期化が可能 関数の中限定 //なんで?
package main import "fmt" func main() { var i, j int = 1, 2 k := 3 //変数定義かつ初期化 c, python, java := true, false, "no!" fmt.Println(i, j, k, c, python, java) }
GO日記#1
Visual Studio Codeでgoを書いていると、import分が勝手に消えて四苦八苦した。 原因はフォーマッタ。 Goは使用していないimport文があるとエラーとなるが、 VScodeのデフォルトのフォーマッタでは、"math"が使用されていないと判断されて消えてしまう。 まるで読み取り専用になっているような挙動。。。
package main import ( "fmt" "math" //←ここが勝手に消える ) func main() { fmt.Println(math.Pi) }
以下の記事により解決しました。 qiita.com
DockerでKeras
Docker上でKerasを動かそうとDockerfileを書いていた。 以下のようなシンプルなもの。
FROM nvidia/cuda:8.0-cudnn5-runtime ENV [プロキシ設定] RUN APT-get update RUN apt-get -y install python3pip curl RN pip3 install keras tensorflow-gpu
が、これではkerasのサンプル(mnist_mlp.pyなど)が動かず。エラーを見るとtensorflowをインポートできてない様子。パスが通ってないのかな。。。
その後、KerasのgithubにDockerfileを発見。makeしたところとりあえず動作。keras用のユーザがあり、そこへログインしていたが、rootユーザのパスワードが分からずエディタ他を入れられない。。。rootのパスワード設定はDockerだとどうなるのだろう。Dockerfileにはそれらしき記述はなし。
参考:
Dockerfileに手を入れた場所は、環境に合わせたproxy設定回りのみ。
Docker 起動中のコンテナに複数のコンソールで入る。
コンソールが2枚ほしくなり、何も考えず起動中のコンテナにattachすると、1つのプロセスに2つのコンソールとなってしまった。少し調べると、以下の様にプロセスを注入してやれば良いことが分かった。
docker exec -it [Container name] /bin/bash
参考
Docker, buildしたイメージをインタラクティブモードで起動する
docker run -i -t [yourimage] /bin/bash
等とする。