読者です 読者をやめる 読者になる 読者になる

@Konboi memo

主に技術に関してつらつらと。

No patch utility found の対処法

perl plenv
$plenv install 5.xx.xx 

…

No patch utility found
ABORT

となりエラーになった

$ which patch
/usr/bin/which: no patch …

となり patch コマンドがインストールされていないのが原因だった

$ sudo yum  install -y patch 

して無事解決

めでたしめでたし

参考記事

"No patch utility found"の対処法 DQNEO起業日記

brewでのnginx openrestyのインストールに嵌ったのでメモ

はじめに

OpenResty を使ってやりたいことがあったので 手元の環境(Mac)にhomebrewを使ってインストールしようと思ったらエラーがでて嵌ったのでメモ

TL;DR

brew install opensll
brew link --force opensll
brew install ngx_openresty

エラーになる

nginx openresty を homebrew でインストールする場合は

$ brew install ngx_openresty

でインストールできる

ただ、今回実行したら

...
checking for OpenSSL library ... not found

./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.
...

のような感じでopnesslのパスが見つけられない様子でエラーになった

解決方法

homebrewopensslをインストールしたら解決した

brew install openssl

このままだと /usr/bin/openssl が参照されるので

brew link --force openssl
source ~/.zshrc

これで homebrewでインストールしたopensslが参照されるので

brew install ngx_openssl

が上手く行った

net/httpで静的ファイルを返す

Go go static

追記 (2016/04/13)

完全に読み間違えていましたね やっちゃいけないそうです

shogo82148.github.io

やるならこう

func main() {
  http.HandleFunc("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
  http.ListenAndServe(":3000", nil)
}

まとめ

ドキュメントをみましょう


軽いwebアプリケーション作ってたら読み込んだjsがhtmlでエラー出てて??? ってなってた

よくよく調べたら /static 以下のhandlerを定義してなかったので/にマッチしてtopのhtmlが返ってきてたからだった

調べたらこんな感じで静的ファイルを返せばよさそう

http.Handle("/static/", func(w http.ResponseWriter, r *http.Request) {
        http.ServeFile(w, r, r.URL.Path[1:])
})

stackoverflow.com

GoでMySQLからdatetimeのデータを引いてtime.Time に食わせるときに嵌った

go Go golang mysql DB
db, err := sql.Open("mysql", "<user>:<password>@/<db name>?parseTime=true&loc=Asia%2FTokyo")

parseTime=true をつけるといい感じにparesしてくれる

ただこれだとUTCになるっぽうので loc=Asia/Tokyo をつけるとよい

github.com

#shibuyago #2でLTしてきました

Go shibuyago 発表エントリー 発表資料 redis Redis

はじめに

@suzu_v さん VOYAGE GROUP さん会場提供及び、 🍺と🍕の提供ありがとうございました

発表資料

こちら発表資料になります

自分のツールの紹介もしつつ、時期的に新卒氏にも読んで欲しい内容にまとめた感じです

さいごに

  • 最初からビール飲みピザ食べれるのはお腹減らなくて良いですね
  • ただ、ビール最初に飲んじゃうと発表時に大分眠くなるという罠w

Goのflag package で同じオプション名で複数の値を受け取る

Go flag コマンドラインツール golang cli

はじめに

コマンドラインツールを作っていると同一オプションで複数の値を受け取りたい事があります

今回は -ignore hoge -ignore fuga の用に特定の文字列を結果から除きく ignore というオプション名で複数のStringを受け取りたい

という事にします

Goのflagが標準で提供しているもので複数の値を受け付けているのは

flag.Args() だけで今回の要件は満たすことができません

無いなら作る

では、どうするか

flag には flag.Var() という flagで定義しているValueを引数にとるメソッドがあります

flag.Value は

type Value interface {
    String() string
    Set(string) error
}

このように String()Set(string) error のinterfaceを満たすtypeを定義してあげます

interfaceを満たすtypeを定義する

String()Set(string) error を満たすtypeを実装すると 今回は複数のStringを受け付けたいので以下の用になります

type sliceString []string

func (*ss sliceString) String() string {
    return fmt.Sprintf(“%s”, *ss)
}

func (*ss sliceString) Set(value string) error {
    *ss = append(*ss, svalue)
    return nil
}

var ignoreStrings sliceString

これで flag.Typeを満たしつつ複数のstringを受け付けられるtypeの定義しそれの変数である ignoreStrings の準備ができた。

複数のintを受け付けたい場合は String()strconv.Itoa(someIntValue) などのようにしてstringを返す必要があります

定義した型を使う

定義できたので以下の用に flag.Var()を使うことで複数Stringを受けつることが出来る

func main () {
    flag.Var(&ignoreStrings, “ignore”, “Set ignore strings”
    flag.Parse()
}

こんな感じ(※ Go Playground 上では何も表示されません)

最後に

  • flag.Value を満たすtypeを定義すれば色んな引数がとれそう
  • 自分で定義するのが面倒なら alecthomas/kingpin とか使えばよさそう

Go言語によるWebアプリケーション開発

Go言語によるWebアプリケーション開発

それやる意味本当にある? を定期的に自分に問いかける

振り返り チームビルディング

新しい人がチームに入ってきたらやっているMTGとか(今回は夕会を例にあげる)を

  • どうしてやってるか
  • なんのためにやってるか

を簡単でいいからスライドにしてきちんと説明するようにしている

スライドにすることで

  • 自分の話したい事が整理される
  • 口頭だけで説明するよりも伝わりやすい (外国人もメンバーにいるので)
  • 再度説明する時資料があるので楽

若干面倒だけどこうやって説明する機会を設けることで、

そもそも夕会やる必要あるの?って事の振り返りができる。

「夕会は情報共有のためにやってます」って言って情報共有ができてなかったら

  • 夕会のやり方を変えたほうがいい
  • 夕会をやめたほうがいい

とかの判断をすることが出来る

長い事やっているとやる事自体が目的になってしまい、ただただ惰性で続けることがあるので

定期的に振り返って問題ないかを自分に問うている。

SCRUM BOOT CAMP THE BOOK

SCRUM BOOT CAMP THE BOOK