TypeScriptで名前空間(namespace)を利用して継承(extends)してみた

TypeScriptで名前空間をmoduleで書く必要があったらしいが、1.5.3からnamespaceで表現出来るらしいのでPlaygroundを使ってさくっと書いて動作確認してみた

TypeScript早わかりチートシート【1.5.3対応】 - Build Insider

クラスのサンプルはここから 継承 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

namespace Nature {
    export class Person
    {
        /*
       private string name; // 名前
       private int    age;  // 年齢
       */
        constructor(public name:string ,public age: number){
        }
        
        get Name():string{
            return this.name;
        }
        set Name(name: string){
        }
        
        get Age():number{
            return this.age;
        }
        set Age(age: number){
        }
    }
    
}

namespace School{
    export class Student extends Nature.Person
    {
        /*
       private int    id;   // 学籍番号
       */
        constructor(public name: string,public age: number,public id: number)  {
            super(name,age);
        }
        
        get Id(): number{
            return this.id;
        }
        set Id(id: number){
        }
    }    
}

let p1 = new Nature.Person("麻倉葉",13);
alert(`${p1.Name}は${p1.Age}歳。`)

let s1 = new School.Student("小山田まん太",13,1);
alert(`学籍番号${s1.Id}、${s1.Name}は${s1.Age}歳。`);

出力されたJavaScript

