ラベル ごにょごにょ の投稿を表示しています。 すべての投稿を表示
ラベル ごにょごにょ の投稿を表示しています。 すべての投稿を表示

2011年4月17日日曜日

MIX11をChannel9からまとめどり

更新:2011年4月19日 4:07

残念なお知らせと、うれしいお知らせがあります。

Mix 11 Videos - Download them all with RSS - Scott Hanselman

残念なのからいくと、このエントリは用なしになりました。嬉しいのは公式にMP4 Highが配信されました。

ダウンロードしなおすぜ!頑張れオレ!

MIX11 | Channel 9

いっぱいですね~。120個くらいですかね。MP4だけダウンロードしてiPadに入れて通勤時に全部目を通しておくのが、ラスベガスに行けなかったマニアのおつな楽しみ方というものでしょう。

http://channel9.msdn.com/Events/MIX/MIX11/RSS

とはいえ、Feedから取り出せたりするほど、便利なわけでもなく。やり方あるのかな?

でもそんなこと気にしない。ListタブをクリックすればすべてのMP4動画へのリンクがありますね。ということは、HTMLにはちゃんと動画のURLが埋まってるわけですね。となれば、スクレイピング!

なんてね。今回はちょっと趣向を変えてIE9のコンソールでJavaScriptを実行して取り出してしまいましょう!と、思ったけど、なんかちょっと思ったような出力が得られなかったので、Chromeで取り出してしまいましょう!てへ。

まずはChromeでページにアクセス。

http://channel9.msdn.com/Events/MIX/MIX11?sort=status&direction=asc#tab_sortBy_status

mix11-1

Shift+Ctrl+iでコンソールをひらきましょう。

mix11-2

MIX11のページにはjQueryが読み込まれてるので、やりたい放題ですよ。まずは変数の初期化。

var list=[];

と入れて改行。

続いて、listにエレメントから取り出したMP4一覧をタイトル込みで入れる。

$(".entry-meta > .downloads a[href*='.mp4']").each(function(i,v){list.push("wget -O \""+$(v).parents(".entry-meta").find(".title").text().replace(":","-").replace("?","?") +".mp4\" "+ $(v).attr("href"));});

↑これをコピペして改行すると、ぞろぞろ表示されます。

mix11-3

が、結果はlistに格納されてるので、続けて

list

と、入力して改行。

mix11-4

あとはコレをさらにコピペして、都合のいいように編集してコンソールからwget!curlでもいいっす。ちなみに複数の解像度のファイルがあるので、タイトルだけでファイル名にすると重複しちゃうので、その辺は目視で変更。さらにファイルとして使えない文字もあったりするので、ちょこっと修正。お好みに合わせて、どーぞー。ただいまダウンロード中の図。

mix11-6

※パスは都合のいいように書き換えてね!

ちなみにIEで実行したのが↓こちら。

mix11-5

ちょっとコピペしにくい。というかできない。

これで見放題ですな。ぐへへ、ぐへへへ~。たまりませんな~。あ、でも解像度低いとiPadでちょっと見づらい。文字潰れ気味。スライドはギリセーフだけど、コードが見れるかどうかが大事なので、ダウンロード後にちょっと確認しないとね。

2011年1月9日日曜日

zenbackをBloggerとTumblrで

年末年始いろんなサイトで関連記事やら関連リンクが全く同じデザインで表示されてるのを見て、なんだろな~、と。

どうもzenbackというブログパーツのサービスみたいで(ちゃんとpowered by zenbackって書いてるのに、気づかずにHTMLソースから追いかけちまった、てへ)。

zb1

zenbackであなたのブログに全てのフィードバックを。

運営は大御所シックス・アパート。エンジンはログリー株式会社のnewziaコネクト。

newziaコネクト | コンテキストマッチサービス

凄いね。こんなスゴイサービスが半年も前からベータテスト始まってたのを全然しらなかった。アルゴリズムは「当社独自の連想検索技術および行動履歴解析技術」ってことで、連想検索というのが気になる(TF/IDF的なことも計算してるんだろうけど、その辺はちょっと不明)。

コンテキストマッチ自体面白い領域なので、そろそろ真面目に取り組まないとな~とは思ってるんだけど、以前作ったものをもっとちゃんとzenbackみたいにエンジン化していきたいなと思ってる次第です。

はい、んで、こんな面白いサービスは早速自分のブログにも導入したくなるじゃないですか。仕込む時点ではBloggerとTumblrではうまく貼り付けられない的な事が書かれてた。

要するにアーカイブページ(一覧ページ)とエントリーページ(個別Permalink)の判定がごにょごにょと。そうかもね、分かりにくいよね。なので、やり方。

Tumblr

TumblrのDashboardからAccountのPreference

zb2

Customize your Blog

zb3

Themeメニューをクリックして以下の部分にzenbackのスクリプトを貼りつけ。

zb4

{block:Permalink}~{/block:Permalink}のあいだです。↑この画像だと同じ場所にTypePad Connectのコメント欄もだしてます。

Blogger

Bloggerもスクリプトを入れる場所が分かりにくいんだけど、それだけじゃなくてXML的にValidじゃないとダメだから、zenbackのサイトで出力されるscriptそのままじゃダメで、ちゃんとCDATAにしてあげないとエラーになります。

これもダッシュボードからデザイン→HTMLの編集へ進んで"ウィジェットのテンプレートを展開"にチェックを入れる。

zb5

<b:if cond='data:post.allowComments'>~<b:else>~</b:if>のelse以降のブロックにスクリプトを書きましょう。

zb6

ちょっと大きなXMLなのでエレメントブロックが分り易見れるようにVS2010で。編集はテキストエディタで十分。

zenbackのダッシュボードからCODEを取得すると

<!-- X:S ZenBackWidget -->
<script type="text/javascript">
document.write(unescape("%3Cscript")+" src='http://widget.zenback.jp/?base_uri=http%3A//takepara.blogspot.com&nsid=93212648191094697%3A%3A93212656780978809&rand="+Math.ceil((new Date()*1)*Math.random())+"' type='text/javascript'"+unescape("%3E%3C/script%3E")); </script> <!-- X:E ZenBackWidget -->

↑こうなので、ちゃんとCDATAにしましょう。

<!-- X:S ZenBackWidget -->
<script type="text/javascript">

//<![CDATA[
document.write(unescape("%3Cscript")+" src='http://widget.zenback.jp/?base_uri=http%3A//takepara.blogspot.com&nsid=93212648191094697%3A%3A93212656780978809&rand="+Math.ceil((new Date()*1)*Math.random())+"' type='text/javascript'"+unescape("%3E%3C/script%3E"));
//]]>
</script> <!-- X:E ZenBackWidget -->

