SCM Boot Camp in Nagoya 1 #scmbc に参加してきた!

@ さん主催の SCM Boot Camp in Nagoya 1 に参加してきました.

演習では Git 組に参加してきました.

演習でつかったリポジトリはこちらです.

演習

演習では色々と実験させていただきました.
グループのみなさん,協力していただきありがとうございました.

github の issue

github の issue 機能を使って私たちのグループでは作業をしてみました.
コミット コメントに #{数字} の形式で issue 番号を入れます.
するとコミット ログでは issue へのリンクが,issue ではコミットへのログがそれぞれ自動的に作成されます.
とても便利ですね.

push したコミットの修正

分散バージョン管理システムでは push したコミットを変更するのはナンセンスです.
通常ではやらないです.
こういう機会でしか実験は難しいのでやらせていただきました.

push したコミットの変更は,2 回やりました.
「マージ コミットをなくしてまっすぐなログにする」という変更をしました.
最初はローカル ブランチとマージして push されてしまい,結果的にもとに戻ったような状態になりました.
二回目は,歴史の改変後その変更の取り込み方をグループで統一したためまっすぐなログにすることができました.

push したコミットの変更はよっぽどのことがない限り行わないと思いますが,どうしてもやる場合は,変更をどう反映してもらうかというところまで含めてチームでのコンセンサスを取る必要がありそうです.
実際にやってみて,身をもって体験することができたのがよかったです.

懇親会

懇親会だいたいこんな感じでした.

  • コーラにピザうめぇ
  • 名古屋式イベント告知
  • alias php6=python

おわりに

@ さん,二日連続で楽しいイベントを開催していただきありがとうございました.

継続的デリバリー読書会に参加した!

@ さん主催の 継続的デリバリー読書会 に参加してきました.

色々質問できたり深い議論ができてとても充実した一日になりました.

本の内容もかなり興味深い内容なので次回も参加したいところです.

次回継続的デリバリー読書会 2 もすでに募集が始まっています.

継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化

継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化

ツールもプロダクト コードと同じリポジトリに入れる?

開発に使っているツールがあって,それをプロダクト コードと同じリポジトリに入れるべきかどうかという悩みがあったので質問してきました.

「プロダクトに直接関係あるなら同じリポジトリに登録すべき.そうでないなら別でいいのでは」という回答が得られました.

具体的には,

  • エクセルからヘッダ ファイルを生成しているツールがある.
  • ヘッダ ファイルの生成をビルド プロセスにのせると開発のテンポが悪くなるためヘッダ ファイルはリポジトリに登録している.
  • そのためヘッダ ファイルを生成するのは必要なときだけ.
  • このツールをプロダクト コードと同じリポジトリに入れるべきか,別のリポジトリにすべきか.

という質問でした.

現状プロダクト コードとは異なるリポジトリで管理していたので安心することができました.

MenuItem をデータバインディングで作る。

最近 MVVM を勉強がてら WPF を触ってる。

で、コンテキスト メニューをデータバインディングで作ろうと思ったらはまったのでメモ。

課題

WPF で MVVM やってるときに MenuItem をデータバインディングで作りたいって思うことあると思うんです。

で、こうやるとうまくいかない。

<ContextMenu ItemsSource="{Binding Path=SomeCollection}">
    <ContextMenu.ItemTemplate>
        <DataTemplate>
            <MenuItem Header="{Binding Path=DisplayName}" Command="{Binding Path=Command}" />
        </DataTemplate>
    </ContextMenu.ItemTemplate>
</ContextMenu>

メニューが重なっちゃう。

f:id:kei10in:20111126005910p:image


DataTemplate 内で MenuItem を使っちゃダメらしい。


ContextMenuへのバインディング(2of3)

解決方法

解決方法は stackoverflow にあった。

http://stackoverflow.com/questions/1312895/using-a-datatemplate-for-a-menuitem-causes-extra-space-on-the-left-side-to-appea


ItemTemplate を使わない。ItemContainerStyle を使う。

具体的にはこんな感じ。

<ContextMenu ItemsSource="{Binding Path=SomeCollection}">
    <ContextMenu.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <Setter Property="Header" Value="{Binding Path=DisplayName}"/>
            <Setter Property="Command" Value="{Binding Path=Command}"/>
        </Style>
    </ContextMenu.ItemContainerStyle>
</ContextMenu>


これで OK。

Cygwin で Python 3.2 をビルドする

次のように普通にビルドしようとしても libpython3.2m.dll.a をビルドする make ターゲットがないと言われてビルド エラーになります.

