DRYな備忘録

Don't Repeat Yourself.

【Go言語】複数並列goroutineの中でのSIGINTの捕捉

go

やりたいこと 複数立ち上がっているgoroutineの中で、それぞれ独立にSIGINT捕捉できるだろうか?という素朴な疑問 ソースコード 期待されるアウトプット「各goroutineのidとinterruptedというログが出る」 package main import ( "fmt" "os" "os/signal" "sy…

【Go言語】Ctrl+cなどによるSIGINTの捕捉とdeferの実行

go

問題 deferを使って後処理をしたい場合に、プロセスがCtrl+cなどSIGINTで中断されるとdeferしたものが発火しない。プロセス自体が中断されるのであたりまえなんだけども。 問題の再現 package main import ( "fmt" "time" ) func main() { defer teardown() …

【メモ】aws-sdk-goを使ったSecurityGroupの作成

tl;dr docs.aws.amazon.com 動くコード package main import ( "fmt" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/ec2" ) func main() { sess := session.Must(session.NewSessionWithOpt…

ストレージサービスのBucket存在確認メモ

S3 s3://hoge aws s3api wait bucket-exists --bucket hoge echo $? # 255 存在するが権限が無い Waiter BucketExists failed: Forbidden 謎ケース(要調査: このへん?) Waiter BucketExists failed: Bad Request 再現 aws s3api wait bucket-exists --buc…

【Go言語】bufio.Scannerの静かな突然死に3営業日ハマった

go

tl;dr bufio.ScannerでScanが終わってもErrはちゃんと見ましょう。以上。 問題 継続的に書き込みのあるTCP接続からの読み込みを、bufio.Scannerをつかって華麗に逐次読み込みしていた。が、どうやらそれが静かに切断され、クライアント(こちら)側のローカ…

Webプログラマから見た「CWL」の功績と罪過

このエントリは、CWL Advent Calendar 2017 - Qiitaの25日目です。 背景 誰がエモ芸人や CWL is 何? データ解析が再現するということ、あるいは Common Workflow Language... - こんな時間ですがパスタを茹でます 異なる処理系の間で同一のワークフローの実…

GKEを使ったバッチジョブ実行

これは Google Cloud Platform Advent Calendar 2017 - Qiita の19日目のエントリです。otiai10です。 背景 大規模なデータの取扱いと演算を非同期に行いたい 上記を、任意のタイミングで発火させたい 上記は、特定のランタイムではなく、任意のランタイムを…

Azure CLIを使ってインスタンスの作成、sshまで

前回 Azureことはじめ - DRYな備忘録 をやったので、今回はCLIをやります。 Azure CLI 2.0 | Microsoft Docs とりあえずbrewでやるか % brew update % brew search azure-cli % brew install azure-cli % which az /usr/local/bin/az % az --version pyenv: …

Azureことはじめ

アカウント登録 Microsoft Azure が終わった図↓ Computeリソースの作成 必要な前提作業があった AWSなどと違い、インスタンスへsshするためのIdentityファイルを自分で作成する必要がある ssh-keygen -f ~/.ssh/azure/id_rsa みたいにしてつくった Azureでは…

Cgoを使ったパッケージと「Docker as Bug Report/Reproduce」というOSS運用について

このエントリはGo2 Advent Calendar 2017 - Qiitaの4日目です。 2017年は、着実にエロリツイート先生として実績を上げた1年でした、otiai10です。WETな方もよろしくお願いします。 Cgoを使った文字認識ライブラリがv2になりました Go言語には、Cgoという、…

人工知能とか機械学習とかニューラルネットワークとかディープラーニングとかぜんぜん分からんのでインターネットかき集めてざっくり理解したリンク集とまとめ

人工知能 / Artificial Intelligence / AI ? 機械学習 / Machine Learning / ML ? 神経回路網 / ニューラルネットワーク / NN ? 深層学習 / ディープラーニング / DL ? 実施したルール 読み始めたら途中で投げない わかんなくてもとりあえず最後まで読む…

【Go言語】準標準のWebSocketパッケージを使ったミニマムなチャットのサンプル

go

をつくって、こういう知見がたまったよ、みたいなの書こうと思ったんですが、Goの準標準パッケージである golang.org/x/net/websocket が便利すぎて「あ...できたわ」以上の感想が無いっていう現象になりました。 成果物はこちらです。ご査収ください。HTML…

【追記あり】【解決】Mac上のVagrantでFreeBSDが動かない

2017/11/28 追記 このVagrantfileですべてが動くことを確認できたので【解決】としました。 github.com 2017/11/16 追記 `sudo pkg update` segfaults in Vagrant · Issue #1612 · freebsd/pkg · GitHub 222510 – security/sudo: Immediate segfault when ho…

ElectronアプリをMac上でWindows向けにビルドする

ゴール MacOS上で動いてるElectronアプリがある electron-packagerを使い、Mac用に.appというフォルダを作って配布できている Windowsのひとたちにも配布したい 参考 GitHub - electron-userland/electron-packager: Customize and package your Electron ap…

Terraformってなんぞや

目的 Terraformのなんたるかを知る Terraformの初歩的な使い方を知る Terraformを使ってみる 調査 Terraform by HashiCorp 公式ドキュメント。Write, Plan, and Create Infrastructure as Code とのこと インフラ構成をコンフィグファイルにして再現性をもた…

Tesseract-OCRをソースからコンパイルする(4.00.00dev)

背景 Tesseract-OCR 4.00.00devで動かない、というissueが来た。 github.com 前回記事 Tesseract-OCRのDockerコンテナ内でのビルド otiai10.hatenablog.com 今回の成果物 Dockerfile Docker Hub docker pull otiai10/tesseract:4.00.00dev FROM debian:stret…

atom command not found

Problem # MacOS % atom . zsh: command not found: atom % which atom atom not found Anything can’t exist without Atom… Research atomコマンドが見つからない問題 – 蔦箱ブログ seems caused by update? Solution % which atom atom not found % /Appli…

【Go言語】意地でもsliceをswitch-caseで比較したい

go

invalid case []byte literal in switch (can only compare slice foo to nil) switch response[:4] { case []byte{0,0,0,0}, []byte{1,0,0,0}, []byte{2,0,0,0}: fmt.Println("do something") } // これ動かないやつ 可変長であるsliceはnilとの比較だけが…

EC2インスタンスにsshが接続できない原因のまとめ

AWS

目次(随時追加) InternetGatewayがVPCに未追加 Pemファイルのパーミッションが不適切 sshを試みるUserが違う 当該SubnetのRouteTableに当該InternetGatewayが追加されていない: Operation timed out 問題 sshコマンドを打ってもOperationTimeoutになる TCP…

(メモ)Go言語のinvalid recursive typeエラー、再帰データ型の実装とイテレーションについて

go

jsonでいうとこんな感じの { "id": 48, "name": "foo", "entry": { "id": 36, "name": "bar", "entry": { "id": 24, "name": "baz", "entry": { "id": 12, "name": "qux" } } } } 問題 コンパイル時のinvalid recursive typeエラーは、ポインタ型にすれば解…

(メモ)docker/machineのテストが落ちる問題

github.com bash-4.4$ DRIVER=virtualbox make test-integration test/integration/core/core-commands.bats test/integration/run-bats.sh test/integration/core/core-commands.bats INFO: Run the tests with B2D_CACHE=1 to avoid downloading the boot2…

Firebase Cloud Messaging(FCM)でより簡単にWebブラウザにPush通知を送るサンプル

前回、下記のエントリでProgressive Web Appにおけるそこそこ生のWeb-Push-Protocolについておおまかな仕組みを触れました otiai10.hatenablog.com ので、今回はFirebase Cloud Messagingを使って、もっと手軽にWebブラウザにPush通知を送るのをやってみた備…

webブラウザにPush通知送るサーバとjsのサンプル

このドキュメントは 以下の2つのドキュメントをよりプリミティブに理解するためのDRYな備忘録です。 Adding Push Notifications to a Web App | Web | Google Developers The Web Push Protocol | Web | Google Developers 背景 かつて サーバからブラウザ…

Goのコードから複数の異なるDockerホストに対してコンテナの起動を実装する

2017/06/19 追記 エラーハンドリングにバグがあったので修正しました channelに何か流したとき、channelから取り出されないと流し込んだ側をブロックするのを忘れていました - errored <- err + go func() { + errored <- err + }() 前回までで以下のことを…

【GAE/Go】goappで "There are too many files in your application" と怒られる

追記 2018/08/01 gcloud components update 来てたので、した。 goapp serve の "There are too many files" Warning は無くなったけど、代わりに hot rebuild もなくなってる?% goapp versiongo version 1.9.4 (appengine-1.9.74) darwin/amd64— エロリツ…

CSS書きたくなさすぎ問題2017

CSS

css書きたくない。できればjsも書きたくない。js必要なの嫌。軽くやりたい。という個人の日記です。 参考 Best CSS Frameworks of 2017 | Three29 10 Free Lightweight CSS Frameworks for a Fast Start 2017年にチェックしておきたい、CSSの軽量フレームワ…

GoのコードからDockerコンテナへのディスクボリュームのマウントを実装する

前々回、前回 GoのコードからDockerコンテナの起動を実装する - DRYな備忘録 GoのコードからDockerイメージのpullを実装する(bufio.Scannerかわいい) - DRYな備忘録 で、GoのコードからDockerイメージのpullとDockerコンテナのrunを実装できたので、実践的…

GoのコードからDockerイメージのpullを実装する(bufio.Scannerかわいい)

前回エントリ↓でコードからのイメージのpullが動かなくてあっれおかしーなーとなって悔しかったのでリベンジです。 otiai10.hatenablog.com tl;dr client.ImagePullの返り値はio.ReadCloser型とerror型 このio.ReadCloserが、イメージのpullのprogressなどを…

GoのコードからDockerコンテナの起動を実装する

やったこと docker clientをGoのコードからimportする container作成 container起動 container停止(& 自動削除) 苦労したこと けっこうdocker(現moby)のコードの移り変わりが激しくて、vendorを固定するのが苦労した これとか できなかったこと コードか…

不要になったDockerコンテナの一括削除

docker ps - Docker Documentation % docker ps -a -q -f "status=exited" | xargs docker rm -a --all runningではないコンテナも含めすべて表示 -q --quiet container idのみ表示 -f --filter 色々でフィルタリングできる を、xargsでdocker rmの引数に投…