これで関連記事やらなにやらいろいろ表示されますね!リコメンド素敵。

2010年12月30日木曜日

問題だと思っていることはホントに問題なの?

すっかり忘れてました。新しく開発者を採用するにあたり、会社の方針に合わせてコードを書いてもらいました。で、採用担当としてこんな問題を考えました。

問題内容

2つの文字列を与えられた時、それぞれの文字列の一致率を0~1の間で算出する関数を作成せよ。
※一致率の定義の仕様も含めて考えてください。

いろいろ考え方や思うところはあると思いますが、今回に関しては問題を解く過程をとても重視しました。どういうふうに仕様を決めるのかも含め、です。内容からして勝手に仕様を決めていいように思われるかもしれないですが、そこの解釈も重視です。与えられた情報の範囲内でどこまで飛べるのか、みたいな。

解答例

public static decimal Rate(string value1, string value2)
{
    if (string.IsNullOrEmpty(value1) || string.IsNullOrEmpty(value2))
        return 0m;

    if (string.IsNullOrEmpty(value1.Trim()) || string.IsNullOrEmpty(value2.Trim()))
        return 0m;

    if (string.Compare(value1, value2, StringComparison.CurrentCulture) == 0)
        return 1m;

    var longer2nd = value1.Length < value2.Length;
    var val1 = longer2nd ? value1 : value2; // 短い文字列
    var val2 = longer2nd ? value2 : value1; // 長い文字列
    int match = 0, p1 = 0, p2 = 0, p2Index = 0;

    while (p1 < val1.Length && p2 < val2.Length)
    {
        if (val1[p1] == val2[p2Index])
        {
            match += 2;
            p1++;
            p2 = p2Index++;
        }
        else
        {
            p2Index++;
            if (p2Index >= val2.Length)
            {
                p1++;
                p2Index = p2;
            }
        }
        
        if (val2.Length - 1 < p2Index)    // 進みすぎたときには引き戻す
            p2Index = p2;
    }

    return match / (decimal)(value1.Length + value2.Length);
}

最初のほうはエラーチェックだから、今回別に無くてもよかったです。

あれっすよ、こんなの10分やそこらでコード化するもんじゃないかもね。でも、考え方というか解き方というか、問題はどこでどういう回答をビジネスオーナーは望んでいるのか、ですよね。

問題を考えたものとしては、この問題で先頭一致の割合だけでとくのが一番簡単なのは分かってて、それだけじゃない解き方を答えて欲しいな~、と思ってました。

“どのくらい一致しているか”

の定義は様々だけど「全体文字数に占める一致文字数の割合」が手頃な回答ですよね。んじゃ、一致文字数というのはどういう意味だと解釈するのが面白いか。文字列を前半・中央・後半の3つの集合として考えて、それぞれの文字列の比較開始位置と一致文字数を数えていけば、それらしい数値を出すこと方法として面白いんじゃないかと思うんだけど、どうかな。

前半 中央 後半 文字列1 文字列2

AABBCC AABBCC

AABBCC AABBzz
※AABBも同じ

zzBBCC yyBBCC
※BBCCも同じ

AAzzCC AAyyCC
※AACCも同じ

  zzAAyy xxAAww

※前半だけ、後半だけは前半+中央と中央+後半と同じ。

こんな感じのパターン。ちなみにこのパターンを答えた人がひとりだけいましたよ。なんで同じ答えにたどり着いたのかというと、そういう定義をオーナーが望んでると聞き出したからです。そりゃ同じになるわね。

じゃー、このコードがホントにそれっぽく一致率がでるのか確認するテストコード。

[TestMethod]
public void 空文字渡し()
{
	var rate = MatchRate.Rate(null, null);
	Assert.AreEqual(0, rate);

	rate = MatchRate.Rate("", null);
	Assert.AreEqual(0, rate);

	rate = MatchRate.Rate(null, "");
	Assert.AreEqual(0, rate);

	rate = MatchRate.Rate("", "");
	Assert.AreEqual(0, rate);

	rate = MatchRate.Rate("", "AA");
	Assert.AreEqual(0, rate);

	rate = MatchRate.Rate("AA", "");
	Assert.AreEqual(0, rate);
}

[TestMethod]
public void 空白渡し()
{
	var rate = MatchRate.Rate(" ", "");
	Assert.AreEqual(0, rate);

	rate = MatchRate.Rate("", "  ");
	Assert.AreEqual(0, rate);

	rate = MatchRate.Rate("AA", " ");
	Assert.AreEqual(0, rate);
}

[TestMethod]
public void 完全一致()
{
	var rate = MatchRate.Rate("AA", "AA");
	Assert.AreEqual(1m, rate);

	rate = MatchRate.Rate("aa", "aa");
	Assert.AreEqual(1m, rate);
}

[TestMethod]
public void 前方一致で66パーセント()
{
	var rate = MatchRate.Rate("AA", "AABB");
	Assert.AreEqual(2m / 3m, rate);
}

[TestMethod]
    public void 後方一致で66パーセント()
{
	var rate = MatchRate.Rate("AA", "BBAA");
	Assert.AreEqual(2m / 3m, rate);
}

[TestMethod]
public void 中央一致で66パーセント()
{
	var rate = MatchRate.Rate("AA", "BAAB");
	Assert.AreEqual(2m / 3m, rate);
}

[TestMethod]
public void 前後半一致で66パーセント()
{
	var rate = MatchRate.Rate("AA", "ABBA");
	Assert.AreEqual(2m / 3m, rate);
}

[TestMethod]
public void 前後半一致で75パーセント()
{
  var rate = MatchRate.Rate("ABCDE", "ADE");
  Assert.AreEqual(6m / 8m, rate);
}

だいたいいい感じなんじゃないっすかね。直感的にそんな感じ。セマンティックとか関係なく、ですから。問題はここまでで終了。

だたひとり答えにたどり着いたクマさんに拍手。

ここからさらに考え方を進めてみましょう。もし文字列が文章だとしたら。文章だと”の”とか”を”とかが入ってくるから、普通に一致させるだけだと、それっぽくならないですね。なので、このアルゴリズムを再帰に改造して、前半を無視したほうが一致率が上がるなら無視するというふうに改造してみます。何でかというと、このアルゴリズムだと一致率は上昇して頂点になったあと下降するっていう山型になるはずだからです。現在の位置と次の位置との比較で一致率が上昇してるなら、現在の位置は無視したほうがそれっぽい数値に近づくってことです。そうするとコピペ文章なんじゃん?っていうものに関しての判定が”それっぽく”できます。あくまで”それっぽく”ですよ。

