Skip to content

Instantly share code, notes, and snippets.

@murayama
murayama / zookeeper.md
Created July 9, 2013 01:54
ZooKeeperについて調査

ZooKeeperについて調査

ZooKeeperとは

分散協調サービス
部分障害を安全に処理できる分散アプリケーションを構築するための一連のツールを提供する
設定情報の集中管理や名前付けなどのサービスを提供する
ZooKeeperのアーキテクチャでは高可用性を冗長サービスにより提供している
クライアントはあるZooKeeperノードへの問い合わせが失敗したらほかのノードに問い合わせることができる
データの更新はマスターノードだけが行うようになっているので、データがノード間で矛盾した内容になることはない(ただし、最新のデータではない可能性はある)

@murayama
murayama / module_sample.rb
Created July 9, 2013 01:50
rubyでモジュールを作るときの賢いやり方
# -*- coding: utf-8 -*-
module SomeModule
def self.included(klass)
klass.send(:include, SomeModule::Methods)
klass.send(:extend, SomeModule::ClassMethods)
end
module Methods
@murayama
murayama / bind.md
Created July 9, 2013 01:48
javascriptのbind関数の使い方

javascriptのbindの使い方

function Parson (name) {
  this.name = name;
}

Parson.prototype.say = function () {
 console.log(this.name);
@murayama
murayama / clitool.js
Created July 9, 2013 01:46
node.jsを使った対話型コマンドラインツール
/**
* node.jsを使った対話型コマンドラインツール
* node.jsはイベントループなので、他の言語のようにwhileで入力待ちしたりしなくていいのがすばらしい
* 入出力はreadlineを使う
*/
var rl = require('readline'); // readline
var utl = require('util');
@murayama
murayama / tilde.md
Created July 9, 2013 01:44
javascriptのチルダ演算子

javascriptのチルダ演算子

javascriptの「~」チルダ演算子はビット反転演算子で、整数をビット反転させると符号を反転させて1引いた数になる

console.log(~-4); // 3
console.log(~-3); // 2
console.log(~-2); // 1
console.log(~-1); // 0
console.log(~0); // -1
@murayama
murayama / js-getter-setter.md
Created July 9, 2013 01:43
javascriptのgetterとsetter

javascriptでgetterとsetterを使う

__defineGetter____defineSetter__
IE6,7では実装されていない

function User () {
}

User.prototype.__defineGetter__('name', function () {
@murayama
murayama / rails_model_setting_sample.md
Created July 9, 2013 01:41
rails起動時にモデルに対して任意の設定をする

モデルに以下のように、クラス変数を用意し、mattr_accessorでアクセスできるようにしておく
ポイントは、self.setupメソッドのyield self

# app/models/user.rb
class User < ActiveRecord::Base

  mattr_accessor :hoge_setting
 # デフォルト値を設定しておく
@murayama
murayama / .railsrc
Created July 9, 2013 01:37
rails newするときのオプションを省略
# rails3.2からrails newでプロジェクトを作成するときのオプションを書いておくことができる
# 実際にプロジェクトを作成するときは`rails new myproject`で下記オプションが勝手に適用される
-T -d mysql --skip-bundle
@murayama
murayama / touch.js
Created July 9, 2013 01:35
jsでタッチデバイスの判定
// pcでユーザーエージェントを偽装されてアクセスされていても、これである程度判定できるはず
function isTouchDevice() {
return ($.browser.mobile && (('createTouch' in document) || ('ontouchstart' in document)) && ('orientation' in window));
}
@murayama
murayama / recursive_symbolize_keys.rb
Created July 9, 2013 01:33
rubyでハッシュのキーを再帰的にシンボルに変換する
def recursive_symbolize_keys! hash
if hash.is_a? Hash
hash.symbolize_keys!
hash.values.each {|h| recursive_symbolize_keys! h}
elsif hash.is_a? Array
hash.map {|v| recursive_symbolize_keys! v}
end
hash
end