手軽にgo1.6を試す方法考える -> 結局dockerを使うことにした

はじめに

期待していない挙動を示した時にそもそもgo1.7とgo1.6とで動作が異なるのではないか?という疑いをもった時があった。 ところで手元の環境は全部1.7でわざわざ1.6をbuildするのも面倒と言うような感じ。 本当に些細なコードだったので、goの1.6用のplaygroundがあればそちらを使いたかったのだけれど。みつけられなかった。

特にvmや他の環境を持っていない場合にどうするのが一番楽なんだろう?という話。

dockerを使うことにした

dockerを使うことが一番ラクかもしれない。以下にdocker用のイメージがある。alpineがたぶんいちばん小さいだろうということでそれを使うことにする。

以下のようなdocker-compose.ymlを書いてあげる。

go1.6:
  image: golang:1.6-alpine
  volumes:
    - "$PWD:/go"

例えば以下の様なコードを実行してみる。

dump-info.go

package main

import (
    "fmt"
    "os"
    "runtime"
)

func main() {
    fmt.Printf("go version: %q\n", runtime.Version())
    pwd, _ := os.Getwd()
    fmt.Printf("cwd: %q\n", pwd)
}

以下の様にして実行できる。

$ docker-compose run go1.6 go run dump-info.go
go version: "go1.6.3"
cwd: "/go"

1.6で動いている。

参考

pythonのinteractive shellを終了した後 `stty sane` が必要だった問題が解決したという話

はじめに

手元の環境でpythonのinteractive shellを利用した後、コンソールで入力した文字列のエコー表示がされなくなる問題に悩まされていた。

$ python3.5
Python 3.5.2 (default, Sep 19 2016, 02:49:52) 
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> ^D>>> 
$ # ここで入力した文字列が表示されなくなってしまう
$ stty sane #これで復活

readlineを有効にせずにbuildしていた模様

readlineを有効にせずにpythonをinstallしていた模様。

$ port installed python35
The following ports are currently installed:
   python35 @3.5.2_0 (active)
$ port variants python35
python35 has the variants:
   readline: Use readline instead of libedit
   universal: Build for multiple architectures
$ sudo port clean python35
$ sudo port install python35 +readline
The following ports are currently installed:
  python35 @3.5.2_0
  python35 @3.5.2_0+readline (active)

無事は stty sane は不要になった。