public static decimal Rate(string value1, string value2)
{
    return Rate(value1, value2, null);
}

public static Func<string, int, string, int, bool> RecursiveCommand = (val1, idx1, val2, idx2) =>
{
    var p1Rate = Rate(val1.Substring(idx1), val2.Substring(idx2), null);
    var p1IncRate = Rate(val1.Substring(idx1 + 1), val2.Substring(idx2), null);
    return p1Rate < p1IncRate;
};

public static decimal Rate(string value1, string value2, Func<string, int, string, int, bool> command)
{
    if (string.IsNullOrEmpty(value1) || string.IsNullOrEmpty(value2))
        return 0m;

    if (string.IsNullOrEmpty(value1.Trim()) || string.IsNullOrEmpty(value2.Trim()))
        return 0m;

    if (string.Compare(value1, value2, StringComparison.CurrentCulture) == 0)
        return 1m;

    var longer2nd = value1.Length < value2.Length;
    var val1 = longer2nd ? value1 : value2; // 短い文字列
    var val2 = longer2nd ? value2 : value1; // 長い文字列
    int match = 0, p1 = 0, p2 = 0, p2Index = 0;

    while (p1 < val1.Length && p2 < val2.Length)
    {
        // p1とp1+1で比較してp1+1のほうがRateがよければp1はスキップする
        if (command != null)
        {
            p1 += command(val1, p1, val2, p2Index) ? 1 : 0;
        }

        if (val1[p1] == val2[p2Index])
        {
            match += 2;
            p1++;
            p2 = p2Index++;
        }
        else
        {
            p2Index++;
            if (p2Index >= val2.Length)
            {
                p1++;
                p2Index = p2;
            }
        }

        if (val2.Length - 1 < p2Index)    // 進みすぎたときには引き戻す
            p2Index = p2;
    }

    return match / (decimal)(value1.Length + value2.Length);
}

で、最初のテストがパスするのを確認したうえで、以下のテスト。

[TestMethod]
public void 再帰のほうがそれっぽくなる()
{
  var rate = MatchRate.Rate(
      "ABCDEF",
      "AECDEF"
  );
  var rateR = MatchRate.Rate(
      "ABCDEF",
      "AECDEF",
      MatchRate.RecursiveCommand
  );
  Console.WriteLine("Rate={0} < RateR={1}", rate, rateR);
  Assert.IsTrue(rate < rateR);
}

[TestMethod]
public void コピペしてちょっと手直しした文章()
{
  var rate = MatchRate.Rate(
		"衆院は31日の夜、会議を開き、日本郵政3社への再編などを柱とする郵政改革法案を賛成多数で可決し、参院に送付した。与党は参院でも短時間で審議し、6月16日までの会期内成立を目指す構え。自民、公明、みんな、たちあがれ日本の野党4党は1日、与党の意向を受け、本会議開催を強行した横路孝弘衆院議長に対する不信任決議案を提出する。",
		"衆院は31日深夜、本会議を開き、日本郵政グループの3社への再編などを柱とする郵政改革法案を民主、国民新党などの賛成多数で可決し、参院に送付した。与党は参院でも短時間で審議を終え、6月16日までの会期内成立を目指す構え。自民、公明、みんな、たちあがれ日本の野党4党は1日、与党の意向を受け、本会議開催を強行した横路孝弘衆院議長に対する不信任決議案を提出する。",
            MatchRate.RecursiveCommand
	);
	Console.WriteLine(rate);
}

ソースアップしておきまーす。何かの役に立つコードではないけどね!

2010年12月23日木曜日

サウザンダー

so

やったよ!長かった。とても長かった。458日。ちょっとづつ。

so2

ジリジリと。やっとサウザンダーの仲間入り。MVCだけでもなんとかなるもんです!

2010年12月21日火曜日

Norwegian Wood

NoSQLの成功は1:10問題にかかっている:Kenn's Clairvoyance - CNET Japan

面白い記事ですね。

NoSQLをRDBの代わりに使うと、どういう恐ろしいことが起こるか。PARTAKEの作者が語る - Publickey

NoSQLでは↑こんな話もありますが、ちゃんとDomain Specific Database(という言葉があってるのかどうかは知らないけど)であることを認識して、使い方を間違えなければいいじゃんよ、ってなもんです。恐ろしいのは何でもRDBMS、いやいや何でもNoSQLという発想やそのメンタリティ。

言いたいことはそこじゃなくてですね、最初のリンクに書かれている

「コンピュータサイエンスに難問は二つしかない。それは概念に名前をつけることと、キャッシュの失効である」

“There are only two hard things in Computer Science: cache invalidation and naming things”

の部分です。「概念に名前をつける」これはコンピュータサイエンスに限らず重要なことじゃないでしょうか。

先日はじめて知った言葉に「絶対領域」というものがありました。ATフィールドの和訳というそれっぽいこともWikipediaには書かれていましたが、そんなことにココロオドルかっちゅう話ですよ。詳細はグーグルさんに教えてもらってくださいね。この胸の高鳴りはなんなのか?それが定義され名前がある、その事実に衝撃を覚えたものです。

そして「森ガール」という謎の単語。これに関しては相変わらず意味がよくわかんないんだけど、「森にいそうな格好」とはようするに森に住む妖精みたいなもんだろーか?

森ガールといえば最近そんなよーな名前の映画が公開されてた気がする。たぶんこんな話なんだろうな。

目が覚めるとそこは不思議の森。なんでこんな場所に寝てたんだろう?確かこたつでみかんを食べながらテレビを見ていはず。う~ん、記憶が一部飛んでいる。とりあえず、自分がいまどこにいるのか把握しておいたほうがいいな。そう思っておもむろに立ち上がり散策を開始。ところで今何時だ?確かテレビでサングラスのおじさんがウキウキウォッチングがどーのこーの言ってたからお昼過ぎのはずなんだけど。

途中で出会った森の中に住む妖精「森ガール」との珍道中。あれはオーロラか!?まさかここは日本じゃない?外国?そして最初の被害者が...。スリルとサスペンスのドタバタ大活劇。じっちゃんの名にかけて!

ノルウェイの森

森ガールの謎を解くべく観に行ったんだけど全然こんな話じゃなくて愕然とした。

2010年9月1日水曜日

TFS on CodePlex

CodePlexにBoFのデモで使用したお絵描きアプリ「MVC Graffiti」をアップロードしました。SkyDriveに上げたならこっちには必要ないじゃないかと思われるところですが、オープンソースとして公開しておくといろいろとお得な特典が待ち受けています。

