はじめてのVisual Studio 2012 (書籍)

いろいろ縁がありまして「TECHNICAL MASTER はじめてのVisual Studio 2012」という書籍を入手しました。ありがとうございます。

僭越ながらレビューというか感想をば。

全体通して内容はタイトルの通り、はじめてVisual Studio 2012を触る人向けのガイド本的な内容です。

以前のバージョンのVisual Studioを触ったことがある人であれば気になる章や機能をぱらぱら見てもいいですね。詳しく見ると意外な発見があるかも?(エディションによる違いとか)

注意点としては.NET FrameworkやC#/VB.NET/F#などの言語・フレームワークについての解説は最小限またはノータッチです。プログラミングを学びたい!という人には向かないので注意。別で勉強しましょう。

Visual Studioという良い総合開発環境をちゃんと使いこなすための入門本と捉えたほうがいいですね。なので例えば新人研修などで言語系を学びながらこの書籍でツールの使い方を学ぶみたいな使い方が良いのかも。

単なる操作マニュアルじゃなくて、そこはちゃんとサンプルコードもあるので動かしながらVisual Studioについて学べます。はい。一通り大きな機能は網羅してると思うので、始めるには困らない予感。

より深く知りたいなと思ったら、それぞれのポイントでMSDN LibraryへのURLが書いてあるのでそちらを参考にどんどん深めていってね、という姿勢です。

さてさて個別な中身としてはいきなり巻頭~1章でWindows Storeアプリについて一通り紹介されてます。

??と思うかもしれませんがWindows 8含め目玉なのでいいのかな?

2章はエディションの違いやインストール方法など。初心者でも安心。

3章はVisual Studioとは何ぞや的な機能やIDEとしての支援機能の紹介。

4章は開発には大事なビルドやデバッグについて。マルチスレッドや並列タスクについても言及されてるので旧Verユーザーも一読の価値ありですね。

5章、6章はプロジェクトテンプレートから作るWindowsフォームアプリケーションやWPF/ASP.NET/F#/Officeなどの解説、DataSetやEntityFrameworkなどについての解説となっています。興味のあるところをじっくり見れば良いかと。ただあくまでVisual Studioの使い方がメインなので、それぞれの道を極めたい!と思ったら別途勉強しましょう。サンプルがあるので「できたできた!」と成功体験が得られるのもいいですね。

7章はテストや分析周りの機能、8章はアプリケーション配布についての解説です。

9章はアプリケーションライフサイクル管理(ALM)という見出しでTFS連携やバージョン・ビルド管理などについて書かれています。

まとめとしては、あくまでツールが主軸の書籍ですが、とっかかりとしてはいいと思います。最初にも書きましたが他の事は最小限なので、言語やフレームワーク、開発そのものなどについてはちゃんと別で補いましょう。

個人的には良し悪しの区別ではなく、感想として「ゆるいな~」という印象を受けました。読んでてなんとなくそう思うのでこれは他意のない感想ですw

まぁこのBlobのレビューを見る初心者の方は居ない気もしますが、会社や新人の方へ教えてあげては如何でしょうか。

Windows Azureのホスト名

以前、ロール間通信の話をちょっと書きましたが、なんかもっと簡単にできそうでした。(クラウドサービスが対象です)

Windows Azureのクラウドサービス上で稼働するインスタンスのホスト名は伝統的なピンクぷーどrではなくRedDogの頭文字、RDで始まるランダムなもので、よくわかりませんでした。

ですが、サービス設定ファイル(*.cscfg)のRole要素でvmName属性を使用すると、指定した名前+連番でインスタンスを設定してくれるようです。

サービス設定ファイルの例↓

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="WindowsAzure18_45" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="3" osVersion="*" schemaVersion="2012-10.1.8">
  <Role name="MvcWebRole1" vmName="KOSMOS">
    <Instances count="3" />
    <ConfigurationSettings>

以下略 

ほうほう。実際にデプロイしてみましょう。

おお、確かにホスト名がvmNameで指定したもの+連番(ゼロオリジン)です!