% ./configure
% make

libpython3.2m.dll.a の "m" は ABI フラグと呼ばれるもので "m" は PyMalloc を有効にしているときに付与されます.
詳しくは PEP 3149 -- ABI version tagged .so files を見れば,たぶん載っているんじゃないかと思います.

PyMalloc を無効にしてビルドする.

PyMallco によって付与される ABI フラグが原因なので,次のように PyMalloc を無効にしてやればビルドができます.

% ./configure --without-pymalloc
% make

PyMalloc を有効にしてビルドする.

PyMallco を無効にすればビルドできるのですが,PyMalloc を有効にしてままビルドしたいのが人情というものです.
ということでパッチを作ってみました.

The patch for building Python-3.2.2 on cygwin environment. — Gist

Python-3.2.2 のソースにこのパッチを当てれば PyMalloc を有効にしたまま Cygwin でビルドができるはずです.

Xcode っぽい "{}" の補完をする elisp 作ったよー

Emacs では "{" の入力と同時に "}" を補完してくれるコマンドはありますが,とても使いにくい感があります.

Xcode では "{" を入力した直後に改行が入力されると "}" を補完してくれて,とてもすばらしいです.

この補完がめっちゃ便利だったので Emacs でも導入しようと頑張ってみました.

(defun newline-skeleton-pair-insert-brace ()
  (interactive)
  (if (and (eq (char-before) ?{)
           (or (eq last-command 'yank)
               (eq last-command 'self-insert-command)
               (eq last-command 'c-electric-brace)))
      (progn
        (newline-and-indent)
        (save-excursion (insert "\n}") (indent-according-to-mode)))
    (newline-and-indent)))

(add-hook 'c-mode-common-hook
          '(lambda ()
             (local-set-key (kbd "RET") 'newline-skeleton-pair-insert-brace)
             ))

ハード コーディングが多いのが残念ですが,なんとか動いています.

だれか直してくれると嬉しいです.

smartchr.el とか skeleton-pair を使ってる人には不要だと思います.


Xcode の場合は,カーソル移動をしてもカーソルが "{" の直後戻っていれば "}" を補完してくれますが,Emacs でそれをやろうと思うと buffer-undo-list を参照しないといけないようで,まだまだ自分には無理そうでした.

Mac での Python 開発環境のつくり方

Python 2.7 + pip + virtualenv + virtualenvwrapper で Python の開発環境を構築します.

Python 2.7 のインストール

まずは何はなくとも Python 入れないとだめだよねーっていうことで Python 2.7 をインストールします.

ここでは Python 2.7 をインストールしていますが,2.5 や 2.6 がいい場合はバージョン番号を読み替えてください.

PythonMacPorts でインストールします.

# sudo port install python27

pip

pip とは

pip とは Python 用の CPAN である,PyPI からダウンロード,インストールを行うツールです.

以前は easy_install というものが使われていましたが、今後は pip になっていくようです.

pip のインストール

pip も MacPorts でインストールします.

# sudo port install py27-pip

pip がインストールできたので,今後は Python のパッケージのインストールには pip を使って行きます.

virtualenv, virtualenvwrapper

virtualenv, virtualenvwrapper とは

virtualenv, virtualenvwrapper, pip を使う方法 - Ian Lewis でも見てください.

virtualenv, virtualenvwrapper のインストール

virtualenv と virtualenvwrapper は pip でインストールします.

MacPorts の virtualenvwrapper はメンテナンスされていないのか,バージョンがとても古いので MacPorts は使いません.

# sudo pip install virtualenvwrapper

virutalenv は virtualenvwrapper に依存しているので,一緒にインストールされます.

おわりに

以上でインストールは完了です.

使い方などは Google で検索するなどして調べてみてください.

Emacsの背景色の設定方法をまとめてみた

Emacs には背景の設定方法がいろいろありすぎてこまる.
なので Emacs 23 以降での背景色,前景色の変更をまとめてみた.

前提知識

face
フォント,前景色,背景色,下線の有無といった,スクリーン上でのテキストの表示に関する属性の集合.
frame
ウィンドウ システムで言うところのウィンドウ.
Emacs で言うところのウィンドウは C-x 2 などで分割したものをいうので注意.
frame-background-mode
背景色が暗い色か明るい色かを表す値.
通常は自動で決定される.
face には frame-background-mode が dark のときと light のときの両方を定義することができる.
背景が黒のときと白のときでシンタックス ハイライトがいい感じに変わってくれるのはこいつのおかげ.
手動で設定できるけど,するもんじゃない.

前景色,背景色の設定方法

自分が知ってる限りだとこんだけある.

  1. custom-set-faces で default face の :background, :foreground を変更する.
  2. default-frame-alist に background-color と foreground-color を追加する.
  3. リソースで変更する.
  4. color-theme.el を使う.
  5. M-x customize-face して,手動で変える.
  6. set-background-color, set-foreground-color で設定する.

1. custom-set-faces で default face の :background, :foreground を変更する.

Emacs が提供している face のカスタマイズ機能を使ったときに Emacs が出力するコードで使われている方法.
.emacs.el に書けば最初から色が変わってる.
最近この方法を知ってからは,Emacs で背景色を変えるもっとも正しい方法なんじゃないかと思ってる.

.emacs.el に書くのはこんな感じ.

(custom-set-faces
 '(default ((t
             (:background "black" :foreground "#55FF55")
             ))))
 '(cursor ((((class color)
             (background dark))
            (:background "#00AA00"))
           (((class color)
             (background light))
            (:background "#999999"))
           (t ())
           )))