例えば、Visual StudioのIDE内で利用出来るSVNクライアント、VisualSVNなんかもその一つで、オープンソースを公開していれば無料でライセンスを貰えます。貰いました。てへ。他にReSharperなんかもオープンソースオーナーにはもらえるみたいですよね。MVPじゃなくてもオープンソースを公開してるとライセンスをもらえるツール類はいろいろあるものです。とりあえず今狙ってるのはdotTrace。V4出るみたいだしね!

dotTrace Profiler :: Frequently Asked Questions

これまでSubversion、Mercurialと使ってみたので今回はTFSで。その手順を書いておきます。

codeplex1 codeplex2codeplex3 codeplex4codeplex5 codeplex6

http://www.codeplex.comにアクセスして、上記の通り順番に。ここまでは何の変哲もない操作です。英語ですけど気にせずチャレンジしちゃいましょう!

codeplex7

で、ソースタブを確認してみると、なんかダメなんよ的なメッセージ。しばらくしないとダメなのかな?と、思って一晩寝かせてみても変わらずアクセス出来ません表示のままです。

こりゃいかんじゃないですか。なので、早速CodePlexにコンタクト。

CodePlex - Contact Us

やっぱり英語なんですけど、あんまり気にせず適当な英語でアクセス出来ないことをアピール。返事が来るまで気長に待ちましょう。今回は週末を挟んだので2日くらいで返事が来ました。

This issue has been resolved. Your project should be successfully created.

Sorry for the inconvenience,
Matt

こんな感じで返事が来たので、早速VS2010からアクセス!

tfs1

一度ソースタブに行ってみると、↑こんな感じで設定方法を見ることが出来ます。

ここスルーするとあとでログインできなくて悲しいことになります。画像をズームすると分かるんですが、CodePlexのアカウントと、TFSのアカウントは別モンで”takepara”でCodePlexにログインするならTFSには”snd\takepara_cp”となります。snd\と_cpを忘れるとずっと怒られ続けます。

これに従って、TFSサーバーをチームエクスプローラに追加。

tfs2

ソリューションをソース管理に追加して出来上がり!

tfs3

なんですが、このままだとVS2010起動してTFSにアクセスするたびにログインを要求されてしまいます。切ないですね。面倒ですね。鬱陶しいことこのうえない!チームじゃなくてひとりだから文句いわれるのか??

tfs9

tfs4

そういうわけじゃないみたいで、ちゃんと対応方法がありました。

まずはコントロールパネルのユーザーアカウントで「資格情報マネージャ」を開いてみましょう(こんな機能があるのを初めて知りました)。そこには過去アクセスしたことのあるないようが記憶されてました。ここにCodePlexの設定も追加します。

tfs5

「Windows資格情報の追加」をクリックして資格情報を追加します。

tfs6

ここで気をつけないとイケないのがsnd\と_cp。忘れずに!これを登録しておくとVS2010を起動するたびにログイン要求されることもなくなり、とても優雅な開発を味わうことができるようになります。

tfs7

ちなみにTFS使ったことないです。チェックアウトとか意識しなくてもいいらしいとは聞いたんですが、ソリューションエクスプローラに鍵マークでてるとドキドキします...。普通に開いて編集できるんだけど、SVNになれてるとなんか気になる。

そんなこんなで、画像ばっかりで中身の薄っぺらいエントリーですが、個人利用リポジトリとしてのCodePlex利用+オープンソースコミッター特典狙いで、気楽にソースを公開してみてはどうでしょうか。

2010年7月18日日曜日

鼻唄三丁と401

401と言えばUnauthorizedなんて言う人はHTTP好きすぎ。今回は違ってAppleからリリースされたiOS4.0.1→401です。

アップル - iPhone - 新しいiOS 4ソフトウェアアップデートの機能をご紹介します。

昨日の夜に早速適用したら、それはそれは残念な結果に。なんとまぁ更新に失敗してしまいまして。原因はよくわからないけど、何度やっても途中で失敗する。ダウンロードファイル(iPhone3,1_4.0.1_8A306_Restore.ipsw)を消してやり直してもダメで、全く起動できなくなりました。泣ける。過去一度もこんなことになったことないのに~。

しょうがないから場所もよく覚えてない(一度行ったことあるはずなんだけど)銀座アップルストアに行ってきたですよ。そしたら、その場で更新適用したらすんなり出来たみたいで「普通にできましたよ~」って言われた。ギャフン。ちょっとキレ気味で「どうなんてんのさ、電話もできねーじゃん!」って文句言ってごめんね。帰ってから同期したら普通に元通りでホッとしました。

IMG_0002 IMG_0001

ちなみに写真は電車で銀座に行くのにつかった京急の八丁畷。のどかすぎです(ホネだけに)。

Bing翻訳(Bing Translator)のブックマークレット

違うウィンドウ(タブ)で開くとき。

javascript:window.open('http://www.microsofttranslator.com/bv.aspx?ref=Internal&from=&to=ja&a='+encodeURI(location.href),'_blank','');void(0);

Bing翻訳

同じウィンドウで翻訳するとき。

javascript:location.href='http://www.microsofttranslator.com/bv.aspx?ref=Internal&from=&to=ja&a='+encodeURI(location.href);

Bing翻訳

とりあえず、見つからなかったので。

2010年7月3日土曜日

ふぉー!フォー!デレシシシ。

なんかね~、そっけない箱がね~、あったんですよ。

IMG_0005


でも、開けるとピカピカな箱なんですよ。

IMG_0006


長かった。オンラインショップで予約した負け組で始まった今回の機種変。サイトダウンにめげずF5アタックを繰り返すも当日予約は途中で断念。翌朝7:30にはすんなり予約できたから、これは当日入手期待大だと妄想。それまでiPhone 3GにiOS4を入れて気分だけでも味わってやろうとしたら信じられないくらいパフォーマンス悪くてなんどもたたき壊してやろうかと思う辛い日々。だけど発売日を過ぎてもなんの連絡も無く。ちなみに受付番号下6桁は818XXX。一体全体この放置プレーはなんだ。そんなこんなで6/30にメールが来た。遅すぎるし放置しすぎ。遅れております、のメール1つで全然違うのになぜ放置。まぁ、いいか。

で、箱。長かった。

さて、アクティベーションしようかとしたところ、9:00~19:00が受付時間らしく何も出来ず。敗北感。仕事変えようかと本気で思った。

IMG_0009

