Hatena::ブログ(Diary)

猫とC#について書くmatarilloの雑記

2013年02月09日

Land Of Lisp

| Land Of Lisp - 猫とC#について書くmatarilloの雑記 を含むブックマーク Land Of Lisp - 猫とC#について書くmatarilloの雑記 のブックマークコメント

twitterで見かけた、O'Reillyの Land Of Lisp

正しいロゴはこうじゃないのか。(クリックするとSVGを表示します)

http://matarillo.com/images/lol.svg

2012年02月16日

C#の本を共著で書きました

| C#の本を共著で書きました - 猫とC#について書くmatarilloの雑記 を含むブックマーク C#の本を共著で書きました - 猫とC#について書くmatarilloの雑記 のブックマークコメント

注意:この記事は書きかけです。

速攻入門 C#プログラミング すぐに現場で使える知識」というタイトルです。

私はほとんど書いてないんですが。まあ5%ぐらいなもんです。

〔速攻入門〕 C#プログラミング すぐに現場で使える知識

〔速攻入門〕 C#プログラミング すぐに現場で使える知識

あおり文句に「JavaかC++の経験があれば、いっそう有利な最短ルート」とあるのは、JavaやC++と違う部分の説明をたくさん盛り込んだからです。

Amazonで予約開始してるみたいですが、目次がないので、公開しておきます。

(追記:共著のbiacさんこと山本さんがより詳細な内容を載せています

2012年02月06日

100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊

| 100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊 - 猫とC#について書くmatarilloの雑記 を含むブックマーク 100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊 - 猫とC#について書くmatarilloの雑記 のブックマークコメント

翔泳社より発行される『100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊』という本で1冊選んで書きました。

100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊

100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊

  • 作者: デブサミ運営事務局 (編集)
  • 出版社/メーカー: 翔泳社
  • 発売日: 2012/02/22
  • メディア: 単行本(ソフトカバー)

私が選んだのは『Weaving the Web: The Original Design and Ultimate Destiny of the World Wide Web』です。

Weaving the Web: The Original Design and Ultimate Destiny of the World Wide Web

Weaving the Web: The Original Design and Ultimate Destiny of the World Wide Web

  • 作者: Tim Berners-Lee
  • 出版社/メーカー: HarperBusiness
  • 発売日: 2000/11/07
  • メディア: ペーパーバック

原稿を公開してよいとのことだったので、matarillo.comで公開します。

no title

仕事でWebアプリケーションを開発している、後輩のWindows系技術者に勧めたい

アーキテクチャの重要性を再認識。英語で読んでね。

英語の本でごめんなさい。「Webの創成」という題で日本語訳されているんですが、そちらは入手困難ということもあり、勉強になるかなと思って原著をあえて選びました。でも難しい本ではないから心配しないでいいです。……

matarillo.com: 100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊

なお、この本はDevelopers Summit 2012の会場で先行発売されるとのことです。

2011年08月29日

WEB+DB PRESS Vol.64

| WEB+DB PRESS Vol.64 - 猫とC#について書くmatarilloの雑記 を含むブックマーク WEB+DB PRESS Vol.64 - 猫とC#について書くmatarilloの雑記 のブックマークコメント

出ました。

http://gihyo.jp/magazine/wdpress/archive/2011/vol64

WEB+DB PRESS Vol.64|技術評論社

小野さんの連載『いまどきの.NET開発』、今回はLINQです。

また、今号の特集はどれも読みごたえがありますね。

  1. プログラマが知るべきUIデザインの基本知識
  2. JavaScript最前線
  3. 作って学ぶ日本語入力

WEB+DB PRESSは、だんだんスマートフォン+クラウドな記事が多くなってくる感じですね。

2011年06月17日

WEB+DB PRESSに久しぶりに.NET連載が

| WEB+DB PRESSに久しぶりに.NET連載が - 猫とC#について書くmatarilloの雑記 を含むブックマーク WEB+DB PRESSに久しぶりに.NET連載が - 猫とC#について書くmatarilloの雑記 のブックマークコメント

http://gihyo.jp/magazine/wdpress/archive/2011/vol63

WEB+DB PRESS Vol.63|技術評論社

.NET連載と.NET単発記事が載ってます。

.NET連載は尾島&猪股の連名記事(実質尾島が書いてましたが)が載っていた2008年(Vol.43)以来ですね。喜ばしいです。

WEB+DB PRESS10冊買わなきゃ。(そしてアンケートハガキを出そう。)

2010年10月13日

Scalaコップ本に書いてあるC#の記述は何か変だ

| Scalaコップ本に書いてあるC#の記述は何か変だ - 猫とC#について書くmatarilloの雑記 を含むブックマーク Scalaコップ本に書いてあるC#の記述は何か変だ - 猫とC#について書くmatarilloの雑記 のブックマークコメント

コップ本というのはScalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)のことなんだけど。

