雑メモ

fagateハマったとこ lbのセキュリティグループ コンテナ側のセキュリティグループ |外の世界| -(1)-> |alb| -(2)-> |コンテナ🐳| (1), (2) に別々にセキュリティグループを設定する必要がある. EC2インスタンスがないから忘れてた.

9月 6, 2020

gocvを動かすdockerfileのメモ

gocvを構築するためのDockerfileのメモ. FROM golang:latest RUN set -e \ && apt update -y \ && apt install -y build-essential sudo \ && go get -u -d gocv.io/x/gocv \ && cd $GOPATH/src/gocv.io/x/gocv \ && make install

11月 30, 2018

Go言語でとあるinterface型の何かが特定の関数を持ってるかを調べる

Go言語でとあるinterface型の何かが特定の関数を持ってるかを調べる というタイトル的に お前は何を行っているんだ? と言われそうです. まぁ私もどう日本語で表現すればいいのだろうかってなったので例を示しましょう. 例えば次のような実装があったとします. func f() io.Reader { return 何らかのreader interfaceを満たしたやつ } golangで io.Reader といったinterfaceはとても有名で様々な場所で利用されています. 例えば os.File や bytes.Buffer などの構造体などが io.Reader をみたしたものに当たります. io.Reader の定義は次のようになっています. type Reader interface { Read(p []byte) (n int, err error) } つまり構造体が Read(p []byte) (n int, err error) みたいな関数を持っていればいいわけですね. ここで一つ問題です. os.File は利用したあと Close() 関数をよんで開放してあげる必要があります. type io.Reader だと Close() を呼び出すことができません. さてどのように解決しましょうか? 予め入ってる型のパターンが決まっている場合は簡単です. 何も考えずに型アサーションか型switchすればいけます. type hasClose stuct {} func (h *hasClose) Read(p []byte)(int, error){ return 0, nil } func (h *hasClose) Close() error { return nil } type doesNotHaveClose struct{} func (d *doesNotHaveClose) Read(p []byte)(int, error){ return 0, nil } func newReader() io....

11月 2, 2018

fileのopen modeに関して

はじめに 最近というほどでもないがfileを開いて編集したあと上書きをして保存するみたいなプログラムを実装した. そのときにとあるバグを仕込んでしまったので書いておく. ファイルを開くときについて C言語とかを書いたことがある人ならわかると思うだろうが, fileを開いたときにはどういうmodeでファイルを開くかというmodeが存在する. それがGo言語だろうがC言語だろうがOSがそういうふうにできていれば関係なく存在する. 例えばGo言語でfileをreadonlyとして開くときはしばしば os.Open 関数を利用する. f, err := os.Open("適当なfile名") if err != nil { // なんかエラー処理 } ... os.Open の中身は次のようになっている. func Open(name string) (*File, error) { return OpenFile(name, O_RDONLY, 0) } O_RDONLY がopen modeになっている. ちなみに O_RDONLY 以外はこのようになっている. mode type 意味 O_RDONLY 読み込み可 O_WRONLY 書き込み可 O_RDWR 読み書き可 詳しいいことは他の資料をあさって読んだほうがよく分かると思う. Go言語でファイルを開くときは他にもいくつか方法がある. 例えば os.Create などだ....

9月 29, 2018

計算量について

計算量とは 計算量とは、アルゴリズムを評価する指標で、どのくらい計算に時間がかかるかを表したものである. O(n) のように表記する. O は order からきており, O(n) は おーだーn のように読む. プログラマがプログラムを書く理由は, 問題を 早く , 楽に 解くためである. せっかく作ったプログラムが非現実的な時間かかってしまっては意味がない. なのでプログラムを書くときは常に頭の中に計算量を意識しておく必要がある. 計算量の概念について すごく雑に解釈するとループの回数に一致する. 次のようなプログラムがあったとしよう. for i := 0; i < n; i ++ { fmt.Println("にゃーん") } このプログラムの計算量は O(n) です. n が増加すると計算時間は線形に増加する. 次のようなプログラムはどうであろうか? for i := 0; i < n; i ++ { for j := 0; j < n; j ++ { fmt.Println("にゃーん") } } このプログラムの計算量は O(n^2) になる. 次のような場合はどうなるか? for i := 0; i < n; i ++ { fmt....

9月 27, 2018