CircleCIで変更があった箇所だけに限定してビルドする

CircleCi が公式で path-filtering という orb を提供しているのでそれを使う。現在のバージョンは 0.1.1。 詳しくは公式のドキュメントにも書いてある。https://circleci.com/docs/2.0/configuration-cookbook/#execute-specific-workflows-or-steps-based-…

Docs for Developers 読んだ

Docs for Developers 読んだメモ。 ドキュメント書き方だけにとどまらず、どのようにドキュメントを改善していくか、誰に向けて書くかなどが書いてあり、非常に面白かった。e34.fm で話していたのを聞いて買った気がする。 特に印象に残ったのは ドキュメン…

Redis のプロトコルの理解のために Redis client を書いてみた

reimpl/redis_client at main · ganmacs/reimpl · GitHub Redis のプロトコルがシンプルでだというのを聞きつけた1のでいくつかのコマンドをサポートした Redis client を書いた。 Redis は普段仕事で使ってる割にはどういうプロトコルを使っているか知らな…

UDPでメッセージを送り合う時に一つにパケットに他のパケットを相乗りさせる

SWIM ではそれぞれのノード間の変化(メンバーの追加または離脱)を障害検知のために送り合っている ping / ack メッセージに相乗り (piggyback) して送ることでより強固に効率よく他のノードに変化を知らせている。 SWIM について詳しくは論文1を読むか日本語…

ディレクトリの移動も peco を使うことにしてみた

最近ディレクトリ構造が複雑な(単純に長い)アプリケーションを触っていて、移動したい先のディレクトリまでスッと飛べないことが多かったのにイライラして書いた。 自分の場所より下のディレクトリをすべて出して peco でインクリメンタルサーチして飛ぶ感じ…

unicorn の hook が呼ばれるタイミングを調べてみた

unicorn には特定のタイミングで発火する hook を仕掛ける仕組みがあるが、それらの hook が呼ばれるタイミングを正確にわかっていなかったのでメモ。 いちおう公式のドキュメントはこちらにある。ここで言及する unicorn のバージョンは v5.3.0。 それぞれ…

簡単な UDP client / server in golang

UDP server と client の覚書。Ping を送って Pong と帰ってくるだけの雑なやつ。 特に難しいところもなくこの辺 みながらやると簡単にできる。 server 側 サーバ側では 127.0.0.1:8080 をlisten するようにしている。 何か送られてきたらそれを読んで、送っ…

Software Transactional Memory の雰囲気メモ

wikipedia の ( Software Transactional Memoryのページ ) を眺めたまとめのメモと、toy 実装をしてみた話。 github.com stm の rust 実装 見ながら書いてたんだけど、そのまま rust で書くのもあれなのでなんとなく go で書いてみた。 ちなみに int にしか…

バリア同期の実装

Java Concurrency in Practice の 5.5.4 Barrier の話 amzn.to バリア同期とは バリア同期とは、各スレッドの実行の進行具合を合わせるために使用する同期機構のこと。 複数スレッドにまたがった依存関係のある計算(処理)の完了を待って、処理を実行する際に…

Lock Striping についてとその実装

Java Concurrency in Practice の 5.2.1. ConcurrentHashMap にて Lock Striping というロックの方法が出てくる。 Lock Striping の説明と実装、および簡単にパフォーマンスを測ったのでそのメモ。 Java Concurrency in Practice作者: Brian Goetz,Tim Peier…

リポジトリごとに user.name と user.email を変更する

git

会社で Github Enterprise を使っているので、github.com の方の user.name と user.email でコミットしてしまわないようにリポジトリごとに設定を変更できるようにした。 gitconfig にあった user.name と user.email をけして、useConfigOnly を true にし…

Ruby の Monitor

Ruby には Monitor というクラスがあるんだけど、よく見るわりに Mutex との違いをよくわかっていなかった。 たまたま Java Concurrency in Practice を読んでいたら 2.3.2 Reentrancy で同じような概念の話が出てきて、少しわかった気がするのでそのメモ。 …

リーダ選出: ring アルゴリズム

Raft Consensus Algorithm をみつけてリーダ選出とは、となったので調べてちょっと書いてみたメモ。なお、この記事では raft のことは書いてない。 リーダ選出とは リーダ選出アルゴリズムとは、分散システム内で特別な役割を持ったノード(プロセス)を選出す…

Linuxシステムプログラミング8章

Linuxシステムプログラミングの8章メモリ管理の雑なメモ。 下に行くほど雑になってそう。この本。 Linuxシステムプログラミング作者: Robert Love,ロバートラブ,千住治郎出版社/メーカー: オライリージャパン発売日: 2008/04/16メディア: 大型本購入: 5人 …

golang で Future を実現する

ここで言う Future オブジェクトとは、clojure の Future を使用して作成できるオブジェクトのようなものことをいう(結果をキャッシュしてないとかはあるけど、その辺は割愛している)。 つまり、何か処理を受け取りその処理を別 thread で実行するオブジェク…

Go版retriable作った

