2013年7月26日金曜日

gitはじめて勉強会

先日、内輪でgitの勉強会で講師をやってきました。

資料

当日使ったスライド。
あまりgitはどうだなんだという説明はせず、とにかくハンズオンでやってみる事が目的でした。


反省点

講師っていうのは初めてだった事もあり、諸々反省点がありました。
  • 内容が参加者に合っていなかった
    講師の都合でterminal上での操作前提の内容にしていたけど、慣れていない人に教えるにはやはりSourceTreeなど使った方がいいかもしれない。
    自分では commit や diff 見る程度はEclipse上でやるけど、その他はterminal上でばっかり操作していて、他のやり方を教えられるほど知らないのがネック。

  • つめこみ過ぎた
    git init から push まで粗方詰め込んだ上で、その他のコマンドの説明も諸々…という内容にしたら、目的が何処かに行ってしまった感じになった。
    色々やるより、必要最低限をしっかりやる方が最初のとっかかりとしては良さそう。
    細かい説明はいちいちせずに「○○をするにはどうするか」という目的ベースで進めた方が覚えやすいかな。

  • 脱線し過ぎた
    ただでさえ詰め込みすぎて時間の余裕があまり無いのに、途中途中の質疑応答に時間をかけすぎた。push の話をする頃にはタイムオーバーだった…
    場合によってはバッサリ時間を切って進めて、時間配分をずらさないようにしないと、なかなか話が進まない。

第2回があるかどうかは皆の声援次第。

2013年5月16日木曜日

PlayMusicアプリが新しくなってた

Google I/O 2013の開催と同時にPlayMusicのAndroidアプリが更新されてたのでちょろっと書きなぐった。

所感メモ


String.prototype.replaceのコールバック関数

jsの String.prototype.replace メソッドは正規表現とコールバック関数を使った時、コールバック関数の引数が正規表現のマッチグループの数によって変わる。
知らなかったので、ちょっと試して確認した時のメモ

GoogleChrome バージョン 24.0.1312.52 で動作を確認したもの

ただの文字列:

1:マッチした部分
2:マッチしたインデックス
3:元の文字列全体

グループの無い正規表現:例 /[a-z]/

ただの文字列の場合と同じ

グループが1つの正規表現:例 /a([a-z])/

1:正規表現マッチした部分
2:マッチしたグループ部分
3:マッチしたインデックス
4:元の文字列全体
試したコード
"abcd".replace(/a([a-z])/, function(a,b,c){console.log(a,b,c);return a;});

グループが2つの正規表現:

1:正規表現にマッチした部分
2:マッチした1つ目のグループ部分
3:マッチした2つ目のグループ部分
4:マッチしたインデックス
5:元の文字列全体
試したコード
"abcd".replace(/a([a-z])([a-z])/, function(a){console.log(arguments);return a;});

グループが3つの正規表現:

マッチした部分の引数が増えて、インデックス・元の文字列全体が後ろにずれる。

まとめ

正規表現にgオプションを付けた場合も、それぞれのマッチ部分に対してそれぞれ上記同様にコールバック関数が呼ばれる。

仕様書を読むと、
第1引数:マッチした部分文字列
マッチグループ(captures)の数分の引数
マッチグループ(captures)の数+2番目の引数:マッチしたインデックス(マッチした文字列までのoffset)
マッチグループが無いなら第2引数。1つあれば第3引数。2つあれば第4引数。
マッチグループ(captures)の数+3番目の引数:元の文字列

MDNのページに大分詳しく載ってる。

参考

2013年2月7日木曜日

UbuntuでのEclipseのツールチップの色を変更する

Unity採用以後のUbuntuで使われているGnomeのAmbianceテーマは、Eclipse上でのツールチップ表示の背景が真っ黒になってしまって見辛いったらありゃしない。
背景色を変更する方法を見つけたのでメモ。

テーマの色を変更する方法

themes - How to change tooltip background color in Unity? - Ask Ubuntu
http://askubuntu.com/questions/70599/how-to-change-tooltip-background-color-in-unity
上記Q&Aでは、回答として大別して3つの方法が寄せられている。
  1. テーマの設定ファイルを直接書き変える
  2. gnome-color-chooser を使う
  3. ~/.gtkrc-2.0 に記述する
今回は3つ目を採用。/usr/の下を直接書き換えるのは気が引けるし、~/.gtkrc-2.0 は作ってあってコピペできる記述例もあったので、gnome-color-chooserをインストールするより早いだろう、と。