もろもろ設定完了して使ってみると3Gとは比べものにならないくらいのパフォーマンスで操作が快適。さすがですぜ!

2009年10月8日木曜日

最初の目標達成!

さっきブログに書いて気がついたんだけど、Feedの購読数がなんかキリ番。

feed

目標はそこじゃなくてですね、最近始めたstackoverflow.comへの書き込みでReputationが最初の目標の100に今朝やっと達しました。次は200?

いやいや500としよう。

rep

何気に英語の勉強もかねて翻訳サイトなんかも駆使しつつ書き込んでいこうと決めて3週間。長かった。でも、超うれしい!

日本語サイトでもASP.NET MVCのフォーラムなんかがあるなら、分かる範囲で書き込みして行きたいところデス。どこかにあるならだけど。

で、話は変わりますが、うちのボスが書いてるのでこっちでも書いておきます。

また社員募集しています

たけはらがYour Fireされたわけじゃなくて、普通に人員増強です。募集要項なんかの細かい話はボスのエントリか募集サイトを見てもらえればいいかと思います。自分新人なんでその辺の話はよくわかんないです。

株式会社クロスワープ/システムエンジニアの転職情報

ただ、これだけは言っておきたい。

たけはらのファンかどうかは採用に関係しないので明記する必要はありません!

こんな感じの職場で一緒に開発してもいいというドMな方はぜひお気軽に応募していただければと思います。

2009年9月23日水曜日

SHURE

Amazon.co.jp: Ultimate Ears MetroFi 220 MF220: 家電・カメラ

これをさ~、気に入って使ってたんだけどさ~。

断線。半年で。泣ける。

代わりになる物を探しに電器屋巡りしたけど、置いてないんだね。みんなiPhoneで音楽聞くのと通話とするときどうしてるんですかね。Bluetoothとか充電面倒じゃないっすか?面倒でくじけたんだけど...。

結局、今回もAmazonのお世話になることにしようと思うんだけど、少し学習してイヤホンとマイク部は別々に出来るようにまずは↓これ。

Amazon.co.jp: SHURE iPhoneでの高品位なハンズフリー通話を可能にするマイク付き接続コード MPA-3C: 家電・カメラ

んで、なるべく素の音がいいから、イヤホンは↓これ。

Amazon.co.jp: SHURE 高遮音性イヤホン・ブラック SE102-K-J: 家電・カメラ

写真 

連休が空ける前に届いてくれて嬉しす。明日からの通勤が楽しみだぜ~。遮音って怖い気もするけど、気配を感じ取れるように修行します。

2009年9月4日金曜日

あ、メタルキングじゃないことがばれた

先日のBoFの様子が早くもCodeZineで記事になってます!

「ASP.NET Web Form」か「ASP.NET MVC」か? .NETによるWebアプリ開発の今を徹底討論(1/4):CodeZine

最初のページのトップにある写真でプロジェクターの映像を見上げてるのが自分です。これだけ小さい写真だと顔も分からないから恥ずかしくないね!同じ写真内で真ん中あたりにノートパソコンのモニターがちらっと写り混んでるね~。ボスなんだよね~。このノートパソコンの画面気になるでしょ~?メモとか取ってるとか思ってるでしょ~?違うんですよ!パワポ(?)で「ここでボケて」とか「もっと詳しく」とか「なんでスーツ着てないの?」とかが用意されてて、しゃべってる途中でチョイチョイ画面をこちらに向けて楽しんでたんだよ!上手いこと写真には写ってないけど一番後ろの席で肉好きの熊さんも同じくカンペを用意してたんだよ!怖え~。BoF怖え~。罠ばっかりだ。

写真小さいとか思ったそこのあなた。2ページ目ではちょっとデカイ写真が。メタルキングじゃないことがばれた。東京生まれヒップホップ育ちのメタルキングで通してたのに普通の人なのがばれた。ちなみにカメラ目線ではありません。たまたまです。写真撮ってることなんて気がついてませんから。ド緊張してたんで。

記事ではスゴイまじめに技術の話をしてる風ですが、そこは記事を書いてくれたナオキさんの腕っす。自分へたれっす。

これからもご贔屓に~。

2009年8月28日金曜日

ボフったー

本日BoFに参加してくださったみなさま!ありがとうございました!

超、緊張しました。結構あれこれとしゃべること用意してたんですが、全然しゃべれませんでした。自己紹介を途中棄権ってなんだよ!みたいな。

内容的にはちゃんと「適材適所で使い分け」というのを入れたかったんですが、なにもかもが後の祭り。だって、管理画面なんか小野さんのサンプルみたいにゼロコーディングで出来たら最高ですよね。ViewState/PostBackなPage Controllerスタイルで、コントロールに処理を完全に委譲してしまうWebFormは最強です。それらの機能を少し横取りして、Pageからすべての機能を切り離し(この時点でもうアーキテクチャスタイルが違うので比較することじたいに無理があるんですけど)Front ControllerスタイルにしたASP.NET MVCによるスクラッチ開発は面白さ爆発です!

とにかくまず最初に驚いたのがASP.NET MVCで何か作ったことのある開発者の方が思ってた以上に多かったこと。ビックリしました。可能性たっぷりですね!フレームワークと名乗るにはまだまだ万人向けなものにはなってないMVCですが、何となくこの路線を突っ走って欲しいという個人的には思ってます。だってチャップリンも言ってるじゃないですか。

人生は恐れなければ、とても素晴らしいものなんだよ。
人生に必要なもの。それは勇気と想像力、そして少しのお金だ。

うん、全然関係無い言葉だね!

えと、ちなみにデスね、今日話したかったメモを以下に残しておきます。

  • 共通のnamespaceはImportでaspx/ascx毎にしていするんじゃなくて、web.configで指定しておこう。
  • HTML入力を受け付ける時にはValidateInput属性で指定しよう。Pageディレクティブやweb.configでのValidateRequestはController関係無いよ!
  • csprojのMvcBuildViewsをtrueにしてViewのコンパイルを強制するのが便利なときもある。
  • JavaScript無しで機能を実装したあとに、JavaScriptでのUX向上を目指すのが王道。でも、こだわらなくてもいいかもね。
  • URLはリソース指向に考えてルーティングに定義しよう。
  • RepositoryとServiceを作成しといて、アクションでは単なる呼び出しがいい。
  • DB Modelと View Modelを分ける(相互にマッピングする)。
  • テストしやすくするために、HttpContextへの依存をControllerからなくす(UserNameとIsXhr)。依存性が無いならテストは結構楽ちん!
  • 全体共通なBaseControllerを定義しておくと何かと楽ちん(abstractでね!)。
  • Viewでの作業を楽にするためにヘルパーを定義。
  • Controller名やAction名のマジックストリングをなくすために、T4MVCを活用。
  • 入力検証を楽にするためにDataAnnotationsModelBinderを活用。
  • もっと複雑になるならDIでRepository/Serviceの依存性注入。
  • マッピングも大変ならAutoMapperやら(自分で書いてもいいけど)。
  • テストが複雑になりそうなら(依存性を持ったもののテストをしたいとか)Mockを使おう。MoqやらRhino.Mocksやら。
  • カッコ良くRESTfulな実装にしたいならREST for ASP.NET MVC!

