Androidアプリ開発日記#1

ユースケースからスクラッチでソフトウェア設計をする方法は知っているけれど、Androidアプリを開発する上でモダンな設計方法は知らなかったりする。 ユースケースを書いて、ユースケース図を描いて、ロバストネス図を描いて...と、ICONIXが好みで使うことが多いから、いつもの調子で(思考停止で)設計をしていたが、これでよいのだろうかと立ち止まる。組込ソフトウェアを自社開発しているわけではないのだから、もっと良い(スマートな)方法が用意されているはずだし、先人が考案してくれているはずである。ということで調べてみると、以下の記事が参考になりそうである。簡単なMVPを作るにしても、何も知らずぐっちゃぐちゃというのもよろしくないので、はまり込まない程度に一通り目を通してみたい。

qiita.com

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

脱退一時金を確定拠出年金へ移管できるらしい

2月末で退職することになった。それに伴い、退職一時金が支給されるとのこと。 前職と転職先企業から資料を頂いて見てみると、退職金(正確に書くと、確定給付型企業年金の脱退一時金)は確定拠出年金へ移管できる様子。 一時金として受け取ると、税金がかかるようだし、今すぐお金が必要なこともないので確定拠出年金へ移管できるのなら安心かな。 個人型のiDecoも移管するので、それと合算されることになるはず。

良かったこと スーツをクリーニングに出した HCI研究の論文を読んだ 荷物を受け取れた

改善点 朝からだらだらしていたこと

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にはそれらしき記述はなし。

参考:

github.com

Dockerfileに手を入れた場所は、環境に合わせたproxy設定回りのみ。

Docker 起動中のコンテナに複数のコンソールで入る。

コンソールが2枚ほしくなり、何も考えず起動中のコンテナにattachすると、1つのプロセスに2つのコンソールとなってしまった。少し調べると、以下の様にプロセスを注入してやれば良いことが分かった。

docker exec -it [Container name] /bin/bash

参考

CoreOS で起動中のコンテナの中に入る - Qiita