ちなみにDNSサフィックスは

02158fc001144d09bf43a37f3660d936.penguindrum.3216464207.asiaeast.internal.cloudapp.net

となってますね。

最初の赤字部分はデプロイID、次の青字部分はクラウドサービスの名前です。asiaeastは配置場所(DC)、internal.cloudapp.netはまぁ固定でクラウドサービスの内部って意味でしょうけど、1つよくわからないのがありますね~。普通に考えるとDC内の何かの(たぶん論理)単位ですね。まぁ自身のDNSサフィックス調べれば生成する必要ないのであまり意味はありませんが。

もちろんクラウドサービス内で有効なだけですけど、ちゃんと名前解決もできる=ポートさえ空いていれば通信ができます。

image

これでHOSTSを弄ったり、変なEndpoint定義したりしなくてもいいですね!!

ちなみに、このvmName属性はSDK1.7以降で使えるようです。いろいろ増えてるんだなぁ~。

参考

Azure Guest OS 3.xでARRv3を使う

Windows Azure Advent Calrendar jp: 2012 の #24です。

みなさんご存知の通り、Windows Azureのクラウドサービスおよび仮想マシンでWindows Server 2012が利用できます。

※残念ながらAzure WebサイトはまだWindows Server 2008 R2ベース。

仮想マシンは自分でいろいろ設定して永続化しておけるのでどうってことは無いんですが、みんな大好きクラウドサービスはそういうわけにはいきません。

で、せっかくクラウドサービスのGuest OS 3.xで、Windows Server 2012つまりIIS8が使えるようになったので、ARR(Application Request Router)も対応したものを使いましょーというのが主旨です。

IIS8に対応したARRv3はExternal CacheやURL Rewriteもこれまで通り使えますし、なんといってもWebSocketに対応してるのが嬉しいですね。

とはいえ、IIS8に対応したARRv3はまだBetaなので利用には注意が必要ですが。

続きを読む

Windows Azure管理ポータルが更新されました

