grpcを見たメモ

クライアント (ブラウザ) とサーバーがやりとりするためにgrpcを使えないかなと思ってサンプルコードを見たりちょっと触ったメモ。結論からいうと今回の用途には合わないので見送ったけど、後のために。 ブラウザでは使えない Can I use it in the browser?…

Scalaで書いたWebアプリケーションのレスポンスにデプロイされているGitコミットのSHA1を含める

WebアプリケーションのレスポンスヘッダにGitのsha1を含めておくと、デプロイに失敗していて古いバージョンだった (そのせいでおかしかった) ということに気がつきやすくなって多少便利。Perl (PSGI) だと、 `git rev-parse HEAD > VERSION` などしておいて …

筋トレティータイム

僕はコーヒーが苦手で、飲むと必ずお腹を壊すので避けるようにしている。その代わりではないけれど、気分転換したいときには紅茶を淹れて飲むことが多い。コーヒーと違って蒸らし時間があるので待ち時間がどうしても発生する。ティーバッグを淹れてそれを処…

デフォルトでHTTPレスポンスがキャッシュされるのはどんな場合か

HTTP APIのキャッシュ戦略を考えながら、ふとcache-controlなどを指定しなかったとき、デフォルトのキャッシュ戦略はどのように定義されているのか気になったので調べた。 Storing Responses in Caches RFC7234のStoring Responses in Cachesにレスポンスを…

nginx: 同じ configuration level で auth_basic off は指定できない

