SCM Boot Camp in Nagoya 1 #scmbc に参加してきた!
@kyon_mm さん主催の SCM Boot Camp in Nagoya 1 に参加してきました.
演習では Git 組に参加してきました.
演習でつかったリポジトリはこちらです.
演習
演習では色々と実験させていただきました.
グループのみなさん,協力していただきありがとうございました.
github の issue
github の issue 機能を使って私たちのグループでは作業をしてみました.
コミット コメントに #{数字} の形式で issue 番号を入れます.
するとコミット ログでは issue へのリンクが,issue ではコミットへのログがそれぞれ自動的に作成されます.
とても便利ですね.
push したコミットの修正
分散バージョン管理システムでは push したコミットを変更するのはナンセンスです.
通常ではやらないです.
こういう機会でしか実験は難しいのでやらせていただきました.
push したコミットの変更は,2 回やりました.
「マージ コミットをなくしてまっすぐなログにする」という変更をしました.
最初はローカル ブランチとマージして push されてしまい,結果的にもとに戻ったような状態になりました.
二回目は,歴史の改変後その変更の取り込み方をグループで統一したためまっすぐなログにすることができました.
push したコミットの変更はよっぽどのことがない限り行わないと思いますが,どうしてもやる場合は,変更をどう反映してもらうかというところまで含めてチームでのコンセンサスを取る必要がありそうです.
実際にやってみて,身をもって体験することができたのがよかったです.
おわりに
@kyon_mm さん,二日連続で楽しいイベントを開催していただきありがとうございました.
継続的デリバリー読書会に参加した!
@kyon_mm さん主催の 継続的デリバリー読書会 に参加してきました.
色々質問できたり深い議論ができてとても充実した一日になりました.
本の内容もかなり興味深い内容なので次回も参加したいところです.
次回継続的デリバリー読書会 2 もすでに募集が始まっています.
継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化
- 作者: David Farley,Jez Humble,和智右桂,高木正弘
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2012/03/14
- メディア: 大型本
- 購入: 19人 クリック: 432回
- この商品を含むブログ (30件) を見る
ツールもプロダクト コードと同じリポジトリに入れる?
開発に使っているツールがあって,それをプロダクト コードと同じリポジトリに入れるべきかどうかという悩みがあったので質問してきました.
「プロダクトに直接関係あるなら同じリポジトリに登録すべき.そうでないなら別でいいのでは」という回答が得られました.
具体的には,
- エクセルからヘッダ ファイルを生成しているツールがある.
- ヘッダ ファイルの生成をビルド プロセスにのせると開発のテンポが悪くなるためヘッダ ファイルはリポジトリに登録している.
- そのためヘッダ ファイルを生成するのは必要なときだけ.
- このツールをプロダクト コードと同じリポジトリに入れるべきか,別のリポジトリにすべきか.
という質問でした.
現状プロダクト コードとは異なるリポジトリで管理していたので安心することができました.
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>
メニューが重なっちゃう。
DataTemplate 内で MenuItem を使っちゃダメらしい。
解決方法
解決方法は stackoverflow にあった。
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 がいい場合はバージョン番号を読み替えてください.
# 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 でも見てください.
おわりに
以上でインストールは完了です.
使い方などは Google で検索するなどして調べてみてください.
Emacsの背景色の設定方法をまとめてみた
Emacs には背景の設定方法がいろいろありすぎてこまる.
なので Emacs 23 以降での背景色,前景色の変更をまとめてみた.
前提知識
- face
- フォント,前景色,背景色,下線の有無といった,スクリーン上でのテキストの表示に関する属性の集合.
- frame
- ウィンドウ システムで言うところのウィンドウ.
Emacs で言うところのウィンドウは C-x 2 などで分割したものをいうので注意.
- frame-background-mode
- 背景色が暗い色か明るい色かを表す値.
通常は自動で決定される.
face には frame-background-mode が dark のときと light のときの両方を定義することができる.
背景が黒のときと白のときでシンタックス ハイライトがいい感じに変わってくれるのはこいつのおかげ.
手動で設定できるけど,するもんじゃない.
前景色,背景色の設定方法
自分が知ってる限りだとこんだけある.
- custom-set-faces で default face の :background, :foreground を変更する.
- default-frame-alist に background-color と foreground-color を追加する.
- リソースで変更する.
- color-theme.el を使う.
- M-x customize-face して,手動で変える.
- 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 の名前で,default
で Emacs 全体の背景と前景,cursor でカーソルの背景と前景が設定できる.
cursor
の方では ((class color)...
としているが,これは frame-background-mode
が dark
のときと light
のときの設定を分けているため。
default
にも同じように書いてもよい.
default
を上記のように記述しておけば,:backgrond
に設定した色によって自動で frame-background-mode
が決定される.
default
にも dark
と light
を設定した場合,Emacs を dark
の設定で起動するには,
% 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>
X Windows System 上の Emacs の場合
~/.Xdefaults か ~/.Xresources に書く.
.Xdefaults や .Xresources の使い方はぐぐればいろいろでてくる.
内容はこんな感じ.
Emacs.Foreground: white Emacs.Background: black
4. color-theme.el を使う.
color-theme.el に頼る方法.よく知らない.
気になる人は Emacs Wiki を.
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 を使った方法です.