参考にするといいかもなURL

お勧め書籍

サンプルに実装してる項目もあれば、無い項目もあります(DIやMockや)が、こういうのを取り入れると楽しく開発出来るっていうのを話したかったデス。

サンプル一式は↓こちらからどうぞ。

動かすにはSQLServer2008Express以上が必要になります。Databasesフォルダ内の2つのMDFをそれぞれAspNetDBとMyTimeDataという名前でアタッチ(MS SQL Server 2008 Attach Database .MDF File)するとそのままで動くんじゃないかと思います。

※App_Dataに入れてAttachDbFilenameをConnectionStringに指定する方が簡単なんですが、それだとウェブのプロジェクトとテストのプロジェクトで同じインスタンス名でDB作成しようとして動かないんで気をつけてください。

機能的な物はBoFで紹介したとおり、Membershipによるユーザー管理とログイン、作業時間の追加・更新・削除と合計表示のみです。これにチャートコントロールでの表示やら、月内デイリー合計なんかの機能をつければ、それなりに使える物になるんじゃないかと思いますがどうでしょうかね。プロジェクトの名前を「ボフったー」にしなかったのが「エドったー」に完全に負けてるところデス!

細かいサンプルの説明は...、必要ならしますが、どうなんでしょう。週末だし書くかもしれないですが、ホッケーもしたいので微妙です。たけはらが書かなくてもチャックが説明してくれると思います!無茶ぶり返し!

最後に。

こういう機会を与えてくれた、小野さんとナオキさんには感謝しきれません。ボスにはいろんな人を紹介してもらってマジ感謝です。一人だと誰とも知り合えずに過ごす事になったこと間違い無しです。MSの方達も、こんなどこの馬の骨なのか分からないチンピラ開発者の話に耳を傾けてくれてホント嬉しかったです。

BoFでたけはらの話に耳を傾けてくれた人たちの暖かさには、感謝しても仕切れません。マジ泣ける。本当にありがとうございました。

コンカレント

Tech ED2日目。今日はボスと別行動もあって、ちょっぴり大人の仲間入り?

まぁ、最初のセッションは同じのだったけど、別々にセッションルームに入ったので別行動ってことでいいですかね?今日も熊澤さんの話を聞きに行ったんですが、ちょいちょい熊澤さんが明後日の方向を向いて話をするわけですよ。ナゼ正面向いて話をしないんだろうかと思って目線の先を見るとボスが立って見てた...。そこ、マンツーなんですか。何でですか。見に来てる人100人くらいいる感じなんですが、マンツーで説明なんですか。そーですか。NUMAの話で盛り上がり、アンドキュメンテッドな動的管理ビューを紹介してくれたりと、初日に続いて濃厚な内容でした。

とりあえずBoFって何?みたいな状態を打破するために他の方のBoFを見てみることにしました。ボスとべーさんの言うとおりみんなスーツでした。な、わけねーよ。誰もスーツじゃないじゃないか!でも、不安だったからMSの人に「スーツじゃないとダメなんですか?」って聞いたら「そんなことないです」って教えてくれました。隣で渋木さんが「おまえ、ばらしてんじゃねーよ」という目でMSの人のこと見てた...。その目はまるで熊。ハンマー持った熊。

なんやかんやで、セッション全終了の後、休憩ルームでおしゃべりしてたら、ナオキさんが「ガンダムの人がいます!」と呼んできてくれて、少しお話しすることが出来ました。もうね、とにかくね、ガンダムは分からないから違う例えにしてください、と。攻殻機動隊か電脳コイルなら分かるので、そっちでお願いしますと。Azureの話をもっとしたかったけど途中で渋木さんと赤間さんも参加して、猫バス事件の話になって...。面白かったからいっか。でも、あれだ、みんな日常会話で使う単語が変。誰もなんの突っ込みもなく普通にそういう単語なんだもんよ。技術の話をしてるわけじゃなく、風呂とトイレがコンカレントだとか、会話がかみ合うのをプロトコルが一致するとか、食事に合流するのをジョインするとか、日常会話でそれはおかしいと思うんだ。オレおかしいと思うんだ。オレがおかしいのか??

夕食の時に、今度は荒井さんが同席。The Root of .NET Frameworkでハートを鷲づかみにされた荒井さん。なんかね、今までどんな人が本を書いてるとか、ブログを書いてるとか全然意識したこと無かったんですよ。自分とは関係無い世界の人たちっていうか。実際会って話をするなんて考えたこと無かったし。でも、なんかみんな素敵な人ばっかりでさ~。食事の後、途中まで電車が一緒でマンツーマンで荒井さんとおしゃべり出来て得した気分。名もない開発者な自分の話をずっと聞いてくれて、答えを返してくれて。あ、そうそう、自分もだけど、荒井さんも気がついてないだろう接点を発見した。荒井省三のBlog : The Root of .NET Framework の書評で荒井さんがたけはらタンブラのThe root ofの感想へリンクしてくれてた。う~ん、今日一緒に話をするまえに知ってたら、もっと楽しかったかも!でも、明日もあるし、会ったらその話をふってみようかな。

んでもって明日は、とうとうBoFに登壇(最後の枠のBoF-14 ASP.NET Web Form vs. ASP.NET MVC in Japanデス)。小野さんは「なんとかなるよ」と言ってくれてるけど、全く打ち合わせもなく、かなりドキドキなんですけど...。チャックが初日のセッションで無茶ぶりするもんだから胃が痛くてしょうがねーす。たぶん小野さんとナオキさんの陰に隠れて小さくなってると思います。

2009年8月27日木曜日

ボスと一緒に

2009だけど初めての参加。なんか15周年ってキーノートで言ってたから、ずいぶんと周回遅れだね!9/5からクイーンズスクエア内にクリスピークリームの店がオープンするっていうデカイポスターもあって、そっちのほうが気になるとは言いづらい。

IMG_2524

