2011年9月11日日曜日

.gitconfig の中身

.gitconfig の中身を少し見直したので公開してみます。
主に参考にさせていただいたサイトは最下部に一覧として載せておきます。

マージのツールについては、Git Pro のこちらのページを参照のこと。
P4Mergeというツールの紹介があります。
http://progit.org/book/ja/ch7-1.html

hist と hists の違いは変更があったファイルも表示させるかどうかの違いしかないです。
好みに応じて、-10 などを追加し、表示される log を制限してもよいかもしれません。
※仮に設定してしまっても、実行時に上書きできるので特に不便はないと思います。

.gitconfig


[core]
    # Windows, Linux, Mac の間で改行コードを変換してくれる。
    autocrlf = input
    # 改行コードについて非可逆的なコミットは拒否する。
    # こちらを参照: http://d.hatena.ne.jp/couichi/20110207/1297101115
    safecrlf = true
[alias]
    ad = add
    adp = add -p
    co = checkout
    ci = commit
    ca = commit -a
    # diff --cached の内容が表示される
    civ = commit -v
    cam = commit --amend
    sh = show
    so = remote show origin
    st = status
    ft = fetch
    br = branch
    hist = log --graph --pretty=format:'%Cred%h%Creset - %cd | %s %Cgreen(%cr)%C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --abbrev-commit --date=short
    hists = log --graph --pretty=format:'%Cred%h%Creset - %cd | %s %Cgreen(%cr)%C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --abbrev-commit --date=short --stat
    type = cat-file -t
    dump = cat-file -p
    # diff 関連
    df = diff
    dm = diff master
    dc = diff --cached
    d1 = diff HEAD~
    d2 = diff HEAD~~
    d3 = diff HEAD~~~
    d4 = diff HEAD~~~~
    d5 = diff HEAD~~~~~
[color]
    ui = auto
[i18n]
    commitencoding = utf-8
[merge]
    tool = extMerge
[mergetool "extMerge"]
    cmd = extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
    trustExitCode = false
# git df の度にツールが立ち上がるので、自分はコメントアウトしました。
#[diff]
#      external = extDiff

※あと、自分は alias g='git' を登録してあるので、g ci -m 'コミットメッセージ' hoge.txt などで git コマンドが実行可能になっています。

参考:
.gitconfigに設定してるaliasなどのまとめ
http://d.hatena.ne.jp/yuroyoro/20101008/1286531851

Pro Git (日本語版)
http://progit.org/book/ja/

git config の core.safecrlf って何のためよ?
http://d.hatena.ne.jp/couichi/20110207/1297101115

Git Immersion (チュートリアルになっているので、使い方の勉強に最適)
http://gitimmersion.com/

2011年7月23日土曜日

[scala]簡易的な実行速度測定

scala で書いたコードの実行速度を測定したい場合に使える、簡易的なメソッドを考えたので、そのメモ。 内容は次のような感じです。
def timeOf[A](f: => A): A = {
  val start = System.currentTimeMillis
  val result = f
  val end = System.currentTimeMillis
  println("[Time] %s ms".format(end - start))
  result
}
これを、たとえば適当な package.scala に書いて使えるようにしておけば
scala> timeOf((1 to 100000000).foreach(_ * 2))
[Time] 1067 ms
などというように使えます。
※package.scala は、簡単に説明しますと、あるパッケージで使い回したい変数やメソッドをまとめて定義しておける場所です。こちらのブログなどを参照してください:
Scala 2.8 で追加されたパッケージオブジェクト

上記のように定義すると
val result = timeOf {
  // なんだか長いコード
}
// 以下、result を使った処理
というふうにも書けるので便利かと思います。

scala が標準で用意している scala.testing.Benchmark という trait もありますが、 こちらは mixin したあとに、runメソッドをオーバーライドして、runBenchmark を呼び出す、という手順を挟むので、もう少し気軽に試したいなぁ、と思って書いてみた次第です。あと、Benchmark の場合は、処理実行結果を返してくれませんが、上記のメソッドだと処理結果も使うことができます。また、ソースをみたときに気づいた点として最後に Platform.collectGarbage(= System.gc()) を呼び出しているようです。

実際に scala.testing.Benchmark を使った場合のサンプルは以下のサイトで丁寧に説明されています。
参考:Scala Benchmark

2011年7月9日土曜日

play-scalaの導入

play-scala プロジェクトを新規に作成して,eclipse で開発できるように環境を構築していたのですが,途中,エラーが出て少し悩んだところがあったのでまとめておきます.
※簡略できる手順などありましたら,教えていただけると助かります.

環境

※バージョン管理ツールに svn を使用しますが,svn の環境についてはすでに準備されているものとします.

