2010/10/29

WidnowsでGitを使う方法の続き

前回、Gitをcygwinで使う記事を書いたら、みんなのアイドルで有名な

神速さんより、コメントをいただきました。

@riskrisk msysgitのインストールで「Use a True Type font in the console」のチェックを外せばコンソールの文字化けしませんよ。cygwinとの細かい違いはありますが、msysgitでも普通にGitを使う分には大丈夫です。less than a minute ago via TweetDeck

なん・・・だと・・・!

というわけで、試してみた。

まずmsysgitを落としてくる。

場所はこの辺です。Git-xxxx って名前のを落としてきます。
インストーラーなので、普通に実行

んで、インストール

image

注意の通りに、一番下のメニューの、Use a ・・・のチェックをはずす。

で、文字化けるwwwwwwwwwww

image

なんでかなーと考えた結果、そうかGitが作るBashコンソールを
使わなきゃいいのか。

ってことで、普通のコンソールからgitを使ってみる。

これをやるには、セットアップのときに、設定を変える必要がありまして

image

セットアップの途中の、環境変数パスの設定で、
Windowsのコマンドプロンプトから実行できるように設定します。
(真ん中のを選ぶと、環境パスが入る。)

説明を読むと、Cygwinのgitを入れるんじゃないぞ、絶対にだ!
と書いてあるので、とりあえずCygwinは消します。
ちなみに、消し方はこのあたり

んで、cmd.exeからやってみたが、やっぱしなんか変だ。

コミットまでは動いたものの、文字化けを起こし
(コミットログを書いたのがvimだからか、あとでTerapadでも試そう)

git reset --soft HEAD^

っていれると、

More?

とか出てくる。