いつものように管理ポータルで操作してたらいきなり「新しいバージョンのポータルが利用できます」って表示されてリロードしたらいろいろ新しくなってました(

ということで簡単に気づいた点など。(※差分が分からないので前から実装されてたのがあるかもしれない。)

続きを読む

インスタンスのInputEndpointを取得できない

Windows Azure上でインスタンス間通信する場合、相手のIPアドレスがわからないと何もできません。通常IPアドレスはインスタンス起動時に適当に振られるので、RoleEnvironmentを使ってインスタンスのIPEndpointを取得するのですが、どうもInputEndpointから取れなくなったっぽい。

※インスタンスを列挙してそのインスタンスのIPEndpointを取得してIPアドレスをゲットする、という方法ですが他のインスタンスのInputEndpointが取れない。

ぽい、というのは昔とれた気がするんですけど、SDK1.8だと取れないんですよね。いつからか不明だけどVPNが来たりしたSpring Waveのときかなぁ?

というわけでSDK1.8時代のロール間通信はInternalEndpointを明示的に指定して、そいつのIPEndpointを参照しましょう、という感じになります。

取得するコード的にはこんな感じです。

var role = Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.CurrentRoleInstance.Role;
foreach (var instance in role.Instances)
{
	foreach (var s in instance.InstanceEndpoints.Values)
	{
		if (s != null)
		{
			Console.WriteLine("{0} = {1}:{2}", s.RoleInstance.Id, s.IPEndpoint.Address.ToString(),
								  s.IPEndpoint.Port);
		}
	}
}

 

サービス定義ファイル(CSDEF)はこんな感じ。

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="WindowsAzure18_45" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2012-10.1.8">
  <WebRole name="MvcWebRole1" vmsize="ExtraSmall">
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
          <Binding name="Endpoint2" endpointName="Endpoint2" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
      <InternalEndpoint name="Endpoint2" protocol="http" port="8002" />
    </Endpoints>
    <Imports>
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
    </Imports>
    <Runtime executionContext="elevated">
    </Runtime>
  </WebRole>
</ServiceDefinition>

 

テストなので適当にInputEndpointとInternalEndpointを定義してみました。

で、結果はこう。

image

インスタンス0上で実行しました。他のインスタンスのInputEndpointは取れてないですね。でもInternalEndponitは取れてます。

ということで、何かインスタンス間通信したい場合はInternalEndpointをちゃんと定義しましょう、ということで。

ちなみにコンソールアプリとかで

Unhandled Exception: System.TypeInitializationException: The type initializer fo
r ‘Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment’ threw an exception. —
-> System.IO.FileLoadException: Could not load file or assembly ‘msshrtmi.dll’ o
r one of its dependencies.
A dynamic link library (DLL) initialization routine f
ailed. (Exception from HRESULT: 0x8007045A)
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeEnvironmen
t()
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment..cctor()
   — End of inner exception stack trace —
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.get_CurrentRoleInsta
nce()

とか出る場合は以下のようにuseLegacyV2RuntimeActivationPolicyをTrueにすればいいですよ。(結構悩んだ)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
	</startup>
</configuration>

 

まぁByDesignという感じみたいです。はい。(外部からの受付用のInputEndpointで内部用のIPアドレスが取れちゃうってのも変な話といえば変ですのでいいんですけどね。)

Windows Azure Web Sitesを有効利用しよう! NuGetサーバー編

今日は Windows Azure Advent Calendar jp: 2012 の9日目のネタをお送りします。

 

今日のお題というか今年のお題はですね、みなさんご存知、Windows Azure Web Sitesに関するちょっとイイ話です。

Windows Azure Web Sites はお手軽にWebサイトを立ち上げることができる、Windows Azureのサービスの1つです。なんと今ならリージョンあたり10個まで無料で作ることができます!(つまり今だと最大50サイト!)

これは有効利用するっきゃないですね!

というわけで、なんとなくあったら便利そうだなっていうWebアプリをWindows Azure Web Sitesでホストしちゃいましょう~!というのが今年の趣旨でございますー。

続きを読む

Visual Studioをあなた好みにしてみよう

 

というわけで Visual Studio Advent Calendar 2012の2日目担当です。何となく作ろうとしてたネタをせっかくだからAdvent Calendarのネタにしちゃおうと思ったら周りが怖い人ばっかりでどうしようでござる。

気を取り直して、2日目の内容は「Visual Studioを自分好みにしちゃいましょう」ということで、拡張機能のご紹介的な内容です。

続きを読む

Windows Azure Advent Calendar jp: 2012 はじめました

すっかりご無沙汰感。

いつの間にやら気が付けば11月中旬、そして次は12月・・・ということは、あの季節がやってくる!

ということでWindows Azure Advent Calendar jp: 2012 ですよ!

あじゅらーのみなさま、ふるってご参加ください!

今年はデプロイ王子を超えるネタが出現するのか!?

 

さて自分もネタ考えないとナー

Windows Storeアプリが公開されました

そんなわけで公開されたようです。→ imatumb

image

Tumblrから画像だけとってきてダラダラ見たりLikeしたりReblogするだけの単純なアプリです。

思ってたより機能を落としてリリースでする。(諸般の事情でしめきりに間に合わせないといけなかったので)

できないこと

  • Reblog時のコメント
  • コメントなどの表示(ブラウザで本文見てね☆)
  • Gifアニメーションの再生
  • マルチ画像投稿の表示
  • その他の形式の表示

あまり意識してませんでしたがAnyCPUでビルドしてパッケージを作ったので、x86/x64/ARMとマルチプラットフォームで動くようです。(ARMはないので未確認ですが)

続きを読む

ClaudiaIDE

ss

むしゃくしゃしてやった。反省はしていない。

※息抜きです

ユーザーのアプリケーションデータ内のVSの拡張機能フォルダ(AppData\Local\Microsoft\VisualStudio\11.0\Extensions\)にあるbackground.pngを差し替えればお好きな画像になります。

VSのオプションの拡張がよくわからなかったので放置。