Memento memo.

Today I Learned.

AirflowでDAGが認識されなくてハマった

起こった事象 以下のようにDAGの生成を別のメソッドに切り出していたらAirflowからDAGが認識されなくなった dag_factory = DAGFactory.get_default() dag = dag_factory.create( dag_id="example", ..., ) 原因 DAG file は airflow と dag という文字列を両…

Telepresence で Kubernetes Client Library を使う

結論 Telepresenceの --mount オプションと docker volume オプションを使う。 telepresence \ --swap-deployment <container name> \ --mount /tmp/known \ --docker-run --rm \ -v=/tmp/known/var/run/secrets:/var/run/secrets \ <local image> 背景 Kubebuilder (v2.3.1) で k8s の Op</local></container>…

GHRC: GitHub Repositoryの設定を宣言的に管理するツールを作った

ghrc っていうCLIツールをGoで書いた。 github.com 機能としてはRepositoryのLabel, Protected branch, Merge options, etc. の設定をYAMLで宣言的に管理できる。 既存の設定を ghrc import して .ghrc.yaml というファイルに書き込み、YAMLをシュッと書き換…

jemallocを利用したRubyのDocker Imageを作る

以下の記事で説明されているようにメモリアロケータをjemallocにすることで、Rubyのメモリ効率をよしなにできる場合があります。是非使いましょう!!!!!! techracho.bpsinc.jp さて、時は2019年であり、世界はコンテナに包まれました。 RubyのDocker Im…

ソフトウェアエンジニア4年目の作業環境(物理)

職業ソフトウェアエンジニアを始めて4年目の自分の現在の作業環境について語ります。 タイトルに「物理」と付けているのはソフトウェアとしての開発環境ではなく、椅子やキーボード等の実物質を伴った環境であることを表しています。 背景 ソフトウェアエン…

2018年に読んで良かった技術書・ビジネス書TOP3

今年は読んだ中で特に良かった本を3冊紹介します。 Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Ma…

GatsbyJSをGAEにデプロイする

GatsbyJS をGoogle App Engine にデプロイする方法の備忘です。 app.yaml と cloudbuild.yaml を設定してCloud Buildのコマンドを叩くことでデプロイします。 Google App Engine の設定 まずは app.yaml の設定です。 基本は Hosting a static website on Go…

WTFormsでPythonの予約語をFieldとして扱いたい場合の対処法

こういうことをしたかった。 class MyForm(FlaskForm): from = DateField(format='%Y%m%d') to = DateField(format='%Y%m%d') が、これは syntax error になる。理由は from がPythonの予約語であるため。 from を辞書のkeyのstringとして扱えれば回避できる…

Dockerのコンテナ内部からコンテナidを取得する

cat /etc/hostname すればいけた # cat /etc/hostname 7b9fc2c0bc4f

Docker の multi-stage build で golang の 軽量 image を作る

Multi-Stage Build docs.docker.com Docker の 17.05 (ce) から multi-stage build 機能が追加されました。 multi-stage build とは、ベースイメージを複数利用し、多段階で build を行う機能です。 利用シーンはビルド環境とランタイム環境の分離が挙げられ…

Rails 5.1 で webpack の設定を使う

Rails 5.1 がリリースされたので webpacker gem の機能を使う超最小限のメモ いれる # rails 5.1 系をいれる $ gem install rails # webpackオプションをつけてnew $ rails new hogehoge --webpack # reactとか使いたかったらこう $ rails new hogehoge --we…

ScalaのREPL環境 Ammonite-REPL を使ってみる