default とか cursor っていうのは face の名前で,defaultEmacs 全体の背景と前景,cursor でカーソルの背景と前景が設定できる.


cursor の方では ((class color)... としているが,これは frame-background-modedark のときと light のときの設定を分けているため。
default にも同じように書いてもよい.
default を上記のように記述しておけば,:backgrond に設定した色によって自動で frame-background-mode が決定される.
default にも darklight を設定した場合,Emacsdark の設定で起動するには,

% emacs -rv

として起動するか,後述するリソースに reverseVideo: true を設定する必要がある.

2. default-frame-alist に background-color と foreground-color を追加する.

ブログとかでよく見る気がする.
.emacs.el に書いた場合,起動時に途中で色が変わったりしてなんかやだ.
個人的にはダサイから好きじゃない.

(setq default-frame-alist
      (append
       (list
        '(background-color . "black")
        '(foreground-color . "#55FF55")
        '(cursor-color . "#00AA00")
        )
       default-frame-alist)
      )

この方法でも background-color に設定した色によって frame-background-color が動的に決定される.

3. リソースで変更する.

Emacs の設定ファイルには記述しない方法.
.Xdefaults とか org.gnu.Emacs.plist とかレジストリに書く.
emacs -nw な場合の方法はわからない.

フォントとかも設定できて,システム依存の部分を .emacs.el から完全に分離できるのがいい.

Background や Foreground を設定する代わりに reverseVideo を "true" にすれば,frame-background-mode を dark にすることができる.

Cocoa Emacs の場合

~/Library/Preferences/org.gnu.Emacs.plist に設定を書く.
このファイル自体は Carbon Emacs Package でも使われてたみたい.


内容はこんな感じ.
値はすべて string にする必要がある.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
<plist version="1.0">
<dict>
        <key>Background</key>
        <string>black</string>
        <key>Foreground</key>
        <string>white</string>
</dict>
</plist>
NTEmacs の場合.

NTEmacs ではレジストリに登録する.
Emacs Wiki が参考になると思う.

http://www.emacswiki.org/emacs/MsWindowsRegistry

X Windows System 上の Emacs の場合

~/.Xdefaults か ~/.Xresources に書く.
.Xdefaults や .Xresources の使い方はぐぐればいろいろでてくる.

内容はこんな感じ.

Emacs.Foreground: white
Emacs.Background: black

4. color-theme.el を使う.

color-theme.el に頼る方法.よく知らない.

気になる人は Emacs Wiki を.

http://www.emacswiki.org/emacs/ColorTheme

5. M-x customize-face して,手動で買える.

M-x customize-face ってやって face を指定すると,その face の設定を動的に変更することができる.
default face を変更すれば,frame-background-mode も再計算されてとても便利.
普段は背景色: 黒でプロジェクタに移すとき背景色: 白にしたりフォント サイズを変えたいときに便利.

6. set-background-color, set-foreground-color で設定する.

set-background-color, set-foreground-color 現在の frame の背景色,前景色を変更する方法.
背景を黒のような暗い色にしたとき,シンタックス ハイライトなどの face が白のときのままになっちゃう.
frame-background-mode が dark にならないのが原因だが,frame-background-mode を期待通りに変更する方法は提供されていない.
なので,.emacs.el に書くのにはおすすめしない.
new-frame したとき,set-background-color で設定した色は引き継がれない.

終わりに

ざっくりあげただけでも 6 種類もある.

おすすめは,1. の custom-set-faces を使った方法です.