第21章「暗黙の型変換とパラメーター」にRandomAccessSeqトレイトを例にした説明がある。

Scalaのtraitってのは実装の多重継承というかミクシン(mixin)というか、まあそんな感じのことができる言語機能なのだけど、ここではC#の抽象クラスに翻訳してみる。

親トレイトのSeqと、子トレイトのRandomAccessSeq。ランダムアクセスできるシーケンスだから、要は配列みたいなもの。

public abstract class Seq<T> : IEnumerable<T>
{
    public abstract T Apply(int i);

    public abstract int Length { get; }

    public abstract IEnumerator<T> GetEnumerator();

    public bool Contains(T item)
    {
        using (var iter = this.GetEnumerator())
        {
            while (iter.MoveNext())
                if (object.Equals(item, iter.Current))
                    return true;
            return false;
        }
    }

    public bool Exists(Predicate<T> p)
    {
        using (var iter = this.GetEnumerator())
        {
            while (iter.MoveNext())
                if (p(iter.Current))
                    return true;
            return false;
        }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }
}
public abstract class RandomAccessSeq<T> : Seq<T>
{
    public override IEnumerator<T> GetEnumerator()
    {
        for (int i = 0; i < this.Length; i++)
            yield return this.Apply(i);
    }

    public T this[int i]
    {
        get { return this.Apply(i); }
    }
}

まあこんな感じで、ApplyメソッドとLengthプロパティの実装はまだ提供されてないわけ。

で、文字列をRandomAccessSeqとして扱いたいんだけど、java.lang.StringクラスはRandomAccessSeqを継承してないわけだ。さて困ったねといった所で、Scalaには暗黙の型変換があるよという話になる。

さっきのRandomAccessSeqだが、Scalaの実装だと文字列を引数にしてRandomAccessSeqを返すメソッドが定義されている。で、そのメソッドにはimplicitキーワードがついているので、こんなコードが書ける(下のScalaコードはplasticscafeさんの日記を参考にした)。

implicit def stringWrapper(s:String) = {
  new RandomAccessSeq[Char] {
    def length = s.length
    def apply(i:Int) = s.charAt(i)
  }
}
var isDight = "abc123" exists (_.isDigit)  // true

つまり、"abc123"はStringなんだけど、暗黙の型変換メソッドのおかげで、いきなりexistsメソッドを呼び出してもOKだということ。

ここまではいいんだけど、コップ本はここでC#の話を例に出す。曰く、「C#では拡張メソッドがあって、同じように既存のクラスに新しいメソッドを追加できるが、Scalaのimplicitはもっと便利だ。拡張メソッドだとすべてのメソッドを再定義しないといけない。その点Scalaのimplicitはlengthとapplyを書くだけでいい。将来RandomAccessSeqにメソッドが増えても問題ない」と(手元にコップ本がないので正確な引用ではないが、おおむねこういう事が書かれていた)。

うーん。そうだけど、拡張メソッドってそんな使い方するか?

上のstringWrapperメソッドは、Javaでいうインナークラスを返してるのだから、C#ならこんな感じで型を作らないといけない。確かに、このままだと使うのが不恰好になる。

public class StringWrapper : RandomAccessSeq<char>
{
    private string s;

    public StringWrapper(string s)
    {
        this.s = s;
    }

    public override char Apply(int i)
    {
        return s[i];
    }

    public override int Length
    {
        get { return s.Length; }
    }
}
var isDight = (new StringWrapper("abc123")).Exists(x => char.IsDigit(x));

C#にも暗黙の型変換はあるのだけど、Scalaほど強力じゃない。メソッド呼び出しでは暗黙の変換は働かなくて、変数への代入とかメソッドの引数とか、そういうとこでしか使えない。しかも、暗黙の型変換は演算子オーバーロードで、RandomAccessSeq<char>という閉じた型には直接定義することができない。なのでStringWrapper型に定義するしかなく、そうすると利用側で明示的にStringWrapper型を書かないといけない。

public class StringWrapper : RandomAccessSeq<char>
{
    // 略

