GridViewを弄りたい

Visual Studio 2012 RCのGridAppテンプレートとか見るとわかりますが、GridViewって便利そうだけど均一的な見た目でなんかもっさりですね。

タイルの大きさ変えたり、見た目に変化を付けたいのは人の常ということで、以下のサイトを参考に弄りましょう。

まずは適当にGridViewを継承したクラスを作って PrepareContainerForItemOverride メソッドをオーバーライドします。

using App5.Data;
using Windows.UI;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;

namespace App5.Common
{
	public class CustomGridView : GridView
	{
		protected override void PrepareContainerForItemOverride(Windows.UI.Xaml.DependencyObject element, object item)
		{
			var obj = item as SampleDataItem;
			var gi = element as GridViewItem;
			if (obj.Title == "Item Title: 1")
			{
				gi.SetValue(VariableSizedWrapGrid.ColumnSpanProperty, 2);
				gi.SetValue(VariableSizedWrapGrid.RowSpanProperty, 2);
				gi.Background = new SolidColorBrush(Colors.Azure);
			}
			base.PrepareContainerForItemOverride(gi, item);
		}
	}
}

 

今回はGridAppテンプレートそのまま使ってるので、SampleDataItemのタイトルがItem Title: 1のアイテムだけ2×2なサイズで配置するようにします。適当なので適宜修正しましょう。

PrepareContainerForItemOverride には配置しようとしてるアイテムが引数として渡されて呼ばれるので、あまり深く考えずそのアイテムをどう表示したいかだけ処理します。

もちろんStyleとかも変えられるので、App.Current.Resourceとか参照して設定してもいいと思います。

最後に作ったカスタムコントロールを使用するようにXAMLを書き換えて終了。

 

簡単(だけど面倒)ですね。

Now Available: New Services and Enhancements to Windows Azure

