git push オプションu

git pushのオプションuは追跡設定するためのオプションです.

$ git push -u origin master

追跡設定をすることで, それ以降は, git pushやgit pullの際にリモートリポジトリ名やブランチ名を省略可能になります. こんな感じで.

$ git push

で, リモートリポジトリにコミット可能になります.

ちなみに, git pushのオプションuは以下のコマンドと等価です.

$ git push --set-upstream origin master

npm publishでのエラー

npm publishでは, nodeやnpmのバージョンが古いと,

(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.

といったエラーが出てしまいます (出てしまいました…).

その場合は, nodeコマンドやnpmをアップデートすると解決します.

nodeのアップデート

$ sudo npm cache clean (-f)  //Macのローカルだと -fは不必要っぽかったです.
$ sudo npm install -g n
$ sudo n --latest  //最新版のバージョンを表示
$ sudo n --stable  //安定板のバージョンを表示
$ sudo n latest     //最新版の場合. 安定板であればstable

npmのアップデート

$ sudo npm install -g npm

参考

npmでモジュールを公開する

1. npmのユーザー登録

以下のコマンドでユーザー名やパスワード, メールアドレスを登録する

$ npm adduser

2. package.jsonの作成

手作業で0から作成してもOKですが, npm initコマンドを利用すると, 対話形式で作成できます.

$ npm init

3. 公開

作成したpackage.jsonのあるディレクトリで,

$ npm publish

で, 公開することができます.

ただし, モジュール名が重複している場合は公開できないので,
あらかじめ公開されていないモジュール名かどうかをこちらでチェックしておきましょう.

Android JSON

AndroidでJSONを扱うためには, Androidが標準で定義しているJSONObjectを利用します.

使い方はとても簡単です.

こんな感じ.

String json ="{\"result\" : true, \"message\" : \"Success !!\", \"items\" : [1, 2, 3], \"maps\" : {\"key\" : \"value\"}}";

JSONObject jsonObject = new JSONObject(json);

boolean result       = jsonObject.getBoolean("result");
String message     = jsonObject.getString("message");
JSONArray items   = jsonObject.getJSONArray("items");  // インデックス指定で値を取得可能. items[0]みたいな感じ
JSONObject maps = jsonObject.getJSONObject("maps"); // maps.getString("key") で値を取得可能

MacPortsでScalaをインストール

MacPortsでScalaをインストールしたのでメモとして記載しておきます.

$ sudo port search scala

...
scala2.11 @2.11.6 (lang, java)
    The Scala Programming Language
....

Scala 2.11が最新のようなので, これをインストールします.

$ sudo port install scala2.11
$ which scala-2.11
/opt/local/bin/scala-2.11

このままだと, ちょっと使いにくいので, シンボリックリンクを張っておきます.

$ sudo ln -s /opt/local/bin/scala-2.11 /usr/local/bin/scala
$ sudo ln -s /opt/local/bin/scalac-2.11 /usr/local/bin/scalac
$ sudo ln -s /opt/local/bin/scaladoc-2.11 /usr/local/bin/scaladoc
$ sudo ln -s /opt/local/bin/scalap-2.11 /usr/local/bin/scalap
$ sudo ln -s /opt/local/bin/fsc-2.11 /usr/local/bin/fsc
$ scala -version
Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL

以上で完了です.

REPLでScalaを実行してみます.

$ scala
Welcome to Scala version 2.11.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51).
Type in expressions to have them evaluated.
Type :help for more information.

scala> println("Hello World !!")
Hello World !!

scala> 

Grunt

GruntとはNode.jsを利用した, フロントエンドまわり (JavaScriptやCSS) のタスク自動化ツールです.

標準の機能だけでできることは少ないですが, プラグインを利用することで様々なタスクを自動化することができます.

1. Node.jsのインストール

Node.jsを利用するので, こちらのサイトからダウンロードしてインストールしておきます.

2. Gruntのインストール

$ sudo npm install -g grunt-cli

3. プロジェクトのディレクトリでpackage.jsonを作成する

$ npm init

4. プロジェクトのディレクトリでGruntをインストールする

$ npm install --save-dev grunt

5. Gruntfile.jsの作成

タスクを記述するGruntfile.jsを作成します.
以下は, Gruntfile.jsのテンプレートです.

module.exports = function(grunt) {
    'use strict';

    // Config
    grunt.initConfig({
    });

    // Plugins
    grunt.loadNpmTasks();

    // Task
    grunt.registerTask();
};

例えば,  grunt-contrib-uglifyというプラグインを利用して, JavaScriptのファイルを圧縮するタスクを自動化する場合…

まずは, プラグインをインストールしておきます.

$ npm install --save-dev grunt-contrib-uglify

そして, Gruntfile.jsは以下のような記述になります.

module.exports = function(grunt) {
    'use strict';

    // Config
    grunt.initConfig({
        // In the case of using package.json
        pkg: grunt.file.readJSON('package.json'),
        uglify: {
            target: {
                options: {
                    sourceMap: true,
                    sourceMapName: 'sample.js.map'
                },
                files: {
                   'sample.min.js':['sample.js']
                }
            }
        }
    });

    // Plugins
    grunt.loadNpmTasks('grunt-contrib-uglify');

    // Task
    grunt.registerTask('default', ['uglify']);
};

あとは, コマンドラインでgruntを実行すれば, sample.jsを圧縮したsample.min.jsが生成されます.

$ grunt
Running "uglify:target" (uglify) task
>> 1 sourcemap created.
>> 1 file created.

Done, without errors.

プラグインの記述やオプションはそのドキュメントに記載されているのでそれを参考にしてください.

FirefoxでXMLHttpRequest Level 2を利用する場合の注意点

FirefoxでXMLHttpRequest Level2 を利用する場合, openメソッドを実行する前にresponseTypeプロパティを設定してしまうと,

InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable

というエラーが出てしまいます.

実は解決方法は簡単で, openメソッド移行にresponseTypeを設定すればOKです.
こんな感じ.

var xhr = new XMLHttpRequest();

xhr.open('GET', 'http://....', true);
xhr.responseType = 'arraybuffer';
xhr.send(null);

実は, 長いことこのエラーの原因がわからず, Firefoxの場合だけoverrideMimeTypeを利用する方法でバイナリデータを取得していました. こんな簡単に解決できるとは…