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

Shift-JISのテキストファイルに含まれる日本語のgit diffを文字化けせずに見る方法

Git for WindowsがUTF-8に対応したおかげで、ほとんど日本語ということを意識せずに使うことができるようになりました。

ただ、まだまだShift-JISのファイルを扱うことも多く、現在のGit for Windowsではgit diffが文字化けしてしまっていました。

image

 

この現象を解消するためには、次のような手順が必要です。

  1. nkf.exe nkf32.dll Windows用の詳細情報 : Vector ソフトを探す!などからnkf.exeをダウンロードする。
  2. nkf.exeを~/bin(%UserProfile%\bin)など、Git Bash起動時にパスが通った場所にコピーする。
  3. git diffを|(パイプ)でnkfに流す。 nkfには-sオプションでShift-JISを指定する。

image

 

生のgit diffと違って色分けはされませんが、正しく日本語が表示されることがわかります。

 

なお、gitkは問題なく表示されましたし、色分け表示もされるので、こちらで確認した方が早いかもしれませんw

image

小ネタ:ReactiveFizzBuzz

元ネタはこちら。

 

というわけで10分で書いた。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reactive.Linq;
namespace ReactiveFizzBuzz
{
class Program
{
static void Main(string[] args)
{
IObservable<string> fizzbuzz = FizzBuzz();
fizzbuzz.Take(20).Subscribe(Console.WriteLine);
}
private static IObservable<string> FizzBuzz()
{
return Observable.Generate(
1,
_ => true,
i => i + 1,
i => i % 15 == 0 ? "FizzBuzz"
: i % 3 == 0 ? "Fizz"
: i % 5 == 0 ? "Buzz"
: i.ToString());
}
}
}

view raw

Program.cs

hosted with ❤ by GitHub

 

完全にネタなので、鵜呑みになさらぬよう。

小ネタ:C#でフィボナッチ関数(末尾再起版)

 

サーセン、ほんとサーセン><

 

というわけで、末尾再起版。(結果的に計算量もO(n)に)

 


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static int cnt;
static void Main(string[] args)
{
foreach (var i in Enumerable.Range(0, 11))
{
cnt = 0;
Console.WriteLine("Fib(" + i + ") : " + Fib(i) + ", 再帰呼び出し回数 : " + cnt);
// == 実行結果 ==
// Fib(0) : 0, 再帰呼び出し回数 : 0
// Fib(1) : 1, 再帰呼び出し回数 : 0
// Fib(2) : 1, 再帰呼び出し回数 : 1
// Fib(3) : 2, 再帰呼び出し回数 : 2
// Fib(4) : 3, 再帰呼び出し回数 : 3
// Fib(5) : 5, 再帰呼び出し回数 : 4
// Fib(6) : 8, 再帰呼び出し回数 : 5
// Fib(7) : 13, 再帰呼び出し回数 : 6
// Fib(8) : 21, 再帰呼び出し回数 : 7
// Fib(9) : 34, 再帰呼び出し回数 : 8
// Fib(10) : 55, 再帰呼び出し回数 : 9
}
}
private static int Fib(int n)
{
return Fib(0, 1, n);
}
private static int Fib(int fib__, int fib_, int n)
{
cnt++;
if (n == 0) return 0;
if (n == 1) return 1;
var fib = fib__ + fib_;
if (n > 2)
{
return Fib(fib_, fib, n – 1);
}
else
{
return fib;
}
}
}
}

view raw

Program.cs

hosted with ❤ by GitHub

 

ついでに、おまけに得られた情報。

C#は普通末尾再起最適化を行わないのですが、x64|Releaseビルドだと、JITコンパイルで末尾再起最適化されるらしいです。

 

@neueccさんから教えていただいた記事。

C#と末尾再帰と末尾最適化 « 泥庭

 

その後@kazukさんから教えていただいた記事。

Tail call recursion with C# « Mr Andersson

CreateNewGist.exeも窓の杜で紹介されました

窓の杜 – 【REVIEW】テキストファイルを手軽に“Gist”で公開できるツール「CreateNewGist.exe」

 

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

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

 

今回はCreateNewGist.exeも紹介していただきました。

Gistに挙げたいファイルをドラッグ&ドロップすることができるのは、言われてみれば当然なのですが、全然気づいてませんでしたw

 

というわけで、地味に便利なので、ぜひお使いください。

小ネタ:C#でフィボナッチ関数

流石にあんまりなので書いてみた、という小ネタです。

 

フィボナッチ関数とは?

整数nを与えたらフィボナッチ数を返す関数です。

フィボナッチ数列については、フィボナッチ数 – Wikipedia辺りを参照。

 

C#でフィボナッチ関数


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Fibonacci
{
class Program
{
static void Main(string[] args)
{
foreach (var i in Enumerable.Range(0, 10))
{
Console.WriteLine(i + ":" + Fib(i));
}
}
private static int Fib(int n)
{
return n == 0
? 0
: n == 1
? 1
: Fib(n – 2) + Fib(n – 1);
}
}
}

view raw

Program.cs

hosted with ❤ by GitHub

いじょ。