手順

  1. play-scala プロジェクトの新規作成

    詳細な play のインストールについては,本家サイトを参照ください.
    ここでは,scala module を使用したプロジェクトの新規作成についてのみ記述します.新規作成を行うには play new コマンドに with オプションにて,scala を指定します.
    $ play new hoge --with scala
    
    次のように表示されればOKです.
    ~        _            _ 
    ~  _ __ | | __ _ _  _| |
    ~ | '_ \| |/ _' | || |_|
    ~ |  __/|_|\____|\__ (_)
    ~ |_|            |__/   
    ~
    ~ play! 1.2.2, http://www.playframework.org
    ~
    ~ The new application will be created in /some/workspace/hoge
    ~ What is the application name? [hoge] 
    ~
    ~ Resolving dependencies using /some/workspace/hoge/conf/dependencies.yml,
    ~
    ~       play->scala 0.9.1 (from playLocalModules)
    ~
    ~ Installing resolved dependencies,
    ~
    ~       modules/scala-0.9.1 -> /opt/play-1.2.2/modules/scala-0.9.1
    ~
    ~ Done!
    ~
    ~ OK, the application is created.
    ~ Start it with : play run hoge
    ~ Have fun!
    ~
    
    プロジェクトが作成できたので,svn リポジトリに登録しておきます.
    $ svn import ./hoge http://somewhere/svn/hoge/trunk/hoge -m "new project"
    
  2. play-scala プロジェクトを eclipse プロジェクトに変換する.

    play-scala プロジェクトを eclipse で扱えるようにするためには,コマンドで eclipse プロジェクト化する必要があります.
    まず eclipse に取り込む前に,一度チェックアウトしておきます.
    $ svn co http://somewhere/svn/hoge/trunk/hoge /some/hoge
    $ cd /some/hoge
    $ play eclipsify
    
    これで..classpath, .projectなどのファイルや eclipse からの起動に必要な launcher が納められた eclipse ディレクトリが作成されたものと思います.
  3. eclipse へ import

    あとは,取り込むだけといきたいのですが,ここでそのままパッケージ・エクスプローラにて,[右クリック]→[インポート]→[既存プロジェクトをワークスペースへ]から eclipse に import すると,次のようなエラーが発生します.
    value Application is not a member of package views
    
    これを回避するためには,プロジェクトを起動させ,scala ファイル(および class ファイル)を自動生成させる必要があります.
    エラーは無視して,eclipse 上からプロジェクトを起動させます.起動させるためには,hoge/eclipse/hoge.launch を右クリックから実行させればOKです.コンソールに
    Listening for transport dt_socket at address: 8000
    08:24:00,422 INFO  ~ Starting /some/workspace/hoge
    08:24:00,446 INFO  ~ Module scala is available (/opt/play-1.2.2/modules/scala-0.9.1)
    08:24:01,431 INFO  ~ Scala support is active
    08:24:01,432 WARN  ~ You're running Play! in DEV mode
    08:24:01,471 INFO  ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...
    
    のように表示されたら,ブラウザから http://localhost:9000 にアクセスします.そこで再度コンソールを見ると
    Compiling:
     /some/workspace/hoge/app/controllers.scala
     /opt/play-1.2.2/modules/docviewer/app/helpers/CheatSheetHelper.java
     /opt/play-1.2.2/modules/docviewer/app/DocViewerPlugin.java
     /some/workspace/hoge/tmp/generated/views.defaults.html.welcome.scala
     /some/workspace/hoge/tmp/generated/views.html.main.scala
     /opt/play-1.2.2/modules/docviewer/app/controllers/PlayDocumentation.java
     /some/workspace/hoge/tmp/generated/views.Application.html.index.scala
    Traversing /some/workspace/hoge/app/controllers.scala
    Traversing /some/workspace/hoge/tmp/generated/views.Application.html.index.scala
    Traversing /some/workspace/hoge/tmp/generated/views.defaults.html.welcome.scala
    Traversing /some/workspace/hoge/tmp/generated/views.html.main.scala
    API phase took : 0.114 s
    08:24:21,920 INFO  ~ Application 'hoge' is now started !
    
    のように自動でコンパイルが行われていることがわかります.あとは,hoge プロジェクトを右クリックして,[プロパティー]→[Java のビルド・パス]→[ライブラリー]→[クラス・フォルダーの追加]から,hoge/tmp/classes を選択して,[OK]を選べばエラーが発生しなくなります.
  4. eclipse 設定ファイルを管理対象外にする

    最後に,play eclipsify にて生成されたファイルやプロジェクト起動時に自動生成されたファイルを svn へコミットしないようにしておきます.管理対象外とするのは,以下のファイルおよびディレクトリです.
    • hoge/.settings/
    • hoge/eclipse/
    • hoge/tmp/
    • hoge/.classpath
    • hoge/.project
    • hoge/.scala_dependencies
    上記のファイルおよびディレクトリを選択し,右クリック→[チーム]→[svn:ignore に追加]とすればOKです.

2011年7月3日日曜日

RPMコマンドの使い方

RPMパッケージをインストールする


オプションにiを指定する.
# rpm -ivh hoge.rpm
vは詳細情報,hはインストールの進行状況を表示するオプション.
# rpm -ivh hoge.rpm fuga.rpm
などとすれば,複数同時も可能.

RPMパッケージを更新する


Uオプションを指定する.
# rpm -U hoge.rpm

RPMパッケージをダウングレードする


# rpm -i --oldpackage hoge.rpm

RPMパッケージをインストールせず,テストのみ行う


# rpm -i --test hoge.rpm

RPMパッケージを確認する


# rpm -q hoge
hoge-1.0.1

インストールされているすべてのRPMパッケージを確認する


# rpm -qa
hoge-1.0.1
fuga-2.1.0
……
数が多いと思うので,grepで絞り込むなどするとよい.

参考サイト:
RPM コマンドの使い方
自宅サーバでやってみよう > RPMパッケージの確認方法

2011年1月22日土曜日

端末の中に開く

windows Vista/7 であれば、[Shift]キー押しながらマウスの右クリックで「コマンドウィンドウをここで開く」を表示させることができると思います(XP は確かレジストリをいじらないといけなかったような気がする)。

で、それと同等な機能を linux で使用する方法。
$ sudo apt-get install nautilus-open-terminal
※OS に応じて yum に置き換えてください。

これにより、右クリックから開いたメニューに「端末の中に開く」が追加されます。