設定ファイルの内容

~/.gtkrc-2.0 に以下を記述する。
style "gnome-color-chooser-tooltips"
{
  bg[NORMAL] = "#FFFFAF"
  fg[NORMAL] = "#000000"
}
widget "gtk-tooltip*" style "gnome-color-chooser-tooltips"

参考ページにある例では、~/.gtkrc-2.0-gnome-color-chooserという別ファイルに記述して、そのファイルを読み込む設定(include ".gtkrc-2.0-gnome-color-chooser")を~/.gtkrc-2.0に記述するようになっているが、手っ取り早く直接記述した。
これでツールチップが見覚えのあるクリーム色になった。

環境

  • Thinkpad x201s
  • Ubuntu 12.04.1 LTS Precise Pangolin
  • Eclipse 3.7 Indigo

2013年1月23日水曜日

GoogleChromeはページを指定してPDFを開ける

GoogleChromeの内蔵PDFビューワはページを指定してPDFを開けます。

PDFのURLの末尾に「#page=5」とか付けるだけ。

↓の場合なら、PDFの4ページ目を開いてくれます。
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=4

ページ番号は0から始まるので注意。

2013年1月18日金曜日

ちょっと賢いgit graph

git logコマンドは--graphオプションなどの組み合わせで、良い感じにコミットグラフを表示させる事ができます。
git log --graph --date-order -C -M --pretty=format:\"<%h> %ad [%an] %Cgreen%d%Creset %s\" --all --date=short
Gitのちょっと便利な使い方 (ゆめ技:ゆめみスタッフブログ) http://yumewaza.yumemi.co.jp/2010/07/git.html より

git config --global alias.graph 'log --graph --date-order -C -M --pretty=format:"<%h> %ad [%an] %Cgreen%d%Creset %s" --all --date=iso'
1 Entry per Day: git graph http://mstssk.blogspot.jp/2012/03/git-graph.html より

ブランチやオプションの指定をしたい

上記のままでも良い感じですが、普通のgit log同様にブランチを指定したりなどしたい。
そこで、シェルスクリプトを作ってそれをgit graphというエイリアスで実行できるようにしてみる。

gitのエイリアス設定は、!マークを先頭に付けると任意のシェルコマンドを実行させられる。
git config --global alias.graph '!~/.git-graph.sh'
※設定出来るシェルコマンドはあくまで1つだけらしい。コマンドをパイプで繋ぐ事は可能だったが、セミコロンが使えないので制御文をワンライナーで記述したりは出来ない。

.git-graph.sh の中身

実行例1:オプション無しなら--allオプションを自動で付加して実行する
$ git graph 
* <b4840e1> 2013-01-16 22:38:56 +0900 [mstssk]  (HEAD, master) F
* <93d7f2c> 2013-01-16 22:38:50 +0900 [mstssk]  E
| * <659324a> 2013-01-16 22:38:28 +0900 [mstssk]  (experiment) D
| * <1210e5e> 2013-01-16 22:38:18 +0900 [mstssk]  C
|/  
* <3251633> 2013-01-16 22:32:08 +0900 [mstssk]  B
* <4264244> 2013-01-16 22:31:56 +0900 [mstssk]  A
* <4a0ab4a> 2013-01-16 22:28:16 +0900 [mstssk]  first commit

実行例2:ブランチ名を指定すれば、そのブランチのlogだけを表示
$ git graph experiment
* <659324a> 2013-01-16 22:38:28 +0900 [mstssk]  (experiment) D
* <1210e5e> 2013-01-16 22:38:18 +0900 [mstssk]  C
* <3251633> 2013-01-16 22:32:08 +0900 [mstssk]  B
* <4264244> 2013-01-16 22:31:56 +0900 [mstssk]  A
* <4a0ab4a> 2013-01-16 22:28:16 +0900 [mstssk]  first commit

実行例3:日付形式を変更。※シェルがテキトーなので--allが付かなくなる。
$ git graph --date=local 
* <b4840e1> Wed Jan 16 22:38:56 2013 [mstssk]  (HEAD, master) F
* <93d7f2c> Wed Jan 16 22:38:50 2013 [mstssk]  E
* <3251633> Wed Jan 16 22:32:08 2013 [mstssk]  B
* <4264244> Wed Jan 16 22:31:56 2013 [mstssk]  A
* <4a0ab4a> Wed Jan 16 22:28:16 2013 [mstssk]  first commit

tab補完もしたい

