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 の話 Java Concurrency in Practice作者: Brian Goetz,Tim Peierls,Joshua Bloch,Joseph Bowbeer,David Holmes,Doug Lea出版社/メーカー: Addison-Wesley Professional発売日: 2006/05/09メディア: ペーパー…

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作ったことなかったし作りたいものもなか…

リクルートのインターンで負けてきました

まとめ 型環境、そもそもなんのことだかよくわかってないのにどうしてこうなった!!!!お茶大生!!いい加減にしろ!!!!— がんま (@ganmacs) 2015年2月18日 pic.twitter.com/AUMEZzHGQU— がんま (@ganmacs) 2015年2月23日 負けた! 概要 http://recruit…

surround.vimのEmacsバージョン作りました

surround.vimのemacsバージョンみたいな感じです. emacsバージョンを探したんですがなかったので悔しくて作りました. リポジトリ ganmacs/emacs-surround ganmacs/emacs-surround · GitHub 設定 1.どうにかして入れます caskの場合はCaskファイルに以下を…

emacs-dayone作った

なぜ Macにはdayoneというmarkdownで日記をかけるおしゃれUIのアプリがある. 文章はemacsで書いて,読むときだけdayoneを使いたい. emacs-dayone 入れ方 Day One Toolsを入れます. cask使って自分の環境に入れる あとは適当にキー割り当ててつかう (READM…

emacs-git-grep作ってました

emacsにパッケージ管理をel-getからcaksに変更した際に自分で作ったemacs-git-grepにゴニョゴニョした時に思い出した 発端 mizchiさんの Atomのコード読みまくったので、git-grepの結果へジャンプできる拡張を作ってみたを読んで便利そうだった もともとhelm…

with-eval-after-loadとrequireとautoloadとadd-hookと

発端 違いは何だ!! まとめ 違ったら教えてください 起動してずっと使ってる -> require 起動時には必要ないけどmodeごとでは使う -> autoload ライブラリでのsetqとかの設定 -> add-hook ライブラリでのdefine-keyとかの設定 -> with-eval-after-load 調べ…

YosemiteにEmacs24.4いれてみた

Yosemiteにする際についでにクリーンインストールしたので設定しなおした記録 書くこと Emacs24.4をYosemiteに入れたところ Emacsを上げて困ったこところ Emacs24.4をYosemiteに入れたところ inline patch当てなくていい人は1と5だけやればいい 1 何はともあ…

emacsでScala環境設定

Scala開発環境の覚え書き 前提 emacs 24.3 OS X Mavericks scala全く知らない インストール brew で入れたもの scala sbt el-getでemacsに入れたもの scala-mode2 ensime 実際 brew を使って要りそうなものを入れる(sbtが何なのかよくわかってないけどなんか…

Rails4でActiveAdminとdeviseとcancancanをつかって管理者ページを作る

環境 Rails 4.1.2 ruby 2.1.1 devise 3.3.0 active_admin 1.0.0 pre cancancan 1.9.2 Gemfile gem 'rails', '4.1.2' gem 'cancancan' gem 'devise' gem 'activeadmin', github: 'activeadmin' bundleする $ bundle install まずはdeviseでモデルを作る. rol…

集合知プログラミング 2章をrubyで書いた

書きました。 APIを使うところは省略しています critics = { 'Lisa Rose' => { 'Lady in the Water' => 2.5, 'Snakes on a Plane' => 3.5, 'Just My Luck' => 3.0, 'Superman Returns' => 3.5, 'You, Me and Dupree' => 2.5, 'The Night Listener' => 3.0 },…

今日解いた問題3

今日というか今日と昨日 単一始点最短経路問題(ベルマンフォード) ある頂点sからのすべての頂点の最短経路 d[j] > d[i] + costこの条件を1度使っただけでは明らかに最短にならないので update変更がなくなるまでループを繰り返す INF = 100_000 G = [[INF, …

今日解いた問題2

彩色問題 アリ本の93ページ 隣接したりノードが同じ色にならないように色をぬる。 今回は2色で塗ることができるかという問題 特に2色でぬれるグラフを2部グラフという コードで言うと0が塗ってないノードなので下の2つを繰り返す感じ 隣接したノードjが0…

今日解いた問題

分割数はいまいちわかっていない 最長増加部分列問題 自分(i)より小さい部分問題を解いていけばできる N = 5 A = [4, 2, 3, 1, 5].freeze $dp = Array.new(N, 1) def solve N.times do |i| i.times do |j| $dp[i] = [$dp[j] + 1, $dp[i]].max if A[i] > A[j]…

ナップザック問題

久しぶりにナップザック問題書いてみたら思いの外時間がかかって辛かった N = 4 W = 5 ITEMS = [[2, 3], [1, 2], [3, 4], [2, 2]].freeze # [重さ, 価値] INF = 10000000 # 全探索 def dfs(i, w) return 0 if i == N b = dfs(i + 1, w) a = w - ITEMS[i][0] …

rspec3で標準入力と標準出力のテスト

rspecで標準入力からユーザの入力を受け取って標準出力に出力する方法の覚書 rspec2とrspec3がまざっててややこしかった プロダクションコード solver.rb getでユーザの入力を受け取ってprintで標準出力に答え(文字列)を出力するのクラス class Solver attr_…

rubyで簡単なテストを書く

スクリプト程度のちょっとしたテスト書きたい時に便利でした 以下を書いてあとはassertとかでテスト require 'minitest/unit' extend MiniTest::Assertions 例 require 'minitest/unit' extend MiniTest::Assertions a = [1, 2, 3] b = a.dup assert_equal a…

masterブランチにpushさせないようにするフック

git push -f origin masterをして「masterブランチがあああああ、あっあっあっ」とならないために(今日なった) $HOME/.git_template/hooksというディレクトリをつくる $ mkdir -p ~/.git_template/hooks 作成したディレクトリにpre-pushというファイルを作る…

railsを使わないrspecの使い方

パス ./lib/以下にプロダクションコードをおく ./spec/以下にテストコードを置く 名前 例えば./lib/test.rbを作ったとする。このときのspecの名前はspec/test_spec.rbとする コードのひな形 プロダクションコード(./lib/test.rb) class Hoge def hello 'hell…

Rubyのuniqの条件を複数指定する

uniqで複数条件を指定するには,配列にして渡すといいっぽい

emacsでschemeを書く

最近SICPをやり始めてschemeを書いているので設定を書いておく。 まずgoshを入れる。 マカーなのでbrewを使用します。 $ brew install gosh あとはemacsに以下を追加 \C-cG でschemeのreplが立ち上がるのであとは\C-x\C-eとかで評価する。

RSpec の入門とその一歩先へを Rspec3でやってみた

RSpec の入門とその一歩先へをやってみたがRSpecのバージョンが低かったのでRSpec3使って書きなおしてみました. 書きなおしたのはイテレーション3の仕上げに乗っているコードです. message_filter_spec.rb(変更後) require 'bundler' require './message_f…

Rails Tutorialやった

Rails Tutorialやりました。(リポジトリ) 以下感想&反省 テスト書いたことないのでいっぱいあって良い Rails知らないことばっかだと再認識できて良い(リレーションの作り方 最後の方だけだけどcommit細かく分割しだしのは良かった いつもscaffold使っていた…

LIS(最長増加部分列)を全探索,メモ化でといた

アリ本にのっていたLISを全探索,メモ化でも解いたので覚え書き LISは与えられた配列をaとするとi>jかつa[i]>a[j]を満たす部分列のこと DPバージョン dp[i]はiより前のjの中で制約(i>j かつ a[i]>a[j])を満たすdp[j]の一番大きい値の+1となる. 例えば,a = …

clojureで自分のツイートを触ってみた

このごろclojureを始めたのでその練習に自分のTwitterのつぶやきをいろいろなライブラリを使っていじくってみました. つかったライブラリはkuromojiとかincantereです. とりあえずデータはTwitterのアカウント->ユーザ情報の下の方に全ツイート履歴という…