    // StringWrapper型の演算子オーバーロードとして定義せざるを得ない。
    // なので、引数か戻り値がStringWrapper型でないといけない。
    public static implicit operator StringWrapper(string s)
    {
        return new StringWrapper(s);
    }
}
// StringWrapperにはキャストせずに代入できるが、嬉しくない。
StringWrapper str = "abc123";
var isDight = str.Exists(x => char.IsDigit(x));

そこで、コップ本でも触れていた拡張メソッドを使うんだけど、拡張メソッドでRandomAccessSeqの全メソッドを提供するような実装はしないだろう。普通はこうなんじゃないの?

public static class SeqEx
{
    public static RandomAccessSeq<char> ToSeq(this string s)
    {
        return new StringWrapper(s);
    }

    private class StringWrapper : RandomAccessSeq<char> { ... }
}
var isDight = "abc123".ToSeq().Exists(x => char.IsDigit(x));

だいたい、拡張メソッドでRandomAccessSeqの全メソッドを提供したところで、string型をRandomAccessSeq型として扱えているわけではないからねえ。

2010年04月08日

「Webを支える技術」刊行記念トークセッションに行ってきた(1)

| 「Webを支える技術」刊行記念トークセッションに行ってきた(1) - 猫とC#について書くmatarilloの雑記 を含むブックマーク 「Webを支える技術」刊行記念トークセッションに行ってきた(1) - 猫とC#について書くmatarilloの雑記 のブックマークコメント

これはいい本!

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

4月8日,『Webを支える技術』(山本陽平著)の刊行記念トークセッション開催:インフォメーション|gihyo.jp … 技術評論社

http://img98.yfrog.com/i/u9tv.jpg/

Microsoft技術なSI仕事をしている身として、MSとRESTについて書いてみる。ぜんぜんまとまってないけど。

SOAPについて

セッション中に「SOAPとWS-*の敗因」「Don BoxがついにRESTに折れた」という話題が出たのだけど、SOAPはなくなりません……すぐには。

そもそもSOAPやWS-*ってMicrosoftとIBMが協力して仕様を決めてたわけだけど、やっぱりエンタープライズな世界では一定の需要があるわけですよ。

正直WS-*の複雑な体系にはどこまで需要があるものか怪しいけど、HTTPを使ってJavaと.NETが連携する場合は、SOAP+WSDLはそれなりに使える(深掘りすると落とし穴にハマるが)。

Javaや.NETでそれなりに使えるのは、スキーマ大好きな貴族たちが頑張ったから。Javaと.NETみたいなヘテロな環境でRPCやるなら、スキーマとかメタデータとかが欲しくなるんです。

エンタープライズ界の人たちが欲しかったのは「HTTPバインディングが標準化されたCORBA」でしかなくて、その方向にSOAPとWS-*は突き進んでいったように思える。

そのせいでWS-*は無駄に複雑になり、それを嫌った多くの人がSOAPを捨てました。かつては「WebサービスといえばSOAP」を目指していたのかもしれないけど、結局そうはならなかった。

Webの広い世界から見ればSOAP+WS-*の需要はニッチです。でもニッチはニッチなりに需要があることは無視できない。

ところで、SOAPはHTTPに依存しない仕様なんだけど、事実上HTTPでしか使われてない。でもこれ「Webのインフラにただ乗りしてるだけ」なんだよね。URLは場当たり的。POST偏重。SOAPを使っている人たちは、Webを発展させることにはまったく興味がなさそう。

そういう意味では、RESTful Webがさらに発展したあとで、RESTfulかつスキーマフルな技術が出てきて、仕様が標準化されることがあれば、SOAPやWS-*にとって代わる可能性は大いにある。

でも10年ぐらいはかかるだろうなー。

RESTについて

MicrosoftのアプリケーションアーキテクチャガイドでRESTサービスの設計について触れていますよーというのはともかくとして、Microsoftの動きとしておもしろいのは、ODataかなあ。

「MicrosoftがデファクトスタンダードのWebデータプロトコルとしてODataを提案」にあるように、ODataはAtomPubの拡張。GoogleのGDataとガチでかぶってる。

一応、仕様自体はオープン(ただし今のところ仕様策定プロセスはオープンではない)。

SDKも公開されていて、.NET、Java、PHP、Objective-C、JavaScriptでクライアントを作成できる。

それから、.NETの場合は、WCF Data Servicesを使うとデータベースをOData形式で簡単に公開できる。

また、Microsoftは”Dallas”というコードネームの情報マーケットプレース(CTP版)を公開しているのも興味深い。いろんなベンダーがデータを販売できるのだけど、そのデータへのアクセスにODataプロトコルが使われる。

OData、受け入れられるのかな。なんだかGoogleにも協力を呼びかけてるみたいだけど、どうなることやら。