まぁ、ドーナツパーリーはまだ出来ないのでからいいとして、今回のTech EDは小野さんナオキさんに誘われ、BoFで前にでるっていう状況での参加。しかもそんな感じの参加なもんで参加証も持ってない。入り口でいきなり「帰れ!」とか言われたら泣きながら帰ることになるだろーな、と不安になりながら会場に向かってたら、パシフィコで海のエジプト展やってるって書いてあったからいざとなったらエジプト展でも見て帰ろう。

IMG_2526

前日にボスに不安な胸の内を打ち明けてみると「行けば何とかなる」と猪木ばりに男前なことを言われてしまい涙目。超不安なまま受付に行ったら、こっちじゃなくてあっちいけ、いやこっちじゃなくて君はあっち、とたらい回しのあげく、奇跡的にも小野さんと同時に受け付けするというナイスな展開。そのままくっついてキーノート聞き終わると小野さんは「じゃ、MVPのランチがあるから」と去っていき、会場出口でナオキさんにメールしたら、もちろん「MVPのランチです」と返事が返ってきて、完全に親とはぐれたアザラシの子供状態。おかしい。横浜在住なのに完全なるアウェー感。横浜大会で散々行きまくったはずのパシフィコで超アウェー。こんな時にはボスに頼ろう。急いでボスに電話をしたら何とか落ち合うことが出来ました。Tech EDこえ~。

なんと言っても、勝手知らないTech ED。で、ここからどうすればいいんでしょう。ご飯食べたはいいけど...。とりあえず「SQL Server チューニング」のセッションは絶対聞いた方がいい、熊澤さんのセッションはパネー、と言われたのでそれを聞くことにしました。ボスと一緒に。これがまた恐ろしく濃い内容で、話す内容とスライドとデモとがマジパネースピードで「今回使ったクエリは後でどこかからダウンロード出来るようなる思います」と熊澤さんが言うんだけど、それがどこになるのかが分からないという罠。ちなみにスピーカーテーブルの真ん前の特等席でボスと2人で「はえ~」やら「すげ~」やらはしゃぎながらもとてもすばらしい内容で感動しました。Tech EDぱねー。

その後、続けてASP.NET MVCのセッションが同じ場所で始まり、もちろんそこにも参加。

IMG_2527

チャック

で、デモが今回作ったサンプルとほとんどかぶってる感じで切なくなりました。エドったーめ!そういえば今までTwitterを登録はしてても使ってなかったのをボスに突っ込まれ、チャックのセッションでも話しが出てきたってので、勢いでボスとチャックをフォローしてみた。

その後はライトニングトークっていうのをボスと一緒に聞きに行って、更にボスの宿泊先で渋木さんとおしゃべり。挙げ句の果てにボスと渋木さんと3人で食事に行って、オモロ話で盛り上がる。渋木さんは肉が似合いすぎる。

結局、一人では何も出来ず、いつも以上にボスにべったりなTech ED初日でした。Tech EDおもしれ~。

2009年7月26日日曜日

楽しみ

昨日、今期MHLのプレーオフ初戦でした。見事初戦敗退...。なんか、切ないけど、まぁ、しょうがないか。練習も出来てないし。個人的にそうは思ってても、チームメイトはどう思ってるのかな~。

そんなこんなで、アッサリと夏も終わり(球児じゃないけど)、後はのんびりとホッケーして次期シーズンに備えるだけなわけですが、なにやら次期はエントリーチーム数が多すぎるみたいで抽選らしい。抽選に落ちたら全く試合に出れなくなっちゃうね~。どうなることやら。今更他のチームで出たいとも思わないしな~。抽選落ちしないことを祈るのみ。な~む~。

試合が午前中で終了したから、午後戸塚に一汗かきに移動。スズキ君も来て久しぶりにシャキッとしたホッケーもできて面白かったよ。でも、あれだよね、マッチョな感じが楽しい時間をダメにするっていうのもあるよね。ピックアップっていうと、その時にいる人それぞれ全然違うポイントを楽しいと感じるわけで。上達することだけを目的にするのもいいし、単純にそこにいるメンツでホッケーするのが楽しいからっていう理由だけでプレーする自分みたいな人もいるし。サヨちゃんとの対戦だけを楽しんだりするのも楽しみ方だと思うわけですよ。マッチョもいいと思うけど、それをみんなの共通の目標とか楽しみだっていう価値観はとても狭い世界でしか物を見れなくなりかねないぜ?

なんてね。

2009年7月18日土曜日

あちゃ~!おちゃ~!

いや~、2週間沈黙だったっす。なんか先週もちゃんとエントリ書いたんだけど、書いた後に恐ろしい勘違いエントリだと気がついて即削除。読まれたらちょっと恥ずかしい内容だったんで、修正とかじゃなく削除しちゃいました。ルーティングとURL引数(QueryString)を超勘違いしてた。とりあえずURL引数に禁止文字を使いたい場合は[FIX] .NET Framework 1.1 で "HTTP 400 - 正しくない要求" エラー メッセージが表示されるで無理矢理できるってことで(Routingには関係無い話でした)。

こないだ大事件が起きて。やっぱりキーボード(パソコンの)はこだわりの逸品を使いたいじゃないですか。普段からノートPC使ってるとデスクトップのキーの深さに疲れちゃうから、お気に入りは薄いキーボードなんですよね。押すのも楽だし。ぬたーん、とした感じがいいじゃないですか。

なもんで、使ってるのは電源メーカーで有名なENERMAXのアルミ削りだしキーボード(KB007U-B/KB007U-S)なのね。ひんやり感がたまらない。ThinkPadのパームレストが熱いのとは雲泥の差。

kb007ub-b06

「今週会社がつぶれます」のエントリは書いてないけど、そんな感じで新しい会社に移ったて、そこでももちろんこのお気に入りキーボードを使うデスよ。マウスもお気に入り使うデスよ。べーさんなんかごつい体型なのにキーボードは弁当箱か!ってくらい小さいデスよ。

いつものように解決方法が思いつかない~と、もんどり打ってたらコップを倒した...。これがまた奇跡のような倒れしてキーボードの上にこてーんと。なぜ、キーボードに向かって倒れたんだ...。もちろんコップの中身が全部キーボードに注ぎ込まれるじゃないですか。泣ける。もう帰ろうかと思ったけど、まだ14時...、みたいな。こぼしたのはお茶だったから慌てて拭いてキーボードを外に干した。とりあえず、乾いたところでつなげてみたらなんとなく普通に使えてホッとしたけど。あれだよね、コップは気をつけないとね!そういえば、前にもコーヒーをこぼした気がする...。コーヒーとお茶にまみれてもがんばって動くキーボードにはこれからも耐え続けてもらいたい。