僕の心は、(´;ω;`)ブワッですが何か?

よし、今日はこれぐらいにしておいてやろう。
あきらめたわけじゃないんだから!

2010/10/18

GitをWindowsで使うには?

ちょこっとしか調べてないけど、WindowsでGitを使うには、Cygwinを使うといいらしい。

msysgit入れてみたけど、コンソールの文字を日本語できなくて・・・
(もしかして、うまいことやればいいんだろうか・・・)

で、結局Cygwinからいじることにした。

ここによると、1.7以降ならいけるとのことなので、公式からCygwinをダウンロード。
今日現在のバージョンは、1.7.7なんですね。

セットアップをダウンロードしたら、基本next連射で。
(すでにCygwinが入ってる人は、そのままsetup.exeを実行すればいいと思う)
途中で、Downloadサイトを選ぶところがあるので

image

ここはどれか選んでnext

もちろん、途中のモジュール選択でgitを探す。

image

左上の検索のところに、gitって入れると、Devel と Python と Utils が引っかかるので
Develのツリーを開く。んで、必要なモジュール

corefile、git bash completion、git-svn(Subversion使わない人は不要)、gitk あたりを入れる。

Skipの部分をクリックすれば、バージョンの値に変わるので、一番新しい奴を。

忘れずに入れるものがもうひとつ

open-ssh

これがないと、ssh-keygen が呼べなくて、鍵が作れなくて・・・もにょもにょもにょ
あとでgithibで動作を確認しますが、そのときに鍵を作るのに必要だったりします。

image

さっきと同様に、sshで検索して
opensshを選択します。

んで、インストール続行。
(依存モジュールをもサクサク入れる。)

Cygwinを起動して、gitを実行してコマンドの一覧が表示されたら、正しくインストールできてる。
git-svn 入れた人は、「git svn help」あたりを実行して、ヘルプがゴニョゴニョでればOK。

入りはしたので、本当に動くか、githubあたりで動作するか確認してみる。
自分のリポジトリを落としてみると・・・

$ git clone http://github.com/risk/risk.git
Cloning into risk...
remote: Counting objects: 96, done.
remote: Compressing objects: 100% (73/73), done.
remote: Total 96 (delta 15), reused 0 (delta 0)
Unpacking objects: 100% (96/96), done.

動いたw

つぎ、更新。

$ git clone git@github.com:risk/risk.git
Cloning into risk...
error: cannot run ssh: No such file or directory
fatal: unable to fork

あ、鍵が無い・・・w
そういえば、どこにかぎ突っ込むんだと思いながら、Honeディレクトリを探してみると

C:\cygwin\home\<アカウント名>

ここみたい

なので、ここに鍵を突っ込むといい。
(僕は鍵を作り直しちゃったので、作る場合はこのあたりを参照のこと)

んで、もう一回。

remote: Counting objects: 96, done.
remote: Compressing objects: 100% (73/73), done.
remote: Total 96 (delta 15), reused 0 (delta 0)
Receiving objects: 100% (96/96), 123.47 KiB | 65 KiB/s, done.
Resolving deltas: 100% (15/15), done.

お、今度はよさそう。

ちょっとだけ一連の操作をやってみたけど、ちゃんと動いているみたい。

設定しておくことといえば、コミットログの編集用TeraPadの設定ぐらいかな。
TeraPadをnextのみインストールしたときは、こんな感じ。

$ git config --global core.editor "/cygdrive/c/Program\\ Files/TeraPad/TeraPad.exe /cu8"

というわけで、一通り動いたよ、よしよし。

余談だけど、msysgit入れると、コンソールのフォントのデフォ値が固定されるあれは、なんなんだろう。
もしかして、アレさえなければmsysgitでいいのかもしれない・・・(こんだけ書いといてなんだけどw)

2010/10/09

第8回 社内勉強会

久しぶりに、会社の勉強会記事を、こっちに。

というのも、8回目の勉強会で、前回のTrac勉強会で失敗した
Wikiマクロの作り方を再演してきました。

今回は、自分しかスピーカーがいなかったので、
時間はあまり気にせず、聴く側の知識を保管しながら話しました。
実際の時間にすると、1時間ぐらいで話しました。
ちなみに、増やした内容は、Wikiはなんぞや とか チケットこうやって使うんだよ~とか

参加人数が少ないこと(3人程度)と、Tracになじみが薄い方もいらっしゃったので
そんな方針で進めてみました。

前回のLTから変えた点は、

  • Tracとは、どういうものなのかを説明した
  • Pythonの説明を、少し多めにした(Python知らない方が多かったので)
  • Wikiマクロを実際に動作させて、実際にどういうことをするのか実演

なかなか興味深く聴いてもらえたので、やってよかったかなと思いました。

ちなみに、余った時間で、ブラウザのカスタマイズとか、GAEの話とかしてたら
そっちのほうが、ずっと興味があったようで、そんなネタのほうが、
実は興味が深い!?とか思いましたw

ちなみに、GAEとTwitterBotの話聴きたいな~ってこともあり、
そろそろ、あの神のように速い方の出番かもしれません。

ファンクラブ会員として、あとでオファーしないとw

2010/10/02

Shibuya.trac 第8回 勉強会 感想 #shibutra

皆様、お疲れ様でした。

自分的なまとめを一通り。ログと感想が混じってるので。
確実に独り言のものは、ピンクにしとこう。

分散環境でのTrac - こんぴろさん(@kompiro)

  • はさみとツールは、つかいよう
  • 距離が離れた環境での開発作業
    • 体験したこと無いので、実感がわかないけど、普通に考えて離れてたら大変だもんなぁ
  • Tracは、マクロとか、Pluginが豊富
    • FullBlogPlugin
      • 入れてみようかな
    • TagsPlugin
      • タグがつけられるようになるツール
    • TracWysiwygPlugin
      • Tracでの視覚的に分かりやすい編集が行える
  • デスクトップのリモートツール

Hudson + AutoIt こかわさん(@Kokawa_Takashi)

  • Hudson
    • 知ってる人、100%
    • 使ってる人、半分以上?
    • やっぱりHudson使ってるひと多いんだ、道理で使いやすいと・・・
  • AutoIt

Scrumの話 かわぐちさん(@kawaguti)

  • scrumの話
    • 共感
    • 透明性
    • 実測駆動
  • TiDD
    • いつもチケット登録しようと思って、だんだんおろそかになるので、そろそろ卒業せねば
  • タスクボード
    • ハレパネがいい
      • A1☆おすすめ
    • ポストイット
      • 強粘着(重要)
    • チケットを色分けして管理する
      • 例
        • 赤 - 割り込み
        • 緑 - 期限付き
        • 黄 - それ以外
  • 見積もり
    • プランニングポーカー
    • 全員同席
    • 相対規模
    • 近くは詳細で正確(近いものほど、正確に見積もれる)
  • Jim Coplien’s CSM
  • INNOVATION SPRINT 2011

Tracでアジャイル開発 Ryuzeeさん(@ryuzee)

  • プラクティスは、あくまで「アジャイルを助けるためのツール」
  • Tracを「場」にする
    • Tracを公開することで、お客さんとの交流を潤滑に
    • 公開しないことのリスク
      • はい。(´・・)∩
      • まずいことを隠したい → 負のスパイラルに
      • 能力がばれる → かくしてどうする?
      • 上司が嫌がる → しるか
    • プロジェクトの立ち上げ時にやることの例(順番適当)
      • Tracの立ち上げ
      • MLの作成
      • 開発環境の仮想化
        • 最近配れたらいいなぁ~って良く思う。今はLinuxだし要検討
      • SCMの構築
      • Hudsonの構築
      • コーディング規約
      • ビジョンの確認(共有)
      • プロダクトバックログ
      • リリース計画
      • スプリントの期間と回数
      • DONEの定義(タスク)
      • 品質の定義
      • コアアーキテクチャの決定
  • 朝会
  • ふりかえり
  • Tracを使い続ける努力
    • 頻繁にプロジェクトを変えることは、過去の資産から切り離す行為
  • ゴミ箱にしない努力
    • 毎日チケットをみて、更新をすることが重要
    • チケットの棚卸しを定期的
    • チケットの古さは、プロジェクトの健康状態を表す

ライトニングトーク大会

  • LTする人、おおいなー
  • 5分で分かるTrac Pluginの作り方(@sinsoku_listy)
    • プラグイン開発は、変更からやってくといいのかな。楽しそうと思った
    • 資料の見れなかった部分、あとで自分で読んでみよう
  • 引越しのタスクをBTSで管理したときのお話(@ikikko)
    • 一般の人に、某BTSとかチケットとか、使ってもらえちゃうのがまず、すごいと思った。
    • そもそも、引越しをチケット管理しちゃう時点で・・・
  • Tracのソース読んでみたー(@wyukawa)
    • Tracのソース読んだこと無かったので、もう少しpython勉強してから・・・
  • とらっくじら(@Sean_SF)
    • バグ管理とか、課題管理とか、Excelはやめたほうがいい その通りだと思う。ほんとに、もうやめようよ・・・まじで・・・
  • RedmineでもTracLightning(@kaorun55)
    • Redmine + TracLightning で楽チンインストールかぁ
  • すいぎんとう(@itouakihiro)
    • Mercurialを良く知らないので、ちょっと勉強してみようかって気分に。
  • Wikiマクロ3分クッキング@riskrisk

その他

  • 席表、顔をわすれちゃわないうちに更新されていったらうれしいなぁ・・・
    http://www.seatnext.com/v/i4ca5b71bediv
  • 個人的だけど、こかわさんと、集合場所で話し込んだり、席が隣だったりと、いっぱい話せたので、楽しかったw
  • 休憩中に、見積もりの話が少し出たストーリポイントは、あくまで「見積もり」なので、実績とは別物だったりとか
    • 小さすぎるストーリー と 大きいストーリー が混在すると、相対見積もりの最小と最大が
      離れすぎてしまって、細かい作業が 1,1,1,1 みたいになる って話をした。
      アジャイルな見積もりと計画作りによると、小さすぎる作業は、相対見積もりの値に不具合がでると
      あとは、本当に小さくなりすぎてないか、やるタイミングが近づいてきたときに確認するのがいいんだろうか
    • ちゃんと「アジャイルな見積もりと計画作り」をしっかり読まないといけないと実感(覚えてれば、ここに・・って話をできたし)
    • 勉強不足、申し訳ない。
    • 名刺いっぱいつくったけど、ほとんど配ってない
    • 名札自作した。楽しかった

以上、皆様おつかれさまでした。

Shibuya.trac 第8回勉強会 Wikiマクロ3分クッキング #shibutra

まずは焼き土下座から・・・

    r'ニニ7      LTが5分で終わらない。
     fトロ,ロ!___       本当にすまないという気持ちで…
 ハ´ ̄ヘこ/  ハ
/  〉  |少  / |      胸がいっぱいなら…!
\ \    /| |
 ┌—)))——)))‐—┐      どこであれ土下座ができる…!
  ヽ ̄工二二丁 ̄
   〉 ヽ工工/ ;′∬     たとえそれが… 肉焦がし… 骨焼く…
  lヽ三三三∫三三\;'
  h.ヽ三∬三三';.三三\';∫   鉄板の上でもっ………!
  └ヽ ヽ三,;'三三∬三;'三\'"
    ヽ |__|烝烝烝烝烝烝|__|
      lj_」ー————‐U_」

Wikiマクロを作るタイトルで、別の話で時間が潰れ
本編の途中で・・・ orz

というわけで、何よりまずスライドシェアに、
今回の発表スライドをアップロードします。

あと、テンプレのソースコードを。


#!/usr/bin/env python
# -*- coding: utf-8 -*-

from trac.wiki.macros import WikiMacroBase

class TemplateMacro(WikiMacroBase):

# マクロのエントリポイント
def expand_macro(self, formatter, name, args):
arguments = args.split(',')
return main(count=int(arguments[0]))

def main(count):
return ( u'Template ' * count ) + u' end Template'


if __name__ == '__main__':
# マクロテスト用
print main(3)

その他、感想は・・・ またあとで書きます!

2010/09/24

Linux上でBoostをビルドしてみよう

検索でわざわざBoostのビルドを探して飛んでくれたひとがいたのに
みたら、クロスコンパイルしか書いてないとか、ワンステップ飛ばしてるだろ

ってことで、Boostのビルドについて少し書こうと思います。

方法は、そんなに難しくなくて、ステップは3つほど

  1. Boostのダウンロードと展開
  2. bjamを作る(bootsrap.sh)
  3. bjamでboostをインストール

です。

というか、普通のboostでいいなら、Linuxの場合は

apt-get boost

です。

なんで、boostをビルドしなきゃいけないかというと
組込みなどのクロスコンパイルが必要な環境のモジュールを作成する場合

ターゲット上で動作する環境と、ホスト側のエミュレート環境を
できるだけ近づける必要があります。

具体的には、「ホストで使えたのに、ターゲットで動かねぇよ」

って。これが一番困るのです。
実際の話でいくと、そこまで問題は起こらないとは思いますが
減らせるリスクはできるだけ減らしましょうってことで。

ダウンロード

ダウンロードは、boost.org から持ってきます。

クロスコンパイル時は、1.43.0だったので、今回もこれを。
ダウンロードしたら、展開してください

tar zxvf boost_1_43_0.tar.gz

とかでいいと思います。

bjamを作る

展開できたフォルダに移動して、bootstrap.sh を実行します。

作業場所では、いつも話題に上がりますが、
2度目ですが、boostrap ではなく bootstrapですw

cd boost_1_43_0
./bootstrap.sh

といった感じ。

bjamでboostをインストール

bjamの実行最後に、bjamを実行して、モジュールを作ります

sudo ./bjam --without-python --without-mpi threading=multi install

解説ですが、

--without-python は、ターゲットにもpythonいれなかったので。
クロスコンパイルでの開発以外にも、色々作る予定であれば
Pythonも入れていいかと思います。
コンパイルでずっこける場合は、python-dev だっけか(うろおぼえ)が必要だと思います。

apt-get install python-dev

とか、こんな感じで。やり直しても上手くいかないなら --clean(クリーン) -a(リビルド) とか

--without-mpi は指定しなくても勝手に外れますが、メッセージが気になるので。

threading=multi でマルチスレッド対応に。

作成するモジュールなどの細かい設定は、クロスコンパイルの記事を
見てもらうと良いと思います。

2010/09/23

Boost date_time で、フォーマット入力と出力

たまたまtwitterで、boostのdate_timeでフォーマット入出力が上手くいかないとの
ことだったので、作ってみた。
環境は
  • g++
  • boost 1.43.0
手順は以下のとおり
  1. ファセットの定義
  2. 入力元 出力先 に使用するストリームの宣言
  3. ldtを宣言(いちおう、元データを設定)
  4. ストリームに、ファセットを設定(localeは、ssのものをそのまま設定)
  5. 時間の文字列を文字列ストリームに設定
  6. 入力用ファセットにフォーマットを指定
  7. 読み込み
  8. 文字列ストリームをクリア
  9. 出力用ファセットにフォーマットを指定
  10. 書き込み
  11. 画面表示

ちなみに1.でファセットをポインタで宣言していますが、

これは、ストリームがファセットを自動で開放するためです。

ちなみに、deleteとかすると Segmentation fault です。

ソースコードは

#include <locale>
#include <iostream>
#include <sstream>
#include <boost/date_time.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/local_time/local_time.hpp>

int main()
{
// 1. ファセットの定義
boost::local_time::local_time_facet* outputFacet =
new boost::local_time::local_time_facet();
boost::local_time::local_time_input_facet* inputFacet =
new boost::local_time::local_time_input_facet();

// 2. 入力元 出力先 に使用するストリームの宣言
std::stringstream ss;

// 3. 入力元 出力先 に使用するストリームの宣言
boost::local_time::local_date_time ldt =
boost::local_time::local_sec_clock::local_time(
boost::local_time::time_zone_ptr() );

// 4. ストリームに、ファセットを設定(localeは、ssのものをそのまま設定)
ss.imbue( std::locale( ss.getloc(), outputFacet ) );
ss.imbue( std::locale( ss.getloc(), inputFacet ) );

// 5. 時間の文字列を文字列ストリームに設定
ss.str( "Mon, 10 Aug 2009 17:12:34" );
// 6. 入力ファセットにフォーマットを指定
inputFacet->format( "%a, %d %b %Y %H:%M:%S" );
// 7. 読み込み
ss >> ldt;

// 一応デバッグのため、時間をばらして出力
boost::posix_time::ptime pt = ldt.local_time();
boost::gregorian::date d = pt.date();
boost::posix_time::time_duration t = pt.time_of_day();
std::cout << "Year : " << d.year() << std::endl;
std::cout << "Month : " << d.month() << std::endl;
std::cout << "Date : " << d.day() << std::endl;

std::cout << "Hour : " << t.hours() << std::endl;
std::cout << "Minute : " << t.minutes() << std::endl;
std::cout << "Second : " << t.seconds() << std::endl;

// 8. 文字列ストリームをクリア
ss.str( "" );
// 9. 出力用ファセットにフォーマット指定
outputFacet->format( "%a, %d %b %H:%M:%S" );
// 10. 書き込み
ss << ldt;

// 11. 画面表示
std::cout << ss.str() << std::endl;

return 0;
}