「Webを支える技術」刊行記念トークセッションに行ってきた(2)

| 「Webを支える技術」刊行記念トークセッションに行ってきた(2) - 猫とC#について書くmatarilloの雑記 を含むブックマーク 「Webを支える技術」刊行記念トークセッションに行ってきた(2) - 猫とC#について書くmatarilloの雑記 のブックマークコメント

http://img87.yfrog.com/i/r7e.jpg/

山本陽平さんとは同い年で、WWWとの出会い方もほぼ同じ。最初のブラウザはMosaicでした。

Mosaic以前を知るには、ティム・バーナーズ=リーの本がいいんだけど、邦訳は増刷されてないようだ。

というわけで読むなら洋書で。英語もそんなに難しくないよ(ちょっとだけ固いけど)。

Weaving the Web: The Original Design and Ultimate Destiny of the World Wide Web

Weaving the Web: The Original Design and Ultimate Destiny of the World Wide Web

2010年01月21日

2009年12月20日

ロングセラーなC#書籍

| ロングセラーなC#書籍 - 猫とC#について書くmatarilloの雑記 を含むブックマーク ロングセラーなC#書籍 - 猫とC#について書くmatarilloの雑記 のブックマークコメント

Amazonでは12月に出版と書いてあるが、O'reillyのページだと来年3月ってなってる。ともあれ、第6版。C# 4.0対応。いずれ日本語訳も出るだろう。

C# 4.0 in a Nutshell: The Definitive Reference

C# 4.0 in a Nutshell: The Definitive Reference

11月に出たこちらもC# 4.0対応。1072ページとはなかなかだ。前版といえばLINQPad

CLR via C# (Developer Reference)

CLR via C# (Developer Reference)

こちらは2月に。日本語版は「プログラミング Microsoft .NET Framework」。第3版も吉松さんが翻訳するのだろうか。というか、ぜひお願いしたい所存

2009年12月16日

C#関連本

| C#関連本 - 猫とC#について書くmatarilloの雑記 を含むブックマーク C#関連本 - 猫とC#について書くmatarilloの雑記 のブックマークコメント

最初に宣伝。「.NETのクラスライブラリ設計」がもうすぐ出ます。

.NETのクラスライブラリ設計

.NETのクラスライブラリ設計 開発チーム直伝の設計原則、コーディング標準、パターン

NyaRuRuさんマイクロソフト新村さんほかいろんな方から紹介していただいてます。

目次はこんな感じ。

  1. イントロダクション
    1. 良い設計のフレームワークの品質
  2. フレームワーク設計の基礎
    1. 漸進的フレームワーク
    2. フレームワーク設計の基本原則
  3. 名前付けのガイドライン
    1. 大文字と小文字の使い分け規約
    2. 一般的な名前付け規約
    3. アセンブリおよびDLL の名前
    4. 名前空間の名前
    5. クラス、構造体、およびインターフェイスの名前
    6. 型のメンバの名前
    7. パラメータの名前付け規約
    8. リソースの名前付け規約
  4. 型の設計のガイドライン
    1. 型と名前空間
    2. クラスか構造体かの選択
    3. クラスかインターフェイスかの選択
    4. 抽象クラスの設計
    5. 静的クラスの設計
    6. インターフェイスの設計
    7. 構造体の設計
    8. 列挙体の設計
    9. ネスト型
    10. 型およびアセンブリのメタデータ
  5. メンバの設計
    1. 一般的なメンバ設計のガイドライン
    2. プロパティの設計
    3. コンストラクタの設計
    4. イベントの設計
    5. フィールドの設計
    6. 拡張メソッド
    7. 演算子のオーバーロード
    8. パラメータの設計
  6. 拡張性の設計
    1. 拡張性メカニズム
    2. 基底クラス
    3. シール化
  7. 例外
    1. 例外のスロー
    2. スローする正しい例外型の選択
    3. 標準の例外型の使用
    4. カスタム例外の設計
    5. 例外とパフォーマンス
  8. 使用法のガイドライン
    1. 配列
    2. 属性
    3. コレクション
    4. DateTime およびDateTimeOffset
    5. ICloneable
    6. IComparable<T> とIEquatable<T>
    7. IDisposable
    8. Nullable<T>
    9. オブジェクト
    10. シリアル化
    11. System.Uri
    12. System.Xml の使用法
    13. 等価演算子