公式より抜粋というか名状しがたき(ry

いろいろ

  • VPN&Virtual Machines、Cache、Media ServicesはPreview Releaseです。利用規約はこちら

元ネタに記載のなかった事項として

    • MacからRDPでつながるようになった(らしい)
    • エンドポイントにInstanceInput(各インスタンスへダイレクトアクセス)が指定できるように

    • さらにEndpointのプロトコルにUDPが指定できるようになりました。

既存サービスの拡張:

  • SQL ReportingSLAもできて正式リリース。オンプレミスで使ってたようなレポートがクラウド上でブラウザやモバイル、PC問わずアクセスできます。詳細は→ here.
  • Caching—新しいキャッシュサービス。現時点ではPreview Releaseです。Worker Role上に専用のサービスとして構築するか、各インスタンス上にインメモリな分散キャッシュ機能を加えることができます(WebRoleなどのアプリケーションと共存)。詳細は→ here.
  • Storage—既存のジオレプリケーションに加え、データセンター内だけのレプリケーションも選択できるようになりました。他には異なるストレージアカウント間のBlobのコピーや、Table/Queueに共有アクセス署名(SAS)が使えるようになったり。詳細は→ here.
  • Compliance— Windows AzureのコアサービスについてSSAE 16 (SOC 1 Type 2) の監査レポートが有効になりました。→ Windows Azure Trust Center.

新しいサービス:

  • Windows Azure Virtual Machines— 以前のVM Role。今時点でPreviewです。VHDのアップロード等、On-Premiseからクラウド上にサーバーやサービスを持って行けます。たとえば既存のSQL ServerやSharePointVirtual等をクラウドに移したり、Windows ServeやLinuxのイメージも展開できます。Windows Azure側でもイメージのテンプレートが用意されていて、ギャラリーから選択できます。 選択できるイメージテンプレートは以下の通り。
    • Windows Server
      • Windows Server 2008 R2
      • Windows Server 2008 R2 with SQL Server 2012 Eval
      • Windows Server 2012 RC
    • Linux:
      • OpenSUSE 12.1
      • CentOS 6.2
      • Ubuntu 12.04
      • SUSE Linux Enterprise Server 11 SP2

Virtual Machinesは新しい管理ポータル(Preview)やPowerShell、Windows Azure SDK(2012年6月版)を使ってアクセスできる他、MacやLinux向けのコマンドラインツールも提供されました。

  • Windows Azure Virtual Network— On-PremiseなPCとのVPN接続は以前からWindows Azure Connectがありましたが、1対1接続のみでした。Windows Azure Virtual NetworkではVPNゲートウェイを使用してLan to LanのVPNをサポートします(Preview機能)。例えば仮想マシンのIPアドレス範囲を定義したり、サービス用のDNSサーバーを指定したりできます。またIPSecを使用して企業ネットワークと安全にVPNゲートウェイ経由でVPNを張ることができます。例えば
    • パブリッククラウドの仮想の拡張ネットワークを構築することで、社内データセンターを仮想的に拡張
    • Windows Azureに既存の(レガシーなのも含めて)アプリケーションやサービスを移行するためのネットワークを提供
    • クラウドとオンプレミスのネットワークをまたがったハイブリッドなアプリの実行

など。

※現時点ではCisco ASAシリーズやISR/ASR、Juniper SSG/ISG、SRX/Jなどの機器向けのコンフィグをダウンロードして構成を助けることができます。

  • Windows Azure Web Sites—高い伸縮性を持ったウェブサイトやアプリケーションを数クリックで展開できます。 (Preview機能)
    • .NETを使用したモダンなアプリケーションやnode.js、PHPからSQL Database(今まででいうところのSQL Azure)やMySQL(ClearDBの提供サービス)を利用できます。
    • FTPやGit、Team Foundation Service(TFS)、WebDeployなどを使用してアプリケーションを構築・展開できます。またWebMatrixと統合して簡単に編集も可能。バージョン管理機能を利用して簡単に以前のバージョンを展開することもできます。
    • Joomla!やDotNetNuke、Umbraco、Wordpressのように人気のあるオープンソースのWebアプリケーションを簡単にデプロイできます。

 

ツールの改善と言語サポート:

  • Windows Azure Management Portal (Preview)– 新管理ポータル(Preview)はシナリオベースのリッチなインターフェース、リアルタイムなモニタリング用のチャート、診断データ、アプリケーションのヘルスに関する通知・アラートの管理、簡単なデプロイや設定変更、モニタリングとトラブルシュートができます。新管理ポータルではCloud Services、Virtual Machines、Web Sites、Virtual Network、SQL DatabaseとStorageをサポートします。
  • New tools, language support, and SDK—Windows Azure SDK2012年6月版にはJavaやPHP、.NET、Python用のツールが提供されています(Pythonは今回から追加)。またMac・Linux向け、Windows向け両方にコマンドラインツールが提供されています。
    • Windows Azure SDK for .NET
      • EmulatorにおけるIS Expressサポートの追加 
      • EmulatorにおけるLocalDBサポートの追加 
      • 専用Cachingサーバー(WorkerRole)の追加 
        • Visual StudioでDedicated Caching (Preview) rolesとして追加されています
      • Storage、Service Bus、共有キャッシュのクライアントライブラリの更新
      • Visual StudioでのService Busサポート
    • Windows Azure SDK for Java
      • Tableストレージ用ライブラリのラッパーを追加
    • Windows Azure SDK for Node.js
      • サービスランタイムのクライアントライブラリを追加
    • Windows Azure SDK for PHP
      • 以下のサービスのクライアントライブラリを追加 
        • Storage (Tables, Queues & Blobs)
        • Service Bus
        • Service Runtime
      • PowerShellコマンドレットによるパッケージングなどのツールが追加
    • Windows Azure SDK for Python
      • Windows/Linux/Max向けのPowerShellコマンドレットとクライアントライブラリが追加
      • (Python web framework でポピュラーな)Djangoのサポート
      • PTVSでWindows AzureとDjangoのサポート http://pytools.codeplex.com
      • Linux/WindowsのVirtual Machies向けに(Win/Mac/Linuxクライアントからの)IPythonサポート

価格改定:

  • Preview期間のVirtual Machinesの価格.  Previewの期間はWindows Server とLinuxは時間あたりXS:1.14円、S:7円、M:13.99円、L:27.98円、XL:55.95円 
  • Preview期間のSQL Server仮想マシンの価格.  プレビュー期間中、M 以上のサイズのインスタンスでは、Windows 仮想マシンと、イメージ ギャラリーからの SQL Server 2012 Evaluation のコピーを配置することもできます。SQL Server 2012 Enterprise の機能を使用するには、SQL Server 2012 Evaluation を L または XL の Windows Azure Virtual Machinesに配置する必要があります。SQL Server 2012 の評価版のコピーには費用はかかりませんが、上記のVirtual Machinesの料金が課金されます。
  • Graduated Pricing for Storage, CDN, and Network Egress.  Customers using these services will automatically see their costs go down as their usage volume increases There is no need to do anything special, if you are a Pay As You Go customer, you will receive this benefit automatically. 
  • Locally Redundant Storage.  地理的な冗長化(ジオレプリケーション)ではなく新しく追加されたデータセンター内のローカルなストレージの冗長化はジオレプリケーションに比べて33%ほどコストダウンすることができます。的な。
  • Price reduction for Storage and CDN transactions.  ストレージとCDNに対するトランザクションの課金が10,000トランザクションに対し$0.01ドルだったのが100,000トランザクションに対し$0.01ドルになりました。つまり90%コスト削減。

その他価格の詳細は here とか こちら

可用性の拡張

  • Availability in New Countries— Windows Azureは新しくロシア、韓国、台湾、トルコ、エジプト、南アフリカ、ウクライナを含む48か国の顧客に展開されます。ロールアウト後は89か国と19の現地通貨でWindows Azureが利用可能になります。(今月後半に完了予定?)

Windows 8 CPでタッチキーボードが消える

S7SでWindows 8 CPを快適に利用してるわけですが、たまにタッチキーボードが消えてどうしようもなくなる場合があります。

image ← これが消える

で下手するとOS再起動や強制電源OFF後の再起動でも直らなかったりします。

でまぁいろいろ見てると「Touch Keyboard and Handwriting Panel Service」なるサービスを再起動すればタッチキーボードがリセットされるみたいで、うまく表示されるようになりましたとさ。

image

まぁCPだからというのもあるけど、スレートでタッチキーボードがはんぐったり死ぬと何もできなくなる場合が多いので何とかしてほしいですねぇ。

RPには期待です!

Team Foundation Service Previewに接続してるソリューションが開かない

現在Preview公開中のTeam Foundation Serviceですが、このTFS Previewに接続してるVisual Studioのソリューションを開こうとするとソース管理のステータスを更新しています的なメッセージ(Updating source control status..)の状態で止まってうんともすんとも言わなくなるケースがあるみたいです。

どうもNuGetのバグっぽいようで、最新のNuGet 1.7にアップデートすることで解消するらしいとのこと。

実際アップデートしたらすんなりと開くように直りました。。。

もし嵌ってる人が居ればお試しあれ。

Azure Blob Storageのコンテナのパーミッションを変更する

小ネタです。Azure Storage Explorerだと出来なさそうだったのでPowerShellでサクッとAzure Blob Storageのコンテナのパーミッションを変更します。

  • Windows Azure PowerShell Cmdlets を利用するので、あらかじめインストールしておいてください。
  • 理屈的には大したことしてませんのでAzure SDKを使ったマネージコードでもできます。

Windows Azure PowerShell Cmdletsを起動して、Get-Containerコマンドでコンテナを取得します。

$container = Get-Container -StorageAccountName ***YourAzureStorageAccount*** -StorageAccountKey ***YourStorageKey***

 

取得できたらInstance(コンテナ)のGetPermission()メソッドを呼んで現在の権限を取得します。

$permission = $container[3].Instance.GetPermissions()

 

PublicAccessプロパティが現在の値です。(OffがPrivateコンテナ、ContanierがPublic Contanier、BlobがPublic Blobになります)

今現在はOffなのでPrivate(非公開)です。

image

image

このPublicAccessプロパティに”Container”等をセットし、Instanceプロパティ(コンテナ)のSetPermissions()メソッドを呼び出して設定を反映させます。

$permission.PublicAccess = "Container"
$container[3].Instance.SetPermissions($permission)

 

image

無事コンテナのアクセスレベルが変わりました。

image

Windows Phone SDK 7.1.1 Update

Windows Phone SDK 7.1.1がリリースされました。(以前はCTPだった)

大きな変更点としては256 MB版のWindows Phoneデバイスへの対応、Windows 8 CP上での動作OKの2点です。

個人的にはWin8CP上で動作するのが嬉しいですね。(もちろんまだサポート対象外ですけど)

続きを読む

Worker RoleのCLRバージョン

Worker Role上の.NET Frameworkの動作CLRバージョンに関した質問がMSDNフォーラムにあがってたので見てみました。

とりあえず適当にですね、Worker Roleを作ります。

		public override void Run()
		{
			while (true)
			{
				Thread.Sleep(10000);
				string clrVersionRuntime = System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion();
				System.Diagnostics.Trace.WriteLine("CLRVersion:\t" + clrVersionRuntime);
			}
		}

 

寂しいので適当にCLRバージョンを吐き出すようにしました。

さてこいつを既定のママ(.NET Framework 4設定)で動作させてみます。

エミュレータ上

Windows Azure上

v4.0.30319 ですね。

では.NET Framework 3.5にしてみましょう。

エミュレータ上

Windows Azure上

※DebugViewでなぜかキャプチャできなかったのでProcess Explorerで。(最初からこうすれば(ry

v2.0.50727 でした。

想定通りと言えば想定通りです。

あの日デプロイしたパッケージのReadyを僕たちはまだ知らない

Windows Azure でデプロイするとぐるぐる祭りになることは非常によくあることだと思います。

というわけで今日はぐるぐる祭りの嵌りどころなどを少し。

OnStartで起動時の処理に失敗したりしてFalseを返すと再試行されます。このときStartup Taskなども再度走りますので、リトライが考えられてないと変なことになってしまいます。
※StartupTaskで嵌った場合はそもそもOnStartまで来なかったりしますけど(Simpleの場合)
※1回しか走らない想定のアプリケーションのインストール処理とかが該当するかと

ちなみにローカルPCのCompute Emulatorでデバッグ実行などを行うとデバッガが終わって再試行されないので気付きにくいですね。但し、CSRunコマンドから実行した場合はちゃんとエミュレートしてくれます。

OnStartが繰り返し呼ばれてるのがわかるかと思います。

そんなわけでOnStartのエラー処理はちゃんと考えて適切にしましょう。ただ変なまま起動するのがいいのか、このケースみたいにずっとビジーがいいのかは要件次第ですね。(というあたりが難しいところ)

あと、Windows Azureの管理ポータルで表示されるインスタンスのメニューですが、「再起動」はOSの再起動じゃなくて配置をもう一度最初からする的な意味の再起動です。

つまりStartup Taskも走ればOnStartも走るということで。OS上の再起動とは異なるので注意。
※エラートラップちゃんとしてなくて安易にやられるとOnStartでFalseかえってぐるぐる祭り開催!になります。
対処方法としては「初期状態にリセット」でReImageするとかですね。。

という感じで今日は自分が嵌った点をお伝えしました。とほほ。

 

※ぐるぐる祭りとは

ビジーやAbortのままReady状態にならない時の管理ポータルの見た目(アイコン)の事

例:

こんな感じでぐるぐる繰り返します。。。切ない。

Azure のインスタンスの状態を弄ろう

今日も平和についったー。

たまたま目についたツイートがこちら

image

※もともとの発端は原発の話だったと思われます

このツイートだけ切り出すのもどうかと思ったのですが。。で、TLとしてはたとえば例外全キャッチせずに本当の想定外ならアプリしんじゃえーとかにするとかそういうこと考えないといけないよねという話に。

で一例としてたとえば安全側に倒すなら、サービスがちゃんと生きてる間にアプリをサービスから切り離すとか(例:ロードバランサのクラスタから切り離す、サービスのみオフラインにする等)すればいいんじゃないですかね、Azureなら簡単にロードバランサから切り離せますよという話になりました。というかそんなネタを振ってみました。

幸いAzureにはインスタンスの状態をBusyに設定してロードバランサから切り離してくれる機構があるので、今日はそのへんを見てみようと思います。

以上前ふり。

続きを読む