Ruby

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

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

バリア同期の実装

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

Ruby の Monitor

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

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

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

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 …

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

集合知プログラミング 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 },…

今日解いた問題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…

railsを使わないrspecの使い方

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

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

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

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

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

divise 3.2.0 + Ruby on Rails 4.0 でusernameを認証に使用する

devise3.2.0 + Ruby on Rails 4.0でusernameを使用した認証の話. deviseについてはこちらを参照. 作りたいものはtwitterのように登録時はemail+username+passwordでログイン時はusername+passwordでログインできるもの. deviseをインストール まずはdevis…

rubyのand と &&、or と ||

rubyのandと&&は同じだと勘違いしていたので覚え書き and と &&は一緒なんだけど演算子の優先度が違う Ruby リファレンス なので以下のようになる p true and false # => true p true && false # => false 上の式は (p true) and false となりfalseのほうは…

fluentdをつかってrubyのログをmongoDBへ保存

まずは,rubyでログを吐いてそのログをfluentdで拾ってみる. その後,mongoDBに保存する方法を書く. 準備 bundlerを使って管理するので以下を実行. $ mkdir sample $ cd sample $ bundle init bundle initで作成された./Gemfileに以下を追加. gem 'fluen…

Ruby on RailsでクロスドメインAPIのメモ

jsonpの事よくわかってなかったし、API作ってたらハマったのでメモ クライアント側(jQuery) $.ajax({ url: "クロスドメイン先のURL", dataType: 'jsonp', data: { data: "渡したいパラメータ" } }).done(function(msg, status, hxr) { alert(status); }).fai…

railsでmysqlを使ったのでメモ

mysqlいれる bundlerを最新版にして並列処理の機能を使ってみる railsでmysqlを使う mysql入れる brewでmysqlを入れてパスワードを設定. $ brew install mysql $ mysql_secure_installation bundlerを最新版にする まずはgem自体を最新にする $ gem update …