タグ

ブックマーク / motemen.hatenablog.com (10)

  • Dockerfile をベースイメージの更新に自動で追従させる - 詩と創作・思索のひろば

    前回のエントリで作った Docker イメージ motemen/datastore-emulator は、google/cloud-sdk をベースにしているが、このベースイメージがけっこうな頻度で更新される。とうぜん自分はその追従に手を煩わせる気はなくて、全部自動でやってほしい。 やりたかったこと google/cloud-sdk:x.y.z がリリースされたら、 リポジトリ中の ./Dockerfile と ./alpine/Dockerfile の FROM を google/cloud-sdk:x.y.z(-alpine) に更新し、 x.y.z タグを打って git push することで、 Docker Hub に x.y.z(-alpine) タグとしてリリースする これを自動かつ無料で実現したい。 採用しなかった案: 自分でなんか作る はじめは適当な GitHub Actio

    Dockerfile をベースイメージの更新に自動で追従させる - 詩と創作・思索のひろば
  • Spreadsheet に送信したスピードキュービングの記録を Slack や Pixela に連携する - 詩と創作・思索のひろば

    ご機嫌いかがでしょうか。以前作ったタイマーアプリ fuTimer はスピードキュービングの測定記録をスプレッドシートに送信できるんですが、 記録をスプレッドシートに保存できるスピードキューブ用タイマーアプリを作った - 詩と創作・思索のひろば スプレッドシートは貧者のサーバレスこと(言い飽きた)Google Apps Script を呼びだせるので、記録データをその他の外部サービスと連携できます。自分が求めているのは Slack と Pixela の2つだったので、これらに投稿する仕組みを作りました。あとは Twitter もあってもいいかもな。 Slack こんな感じで、セッションをシートに保存するたびに、Slack に通知できます。 インストールと設定 fuTimer の記録に使っているスプレッドシートを開き、メニューから [ツール] → [スクリプト エディタ] を選択

    Spreadsheet に送信したスピードキュービングの記録を Slack や Pixela に連携する - 詩と創作・思索のひろば
  • チャンネルを使って、決まった数のリソースをgoroutine間で共有するパターン - 詩と創作・思索のひろば

    生成が重いリソース(や重い処理の実行権)を goroutine 間で共有し使いまわすようなパターンです。よく知られていて名前がついていそうだけど、ぐぐっても分からなかったので書いておく。 コネクションプールに近い感じで、最初にリソースを生成したあと、それらを大事に取り回します。リソースが空いてなかったら goroutine は待つことにする。sync.Pool は「プールにあったら使うけど、なかったら新しく作る」くらいの感じなので、ちょっとスタンスが違う。 チャンネルによる実装は簡単で、以下のエントリにも書いたセマフォを応用すればよい。 ざっくりと書いてみた例がこちら: https://play.golang.org/p/QWAXsA_89Y チャンネルによるセマフォの実装は、「バッファありチャンネルに何か(struct{})を挿入できた goroutine が実行の権利を持つ」というもの

    チャンネルを使って、決まった数のリソースをgoroutine間で共有するパターン - 詩と創作・思索のひろば
  • 作業ログと履歴をシンプルに共有できる furoshiki ってツールを書いた - 詩と創作・思索のひろば

    おはようございます。この記事ははてなエンジニアアドベントカレンダー2017の25日目の記事です。昨日は id:alpicola さんによる 社内で機械学習ハッカソンを開催しました でした。 サービスのデプロイをはじめとして、チーム内の開発者が共通して担当すべき業務というのはさまざまに存在し、基的に定型化されているものですが、開発者が手元で実行するなど自動化までは行えていないような場合、以下のような点が問題になります。 作業履歴が共有されない 同様に作業中に意図しない不具合が生じた場合、エラーログが実行した環境にしか残らない それぞれ、デプロイのタイミングを MackerelSlack に投稿して共有する、Gist にエラー時のログを貼るなど、チームに合わせた方法が存在していることと思います。また作業環境を同一にするため、チームにデプロイサーバを用意して作業はそこで行う、という方法も

    作業ログと履歴をシンプルに共有できる furoshiki ってツールを書いた - 詩と創作・思索のひろば
  • 型と名前によるGoのコード探索 ― gofind - 詩と創作・思索のひろば

    思いつきでツールを作ってはリスのように忘れ、再発見しては新鮮な気持ちで便利に使う日々です。 一般にプログラミングにおいては、ソースコードを読むことに意外とばかにならない時間を使うもの。特に Go ではデフォルトで標準ライブラリのソースコードが手元にあり、コードを書く際よい教科書になるので、これを読むことも多いはず。 Go は静的に型付けされる言語なのでその点コードは読みやすいけれど、データ構造が不変ではないので、ある構造体のフィールドがどこで書き換わるのかを知るには、処理を追っていくしかない。名前で grep するのもひとつの手ではあるけど、精度はあまり期待できない。 そこで gofind。簡単に言うと、型やパッケージを含めた名前でもって Go のソースコードを検索するツールです。 go get github.com/motemen/gofind/cmd/gofind 使い方は以下の通り。

    型と名前によるGoのコード探索 ― gofind - 詩と創作・思索のひろば
  • Wercker で Go のプロジェクトをクロスコンパイルし、GitHub にリリースする - 詩と創作・思索のひろば

    ghq をメンテナンスするにあたっていくつか無料の CI サービスを試してみたのですが、今回は Wercker を使うことにしました。いろいろ試行錯誤した結果表題のことがなんとか実現できた(ghq のリリースは GitHub 上 にあります)ので、ハマりポイントと共にこのエントリで紹介します。 Wercker Wercker は CI サービスのひとつで、ビルド環境やデプロイの 1 ステップを box および step という形でユーザが公開・共有し、それらを組み合わせることで CI の設定をシンプルにしようとしているところが特徴です。 ghq の wercker.yml を見てもらえばだいたい雰囲気は分かると思いますが、大まかに言って “box”, “build”, “deploy” の 3 項目をプロジェクトごとに設定します。 box はビルドが走る環境です。OS や、テストに必要なパ

    Wercker で Go のプロジェクトをクロスコンパイルし、GitHub にリリースする - 詩と創作・思索のひろば
  • OAuth2 のフローを Alloy Analyzer でモデリングする - 詩と創作・思索のひろば

    趣味でウェブの認証 API を地力で設計しようとしていたときに、認証フローの仕様を頑張ってこしらえたとして、その正しさをどうやって保証するんだろう? と疑問に思い、調べていたところ、「形式手法」というのに行き当たった。 形式手法というのはシステムの正しさを上流工程から検証するための方法で、数理論理やロジックに基づいている。その中でも厳密な仕様定義を求める方向と自動検証を求める方向とあるらしいが、Alloy はその後者に位置づけられ、軽量形式手法と呼ばれるもののひとつだということらしい。Alloy はモデリングのための言語および実行環境で、以下のホームページから入手できる。 http://alloy.mit.edu/alloy/ インターネット上にチュートリアルやマニュアルもあるが、作者による教科書の邦訳が出ていて、これで勉強してみた。 抽象によるソフトウェア設計−Alloyではじめる形式手

    OAuth2 のフローを Alloy Analyzer でモデリングする - 詩と創作・思索のひろば
  • Go 言語における並行処理の構築部材 - 詩と創作・思索のひろば

    5年前に買った『Java並行処理プログラミング ―その「基盤」と「最新API」を究める―』をようやく読んだ。買った頃には Perl やシンプルな JavaScript ばかり書いていたので並行プログラミングなんてほとんど気にすることがなく、実感がなくて読むのも途中で止まってしまっていたで、家を掃除しているときに見つけたもの。その後も趣味Android アプリを書くなど Java に触れる機会はあったけれど、せいぜいが AsyncTask を使うくらいで、マルチスレッドを強く意識してコードを書くこともなかった。 Java並行処理プログラミング ―その「基盤」と「最新API」を究める― 作者: Brian Goetz,Joshua Bloch,Doug Lea出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/11/22メディア: 単行購入: 30人 クリック: 442回

    Go 言語における並行処理の構築部材 - 詩と創作・思索のひろば
  • 任意の入力を human-readable にする humr ってツールを書いた - 詩と創作・思索のひろば

    Web サーバのアクセスログを tail してながめている時にパーセントエンコーディングされた文字列をデコードしたり、コマンドラインで数字を sort -n したあとにでかい数字を丸めて表示したり("1234567" を "1.2M" に、とか)したくなることが多かったので、その辺を汎用的におこなってくれる humr というツールを書きました。 npm でインストールできます: npm install -g humr 簡単に動きを確認するには、以下のコマンドを試してみてください: % echo '/search?q=%E6%97%A5%E6%9C%AC%E8%AA%9E 1234567' | humr 入力のうち読みづらいところが色付きで変換されて出力されたことが分かります。冒頭に書いたようにログなどの入力をパイプしてご利用ください。 仕組み humr は入力を Parser によって各行

    任意の入力を human-readable にする humr ってツールを書いた - 詩と創作・思索のひろば
  • コード補完もできる Go の REPL「gore」を作った - 詩と創作・思索のひろば

    タイトルの通りです。Go は LL 的に使える、とはよく申しますが、そういう意識で使っていると REPL 的なことをしたいときに困りがちですよね。そこで作りました。gore。いい名前ですね。 motemen/gore · GitHub 以下のスクリーンキャストでだいたいの雰囲気をお察し下さい。 (スクリーンキャストは cho45/KeyCast を使って撮影しました) 特徴 gore の特徴は以下の通りです。 ラインエディタと履歴 複数行入力 パッケージのインポート、補完つき 式および文を実行可能 コード補完(nsf/gocode を利用) プリティプリント(k0kubun/pp か davecgh/go-spew がおすすめ) ドキュメントも引ける(godoc が必要) 以上のように、非常に便利なものになっております。むしろこの程度 REPL には当然あってほしい機能だとも言える。 イン

    コード補完もできる Go の REPL「gore」を作った - 詩と創作・思索のひろば
  • 1