ここまで来たらtab補完もしたい。
git logと同じ補完をしてくれるようにするには、以下の設定ファイルを ~/.bash_completion という名前で置いておく。
既に ~/.bash_completion があるなら、追記すれば良い。

2013年1月14日月曜日

UbuntuでGooglePlayの映画を視聴する

UbuntuでGooglePlayで映画見ようと思ったら全然再生できなくて、ググって初めてGooglePlayの映画の「システム要件」ページの存在を知ったのでメモ。何でサイトフッタにリンク置いておかないんだろう。

環境

  • Thinkpad x201s
  • Ubuntu 12.04.1 LTS Precise Pangolin
  • Google Chrome 24.0.1312.52

再生するには

Ubuntu または Linux OS をお使いの場合は、HAL モジュール(リンク先は英語)もインストールする必要があります。

というわけで、Ubuntuで一瞬採用されて2バージョン後くらいにすぐ使われなくなったあの hal をインストールする必要があるそう。
引用内のリンク "HAL モジュール" はAdobeのFlash Playerで保護されたコンテンツを視聴するための要件についてのヘルプページになっている。
Google PlayではDRMにAdobe Flash Accessを使っていてその動作にHALが必要、という事なんだろう。

以下、そのページ「Problems playing protected video content | Ubuntu Linux, Flash Player 11」の内容をざっくりと。

保護されたコンテツを再生する準備


halをインストールする。
sudo apt-get install hal

インストールした後、ブラウザを閉じてから、Adobe Accessのキャッシュをクリアしておく。
cd ~/.adobe/Flash_Player
rm -rf NativeCache AssetCache APSPrivateData2

この他、別のディストリビューションや64bit環境向けの説明もあるので、適宜実施。

保護されたコンテツを再生出来るかテスト


http://drmtest2.adobe.com:8080/SVP/SampleVideoPlayer_FP.html を開いて、画面上部の"Input the video URL:"というテキストボックスにhttp://drmtest2.adobe.com:8080/Content/anonymous.f4vを入力してから、「Play」ボタンを押す。

上手く行けば、ランセンス情報などをロードする処理の後にデモ動画が再生される。

GoogleChromeで再生できない場合


ここまでやっても、GoogleChromeでは再生できなかった。
今回だけではなく、GoogleChrome内蔵のFlashプラグインの挙動が怪しいことは以前からあり、その度に「内蔵プラグインを無効にして、システムにインストールされてる方のFlashを使うようする」という対処をしていたので、今回も実施。
  1. chrome://plugins/にアクセス。GoogleChromeのプラグイン設定画面が表示される。
  2. 画面右端のリンクを操作して詳細表示にする。(もともと詳細表示ならそれでOK)
  3. Adobe Flash Playerの項に、2つプラグインが表示されているので1つ目(Chrome内蔵のPepperFlashプラグイン)を無効にする。
  4. 先述の「保護されたコンテツを再生出来るかテスト」を実施して確認する。内蔵プラグイン無効化後に、テストページはリロードしておくこと。

2013年1月5日土曜日

UbuntuでSublimeText2の入力補完が出来ない時

# ハマったので、備忘録としてと同じ轍を踏む人のためのエントリ

問題

Q. あれ? UbuntuのSublimeText2で ctrl+space で入力補完出来ないぞ!?
A. 落ち着け。Linux版だと入力補完のキーバインドの初期値は alt+/ だ

何故?

ダウンロードページにあるchangelogに書いてある。正式にVersion 2.0になったタイミングで変わったらしい。 ctrl+space だとIME切り替えのキーバインドと被るからね。
  • Linux: Show Completions has changed from ctrl+space to alt+/, to not interfere with IMEs
  • 「Sublime Text - Download http://www.sublimetext.com/2」から

    普段は半角/全角キーを使うか、mac風に変換キーのキーバインドを変えてIMEのon/off出来るようにしてるので、これにハマった時になかなか思い至らなかった。

    workaround

    今は、以下のような設定をPreferences -> Key Bindings-Userに記述している。
    [
      { "keys": ["ctrl+space"], "command": "auto_complete" },
      { "keys": ["ctrl+space"], "command": "replace_completion_with_auto_complete", "context":
        [
          { "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
          { "key": "auto_complete_visible", "operator": "equal", "operand": false },
          { "key": "setting.tab_completion", "operator": "equal", "operand": true }
        ]
      }
    ]
    

    Preferences -> Key Bindings-Defaultから入力補完の設定部分の記述をコピーして ctrl+space に書き換えただけ。