nginx の ngx_http_auth_basic_module を使って BASIC 認証をかけることができる。ドキュメントを読むと明示的に `auth_basic off` を指定することで BASIC 認証を切ることができそうだったので試したけど、うまくいかないケースがある。結論からいうと `aut…

生活における夢を集めるTrelloのボードを作った

プライベートで締切のあるタスクや、忘れてはいけないタスクは To Do 管理ツールでリマインドしている。それらのようなタスクは、誰かに依頼されるだとかして具体的なタスクとして直接インプットされる一方、日々の生活における夢はたとえば「石油を掘り当て…

YAPC::Kansai 2017 OSAKAに参加した

YAPC::Kansai 2017 OSAKA オーディエンスとして参加したので聞いたトークのメモなど。 Webアプリケーションのキャッシュ戦略とそのパターン (40min) speakerdeck.com 主に Web アプリケーションの世界におけるキャッシュの話。目新しい話題ではないけれど、…

Git であるディレクトリ以下に最近追加されたファイルを見る

git log \ --grep 'Revert' --invert-grep \ # revert コミットを除く --diff-filter=A \ # 新規追加のみ --format='' --name-only \ -- lib/Plack/Middleware lib/Plack/Middleware/ 以下に最近ファイルを新規追加したコミットの一覧: lib/Plack/Middleware…

Vue.js で分割払いの手数料をわかりやすく表示するページを作った

Card Paymentリポジトリ: playground/card-payment at gh-pages · aereal/playground · GitHub実質年率って意味わからないし計算がめんどうなので、金額と支払い回数を入れると総支払い額と月々の支払い額を表示するページを作った。普段自分が使うブラウザ…

Go の text/scanner で改行をトークナイズしたいときは

Go

Go の text/scanner はレキサを書く面倒な仕事の大半をいいかんじにしてくれて本質的なコードに取り組みやすくとても便利。 しかしはてな記法や Markdown のように、行全体が単なるテキストではなくいくつかのパターンからなる文法のレキサを書くときは、パ…

WANDRD Prvke Pack を買った - カメラバッグ考2017

PRVKE Pack というバックパックを買ったのでそれの紹介と、バックパックを選ぶにあたっていろいろ比較検討したメモについて書いておく。 新たなバッグに求めること 他に検討したバックパック WANDRD PRVKE Pack 気に入っているところ いまいちなところ 新た…

セットアップスクリプトでは必ず rbenv exec/rbenv which したほうがいい理由

簡単に言うと、rbenv の shims はシェルの `PATH` 探索とは独立して実行ファイルを探索しているため。以下、単に rbenv としているけれどクローンである plenv なども同様と考えてよい。 shims とは rbenv の README が詳しい。 Shims are lightweight execu…

Perl で memcached を使うときは Cache::Memcached::Fast::Safe がよさそう

memcached はコマンドインジェクションの機会が主に2つあって、1つはプロトコルで定められたキー長250文字を越えた場合と、キーに改行文字を含む場合。詳しくは: 第2回 memcachedのセキュリティと脆弱性:memcachedの活用と運用 実践編|gihyo.jp … 技術評論…

markdown-toc: Go で Markdown の見出しをパースして目次を作る

Go

github.com Go でテキスト処理をする練習のために書いてみた。 mdtoc - The markdown ToC generator - ウェブログ - Hail2u.net が元ネタで再実装というかんじ。 小難しいことをやるとどうしても泥臭くなるけど、普段書いている高水準なコードはこれくらい泥…

数字で振り返った2016年

社内 LT 大会で「数字で振り返る2016年」と題していろいろ個人にまつわる数字を集めたので整えたものを遅ればせながら旧年の振り返りとします。 Amazon で購入した金額 年 金額 前年比 2016 389,277 円 (124.54%) 2015 312,547 円 (136.27%) 2014 229,352 円…

はてなブログのデプロイを約6倍高速化したはなし

今年、稼働中のサービスであるはてなブログのデプロイ方法を新しい方式へ無事故で移行し、従来と比べて約6倍速くデプロイできるようになりました。 この記事では、安全にデプロイ方式を変えたプロセスを順を追って紹介します。 はてなブログと継続的デリバリ…

レビュー依頼はすばやく見る

お題「エンジニア立ち居振舞い」 ということでエンジニアの立ち居振舞いについて書きます。今いるチームでは毎日午後からレビュータイムということでレビュー依頼された Pull Request を見ています。最近、他のチームからレビュー依頼が消化されなくて頑張っ…

indirect object notationでハマらないためのno indirectプラグマ

普段、Perlを書くときは require_ok などでモジュールがコンパイル可能か・構文エラーがないかをテストするようにしているけれど、 require_ok では発見できない構文エラーを発見したのでそれの詳細と対策について。 実行時エラーになる構文エラー (?) とind…

PENTAXで残した記憶たち

小学生のころにレンズ付きフィルムを少し使ったくらいで、カメラといえばデジタルの自分にとって長らく写真は、親に言われるまま渋々と学校行事のスナップ写真を注文して買うだけのものだった。高校生のころ、京都や東京で淡々と、あるいは鬱屈と撮った写真…

Scala めく春

春なので4年前くらいにコップ本の初版を読んで以来の Scala を書きます。 Scalaスケーラブルプログラミング第2版作者: Martin Odersky,Lex Spoon,Bill Venners,羽生田栄一,水島宏太,長尾高弘出版社/メーカー: インプレスジャパン発売日: 2011/09/27メディア:…

便利 zsh 設定 N 連発

zsh

シェルなどの設定の知見が意外と広まってないよね、ということで話題になったので書きました。 :q で exit https://github.com/aereal/dotfiles/blob/1be211fcda027f75b0624eab2c44a288f8e0691e/.zshrc#L174Vim 使っていると :q したくなるので alias をつく…

日本の伝統色を使ったカラースキーム: Japanesque

Vim

GitHub - aereal/vim-colors-japanesque: The colorscheme featuring Japanese traditional colors. 日本の伝統色を使ったカラースキーム: Japanesque GUI 版の Vim 向けカラースキーム・Japanesque を作った。iTerm 2 で使えるカラースキーム、Japanesque …

PageSpeed Insights のスコアを Mackerel に投稿するアプリケーションをボタン1つで Heroku にデプロイできる状態にした

GitHub - aereal/psi-metrics: Post PageSpeed Insights score to Mackerel PageSpeed Insights とは PageSpeed Insightsユーザが体感するページの読み込み速度を100点満点で評価するサービス。画像を圧縮せよとか HTTP キャッシュを使えとか、とにかく Web …

Capistrano 2で複数のログを tail するときに見やすくする

cap log するとデプロイ時に観察したいログがとにかく tail できるということになっている。しかしまとめて流れてくるので、どのホストからなのかなどわからなくて少し困る。ので、出力にホスト名とファイル名を含めるようにした。出力の例: [xxx.xxx.xxx.xx…

近況

フォローしている人がスターをつけたリポジトリを詳細に見たい https://github.com/ や https://github.com/USER.private.atom?token=XXX で見れるタイムラインを見て他の人が star をつけたリポジトリをチェックするといったことをしているとき、どういうリ…

Ruby でメソッド内で定数を定義する方法

Ruby ではメソッド内で定数を定義することは通常できない。 例: def k K = 1 end # /Users/aereal/Dropbox/sketches/const.rb:2: dynamic constant assignment # K = 1 # ^ ちなみに dynamic constant assignment は「メソッドの定義内で定数を定義できない…

2015 → 2016

2015 2015-01-01から1年間の記事一覧 - Sexually Knowing 「安全にソフトウェアをつくる」ことが大きな関心であり、そのために CI (Jenkins) をよりディープに使おうとしたり、Ansible や Homebrew を活用していわゆる Configuration Management を進めた。 …

CI で実行するスクリプトをリポジトリに含めるときに古いブランチでも実行できるようにする

Git

CI で実行すべき処理をシェルスクリプトなどにしてリポジトリに含めておく、というのはまっとうな管理というかんじで望ましい。とはいえ、新しく CI のジョブを追加するなどして新しいスクリプトをリポジトリに追加した場合、追加するコミットが含まれていな…

iTerm を全画面で表示するのをやめて画面の左半分に表示するようにした

Cmd-Return で全画面にできるのでそのようにしていたけれども、実際のところターミナルが全画面で表示できていて嬉しいことってあまりなかったので左半分に出すようにした。 上半分ではなく左半分にしているのは、ターミナルで見たい情報は幅よりも高さがあ…

連打を支える技術

この記事は、はてなデベロッパーアドベントカレンダーの19日目の記事です。 昨日は、id:t_kyt による あれから一年、あの TypeScript プロジェクトは今 - 多幸感 でした。 すばやく、かつ堅牢にアプリケーションをつくる ボタンを連打したくなる性と向き合う…

JSON::TypeInference 1.0 と JSON::Schema::Generator (trial) をリリースした

JSON::TypeInference 1.0 metacpan.orgだいたい欲しいものは実装したので覚悟を決めるという意味での 1.0 リリース。 これはなにか? Perl の値 (スカラ値、ハッシュリファレンス、配列リファレンスなど) が JSON のどの型であるかを推論するモジュール。 Per…

JSON::TypeInference 0.04 で null かもしれない値を Maybe 型として推論するようにした

metacpan.orggithub.comNull と値型のただ2つからなる Union 型を Maybe という特別な型として推論するようにした。ちょっと便利。Maybe だったら {"type" : ["null", "string"]} のように出力するようにすると、より厳密な JSON スキーマを生成することがで…

最近の CPAN モジュールを作るときの構成

github.comMinilla を使っている。minil new してからちょっと手を入れる。 .mailmap <aereal@aereal.org> <aereal@users.noreply.github.com>GitHub の Web インターフェースで Merge Pull Request ボタンを押すとコミットの AUTHOR_EMAIL がこれになる。たぶんメールアドレスを非公開にしているとこれになるよう</aereal@users.noreply.github.com></aereal@aereal.org>…

Perl の値から JSON の型を推論するモジュールを書いた

github.com metacpan.org これは何か Perl の値 (スカラ値、ハッシュリファレンス、配列リファレンスなど) が JSON のどの型であるかを推論するモジュール。Perl の 1 という値は JSON の number である、Perl の "a" は JSON の string である、という風な…

Config::ENV で各環境で必ず定義すべきキーを定めておく

metacpan.orgちょうどいいデフォルト値が見当たらないので、このキーは各環境で適宜、定義せよ、という風にしたい。interface みたいなかんじ。 use strict; use warnings; use Test::More tests => 2; use Test::Fatal qw(exception); { package My::Config…

#yapcasia に参加した

トークしつつ、トークを聞いたりなどした。 1日目 いろいろ聞いたけど印象的だったトークについて。HTTP/2時代のウェブサイト設計 - YAPC::Asia Tokyo 2015yapcasia.orgkazuho さんの発表を初めて見た。声が高い。僕は大学を中退していてアカデミアどころか…

#yapcasia で『世界展開する大規模ウェブサービスのデプロイを支える技術』という発表をした

世界展開する大規模ウェブサービスのデプロイを支える技術 - YAPC::Asia Tokyo 2015世界展開する大規模ウェブサービスのデプロイを支える技術 - YAPC::Asia Tokyo 20152年ぶり2度目の YAPC::Asia Tokyo でタイトルにある通り発表をしてきました。資料は近日…

YAPC::Asia Tokyo 2015 のトークスケジュールを集めたカレンダーを作った

https://www.google.com/calendar/ical/037qm3orvt1bkf5g2lsi1br0bg%40group.calendar.google.com/public/basic.icsYAPC::Asia Tokyo 2015 も来週に控えて、どういうトークを見にいくか悩むこの頃なのでカレンダーをつくりました。Talks - YAPC::Asia Tokyo …

npm install -g gulp とかしない流儀

gulp とかを使っているプロジェクトの場合、ビルドツール類も devDependencies に含めてバージョンを固定したいという要求があると思う。ところが実行ファイルにパスを手軽に通したいという理由のみで npm install -g gulp などしてしまうとバージョンが固定…

#小学生のときにやってた悪夢っぽいこと選手権

スコアメーカーという楽譜入力ソフトがあってこれを買ってもらって遊びはじめたところ、MIDI というもので勝手にコンピュータに演奏させることができるとわかって大喜びしはじめた。ひたすら入力して演奏させる。アーティキュレーションが思ったかんじではな…

electron で起動したアプリケーションがキーボードの入力を受け付けない問題

Atom Shell applications not detaching from shell when started via symlink on OS X 10.10 · Issue #1151 · atom/electron · GitHubこれに似た問題。tmux のセッション内だったので試しに reattach-to-user-namespace electron ... としたらうまくいった。

近況

YAPC::Asia Tokyo 2015 世界展開する大規模ウェブサービスのデプロイを支える技術 - YAPC::Asia Tokyo 2015yapcasia.org採択された。 App-xslatert と Text-Xslate-AST-Walker aereal/App-xslatertgithub.comApp-xslatert というツールを作り始めた。App-PRT…

mackerel-agent で便利に使える OS X 向けプラグインを Homebrew でインストール

aereal/mackerel-agent-plugins-osxgithub.commackerel-agent-plugins-osx というリポジトリを非公式に作って置いておくという活動を前からしている。今のところをバッテリ残量をホストのメトリクスとして投稿できるのみ。これを新しい MacBook にインストー…

OS X のセットアップを Ansible にだいたい任せる

新しい MacBook Pro がやってきたのでセットアップの記録を書いておく。 「だいたい」とあるように、実際のところ自分の手を動かさざるを得ない手順はまだまだあるし、むしろ増えたりもしている。 手順 App Store.app で Xcode をダウンロード System Prefer…

Path::Tiny を継承する

Path::Tiny - search.cpan.org Path::Tiny には new という、いかにもオブジェクト指向的なコンストラクタのような名前のメソッドが定義されているのでいかにもオブジェクト指向的に継承できるように見えるが結論から言うと できない 。 sub new { shift; pa…

Git でローカルの変更を捨てて upstream に reset したいとき

Git

git reset --hard [HEAD]@{u} tracking branch が設定されている場合に使える。1.7.0 から使える。

Git で特定のリビジョンから tarball やディレクトリを作る

Git

git-archive を使うと worktree に変更があるかどうか (dirty かどうか) を気にしなくてよくて便利。git で管理しているリポジトリの各ブランチの中身をそれぞれ個別のディレクトリにエクスポートする - その手の平は尻もつかめるさmoznion.hatenadiary.com…

Jenkins の REST API

http://JENKINS_HOST/job/JOB_ID/api/json 設定されているパラメータとか見える 最近のビルドとか見える http://JENKINS_HOST/overallLoad/api/json 負荷統計が見える http://JENKINS_HOST/load-statistics で見えるのと同じ?

GitHub の Deployments API を使ったデプロイのワークフローのイメージ

GitHub の Deployments API を使うと Web アプリケーションのリリース (デプロイ) に関わるワークフローをより便利にできそうだったので、試したことを記録する。 Deployments API でできること Deployments | GitHub API すべてドキュメントに書いてあるが…

Handlebars テンプレートをコンパイルした結果をファイルに出力する gulp タスク

aereal/gulp-handlebars-playground · GitHubHTML を出力するためのタスクを用意してみた。 gulp gulp-data gulp-compile-handlebars gulp-rename ……を使った。 gulp-data stream に data を追加できる。gulp-compile-handlebars などのようにパラメータを受…