2017-04-19

Rust でつくる VM 型の Brainf\\k の処理系

これまで言語処理系のコンセプトこそ学んできたものの、実際に手を動かしてゼロから処理系を作る体験をしたことがなかったので、合間の時間を使ってガッと BF の処理系を作ってみました。 まず慣れている Ruby で実装して、その後、いま練習中の Rust で実装しました。この記事は、その記録になります。

実装の方針

BF は言語仕様が非常に小さいこともあり、初学者でも実装が簡単なため、ちょっとトリッキーな実装をしてみることにしました。 コードゴルフ的なアレではありません。完全に自己満足です。

  • やらなくてもなんとかなりそうだけど字句解析と構文解析をする
  • やらなくてもなんとかなりそうだけど...
2017-03-18

書籍 ElasticSearch Server と Elasticsearch 5.2

業務で Elasticsearch をやっていくことになったので、一通りわかっておきたいと思って、いわゆる「緑の本」を買って読みました。

高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍)
KADOKAWA / アスキー・メディアワークス (2014-03-25)
売り上げランキング: 42,891

Elasticsearch の利用と運用において知っておいたほうがよいことをまんべんなく知れる良書なのですが、書籍の対象とする Elasticsearch ...

2017-03-12

Cerebro の実用的な Docker image を作った (Elasticsearch 管理のおともに)

Cerebro とは

Elasticsearch クラスタを運用するにあたって、REST API を使ってインデックスやクラスタそのものの操作をすることは避けられません。 その際、API の結果として返ってくる JSON だけでクラスタの状態を想像してオペレーションを行うのは、ウサギや人類には結構厳しいものがあります。

また、インフラエンジニアだけではなく、サービスエンジニアが自分たちのプロダクトで使っている Elasticsearch を責任を持って管理できるようにするためにも、使いやすい管理ツールは強力な武器となります。

Elasticsearch 5.0 以前は Kopf と...

2016-12-14

ネイティブ npm モジュールをビルドして Lambda で使いやすくする Clairlune の紹介

この記事は、Serverless Advent Calendar 2016 の 15 日目の記事です。

Node.js で Lambda function を書くときに、地味に困るのがネイティブバイナリのビルドが必要な npm モジュールを利用する場合です。何も考えずに手元でビルドして zip で固めてアップロードしても、Lambda が実行される環境でそのバイナリが実行できるとは限りません。

そこで、ビルドとスクリプトのアップロードを助けるツール Clairlune を作りました。

https://github.com/mozamimy/clairlune

Clairlune ...

2016-11-30

Docker for Mac でホストの特定のポートにつなぐ方法

Docker for Mac、安定してふつうに動くのですが、Linux 用のものとは違って docker0 のような仮想のネットワークアダプタが生えないために、ホスト OS の特定のポートにコンテナからつなぐ、というようなことが直感的にできません。

業務上、AWS の VPC 上にあるサーバの特定のポートに到達できるように SSH トンネルを刺して、ホスト OS に生やしたポートからアクセスできるようにして、コンテナからつなぎにいきたいことがまれによくあるので、これではこまります 🐰 💦

これでずーっと悩んでいたのですが、公式のドキュメント にひっそりとワークアラウンドが書かれていま...

2016-11-27

mozami.me を HTTPS 化して CI でデプロイできるようにした

ずっとやろうと思いつつ、なんとなくだるくてやってなかった mozami.me の HTTPS 化をしました。

構成は、S3 バケットをオリジンにした CloudFront の distribute を作って、証明書は ACM で発行したものを使ってます。静的なサイトなら定番の構成ですね。さようなら Github Pages..

ついでに、これまたやろうと思いつつだるくてやってなかったブログの自動デプロイを仕込みました。以下のような感じで Travis CI の設定を書くと、master ブランチに merge した瞬間に Middleman のビルドが走ってデプロイされます。

https...

2016-11-20

Itamae 用の Vim syntax プラグイン Itamae.vim の紹介

itamae.vim

インフラの構成管理が Ruby の DSL でできて便利な Itamae ですが、Vim で書いてるときに、キーワードっぽいメソッドに色がつかないのが地味に不便でした。

Itamae 向けの Vim の syntax が、ちょっと探してもなさそうだったのでサクッと作りました。以下の GitHub リポジトリからダウンロードできます。

https://github.com/mozamimy/itamae.vim

これを作るにあたっては、Nymphia.vim で得た知見が生きました。Ruby をベースとしてキーワードをハイライトする、という点では同様なので。

楽しい Itamae...

2016-11-13

SSH config を構造的に書くための Ruby の DSL Nymphia の紹介

たくさんのサーバを日々扱うエンジニアにとって、SSH config をキレイに保つことは大切です。 そもそも SSH config は構造的に書きにくい仕様になっているし、「まあそんなものか..」と妥協して、SSH config のメンテが適当になってしまうこともあると思います。

今までわたしもそうだったのですが、さすがにそろそろ破滅が見えてきていて、なんとなく Ruby で DSL を作るやっていきが高まったので、Ruby の DSL で設定を書くと SSH config を生成する Nymphia というものを作りました。

https://github.com/mozamimy/nymphia

2016-07-17

Itamae でレシピとリソースに共通のヘルパメソッドを定義するテクニック

Itamae 使ってますか?

Chef のような Ruby の DSL による気持ちのいい書き心地と、Ansible のようなシンプルさを兼ね備えており、わたしのお気に入りの構成管理ツールです。

レシピとリソースにヘルパメソッドを追加したい

ある程度 Itamae のレシピが増えてくると、コードを DRY にするために、特定の処理やデータをメソッドとしてくくりだしておいて、各所で使いたくなることがあります。

Itamae は結局 Ruby なので、この目的を達成する方法はいろいろあると思います。この記事では、それなりにキレイと思われる、レシピとリソースに共通のヘルパメソッドを定義...

2016-07-16

Node.js と AWS (S3・Lambda・SES)を使って CLI アップローダを作ってみた

Architecture

AWS の API であそぶ

ちかごろ、業務で本格的に AWS と向き合う機会が増えてきました。AWS の API を使いこなしていろいろなものが作れるようになりたいなと思ったので、前から遊んでみたかった Lambda を使って、CLI で使えるファイルアップローダを作ってみました。

ファイルの受け渡しがめんどくさい問題

ファイルアップローダは巷にたくさんありますが、たいていがブラウザベースで、わたしにとって使いやすいものではありません。CLI でシュッとファイルをアップロードしてメール送れたらな〜と常々思っていたのですが、ある日天啓が。

「AWS の API の勉強がてら、S3...