月別アーカイブ: 2012年6月

サブコマンド版git-nowのmsysGit用インストールスクリプト書きました

みんな大好きgit-nowのサブコマンド版、「メモ:git-nowとgit-masterのURL « be free」ではmakeが必要そうということで導入を見送っていましたが、腰を据えてやり直してみたら案外簡単にmsysGitに組み込むことができました。

ただ、相変わらずmsysGit用のインストールスクリプトがなかったため自分ででっちあげることにしました。その成果物を人生初のPull Requestしたところ、無事masterに取り込まれたようです。

 

Pull Request #4: Create install script for msysgit by masaru-b-cl · iwata/git-now · GitHub

 

公式のREADMEも修正してありますので、インストール時はそちらを参考にしてください。

簡単に言うと、用意したcmdファイルを実行すれば、msysGitへのクリーンなgit-flowインストール手順 « be freeで書いたようにパスの通った~/binディレクトリにコピーします。

(なお、git-now本体もmsysGitだとうまく動かない個所があったので手を加えています。)

 

msysGitのみんなも、これで快適git-nowライフを!

(ただ、git-now-fixupは公式にはない)

msysGitへのクリーンなgit-flowインストール手順

Gitを用いた効果的なブランチ運用方法である「A successful Git branching model」をサポートするツールとして、git-flowというものがあります。

msysGitにも対応したインストールスクリプトが付いていてインストールも簡単なのですが、一点だけ気になる点があります。それは既定で「%Program Files%\Git」に入れなければならない設定になっている、ということ。

本来プラグインであるはずのプログラムが本体のフォルダを汚すのには少し抵抗があったので、Git Bashのホームディレクトリ($Home、~。Windowsの%UserProfile%が既定で設定される)の下のbinフォルダにインストールする方法を試行錯誤してみた結果を紹介します。

 

前提知識

実際にインストールする前に、前提知識として「Git Bash実行時、~/binには自動的にパスが通っている」ということを覚えておいてください。

私も調べるまで知らなかったのですが、上記の設定がされていることで、導入したいツールがあればとりあえず~/binに置けば動きます。

 

インストール手順

手順1:~/binディレクトリを作成する

msysGitインストール直後は~/binフォルダはありませんので、以下のコマンドで作成しておきます。

 

$ mkdir ~/bin

 

手順2:getopt.exe、libintl3.dllを~/binディレクトリにコピーする

公式GitHubのドキュメント(Windows · nvie/gitflow Wiki · GitHub)にも書いてあることですが、msysGitでgit-flow(正確にはその内部で使用しているshFlags)を動かすには、追加の実行ファイル、ライブラリが必要です。

これらを上記リンク先文書に従いダウンロードして~/binディレクトリにコピーしましょう。

 

手順3:インストールする

ここまででインストール準備は整いましたので、あとはインストールスクリプトを次のように実行します。

 

C:\pathtogitflow> .\contrib\msysgit-install.cmd %UserProfile%

 

以上の手順で無事git-flowがインストールされました。実際に使ってみましょう。

 

$ git flow init -d
Initialized empty Git repository in c:/Users/takano-s/gitrepos/testrepos/.git/
Using default branch names.
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master]
Branch name for "next release" development: [develop]

How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []

 

無事動作していることが確認できました。

 

なお、~/binディレクトリへは、例えばgit-nowなどの追加コマンドや別途makeなどのLinuxツールを入れたりも出来ますし、そのまま他のマシンにコピーするだけで環境を再構築できるので、お勧めです。

ViewState無効時、先頭以外の項目を選択すると必ずSelectedIndexChangedイベントが走る

タイトルの様な挙動に気づくまでしばらくはまったのでメモ。

 

検証コード


<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
<script runat="server">
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
Label1.Text = "SelectedIndexChanged!";
}
protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
Label2.Text = "SelectedIndexChanged!";
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml"&gt;
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<h3>
ViewStateMode=Enabled
</h3>
<div>
<asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"
ViewStateMode="Enabled">
<asp:ListItem Text="C#" Value="1" />
<asp:ListItem Text="F#" Value="2" />
<asp:ListItem Text="VB" Value="3" />
</asp:DropDownList>
</div>
<p>
<asp:Label ID="Label1" runat="server" Text="" ViewStateMode="Disabled"></asp:Label>
</p>
<h3>
ViewStateMode=Disabled
</h3>
<div>
<asp:DropDownList ID="DropDownList2" runat="server" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged"
ViewStateMode="Disabled">
<asp:ListItem Text="C#" Value="1" />
<asp:ListItem Text="F#" Value="2" />
<asp:ListItem Text="VB" Value="3" />
</asp:DropDownList>
</div>
<p>
<asp:Label ID="Label2" runat="server" Text="" ViewStateMode="Disabled"></asp:Label>
</p>
<asp:Button ID="Button2" runat="server" Text="Button" />
</form>
</body>
</html>

