2012/08/27(月)Wake On Lan In C#
ある日のTwitterにて。
- @ttsuki: 2メートル離れたところにあるデスクトップPCの電源を入れるために、わざわざputtyでNASにログインしてWoLパケット投げさせるっていうのはどうなんだろう。馬鹿じゃないの。というか、同一LAN内なんだから自分でMagicPacket投げたらええやん。馬鹿じゃないの。
- @kero7:@ttsuki Windows用WoLクライアントとしては、これがオススメ。http://www.forest.impress.co.jp/article/2003/04/23/okiniiri.html … たまに2回起動しないと起きないこともあるけど、設定が単純なんで。
気まぐれにdevenvしておよそ10分後にできたものがこれだっ
using System; using System.Collections.Generic; using System.Globalization; using System.Net; using System.Net.Sockets; using System.Text; namespace WoL { class Program { static void Main(string[] args) { // args[0] = "DE-AD-BE-EF-11-FE" new Action<string>(a=>new UdpClient(0).Send(Array.ConvertAll(("FF-FF-FF-FF-FF-FF-"+string.Join("-",new string[]{a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a})).Split('-'), s=>byte.Parse(s, NumberStyles.AllowHexSpecifier)),102,new IPEndPoint(0xFFFFFFFF, 9)))(args[0]); } } }
設定など要らんっ
自分のマシンに対して使って動くことは確認した。
ほんとは140文字以内にしてツイートしたかった。
追記
解説した。
それを踏まえて上のコードを分解。
2012/08/04(土)漢字の読みを得るには C#版 - Marshalで遊ぼう
やってることは、かつてHSP3向けに作ったスクリと一緒。
C#ならどれだけ楽かと思って、COM Interopしてみたくなった。
やってみたら実はTypeLibがなくて全然楽じゃなかった。
"冬過ぎて春来るらし朝日さす春日の山に霞たなびく" から、
"ふゆすぎてはるらいるらしあさひさすかすがのやまにかすみたなびく" が得られる。
お、Win8では「かすがのやまに」になってる。が、「はるらいるらし」になってる。
うーん、相変わらずビミョーね。
2012/07/05(木)C#でMidiファイルを読む
C#でMidiファイルを読む。
とりあえず、読めればいいや版。
2012/06/17(日)Jsonほぼ互換の似非バリアント的な何か。
似非バリアント もしくは、似非JSONオブジェクト。
Jsonパーサ・フォーマッタの独自実装ですはい。
ゲームとかのセーブデータをスキーマレスに読み書きしたいなという欲求があるからして。
class VarTest { public static void TestVar() { Var v = new VarList { true, false, 12345, "ほげ", new byte[]{0x1, 0x2, 3, 4, 5, }, new VarDictionary() { {"あ", true}, {"い", false}, {"X", Var.Null}, {"Y", 123}, {"辞書", new VarDictionary() { {"あ", true}, {"い", false}, {"X", new Var()}, {"Y", 123}, } }, {"辞書内配列", new VarDictionary() { {"あ", new int[]{123,456 } }, {"い", new bool[]{true, true, false, false, true} }, {"X", new VarList { Var.Null, "えー", new byte[]{99, 99, 99}, } }, {"Y", new string[]{"う゛ぁ", "う゛ぃ",} }, } } }, "にゃー", }; int a = v[5]["辞書内配列"]["あ"][1]; // → 456 string b = v[5]["辞書内配列"]["X"][1]; // → "えー" Console.WriteLine(a); Console.WriteLine(b); string serialized = v.ToFormattedString(); // JSON形式の文字列になる Console.WriteLine(serialized); Var readed = Var.FromFormattedString(serialized); // JSON形式の文字列から読み込む Console.WriteLine(readed.ToFormattedString()); // ちゃんと読み込めたか? } }
のような。
読み込み時に備えて、Nullとは別にundefindも定義しておくべきだったかしら。
2012/04/01(日)C# で BigInteger
とりあえず10進数で2300桁ぐらい扱える全然BigじゃないBigInt。負の値は扱えない。
256のとこを大きくしたら扱える桁数が増える。
割り算と剰余演算子作るのめんどくさくて作ってないけど、
たいてい必要になるのってその辺なんだよなー。もじゅろ10億7とかさー。
というわけで、longのもじゅろだけはとれるよーにしといた。
実戦で使える速度が出るかどうかは未検証。
まぁでもそういう問題は、たぶん、計算量的に無理なようにできてるでしょうね。
2012/04/01(日)C# で 桁ごとに進数が違うインクリメントする機械
C# で 桁ごとに進数が違うインクリメントする機械
たとえば、素因数分解したときに 2^0 * 3^1 * 5^4 * 7^2 とかってなったときに、全部の約数を列挙したい時用。
2012/04/01(日)C# で next_permutation を使いたいので
わざわざこういうものを再生産しないといけないところにC#の不便さを感じる。
今日の250が落ちたのはこいつがバグってたせい……ぐぅ。
2012/04/01(日)C# で 素数表を得る。エラトステネスのふるい
素数表を得る
class PrimeTable { public List<int> Primes = new List<int>(); public bool[] IsPrime; public PrimeTable(int max) { IsPrime = new bool[max + 1]; for (int i = 2; i <= max; i++) IsPrime[i] = true; for (int i = 2; i <= max; i++) if (IsPrime[i]) { Primes.Add(i); for (int j = i * 2; j <= max; j += i) IsPrime[j] = false; } } } public class Program { static void Main() { foreach (var p in new PrimeTable(100).Primes) Console.WriteLine(p); } }