var __extends = (this && this.__extends) || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var Nature;
(function (Nature) {
    var Person = (function () {
        /*
        private string name; // 名前
        private int    age;  // 年齢
        */
        function Person(name, age) {
            this.name = name;
            this.age = age;
        }
        Object.defineProperty(Person.prototype, "Name", {
            get: function () {
                return this.name;
            },
            set: function (name) {
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Person.prototype, "Age", {
            get: function () {
                return this.age;
            },
            set: function (age) {
            },
            enumerable: true,
            configurable: true
        });
        return Person;
    }());
    Nature.Person = Person;
})(Nature || (Nature = {}));
var School;
(function (School) {
    var Student = (function (_super) {
        __extends(Student, _super);
        /*
        private int    id;   // 学籍番号
        */
        function Student(name, age, id) {
            _super.call(this, name, age);
            this.name = name;
            this.age = age;
            this.id = id;
        }
        Object.defineProperty(Student.prototype, "Id", {
            get: function () {
                return this.id;
            },
            set: function (id) {
            },
            enumerable: true,
            configurable: true
        });
        return Student;
    }(Nature.Person));
    School.Student = Student;
})(School || (School = {}));
var p1 = new Nature.Person("麻倉葉", 13);
alert(p1.Name + "\u306F" + p1.Age + "\u6B73\u3002");
var s1 = new School.Student("小山田まん太", 13, 1);
alert("\u5B66\u7C4D\u756A\u53F7" + s1.Id + "\u3001" + s1.Name + "\u306F" + s1.Age + "\u6B73\u3002");

気になったのは、Personクラスの引数プロパティはprivateにしていると、別の名前空間extends 出来なかったところ。 深くほりさげるのはまた今度。

Playgroundサンプル [http://www.typescriptlang.org/play/index.html#src=namespace%20Nature%20%7B%0D%0A%09export%20class%20Person%0D%0A%09%7B%0D%0A%09%09%2F%0D%0A%09%09private%20string%20name%3B%20%2F%2F%20%E5%90%8D%E5%89%8D%0D%0A%09%09private%20int%20%20%20%20age%3B%20%20%2F%2F%20%E5%B9%B4%E9%BD%A2%0D%0A%09%09%2F%0D%0A%09%09constructor(public%20name%3Astring%20%2Cpublic%20age%3A%20number)%7B%0D%0A%09%09%7D%0D%0A%09%09%0D%0A%09%09get%20Name()%3Astring%7B%0D%0A%09%09%09return%20this.name%3B%0D%0A%09%09%7D%0D%0A%09%09set%20Name(name%3A%20string)%7B%0D%0A%09%09%7D%0D%0A%09%09%0D%0A%09%09get%20Age()%3Anumber%7B%0D%0A%09%09%09return%20this.age%3B%0D%0A%09%09%7D%0D%0A%09%09set%20Age(age%3A%20number)%7B%0D%0A%09%09%7D%0D%0A%09%7D%0D%0A%09%0D%0A%7D%0D%0A%0D%0Anamespace%20School%7B%0D%0A%09export%20class%20Student%20extends%20Nature.Person%0D%0A%09%7B%0D%0A%09%09%2F%0D%0A%09%09private%20int%20%20%20%20id%3B%20%20%20%2F%2F%20%E5%AD%A6%E7%B1%8D%E7%95%AA%E5%8F%B7%0D%0A%09%09%2F%0D%0A%09%09constructor(public%20name%3A%20string%2Cpublic%20age%3A%20number%2Cpublic%20id%3A%20number)%20%20%7B%0D%0A%09%09%09super(name%2Cage)%3B%0D%0A%09%09%7D%0D%0A%09%09%0D%0A%09%09get%20Id()%3A%20number%7B%0D%0A%09%09%09return%20this.id%3B%0D%0A%09%09%7D%0D%0A%09%09set%20Id(id%3A%20number)%7B%0D%0A%09%09%7D%0D%0A%09%7D%09%0D%0A%7D%0D%0A%0D%0Alet%20p1%20%3D%20new%20Nature.Person(%22%E9%BA%BB%E5%80%89%E8%91%89%22%2C13)%3B%0D%0Aalert(%60%24%7Bp1.Name%7D%E3%81%AF%24%7Bp1.Age%7D%E6%AD%B3%E3%80%82%60)%0D%0A%0D%0Alet%20s1%20%3D%20new%20School.Student(%22%E5%B0%8F%E5%B1%B1%E7%94%B0%E3%81%BE%E3%82%93%E5%A4%AA%22%2C13%2C1)%3B%0D%0Aalert(%60%E5%AD%A6%E7%B1%8D%E7%95%AA%E5%8F%B7%24%7Bs1.Id%7D%E3%80%81%24%7Bs1.Name%7D%E3%81%AF%24%7Bs1.Age%7D%E6%AD%B3%E3%80%82%60)%3B]

SQL Server Data Tools (SSDT) のシンタックスハイライトを復活させる

SQL Server Data Tools (SSDT)が便利なので、極力 SQ LServer Management Studio (SSMS) を使わずに VisualStudioで完結するようにしていたんですが、SQLクエリを書くときにシンタックスハイライトが効いていないのが気になった。

調べてみるとレジストリに保存してあるキャッシュを削除すれば復活する模様。

一応 Visual Studio 2013、2015で確認しています。

注意

レジストリの操作は自己責任でお願いします。 大丈夫かとは思いますが、念のためレジストリのバックアップをとってから、作業することをおすすめします。

手順

以下のレジストリのキーを削除する

Visual Studio 2013の場合

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\FontAndColors\Cache

Visual Studio 2015の場合

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\FontAndColors\Cache

参考サイト

kiyokura.hateblo.jp

SSDT July Update: Lost Syntax Highlting in VS 2013 for sqlproj.

https://social.msdn.microsoft.com/forums/windowsdesktop/ja-jp/11e2c840-435c-42f6-ae9e-7ff8930114e2/ssdt-july-update-lost-syntax-highlting-in-vs-2013-for-sqlproj

Comm Tech Festivalに参加しました

comuplus.doorkeeper.jp

日本MSさんのセミナールームを4つ使って並行してセッションが開かれる形式でした。
他にも聞きたいセッションがあったけど、僕は主にASP.NET、Azure関係のお話を聞きに行きました。

聞いたセッション

  • [ルームA] わかばさん向けAzure
  • [ルームA] ASP.NETサイトの運用
  • [ルームD] open FSharp
  • [ルームA] Microsoft Edge New Features - Web制作者はEdgeブラウザ対応が必要なのか?
  • [ルームC] Introduction to Application Architecture on ASP.NET MVC (仮)

感想、得られた知見、メモ等

わかばさん向けAzure

Azureの概要、変遷、現在のお話

仕事では利用する機会がまだないのだけれど、個人的にお金がかからない範囲でなんとなく利用していて、わからないキーワードの意味が知ることが出来てよかった また、リージョン別に利用出来るサービスが違うってのは知らなかった。
Azure Cloud Services (場所または地域別) | Microsoft Azure

ASP.NETサイトの運用

「既存のASP.NETサイトをお手軽に速くする 編」というテーマ。
パフォーマンス改善方法は色々ありますが、今回はCDNを利用してオフロードしようという紹介でした。

CDNの方式

  • プル型
    • CDNにアクセスされた際キャッシュしていなければ、originサーバーにコンテンツを取りに来てキャッシュしてくれる
      • 事前に準備不要で、お手軽に導入出来る
      • コンテンツを更新した場合、キャッシュ反映までに時間がかかる場合がある
      • こちらの方式が現在の主流?
  • プッシュ型
    • originサーバーにコンテンツをCDNに自分でアップロードする
      • アップロードする手間がかかる
      • コンテンツを更新した場合、任意のタイミングでキャッシュ更新出来る

オフロード方式

  • 部分オフロード
    • image,javascript,css等の特定のコンテンツのみキャッシュしてオフロードする方法
  • サイトオフロード
    • HTML自体もキャッシュしてオフロードする方法
    • POSTしてデータの書き込みするページは向いていない

デモ

  • ASP.NETの場合、URLの変更をソースコード変更無しに利用出来る
  • URL Rewriteの機能を利用してCDN利用が可能
  • URL Rewriteではリクエストに対してのルーティング機能があるのは知っていたが、レスポンス情報の内容も書き換え可能らしい
  • Web.config書き換えでいける

デモでは、C#でお馴染みの++C++; // 未確認飛行 Cの本番サイトで導入してみようという大胆なものでした(笑)
事前に用意されていたのであろうWeb.config設定をコメントから有効化して、動かしてみるもRuntimeErrorになるというハプニング?もありました。

思い出す限りだと以下の内容を試されていました。

  • Httpレスポンスヘッダーの書き換え(キャッシュ有効期限設定、MaxAgeだったかな?)
  • image,css,scriptのURL書き換え(CDNのURLに変更)

詳しい話はブログ見てと言われていましたが、「お楽しみはこれからだ!: URLRewriteでほとんどすべてCDNに向ける」かな?

その他

wget64.exe?
サイトをクロールしてサイト全体をダウンロード出来る
ダウンロード容量上限も指定可能らしい

open FSharp

F#の名前は知りつつも、どんなものか知らなかったので聞きに行きました。
が、あまり理解できませんでした。すみません。。。

内容的には、VisualStudioでのF#用ツールの説明と、F#の構文のお話でした。

Microsoft Edge New Features - Web制作者はEdgeブラウザ対応が必要なのか?

ペースが早くてあまりメモれなかった。。

Edgeが出来るまでの経緯、事情の話しがあって、とても面白かったです。
* 特にIE、Edgeのバージョン毎のUseAgentとか
* IEのアンケートの結果、「IEをも作るな!」が一位になったとか

また、pixivではWindowsXPWindowsXPMacbookで開発するのは老害のらしいですw
今の若者は、Surfaceで外部モニタ使って開発するらしい

タイトルの結論

タイトルの結論としては、特に対応する必要はないらしい 。
というのも今のWebのディファクトスタンダードがWebkitで、EdgeもWebkitの動作に合わせるよっていう話だった。

機能アップデートがある場合に内部バージョンが上がるため、開発者的にはあまり困らないのでは?ということでした。
ECMASCript6もFirefoxよりも対応が進んでいるようです。

ただしブラウザのガワがまだよろしくないようで、かなりdisられていましたが、今後に期待ですね。

Introduction to Application Architecture on ASP.NET MVC (仮)

一番仕事に直結しそうな内容でした。
ソフトウェアアーキテクチャとは?のお話と、Introductionということで、ASP.NET MVCを利用する場合の標準機能によるアーキテクチャ検討のお話でした。
以下、メモ(ちょっとあやふや。。)

UIデータバインド

  • サーバサイドレンダリング
    • Razor、モデルバインディング
    • サーバーサイドでしか出来ないこと
      • 認証・認可
      • ブラウザの言語判定
  • クライアントデータバインド
    • 必要な所のみ更新をかけるため、効率的にサーバーリソースを利用出来る
    • レンダリング遅延の問題がある

バリデーション

  • クライアント
  • サーバー
    • ModesState

例外処理

例外は原則として集約的に補足して処理する

  • WebAPIの例外処理
    • GlobalErrorHandling
    • パイプラインで発生したすべての例外を補足
    • 以下のインターフェースを継承
      • IExceptionLogger
      • IExceptionHandler
  • それ以外の例外処理
    • Global.asaxのAplication_Errorイベントハンドラ
      • キャッチした後、握りつぶさない
      • キャッチしたあと必ず再スローする
      • 再スローはthrowだけ書く
      • throw eはそれまでのスタックトレースがなくなってしまうため

認証・認可

  • Windows認証

    • web.configのsystem.web/authenticationのmode="window"
  • CookieAuthentication

  • OWIN Authentication

    • Form認証
    • Oauth2.0(OpenID)認証
  • Organization Authentication

    • AD認証

データアクセス

  • EntityFramework
    • EF7はEDMXは無くなる
      • DBファーストできなくなるのでCodeファーストに切り替えましょうとのこと
  • DataSetは○ね

じゃんけん大会

セッション終了後に、C#の書籍プレゼントのじゃんけん大会がありました。
運良くじゃんけんに勝って西村誠さんの「Amazon.co.jp: 基礎からわかる C#: 西村 誠: 本」を頂きました。
著者のサインも頂きました。ありがとうございます。

最後に

こういったセミナーに参加するといつも思いますが、登壇されている方と自分のスキルの差を見せつけられるので、すごいなーと思いつつも、帰りに自分のスキルの無さを痛感して落ち込みます。。
とはいえ、その差を埋めようと頑張れるので、参加してよかったと思います。

2015世代のC# に参加しました

平日だったので、行けるか不安でしたがなんとか調整出来ました。 書くのがすっかり遅くなってしまいました。

csugjp.doorkeeper.jp

VisualStudio2015の話が多く、自分が業務使うときはいつ来るんだろうなーと思いながら聞いていました。 今はCommunityエディションがあるので、Professional相当を個人で触る分にはいつでも出来るようになっているのでいい時代だなと思います。

後、日経BPさんが展示販売していたので、「.NETのエンタープライズアプリケーションアーキテクチャ」 を買いました。

資料公開されていたので、まとめておく。

www.slideshare.net

www.slideshare.net

新しい Visual Studio & .NET と新時代のアーキテクチャ | SHIN-ICHI の技術ブログ

www.slideshare.net

【開催結果】2015世代のC# | ++C++; // 未確認飛行 C ブログ

Open棟梁を試そうとしたが色々詰まった。

Open棟梁がどんなものかと軽く動作させてみようとビルドを試してみたが、詰まる点・思う点があったので箇条書きで残しておく。
実行手順はOpenTouryo/README.md at develop · OpenTouryoProject/OpenTouryo · GitHubを見ながら進めた。

  • 各種データプロバイダを用意するところから早速手が詰まった

  • Issue見るとビルドの問題点を指摘されていたgithub.com

  • WPFToolkitどこから持ってくるんですかね? 外部ライブラリっぽいけど、利用している記述が見当たらないのにサンプルで参照している。

その他

  • OpenTouryoTemplatesをVisualStudio2013のGitで複製しようとすると、途中でコケる。。(%USERPROFILE%\Source\Repos\直下に落とそうとすると、ファイルパスが長すぎるようで落とせない。)

  • DB関係のツールが付属しているが、EntityFrameworkのやってる領域に似ているなとの印象だけど、こちらのツールを利用するメリットとはなんだろう?

あまりにもすんなりいかなかったので、WebAppのサンプルを動かしたところで時間切れ・気持ちも折れてしまいました。

また元気が出たら試したい。

Visual Studio Codeの日本語サポートについて

Visual Studio Codeが出たので試していましたが、ShiftJISの既存コードを開くと文字化けするので設定できるか調べました。
結果まだUTF-8,UTF-16のみサポートのようです。

Q: What encodings are supported?

A: Visual Studio Code will read and write files using UTF-8 encoding. UTF-16 is supported if its byte order mark (BOM) is present (meaning the opening character sequence is 0xEF,0xFF for big-endian, or 0xFF,0xEF for little-endian). Any existing BOM is preserved but will not be added unless it was there already. Other than UTF-8 and UTF-16, no other encoding is currently supported.

https://code.visualstudio.com/Docs/FAQ#_languages

Issueが上がっていたので、以下URLからぜひ「me too」を!!
https://code.visualstudio.com/issues/Detail/16788

6/13 追記

Fixed in Visual Studio Code version 0.3.0download latest version

最新バージョンで対応されたようです!

powershellでCSVファイルを表形式で確認する

powershellCSVファイルを見るときはImport-Csv,Out-GridViewが便利というお話です。

商用環境などCSV用のビューアなどを入れられない閉じた環境だと、テキストファイルを開く手段がメモ帳しか無い状況で CSVファイルをメモ帳で開くと、行ごとに列の位置を揃えられず非常に見づらいです。

WindowsServer2012とかであれば大抵powershell利用出来ると思うので、いつでも引き出せるようメモしておく

PowerShellバージョンは4.0で動作確認しています。

続きを読む