view raw

Default.aspx

hosted with ❤ by GitHub

 

動作確認

初回表示

image

 

それぞれ”F#”を選択してポストバック

image

 

そのままもう一度ポストバック

image

 

ASP.NET Webフォームの仕組みを考えれば当たり前といえば当たり前なのですが、なるべくViewStateは使わないようにする方向で進めるとここは落とし穴ですねぇ。

確認してみたら、MSDNライブラリにもちゃんと書いてありました。

ListControl.SelectedIndexChanged イベント (System.Web.UI.WebControls)

メモ メモ

このイベントが正常に動作するためには、サーバーへのポスト間でリスト コントロールがいくつかの値を永続化する必要があります。 リスト コントロールでビューステートが有効になっていることを確認してください。

メモ:git-nowとgit-masterのURL

いっつも探すのでメモ。

両方とも@mzpさんのgistのモノを私は使っています。

git-now


#!/bin/sh
PREFIX="from now"
MESSAGE="[${PREFIX}] `date +\"%Y/%m/%d %T\"`"
get_amend() {
if [ -z `git log –pretty=oneline -1 | cut -d " " -f 2- | grep "^\[${PREFIX}]"` ]
then
return 1
fi
local added_files=`git diff –name-only –cached`
for f1 in `git diff –name-only HEAD^ HEAD`
do
for f2 in $added_files
do
if [ $f1 == $f2 ]
then
return 1
fi
done
done
echo "–amend"
return 1
}
if [ $# -eq 0 ]
then
git add -u
git commit -m "${MESSAGE}"
elif [ $1 == "–compact" ]
then
git add -A
AMEND=`get_amend`
git commit $AMEND -m "${MESSAGE}"
elif [ $1 == "–recent" ]
then
git add -A
if [ -z "`git log –since=1.minute`" ]
then
git commit -m "${MESSAGE}"
else
git commit –amend -m "${MESSAGE}"
fi
elif [ $1 == "–fixup" ]
then
FIRST_NOW_COMMIT=`git log –pretty=oneline –grep="${PREFIX}" | tail -n 1 | cut -d " " -f 1`
git reset ${FIRST_NOW_COMMIT}
git add -A
if [ $# -eq 2 ]
then
git commit –amend -m "$2"
else
git commit –amend
fi
elif [ $1 != "–rebase" ]
then
if [ $1 != "–all" ]
then
git add $@
else
git add -u
git add .
fi
printf "${MESSAGE}\n\n%s" "`git diff –cached`" | git commit -F –
else
FIRST_NOW_COMMIT=`git log –pretty=oneline –grep="${PREFIX}" | tail -n 1 | cut -d " " -f 1`
INITIAL_COMMIT=`git log –pretty=oneline | tail -n 1 | cut -d " " -f 1`
if [ ${FIRST_NOW_COMMIT} != ${INITIAL_COMMIT} ]
then
git rebase -i ${FIRST_NOW_COMMIT}^
else
WORKING_BRANCH=`git branch -l | grep "*" | cut -d " " -f 2`
git checkout ${FIRST_NOW_COMMIT}
git commit –amend
git rebase –onto HEAD ${FIRST_NOW_COMMIT} ${WORKING_BRANCH}
fi
fi

view raw

git-now

hosted with ❤ by GitHub

git-master


#!/bin/sh
MASTER=${1:-"master"}
WORKING_BRANCH=`git branch -l | grep "*" | cut -d " " -f 2`
git rebase $MASTER && git checkout $MASTER && git reset –hard $WORKING_BRANCH && git branch -D $WORKING_BRANCH

view raw

gistfile1.txt

hosted with ❤ by GitHub

ちなみに、公式のgit-nowは@toshikawaさんのこちら。
toshi-kawanishi/git-now – GitHub

msysGitだと別途make入れたりしないといけないようなので、まだ試していません。

GistSharpExtensionが窓の杜で紹介されました

窓の杜 – 【REVIEW】編集中ファイルを“Gist”で公開できるVisual Studio拡張「GistSharpExtension」

 

というわけでいつの間にか紹介されてました。

レビューの中には出てきてませんが、GitHubのアカウント情報はVSのオプションで事前に登録しておくことが可能です。

 

 

ぜひコードの共有にご活用ください。

 

あと、姉妹品のCreateNewGist.exeもよろしく!

GistSharpExtension:Visual Studio 2012 RCへ対応しました

GistSharpExtension

VS2012の拡張機能マネージャー(名前が「拡張機能と更新プログラム」に変わってますね。)に表示されるようにしました。

 

image

 

オプションでのGitHubアカウント情報登録など、VS2012RCでもそのまま問題なく使えることを確認しました。

VS2012RCでもぜひお試しください。

Desktopアプリ用のVisual Studio 2012 Expressはリリースされるらしい

こちらのtwitter経由で知りました。

Visual Studio Express 2012 for Windows Desktop – The Visual Studio Blog – Site Home – MSDN Blogs

Today, I’m happy to announce that we will add Visual Studio Express 2012 for Windows Desktop to the Visual Studio 2012 family. This will bring to the Visual Studio Express family significant new capabilities that we’ve made available in Visual Studio 2012 for building great desktop applications.

ちゃんとVS2012 Expressに”for Desktop”が追加されるって書いてありますね!

With this new Express edition, developers will be able to use C++, C#, or Visual Basic to create Windows desktop and console applications.

あと、どうやらこれまで言語別だったExpressが対象プラットフォーム別になるということみたいですね。これは結構うれしいかもしれない。

(でも、F#はハブられてる・・・)

Planned for release in the fall, Visual Studio Express 2012 for Windows Desktop will provide a great learning environment for students and other new developers getting started.  It will enable a friction-free solution for existing developers to bring their desktop apps forward with the latest toolsets.  And it will enable developers working on open source applications to target existing and previous versions of Windows.

ってことで、秋にはリリースされるのかな?

 

非常に待ち遠しいですね!

CreateNewGist.exe活用例:秀丸から実行するマクロ

拙作のCreateNewGist.exeですが、実態はただのファイルパスを渡して起動するWindowsFormアプリケーションです。したがって、ファイルパスを渡すことができれば、どんなツールとも連携が可能です。

その例の一つとして、秀丸用のマクロを紹介します。


// ———————————-
// CreateNewGist.exe実行マクロ
// 2012/06/07 TAKANO Sho
// ———————————-
// ファイルが更新されているかチェック
if ( filename2 == "" || updated ) {
// ファイルのセーブ
save;
// 保存処理結果判断
if ( result == false ) {
endmacro;
}
}
// CreateNewGist.exeのパス設定
$createNewGistPath = "C:\\Standalone Programs\\CreateNewGist\\CreateNewGist.exe";
// GitHubアカウント情報設定
$user = "user";
$password = "password";
// 実行文字列生成
$runstr = $createNewGistPath +" \"" + filename2 + "\" " + $user + " " + $password;
// 実行
run $runstr;
// マクロ終了
endmacro;

このgist自体も、このマクロでアップロードしたものです。

おそらくSAKURAエディタやVimなどでも同じようなことが可能だと思いますので、ぜひお試しください。

書籍:HTML5開発ポケットリファレンス

http://www.amazon.co.jp/dp/4774150673/

 

新たなマークアップタグからJavaScriptまで、広義の「HTML5」を用いた開発についてのリファレンスです。

 

内容は新たなマークアップタグの中でも、フォーム部品にかかわるものと、Canvas APIやGeolocation APIなどのJavaScriptが主です。

逆引きでやりたいことが調べられるようになっており、使用する要素それぞれに対して、IE、FireFox、Chrome、Safari、Opera、iOS、Androidの対応状況が一目でわかるようになっています。

以前紹介した「C#ポケットリファレンス」と同じような雰囲気で、仕事机の近くに置いておくにはうってつけだと思います。

また、現在はどのブラウザも対応していない仕様についても含まれているのは素晴らしいと思います。今後それぞれのブラウザの対応バージョンが変われば、手書きで修正していけばよいですから。

 

欲を言えば、逆引きのための「目次」の時点で各ブラウザの対応状況が掲載されていると、わざわざ目的のページを開く必要がなくなるので、もっと嬉しいと思います。ただ、これは一つの逆引き項目に対して複数の要素がからんでいる場合もあるので、ちょっと難しいかもしれませんね。

 

これからHTML5で新たにアプリケーションを作る人、既存アプリのHTML5化を行う人は、ぜひ手に取ってみてください。

CreateNewGist.exe、GistSharpExtension:Windows 8 RPにて作成したGistページをブラウザで表示後、終了しなかったため修正。

CreateNewGist.exe

GistSharpExtension

 

タイトルの通り、Windows 8 RPにて実行時、作成したGistページをブラウザで表示後、自動でせず、ブラウザの終了を待って一緒に終了していたため、修正しました。

是非Windows 8 RPでもお試しください。