2005年10月3日月曜日

第1回 エンタ!検定

日経エンタ!はよく読んでいるので、チャレンジしてみた。
+++ 第1回 エンタ!検定 成績発表 +++

あなたの総合得点は73点  全国平均 57点
全国順位(10月3日 12時現在)
30位(142人中)
--ジャンル別得点表 ---------------
    0_________10__________20点
映画 ■■■■■■■■■■■■■■
テレビ■■■■■■■■■■■■■
音楽 ■■■■■■■■■■■■■■■■■■
書籍 ■■■■■■■■■■■■
芸能 ■■■■■■■■■■■■■■■■
-------------------------

--講評---------------------
あなたは「エンタの玄人」
あなたは忙しい仕事や勉学のかたわら、世間の流行情報チェックを怠らない努力家に違いありません。すべてのジャンルにおいて偏りなく平均的に知っています。仲間内ではすべての会話についていけるムードメーカーとして活躍できるでしょう。次は1つのジャンルを深めてみてはいかがでしょうか。解答の傾向としては、特に「海外」「雑学」ネタに詳しいですね。
-------------------------
エンタ検定実施中!
http://ent.nikkeibp.co.jp/ent/kentei/

2005年10月2日日曜日

リファクタ

軋んだコードをテストしたいのは
バグ無しの証明が他にないから
掴んだはずの僕の未来は
「仕様」と「実装」で矛盾してるよ

歪んだ設計を消し去りたいのは
自分の限界をそこに見るから
自意識過剰な僕のソースには
不要な一般化 YAGNIじゃないよ

消してリファクタして
くだらない変数名
忘られぬ双方向関連を

起死回生
リファクタして
意味のない空メソッドもグリーンを成す原動力
xUnitをくれよ

角谷さんのまねっこでした。

2005年9月24日土曜日

ばあちゃんが書いた書

青蛙が
竹の葉にいる
燕の子が嘴を
巣におさめる
貧しい夕餉の
卓ではあるが
新しいエプロンが
揃えてある
山査子の
花の蔭には
新月をねらう
猫の目が
ある

2005年9月19日月曜日

ロリポブログに移行

今まではWordPressを設置していました。しかし、テンプレートを変えてみたりCSSを使ってレイアウトしてみたりすることがだんだん面倒になってきたので、ブログエンジンはアウトソースすることにしました。

いや、かなり変わるもんですね、気分が。
ブログ自身の見た目もそうなんですが、管理機能のUIが変わったのが大きいです。

.NET関連メモ

A Grouping and Subtotaling Repeater for ASP.NET
Microsoft ACT standalone installation

2005年9月17日土曜日

2005年9月15日木曜日

Visual Studio 2005 RC1

PDC中に出ました。
サブスクライバダウンロードでScriptエラーが発生してうまくダウンロードできなかったけれど、「個人用コンテンツ」を編集して、表示項目を減らしたらなぜかエラーが起こらなくなった。



2005年9月14日水曜日

LINQの裏にあるラムダ式

(どっとねっとふぁんBlog経由)

PDCでLINQことLanguage Integrated Queryのアナウンスとデモがあったそうだ。
http://msdn.microsoft.com/netframework/future/linq/default.aspx

ちょっとサンプルを見てみよう。サンプルは http://msdn.microsoft.com/vcsharp/future/linqsamples/ にある。
public void Linq1() {
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

var lowNums =
from n in numbers
where n < 5
select n;

Console.WriteLine("Numbers < 5:");
foreach (var x in lowNums) {
Console.WriteLine(x);
}
}

実行結果は
Numbers < 5:
4
1
3
2
0


なんだこれ、コード中にSQLみたいのが。
気を落ち着けて、overview (http://download.microsoft.com/download/c/f/b/cfbbc093-f3b3-4fdb-a170-604db2e29e99/linq%20project%20overview.doc) を読む。
上記コードだとvariant型みたいなのが使われていて良くわからないが(追記:型推論。C# 3.0の機能らしい。)、型を明確に書き直すとこうなるらしい。
IEnumerable<int> lowNums =
from n in numbers
where n < 5
select n;

しかも、上の書き方はシンタックスシュガーらしく、下の書き方と等価らしい。
IEnumerable<int> lowNums = numbers
.Where(n => n < 5)
.Select(n => n);

さらに、下のように分けて書くこともできる。
Func<int, bool> filter = n => n < 5;
Func<int, int> project = n => n;
IEnumerable<int> lowNums = numbers
.Where(filter)
.Select(project);

で、これをC#2.0風に書くとこうなる。
Func<int, bool> filter = delegate (int n)
{
return (n < 5);
};
Func<int, int> project = delegate (int n)
{
return n;
};
IEnumerable<int> lowNums = numbers
.Where(filter)
.Select(project);

ようするにクロージャで実現されているということ。
LINQとは視点がずれるけど、C# 3.0だとコレクションクロージャメソッドも書き方が変わるな。
//rubyだと managers = employees.select {|e| e.manager?}
managers = employees.FindAll(e => e.IsManager);

こうですか?わかりません!

2005年9月5日月曜日

C# 2.0のコレクションクロージャメソッド

http://capsctrl.que.jp/kdmsnr/wiki/bliki/?CollectionClosureMethod

改めて書いてみると、なんかすごいムズムズする……

using System;
using System.Collections.Generic;
using System.Text;

namespace Closure
{
class Employee
{
public bool IsManager
{
get {return true;}
}

public void doSomething()
{
}

public Office office
{
get { return new Office(); }
}
}

class Office
{
}

class Business
{
public List<Employee> managers(List<Employee> emps)
{
return emps.FindAll(
delegate(Employee e)
{
return e.IsManager;
}
);
}

public void Do(List<Employee> emps)
{
emps.ForEach(
delegate(Employee e)
{
e.doSomething();
}
);
}

public List<Office> collect(List<Employee> emps)
{
return emps.ConvertAll<Office>(
delegate(Employee e)
{
return e.office;
}
);
}

public bool allManagers(List<Employee> emps)
{
return emps.TrueForAll(
delegate(Employee e)
{
return e.IsManager;
}
);
}

public bool noManagers(List<Employee> emps)
{
return !emps.Exists(
delegate(Employee e)
{
return e.IsManager;
}
);
}
}
}

餃子2

今日は麺棒があるので薄くできた。
でも薄すぎた。もっと厚いほうが好み。
具は豚ひき肉とエビの2種類。
餃子