この記事を書いてる段階でScala歴5分くらいなのですが、デフォルトのREPL環境が微妙だったのでいい感じのScala REPLを探してきました。 シンタックスハイライトと補間が効くやつです。 Ammonite 日本語情報がほとんどないので流行っていないのかもしれない(…

zshmarks と prezto と peco でディレクトリ移動をいい感じにする

Zsh

N番煎じ感があるけど今まで設定してなかったのでやってみます。 zshmarks ディレクトリをブックマークして移動しやすくするやつです github.com 似たようなプラグインに https://github.com/mollifier/cd-bookmark なんかもあるのですが、zshmarksの日本語情…

最強の Datadog の構成管理ツール Doggy を使う

Datadog 自体には構成管理機能はついていないため、モニタリングやダッシュボードの設定を誰かが吹っ飛ばした場合に復旧できない問題がありました。権限をつけることはできますが、それでもヒューマンエラーは防げません。「構成をコード化し、gitで管理でき…

ここ一年くらいで読んだ技術書をまとめる(70冊くらい)

読んだというか積んでるだけの本もありますが、整理してみます。 途中で力尽きましたが超適当にコメントつけていきます。 あまりエッジの効いた本は読めてないので大体のプログラマ/エンジニアにはおすすめです。 ソフトスキル系 SOFT SKILLS エンジニアの人…

NumPyの配列操作 - 条件に合う要素のみフィルタする処理の理解

積ん読消化中で、以前買った機械学習入門本を読んでいます。 データサイエンティスト養成読本 機械学習入門編 (Software Design plus)作者: 比戸将平,馬場雪乃,里洋平,戸嶋龍哉,得居誠也,福島真太朗,加藤公一,関喜史,阿部厳,熊崎宏樹出版社/メーカー: 技術評…

「サーバ/インフラエンジニア養成読本 ログ収集〜可視化編」でFluentdがinstallできない問題

去年買って完全に積んでいた「サーバ/インフラエンジニア養成読本 ログ収集〜可視化編」を読み始めました。 最近お仕事で運用設計的なところ触ったりして興味湧いてきたのがきっかけです。 サーバ/インフラエンジニア養成読本 ログ収集〜可視化編 [現場主…

Neovimのpython_host_prog設定

新しくMBP買いました。Brewfile, dotfiles周りはある程度環境構築自動化できてるんですが、Neovim <=> python_host_progの連携とか何もしてないので少しずつscriptに落としていきたい。 とりあえずNeovimでPython呼べるようにshellを書きます。 zcheeさんの…

Ruby: Hash -> Structの変換

こんな感じで書けます def deep_struct(hash) foo = hash.values.map do |v| case v when Hash deep_struct(v) when Array v.map { |x| deep_struct(x) } else v end end Struct.new(*hash.keys).new(*foo) end OOPっぽく書きたければHash, Arrayに deep_str…

Hacktoberfest 2016 に参加してきた

Hacktoberfestなるものに参加して景品のTシャツを貰いました。あとステッカーも7枚ほど貰いました。 Finally, #hacktoberfest swag has just arrived! Thanks @digitalocean @github pic.twitter.com/nLrMdipoJ1— shotat (@shotat_jp) 2016年12月7日 Hackto…

サイバーマンデーのセールでPS4買って優勝した

サイバーマンデーが最高だった話です。技術ブログ要素ゼロ。 普通にPS4買う場合: 30,895円 PlayStation 4 ジェット・ブラック 500GB(CUH-2000AB01)出版社/メーカー: ソニー・インタラクティブエンタテインメント発売日: 2016/09/15メディア: Video Gameこの…

Docker と node_modules と Volume Trick

Rails & Node.jsの構成で Docker環境を作ろうとしたらハマったのでメモ 現象 npm installを実行する Dockerfileを記述 ... RUN mkdir /app WORKDIR /app # npm install ADD package.json /app/package.json RUN npm install ... カレントディレクトリを /app…

Redisの有効期限系コマンド

redis-cliから叩いた場合のコマンドです EXPIRE(key, seconds) 有効期限の設定(相対時間) # key-valueを適当に設定 > SET ice "I'm melting..." OK # 有効期限を10秒にする > EXPIRE ice 10 (Integer) 1 > EXISTS ice (Integer) 1 # 10秒以内 > EXISTS ice…

VimConf 2016 に参加してきました

Vim

vimconf.vim-jp.org VimConf 2016 に参加してきました。会場はmixiさんで、コーヒーが無限に飲めて最高でした。 vim-jpの中の人や普段お世話になっているプラグインの開発者の方と話せて楽しかったです。 印象に残った発表と感想書きます。全部は書けないの…

gemを作ってrubygems.orgでリリースする

作ったもの github.com slash-force というかっこいい名前のgemを書きました。 Railsで特定のURLへとアクセスしたときに末尾にスラッシュを付けて強制的にリダイレクトさせるだけのプラグインです。 こんな感じでgemをリリースできました。 slash_force | Ru…

Eslintでunderscoreから始まる変数をチェックさせない設定にする

defined but never used って怒られるやつです。 error '_jqXHR' is defined but never used no-unused-vars _xxx みたいにアンダースコアから始まる変数は未使用でもokな設定にしたい、と思い調べました。 以下のリンクが該当箇所でした。 eslint.org .esli…

Rubyのobject_idからobjectを取得する

備忘録です [1] pry(main)> hoge = "foo" => "foo" [2] pry(main)> hoge.object_id => 70163083352460 [3] pry(main)> ObjectSpace._id2ref(70163083352460) => "foo" yeah!

Elixir ApplicationをGAEにデプロイ

GAEの説明を見る限り、メジャー言語しか対応してなさそうに見えたのですが、 Docker (Custom Runtimes) を選択すれば何でも動かせるそうです。 EBSもGAEもDockerさえ使えばどんなRuntimeでも使える => Elixirも動かせる!!! ということでGAEにElixir製のbo…

Elixir製Hubot風BotフレームワークのHedwigでSlack Botを作る

Hubotに飽きたので、HedwigというElixir製のFWでbotを作ってみようと思い立ちました。 Hedwig github.com Adapter baseのHubotっぽいBotフレームワークです。Elixirです。 公式のAdapterでSlack対応してます。 Setup mixでprojectを適当に作ります。supervis…

Concurrent Rubyで並行処理プログラミング

Rubyで並行処理を書きたかったのですが、自前でスレッドセーフなプログラムを書ける気がしないのでgemを探して来ました。 Concurrent Ruby github.com Be an 'unopinionated' toolbox that provides useful utilities without debating which is better or w…