本書は「クラス ライブラリ開発のデザイン ガイドライン」の公式解説書でもあります。このガイドラインを強制するためのツールとしてFxCopがあります。Visual Studio Team Editionには日本語化されたFxCopが組み込まれてるんですが、単体で配布されているFxCopは英語版のみ。英語版FxCopを使うときは「マネージ コードの警告に対応するコードの解析」と照らし合わせましょう。

で、そこに書かれている「規則の説明」では腑に落ちなかった人は、ぜひ書籍「.NETのクラスライブラリ設計」を読んでくださいね。

(あとで書く)

2009年10月24日

jQueryでMVC (1) ゆっくりしていってね!

| jQueryでMVC (1) ゆっくりしていってね! - 猫とC#について書くmatarilloの雑記 を含むブックマーク jQueryでMVC (1) ゆっくりしていってね! - 猫とC#について書くmatarilloの雑記 のブックマークコメント

MVCが話題だったこともあり、matarillo.comにMVCサンプルページを作った。

no title

そうこうしてたらWEB+DB PRESS #53の特集「モダン設計入門」で、JavaScriptによるMVCの解説が。なんだかタイムリー。

http://gihyo.jp/magazine/wdpress/archive/2009/vol53

WEB+DB PRESS Vol.53|技術評論社

自分でも以前にjQueryとMVCの組み合わせをブログに書いたなあ……ということで、さっそくMVCサンプルページに載せた。

no title

WEB+DB PRESSの記事では、Model->Viewの更新通知にObserverパターンを使っていなかったが、上のサンプルではObserverパターンを取り入れてある。といってもViewが1個しかないから、たいした意味は無いのだが。

2009年10月06日

TOPSE(トップエスイー)

| TOPSE(トップエスイー) - 猫とC#について書くmatarilloの雑記 を含むブックマーク TOPSE(トップエスイー) - 猫とC#について書くmatarilloの雑記 のブックマークコメント

INTER-Mediator

no title

なんというか臆面もない感じはある。弊社もITゼネコンの端くれなので何人か受講者がいたりするが。

教科書リスト。(講座は他にもあるようだ)

トップエスイー基礎講座

トップエスイー入門講座

トップエスイー実践講座

2009年10月03日

Microsoft® Application Architecture Guide (Patterns & Practices)

| asin:073562710X:title - 猫とC#について書くmatarilloの雑記 を含むブックマーク asin:073562710X:title - 猫とC#について書くmatarilloの雑記 のブックマークコメント

Microsoft® Application Architecture Guide (Patterns & Practices)

Microsoft® Application Architecture Guide (Patterns & Practices)

出版されるってことは、現在CodePlexにあがってる安定版が晴れて正式版になるってこと。

P&Pのサイトの"Upcoming Releases"を読むと、AAG2は"Late Summer 2009"になってたわけなんだが、たぶんもうすぐステータスが変わって、Announcementsの方で正式にリリース告知されるはず。

@ITの連載も頑張らないと。

2009年09月02日

技術文書の書き方

| 技術文書の書き方 - 猫とC#について書くmatarilloの雑記 を含むブックマーク 技術文書の書き方 - 猫とC#について書くmatarilloの雑記 のブックマークコメント

この話題はよく類似エントリがあがってる上に、俺自身がちゃんと実践できてるわけではないので、気が引けるけど。

理科系の作文技術 (中公新書 (624))

理科系の作文技術 (中公新書 (624))

定番。

SEのための「構造化」文書作成の技術

SEのための「構造化」文書作成の技術

仕事柄。

レポート・論文の書き方入門

レポート・論文の書き方入門

引用の仕方とかはこういう「論文の書き方」的なのを読んだらいいと思う。

以下はid:masanobuimai のお勧め本から

ロジカル・ライティング

ロジカル・ライティング

SEを極める仕事に役立つ文章作成術

SEを極める仕事に役立つ文章作成術

そのほかオンラインリソース

Wikipedia:表記ガイド - Wikipedia
「数字は1桁なら全角、2桁以上なら半角」とか、「3点リーダやダーシは2つ重ねる」みたいな組版ルールとか日本語文書の組版方法とは一致しないところもある。
マイクロソフト スタイル ガイド
癖はあるけど、カタカナ語については参考になる。

2009年03月24日

本2冊

| 本2冊 - 猫とC#について書くmatarilloの雑記 を含むブックマーク 本2冊 - 猫とC#について書くmatarilloの雑記 のブックマークコメント

f:id:matarillo:20090324203316j:image

実践バグ管理―プロジェクトを成功に導くための

実践バグ管理―プロジェクトを成功に導くための

聖☆おにいさん(3) (モーニング KC)

聖☆おにいさん(3) (モーニング KC)