• gitでforkしたrepoにoriginalのrepoをmergeする手順

    公開日時: 2012-03-29 14:10

    gitで本家のリポジトリからforkしたリポジトリに、本家の 更新をmergeする手順。

    ここでは「matador」というnode.jsのモジュール(git://github.com/Obvious/matador.git)をforkし、forkした自前のリポジトリに対して、Obvious社の本家のリポジトリの更新をマージする例を用います。

    まず、自分がforkしているリポジトリをcloneします。

    cd ~/Desktop
    git clone git://github.com/foo/matador.git
    

    次に、オリジナル(fork元)のリポジトリをremote branchとして追加します。

    cd matador
    git remote add --track master ovbious git://github.com/Obvious/matador.git
    

    上のmasterは、別のブランチでも構いませんが、多くの場合はmasterになると思います。また、master obviousの中のobviousも別の文字列(例えばhonke)でも構いませんが、ここではfork元の開発者であるobvious社の名前を入れています。

    remote repositoryが追加されたことを確認します。

    git remote
    
    次のような出力があります。
    obvious
    origin

    ここで、fork元のリポジトリの変更をfetchします。

    git fetch obvious

    この結果、新しい

    obvious/master

    という名前のremote branchが作成されます。

    新しいremote branchが追加されたことを確認します。

    git branch -r
    
    次のような出力があります。
      obvious/master
      origin/HEAD -> origin/master
      origin/cli
      origin/master
      origin/two.dot.oh
    

    これでfork元のリポジトリの変更をmergeする準備が整いました。

    実際にmergeします。

    git merge obvious/master

    これでforkしたリポジトリに対して、オリジナルのリポジトリの変更をマージ完了です。

  • JavaScriptのオブジェクトの要素数を簡単に数える方法

    公開日時: 2012-03-26 21:50

    JavaScriptのオブジェクトの要素数を知りたい場合に、Objectのkeysメソッドを使って得られたキーの数を数えることが簡単そうです。

    以下のようにします。

    var o = {};
    
    console.log(Object.keys(o).length);
    // 0
    
    o.a = 'a';
    o.b = 'b';
    console.log(o);
    // { a: 'a', b: 'b' }
    
    console.log(Object.keys(o).length);
    // 2
    
  • JavaScriptで2つのオブジェクトを比較する方法

    公開日時: 2012-03-26 16:30

    JavaScriptで、2つのオブジェクトが全く同じ(属性も属性の値も、属性の数も同じ)かどうかを判別する方法。

    テストなどで、オブジェクトの等価性を検証する場合に使用します。

    compareObjects = function(obj1, obj2, callback) {
      var paramName;
      
      var compare = function(objA, objB, param) {
        var paramObjA = objA[param]
          , paramObjB = (typeof objB[param] === 'undefined') ? false : objB[param];
        
        switch (typeof objA[param]) {
          case "object" : return (compareObjects(paramObjA, paramObjB));
          case "function" : return (paramObjA.toString() === paramObjB.toString());
          default: return (paramObjA === paramObjB);
        }
      }
      
      for (paramName in obj1) {
        if (typeof obj2[paramName] === 'undefined' || !compare(obj1, obj2, paramName)) {
          callback(false);
          return;
        }
      }
    
      for (paramName in obj2) {
        if (typeof obj1[paramName] === 'undefined' || !compare(obj1, obj2, paramName)) {
          callback(false);
          return;
        }
      }
      
      callback(true);
      return;
    }
    
    // USAGE
    
    
    var obj1 = {attr1: 'var0', attr2: 'var2'};
    var obj2 = {attr1: 'var1', attr2: 'var2'};
    var obj3 = {attr1: 'var1', attr2: 'var2'};
    
    compareObjects(obj1, obj2, function(bool) {
      console.log(bool);
      // false
    })
    
    compareObjects(obj2, obj3, function(bool) {
      console.log(bool);
      // true
    })
  • JavaScriptで配列の要素の重複を取り除く方法Arrayにuniqメソッドを追加

    公開日時: 2012-03-13 15:20

    RubyにはArray#uniqメソッドがあり、配列から重複する要素を簡単に取り除くことができます。

    JavaScriptのArrayには、rubyのように配列要素の重複を取り除くメソッドはありません。

    そこで、JavaScriptのArrayにRuby同様にuniqメソッドを追加します。

    Arrayのプロトタイプにuniqメソッドを追加することで実現します。

    以下のようにします。

    Array.prototype.uniq = function() {
      var o = {}
        , i
        , l = this.length
        , r = [];
        
      for (i = 0; i < l; i += 1) o[this[i]] = this[i];
      for (i in o) r.push(o[i]);
      
      return r;
    }

    これでArray#uniqができました。

    次のように使います。

    var a = [1, 2, 3, 3, 4];
    console.log(a.uniq());
    // [ 1, 2, 3, 4 ]
    
  • CentOSのバージョンを確認する方法

    公開日時: 2012-03-02 21:10

    使用しているサーバーがCentOSの場合で、そのCentOSのバージョンを知りたい場合は次のようにして/etc/redhat-releaseの内容を見ます。

    [foo@bar ~]$ cat /etc/redhat-release 
    CentOS release 5.7 (Final)
    

    この場合は5.7であることが判りました。

  • CentOSにRails 3.2.xとruby 1.9.3-p125をインストールする方法

    公開日時: 2012-03-02 20:45

    ruby 1.9.3-p125とRails 3.2.xを素の状態からインストールする場合、普通は次のようなエラーになります。

      It seems your ruby installation is missing psych (for YAML output). To eliminate this warning, please install libyaml and reinstall your ruby. 
    

    これはエラーメッセージの内容のとおりで、例えばCentOSの場合はlibyamlが入っていないことによります。

    以下、CentOSにlibyamlをインストールした後にruby 1.9.3-p125をインストールし、続いてRails 3.2.2をインストールする手順をまとめます。

    libyamlのインストール

    まずlibyamlをインストールします。libyaml-0.so.2等が/usr/local/lib以下にインストールされるように./configure --prefix=/usr/localを指定します。

    cd src
    wget http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz
    tar zxvf yaml-0.1.4.tar.gz
    cd yaml-0.1.4
    ./configure --prefix=/usr/local
    make
    sudo make install

    rubyのインストール

    libyamlがインストール出来たので、今度はRubyをインストールします。

    以下のように./configure --prefix=/usr/local --enable-shared --disable-install-doc --with-opt-dir=/usr/local/libオプションを追加してconfigureします。

    cd src
    wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p125.tar.gz
    tar zxvf ruby-1.9.3-p125.tar.gz
    cd ruby-1.9.3-p125
    ./configure --prefix=/usr/local --enable-shared --disable-install-doc --with-opt-dir=/usr/local/lib
    make
    sudo make install
    

    Rails 3.2.2のインストール

    これまでの手順でlibyamlを使用できるrubyのインストールが完了しているので、railsをインストールします。

    [sudo] gem install rails
    

    これでrailsのインストールが完了しました。

  • asset pipelineで読み込まれるファイルのpathを確認する方法

    公開日時: 2012-02-27 19:52

    Rails3.1以上のアプリではasset pipelineを使用してjavascriptやcssを読み込みますが、この際にファイルが読み込まれるpathを一覧したい場合は以下のように

    Rails.application.config.assets.paths

    を使用します。


    1.9.3-p125 :002 > Rails.application.config.assets.paths
     => ["/Users/foo/rails3/rails321-2/app/assets/images", "/Users/foo/rails3/rails321-2/app/assets/javascripts", "/Users/foo/rails3/rails321-2/app/assets/stylesheets", "/Users/foo/rails3/rails321-2/vendor/assets/javascripts", "/Users/foo/rails3/rails321-2/vendor/assets/stylesheets", "/Users/foo/.rvm/gems/ruby-1.9.3-p125/gems/jquery-rails-2.0.0/vendor/assets/javascripts", "/Users/foo/.rvm/gems/ruby-1.9.3-p125/gems/coffee-rails-3.2.2/lib/assets/javascripts", "/Users/foo/.rvm/gems/ruby-1.9.3-p125/gems/cacheable_flash-0.2.3/vendor/assets/javascripts"]