Rubyの retirable の Go版を書いた。 github.com 使い方 一番シンプルな使い方。引数として渡されたクロージャが成功するまでリトライし続ける。 リトライ回数のデフォルトは3で、リトライ間隔は randomized exponential backoff アルゴリズムを使っている。…

Rust で LLVM やってみる

Rust と LLVM やってみたくなってやってる. llvm-sys という LLVM の Rust バインディングのライブラリを使って LLVM 動かしてみた話と自分用メモ. きつねさんでもわかるLLVMを読んでからやるかと思ったが,5章以降はちょっと自分には合わなかったのでブロ…

emacsでコード読んでるときに「現在いる行が含まれたプルリク」に飛びたいを見れるようにした

hisaichi5518.hatenablog.jp これ見て hub browse -- commit/<commit-id> でcommitに飛べることを知ったので、それを使って emacsでコード読んでるときに「現在いる行が含まれたプルリク」に飛びたいを見れるようにした。 このスクリプトも元ブログと一緒でプルリクのペ</commit-id>…

Treasure Data インターンで最高の夏過ごしてきた #td_intern

8月1日から9月30日の間,Treasure Data Summer Intern 2016に参加していました. 他のインターン生2人からの強烈なプレッシャー (強烈なプレッシャー1,強烈なプレッシャー2)に負けたので僕もインターンブログを書きます. tl;dr すごいメンターの元 Fluent…

高速にメモをとるためのOrg Capture

Org Capture とはOrg-Modeのメモ取りツール(わかりやすく書いてある -> 色々 Org Capture する | Amrta ) 以下のように書いておくと(キーバインドはなんだっていい) (setq org-capture-templates '(("t" "Task" entry (file (expand-file-name (concat org-d…

Dired でバイナリファイルを開くときに本当に開くか確認する何か

環境 OSX 10.10.5 nkf 2.1.3 Emacs 24.5 動機 diredでバイナリとか開くときに本当に開いていいか確認してくれる何かが欲しい— がんま (@ganmacs) 2015, 9月 24 Emacsでは写真やらPDFやらをEmacs内で見れるイッてる機能があります. しかし,写真やらPDF開こ…

emacsからalcでの単語検索を楽にする

emacsからアルクで単語検索する便利コマンド書いた 環境 OSX コード (defsubst marked-input () (when (use-region-p) (buffer-substring-no-properties (region-beginning) (region-end)))) (defun search-word-in-alc () (interactive) (let* ((cmd "open …

RubyでDSLを書く

Rackのコードを読んでたらDSL使ってたのでその部分. instance_evalを使ってBuilderクラス内でblockを実行するようにしている. つまり以下のプログラムは,Builderのインスタンス内で呼ばれたことになってる. map '/' do { 'Content-Type' => 'text/plain'…

Rubyでプラグイン機構を作る

rack/rack · GitHub のコード読んでてプラグイン(Rackの場合はバックエンドにどのサーバを使うか)の処理があったので取り出して書いてみた. Rubyではクラスは定数なのでHandlerっていう名前空間の中の定数を探すだけでいい. # sample1.rb module Handler c…

RubyのStructの簡易版実装してみた

30分くらいでできる簡単な問題探しててmzpさんのやつを見つけてそれを解いてみてる. これが動けばいい Dog = MyStruct.new(:name, :age) fred = Dog.new('fred', 5) fred.age = 6 printf "name:%s age:%d\n", fred.name, fred.age 回答 class MyStruct def …

モナディックなパーザーコンビネータ作ってみた

タイトル通りで作ってみたました. もともと研究で違うことやってたはずなのに目的を見失ってなんか面白そうだしこれならゼミで話しても怒られなさそうという考えからこの頃ずっと勉強してた. OCamlで実装しようかHaskellで実装しようか迷っててどっちでも…

ruby2.2.2で現在実行中の関数名を取得する

前提 ganmacs@ganmacs~% ruby -v ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14] 内容 現在実行中の関数名を取得したいとき、ruby 1.8までは以下のようにしてとれた。 しかし1.9からto_s(Array)の挙動が変わったらしく2.2.2では動かなった。 …

Working With TCP Socketsを読んだ

研究してるふりをして全くせずにこれよんだ。 Working With TCP Sockets (English Edition)作者: Jesse Storimer発売日: 2012/10/24メディア: Kindle版この商品を含むブログを見る なぜ読んだかというと、少し前にこの記事いいよって教えてもらった記事があ…

while (token = lexer.read) != EOFをEnumeratorをつかってどうにかしたい

あたらしく研究室に入って(2度目)スクリプト言語の作り方って本が課題なのでやっていまして、そのときlexer作るんですが while (token = lexer.read) != EOF ... end 的な書き方してて嫌な気持ちになったので他にまともな書き方がないか調べました. どうし…

ansibleっぽいitamaeっぽいプロビジョニングツールminarai作った

ganmacs/minaraigithub.com 作りました. ansibleとitamaeの名前を出しましたがお手本にしたのは @r7kamuraさんが作ったr7kamura/serverkit · GitHub というgemです. 動機 これが欲しかったわけではないんですがgem作ったことなかったし作りたいものもなか…