ちなみにドラクエも全然進まない。この連休は旅にでるぞ~!

2009年4月2日木曜日

FancyBox

スクリーンショットや写真なんかをブログに貼り付けること多いです。特に最近はWindows Live Writerで投稿することがほとんどなんだけど、画像の挿入機能を使うと自動で小さなサイズの画像の生成と大きいサイズの画像へのリンクが貼り付けらて、楽ちんだなと思ってました。

<a href="{大きい画像のURL}">
<img style="border: 0px none; display: inline;"
title="{ファイル名}" alt="{ファイル名}"
src="{小さい画像のURL}" border="0" height="{高さ}" width="{幅}" /></a> 
こんな感じのタグが挿入されますね。でも、単純にアンカーでリンクしてるだけなので表示のされ方がちょっと素っ気ない。というか画像だけが表示される。

と、言うわけで、もう少しかっこよく表示させたいので、jQueryを以前ブログで使えるように取り込んでるので、FancyBoxっていうのを使ったかっこよく表示されるようにしてみました。

Fancybox | Fancy lightbox alternative 個人的にはZoomしなくてもちゃんと見れるように、ちゃんと切り抜いて必要な箇所だけにした画像を貼り付けるほうが見やすいとは思うけど、面倒だしね...。

使い方は簡単。Usageに書いてる通り。

  1. scriptタグ書く。
  2. linkタグでcssを取り込む。
  3. aタグで囲まれたimgタグを書く。
  4. エレメントに対してfancybox()を呼ぶ。

これだけ。scriptにはjQueryを含んでないとダメだけど、これはGoogle Ajax Libraryを参照。その他のファイル群をどこに置くのか悩んだけど、結局Google Page Creatorにアップ。もう新規アカウントを作成できないから、アカウント持ってない人は違うスペースを用意しないとね。一般的にはどうするんだろ?SkyDrive?

ページのローディングが終わったところで、fancyboxを呼び出してみる。

$(function(){
$("a[href*=ggpht.com]").fancybox();
});

なにも表示されない...。悲しい。これでいいはずなのに...。大きい画像のURLが間違ってるのかなと思ったけど、そんなこともなくブラウザ上ではちゃんと表示される。なんでだろうと大きい画像をダウンロードしてローカルで確認しようと思ってaタグのリンク先を保存したら、理由が分かった。aタグのhrefに入ってるURLは画像そのものを指してるんじゃなくて、画像を表示するHTMLを指してた。常識?

例えば↓この画像。

Boston City Flow

生成されるHTMLは

<a href="http://lh5.ggpht.com/_3YQxskhNNyI/SdQ4ep_eVJI/AAAAAAAABNM/3hRpwvyUMV4/s1600-h/Boston%20City%20Flow%5B3%5D.jpg">
<img style="border-width: 0px; display: inline;" title="Boston City Flow" alt="Boston City Flow" src=http://lh6.ggpht.com/_3YQxskhNNyI/SdQ4fLPxrfI/AAAAAAAABNQ/pbG3lWDojxQ/Boston%20City%20Flow_thumb%5B1%5D.jpg?imgmax=800”
   border="0" height="160" width="240" />
</a>
こうなる(Picasaだからね)。このアンカーのリンク先はHTMLで画像じゃないんだけど、中身は↓。
<html>
<head>
<title>Boston City Flow[3].jpg (image)</title>
<script type="text/javascript">
<!--
if (top.location != self.location) top.location = self.location;
// -->
</script>
</head>
<body bgcolor="#ffffff" text="#000000">
<img src="http://lh5.ggpht.com/_3YQxskhNNyI/SdQ4ep_eVJI/AAAAAAAABNM/3hRpwvyUMV4/s1600/Boston+City+Flow%5B3%5D.jpg" alt="[Boston City Flow[3].jpg]" border=0>
</body>
</html>

アンカーとのURLの違いはHTMLが/s1600-h/で、画像が/s1600/。なのでこれをfancybox適用前に書き換えてしまいましょう。

$(function(){
$("a[href*=ggpht.com]").each(function(idx,elem){
  elem.href = elem.href.replace('/s1600-h/','/s1600/');
  $(elem).fancybox();
});
});

全然、他のパターンを考慮してないけど、いいよね。これで、画像表示も見やすくなりました。

Costa Rican Frog metalking

2009年3月11日水曜日

最近のお気に入り

IMG_0457 IMG_0460 

Bluetoothスピーカー。

キラキラボディーでお気に入り。PC本体のスピーカーだとシャリシャリ感が気になるし、あんまり音も大きくならないもんね。ヘッドホンも聞きやすくていいんだけど、いちいち線をつなげて、耳に当ててとかっていうのが面倒。移動するとき外すのも面倒だし。音楽を聴いたりするわけじゃないから、音質はそんなに気にならないよ。ハンズフリーのプロファイル(?)は削除しとかないとなんか調子悪かった。

Amazon.co.jp: Bluetooth ステレオスピーカー BIT-STB2825S シルバー A2DP・HFP・HSP・ワンセグ音声SCMS-T: 家電・カメラ

IMG_0467 IMG_0468

でろ~ん。スライムじゃないよ~。キーボードを掃除するCyber Cleanっていう製品(スライムだな...)。こないだハンズで売ってるのを見かけて買っちゃった。ベトベトしないし、ちゃんとゴミを吸着してくれるし、なんか楽しいし。

Amazon.co.jp: アイリスオーヤマ サイバークリーン 135gプラスチックボトル入り PCP-135: 家電・カメラ

2009年3月1日日曜日

Crystalized Intelligence

結晶性知性。 【コラム】IT資本論 (26) 8つのパラドクス - 学習パラドクス(4) 持続学習 | 経営 | マイコミジャーナル これを読んでいて、流動性知性はPCやネットで補完できる(外部記憶や計算能力)が、結晶性知性は「コンピュータによって模倣できない」と書かれてる。 専門知や経験知からしか発達していかないインテリジェンスだから、それもそうだろうとは思うけど(画期的なAIっていうドラえもん級の夢のソフトウェアが出れば別)、外部知性というかたちでPCとネットで有効活用出来るとは思う。 Wikiとかナレッジベースとかっていう形での実装ではなくて、もっとリアルタイムに近い形で。 久しぶりにネガティブレガシーと出会いました。 工業経済至上主義を未だ貫き(それはいい)、統計を完全否定し、ネットを不安視(あえて無視)することで現時点での自分の正当性を閉じた世界で証明しようとするその姿勢が面白かった。