You are here

Feed aggregator

Lab 15: Debug Diagnostics

MSDN Blogs - Fri, 06/24/2016 - 00:11

Setup the CSharpGuitarBugs web site as described in Lab 1 and Lab 2.

Download and install most recent version of Debug Diagnostics,from here.  Also check


Debugging a process crash is a challenging activity. Although you know the exception type, the exceptions error message and you know the method that it is being thrown from, you still can’t find out why the exception is being thrown. It is especially complicated when the error is happening randomly and you cannot reproduce it.

Sometimes you can find the specific exception in the Event Logs when a stack is present, or you can use for example procdump to see what exceptions are happening, as explained here.

A method for getting to the exceptions root cause is to use Debug Diagnostic to create a dump when that exception happens within a specific process. I will show how to setup Debug Diagnostic to catch a Win32Exceptions from within a W3WP worker process.

Once the CSharpGuitarBugs web site is installed, click on the “View By Color” link and you will notice a Win32Exception is thrown.  Make sure that the web site has run and a W3WP worker process that I want to configure Debug Diagnostic to monitor is created. Figure 1 shows the Task Manager window containing the W3WP work process running the application pool where the Win32Exception just happened.  NOTE, as this is a 1st chance exception, I.e. it was handled in the code via a try{}…catch{} code block, the process does not terminate and restart.

Figure 1, Task Manager showing W3WP worker process running the Win32Exception application pool.

Next, open Debug Diagnostic and follow these steps:

1. Select Rule Type: Crash

2. Select Target Type: A specific IIS web application pool

3. Select Target: <TheApplicationPool>

4. Advanced Configuration -> Advanced Settings -> Exceptions…

a. First chance Exception Configuration -> Add Exception

b. Exception Name: CLR (.NET) 4.0 Exception

c. .NET Exception Type: System.ComponentModel.Win32Exception

d. Action Type: Full Userdump

5. Add Rule Name and Userdump location

6. Activate the rule

Step 1:

Select the Rule Type, as shown in Figure 2.

Figure 2, Debug Diagnostic – Select Role Type

Step 2:

Select “A specific IIS web application pool” as shown in Figure 3.

Figure 3, Debug Diagnostic – Select a Target Type of A specific IIS web application pool

Step 3:

Select the target application pool. In the example, I have created a website and application pool called Win32Exception. Figure 4 shows the selection.

Figure 4, Debug Diagnostic – Select Target

Step 4:

Configure the exception. Leave all the default setting on the Advanced Configuration window as that are. In the Advanced Settings group box select the Exceptions… button -> then the Add Exception… button. Select the CLR version you are using, The CSharpGuitarBugs web site uses .NET 4.5.2 and therefore select “CLR (.NET) 4.0 Exception”. If you are using .NET 2.0 then you should select the 1.0 – 3.5 Exception value.

Once selected a “.NET Exception Type” text box is displayed for you to place the name of the exception you with to monitor for. As you recall, I am trying to capture a Win32Exception that is occurring within my CSharpGuitarBugs application pool. Note that the value is case sensitive. To be sure I get it correct; I place my mouse over an exception in Visual Studio to get the exact description and case, as shown in Figure 5.

Figure 5, System.ComponentModel.Win32Excpetion description and case

You can also access the description on MSDN here, which will show you the correct name, syntax and description. Lastly, select “Full Userdump” from the Action Type dropdown and leave the Action Limit as 1. The final result is shown in Figure 6.

Figure 6, Debug Diagnostic – Configure the Exception

Lastly, name the rule, select where you want the memory dump to be stored and activate the rule.

Run the CSharpGuitarBugs web site and click on “View By Color”.  This will throw a Win32Exception, the Debug Diagnostic Tool resembles Figure 7.

Figure 7, Debug Diagnostic – Rules tab

Now you have a memory dump of the W3WP worker process for the CSharpGuitarBugs application pool. You can now use either the Advanced Analysis tab within the Debug Diagnostic tool or WinDbg to search and find the cause of the exception.

The result will show you the specific method which is throwing the exception. I would then proceed to look at the methods used within the failing method and find which one is capable of throwing the exception.

Try to configure an Access Denied rule, then click on the “Add items to your Shopping Cart” and try to add the item to your shopping cart.  The rule would look something like Figure 8.

Figure 8, Debug Diagnostic – Configure the Exception


Check the parameters of the method and make sure your logic prevents it from receiving values that cause the exception.

Guest Blog: Paul Woods – Adopt & Embrace. My Worldwide Partner Conference Journey – 15 Days to go!

MSDN Blogs - Thu, 06/23/2016 - 23:01

Have you ever thought about attending WPC? Have you asked yourself what it would be like? Or what value you could get from it? Have you ever wanted to book, but end up struggling to justify the trip?

If you answered yes to any of those questions… I am here to help!

My name is Paul Woods and I am the founder of Adopt & Embrace. We are a start-up focused on helping Microsoft Partners and the customers unlock real business value from their investment in Office 365. Despite having only been around for 8.5 months or so… but have made the (big) decision to invest 9 days to get out of Brisbane and over to Toronto in a couple of weeks to build the foundation for our growth into FY17. In the process… I am going to share our WPC first time attendee experience with you as well.

You will get to see the highs (parties), the lows (hopefully not 24hrs in the middle seat in economy) and the transformative moments and takeaways from engaging with key Microsoft stakeholders and Partners from Australia & beyond.

To make the documentation of our first time WPC attendee experience it as rich as possible, I’ll have my video camera with me too. I’ll take you inside the networking events, inside the keynotes and inside the trade hall so you can see firsthand the value of the event. I will reflect at the end of each day on the experience and talk about the key takeaways. Ultimately – try to tell the story of WPC as best as I can.

So enough about what we are going to do… Let me share with you some of our WPC16 preparation.

Before we go to the Worldwide Partner Conference

No matter who you talk to in the partner team at Microsoft… They all say the same thing: “you really need the plan to ensure you get the most out of WPC”. There is so much that you could do – sessions to attend, people to meet, events to participate in – and you only have a finite number of hours in the day. For example, I just logged into the WPC Connect tool and saw 514 different keynotes, breakouts and trade hall presentations we could attend. With over 15,000 attendees there is plenty (actually too much) opportunity to engage with Microsoft and the partner community.

So based off on that advice we put together a high level plan for what we are trying to get out of attending WPC in Toronto. There is one big assumption we have made with this plan though. Our ticket to the big show means that we can access all the content once we are back in Australia. Which means we can prioritise engagement over content. With that in mind our three goals are to:

  1. Connect with key stakeholders within Microsoft Australia. Specifically, those that are goaled/targeted on Office 365 active usage / adoption / consumption. We will ensure they are familiar with what personal and professional value Adopt & Embrace can deliver to them and the customers in their territory. We will do this during informal conversations using customer evidence from engagements over the past 6 months.
  2. Similarly connect with key Microsoft Partners within Australia. Specifically, those that are considering augmenting their traditional business with high value advisory services, managed services or IP focused on user adoption. We will ensure they are familiar with our channel friendly approach that enables them to resell Adopt & Embrace’s capability to unlock additional value for their customers. We will do this using customer evidence from through partner engagements over the past 6 months
  3. Finally connect with forward thinking international partners. Specifically, those that have dipped their toe in the water of delivering services around Office 365 adoption / change management / value realisation. Beyond sharing war stories, we want ensure they are familiar with our “Lean User Adoption” methodology and discuss the potential for them to leverage our ‘secret sauce’. We will do this using customer evidence from Lean User Adoption based engagements over the past 6 months

We will track our progress against those goals with a simple metric: number of meetings with tangible next steps. Ultimately if we can generate more support, more business, and open up new partnership opportunities that help us quadruple our revenue in FY17… then WPC will have been a success.

Beyond the keynotes there are a few sessions we might try to get along to that make sense for our business. Top of mind is the session by JB Wood from the TSIA “Customer outcomes: The return to profitable revenue growth”. Having read Consumption Economics and B4B I am keen to see JB present live.

Planning to get there – WPC on a shoestring budget

This is where our first attendee experience might be a little different to that of the regular attendees. I know there are plenty of Australians who are making the trip to Toronto in Business Class and staying in the good rooms at the official Australian hotel, and racking up the expense bill along the way. But it doesn’t have to be that way (yet!). At Adopt & Embrace, we are still bootstrapping our business, which means cash is oxygen. Any way that we can save a few hundred or a few thousand dollars here or there whilst getting the value we hope to unlock out of WPC makes a big difference.

What we discovered through this process is that getting to WPC doesn’t need to be an expensive exercise. A few things we did to keep the cost down:

  1. Looked for the best airfare possible a few months out. There are plenty of services out there that help you find out when there are amazing deals to North America. And we managed to jag a great one. Air Canada recently launched their 787 service from Brisbane to Vancouver – and with WPC in Toronto this year it made sense to at least check out their offering. We stumbled across a deal via New York which saved us at least $1000 per economy seat compared to what we would have paid on Virgin Australia or Qantas. The first big win of WPC – a mandatory 36 hour stopover in New York J
  2. Compared the official Australian Hotel to AirBnB. One of the tips we heard from the Partner team was that the official conference accommodation gets booked very quickly – as you would expect with 15,000 attendees from around the world, all vying for the most convenient hotel to the conference. Prices were what you would expect for a hotel when a conference is in town… about 250-300 AUD per night. Unfortunately, expensive enough to stretch the budget. Then we had a look at AirBnB. There were some great one and two bedroom apartments available, at an affordable price, in some very convenient locations. In the end I am sharing a two-bedroom apartment with another first time attendee – Stuart More from Microsoft Australia’s emerging partner of the year 2015 – Insync Technology. Doing so has cut the accommodation bill in half. The best part… the apartment has better beds, enough room to spread out, and is in a much better location. Sorry Australian hotel attendees – we are half way in between the Toronto Convention Centre and the Air Canada centre – almost in the heart of the Worldwide Partner Conference with some spectacular views of Lake Ontario and the CN Tower. #NoShuttleBusRequired. WPC win number two.

To be honest there will probably be a few disadvantages of not being at the Australian Hotel… but it is only 6 or 7 blocks away… walkable if we need to be there.

So what are we waiting for!

With a plan of attack, and (budget) travel itinerary confirmed, Adopt & Embrace is ready for its first Microsoft Worldwide Partner Conference.   We are really looking forward to it from both a personal development and business development point of view. I can’t wait to share the experience with you over the next few weeks. Make sure you keep an eye on the Microsoft Australia Partner Blog, the Microsoft Australia Partner Yammer network, follow me on twitter (@paulwoods) or LinkedIn, or like Adopt & Embrace facebook page to keep up to date with our first time WPC experience.



Paul W

続・拝啓『変わらない開発現場』を嘆く皆様へ ~ ウォータフォール & アジャイル編~

MSDN Blogs - Thu, 06/23/2016 - 21:50

ご存知の方も多いと思いますが、ここ最近、うちの会社の歌って踊れる DevOps エバの牛尾さんが、こんなエントリを書かれていました。

特に前者は炎上気味でしたが;、二回分のエントリを通して読めば、牛尾さんが言いたいことは極めてシンプルで、『変わらないのは回りのせいじゃなくて、あなた自身が変わらないせいだよね』(他責じゃなくて自責で考えよう)ということはわかるはず。伝え方の部分に関しては少し(いやかなり;)乱暴だとは思いますが、メッセージ自体は実におっしゃる通りで、耳が痛いという人もきっと多いと思います(私もそうです;)。そんな自由人な牛尾さんを見てすごいなぁとは思うものの、その一方で、はてブの反応を見ていると、そんなこと言ってもじゃあどうすればいいのよ? と思っている人も多いんじゃないかと思います。

もちろん本質的な意味で、人を成長させることができるのは、その人本人だけです。その人が自分の頭で考えて、自分の体で頑張るしかない。けれども、変われないと揶揄されている人たちだって、変わりたいと思っているけれどもきっかけやヒントが掴めなかったりして苦しんでいる人が圧倒的多数で、その苦しみの表れが、「現状や周囲に対する不満や文句」じゃないかと思うのです。だから、ちょっとしたヒントやきっかけ、ちょっとした環境変化、あるいは何かしらの実践可能かつ具体的なアイディアがあれば、それらを元に変われる人って実は多いんじゃないかな? とも思います。もともとこの話は先日の de:code 2016 のセッションで時間の関係上語れなかった後半のネタであること、また言いっぱなしで済まされない開発現場で生きてきたコンサルタントの自分としては、なるべくロジカルかつ具体的かつ実践可能なヒントやアイディアを提供したいと思ってこのエントリを書くことにしました。長文ですが、お付き合いいただければ幸いです。

なお念のため先にお断りしておきますが、私は本業のプロマネではなく、またこの手の話に唯一無二の正解は絶対に存在しません。数千万円の開発規模での常識が数十億円~数百億円の現場で通じるとは思いませんし、マイクロソフトのようなパッケージ製品開発の会社の常識や手法が、カスタム SI 開発の世界にもそのまま当てはまるとも思いませんし、契約形態にしろシステム特性にしろ成熟度にしろ、現場ごとに常識も違えばソリューションも違います。主にはエンプラ系 SI 開発現場を想定してこのエントリを書いていますが、個々の皆様の開発現場とはそぐわないところが多いと思います。そこは差し引いて読んでください。


■ V 字型モデル、ウォータフォール型開発、スパイラル開発、アジャイル型開発

話を始める前に、まずこれらの基本的な違いをシンプルに説明してみたいと思います。(※ 以下はわかりやすくするために超乱暴な議論をしています。そこは承知しているので、わかっている方は申し訳ないですが差し引いて読んでください。また、学術的な定義はズレてるかもしれませんが、このエントリではここに書く内容を定義として使わせてください。)

世の中には様々な開発方法論がありますが、どのような開発方法論であっても、その根底にあるものは V 字型モデル、すなわち段階的詳細化と段階的テストです。要するに、与えられた要件を段階的に詳細化してプログラミングし、出来上がったモジュールを、段階的にくっつけながらテストする、というモデルです。

この V 字型モデルの考え方、すなわちモノ作りは「設計」→「実装」→「テスト」によって行われる、という考え方は、ウォータフォールだろうとアジャイルだろうと基本的に変わりません。たまに勘違いしている人がいますが、アジャイルだって設計もするしテストもするし、必要に応じてドキュメントだって書きます。むしろこれらをないがしろにすれば、アジャイルでも品質があっという間に破綻します。(もちろん無駄なドキュメントは書かないようにしますが)

では、ウォータフォール開発、スパイラル開発、アジャイル開発の違いは何かというと、複数の機能群を作らなければならないときに、これらをどのように並行開発するのか、という点に違いがあります。例えば、A~D の 4 つの機能を開発しなければならないときを考えてみます。

  • ウォータフォール型
    • 4 つの機能を、いっせいに同期を取りながら、設計→実装→テストします。各作業が同期を取って進むために、プロジェクトの管理がしやすい(というかラク)というのが特徴です。
    • その一方で、「動くもの」が出来上がるタイミングがかなり遅くなります。このため、仕様ミスなどの発覚が遅れ、修正コストが高くつきやすくなります。また後から仕様変更が発生した場合も、仕様変更を取り込みにくいという難点があります。
  • スパイラル型
    • ……であるのなら、まず特に重要な機能(この図だと A, B)に絞って先に設計→実装→テストしてしまい、その後に残りを開発する、というモデルにすればよいはずです。これがスパイラル型開発です。開発リソースを A, B に集中できる分、「動くもの」が出来上がるタイミングはウォータフォールよりは早くなります。
    • しかしここで問題になるのは、『いくつのスパイラルに分割するのか?』です。「早くにとりあえず動くものができる」「仕様変更の取り込みタイミングが増える」というメリットを追求するのであれば、2 スパイラルよりも 3 スパイラルの方がよく、また 3 スパイラルよりも 4 スパイラルの方がよい、ということになっていきます。
  • アジャイル型
    • これを究極的に推し進めると、『重要な機能から、五月雨式に機能を作っていく』『必要に応じて随時、仕様変更を取り込んでいく』となるはずです。これがアジャイル型です。


  • ウォータフォールだろうがアジャイルだろうが、ある特定のひとつの機能だけ取ると V 字型モデル。よって、段階的詳細化と段階的テストをちゃんと実践できない人は、そもそもアジャイル云々以前の問題。V 字型モデルをちゃんと実践できない人がアジャイルに取り組もうものなら悲惨なことになります;
  • ウォータフォールからアジャイルに向かっていく際のメリットは、動くモノが早く出てくることと仕様変更の取り込みタイミングが増えていくこと。逆にデメリットは、プロジェクト管理が複雑化すること。例えば進捗管理で言えば、五月雨式に進んでるけどいつ終わるの? という質問にパッと答えにくくなりますし、変更管理で言えば、いつどこでも発生してくる可能性のある変更をどうやって管理するんだ? という話になります。これらをうまく管理しようと思うと、数値ベースのプロジェクト管理技術が必要で、昔ながらの KKD (勘と経験と度胸)に頼った Excel ベースのゆるふわプロジェクト管理では、全く歯が立ちません

様々な開発現場を見てきた経験から言うと、特に大規模開発では純粋ウォータフォール(=一発勝負での開発)でやっていることなんて皆無で、少なくともスパイラルに開発してたりプロトタイピングによってリスクヘッジしてたり、何らかの工夫をしているのが普通です。要件定義フェーズのみアジャイルで、以降の開発ではウォータフォール的に進める、なんていうこともよくあります。重要なのは、方法論の特性の違いを正しく理解し、対象システムや開発現場の特性、契約形態などに合わせて最適な方法論を使うことです。(少なくとも現時点ではそうしないと、実際のプロジェクトはうまくいかないです。十把一絡げに Scrum でいいじゃん! というわけにはいかないのが今の日本の実情です。それが必ずしも望ましいことだとは言いませんけれども。)

また、私の経験からすると、実際の現場はたいてい WF vs agile のレベル以前のところに大量の問題があります。すなわち段階的詳細化と段階的テストが正しくできておらず、V 字型モデルの作業でムリ・ムダ・ムラがめちゃめちゃあります。これは先日の de:code で話した通りで、このため、現在のウォータフォール/スパイラル開発のままでもまだまだ相当の改善の余地があります。というわけで、まずはアジャイル云々以前の話として、現状の開発作業のムリ・ムダ・ムラを取り除き、ちゃんと効率的な V 字モデルを実践できるようになってほしい、と思います。



■ 日本でなぜアジャイルが進まない?

よく言われることですが、日本でアジャイルが進まない原因のひとつに、SI の多重請負構造があります。まあ要するに、いつ終わるかわからない仕事を、完成責任を負わせられない形で任せるなんてできないよ! という話で、まったくもってごもっとも。そしてこの話になると、だから請負じゃなくて委任にすべきなんだ! 日本の悪しき伝統文化を終わらせるべき!的な議論とかが出てきて、信者同士の不毛な話になります。私は正直、そんな不毛な言い争いには全く興味がない(というかそんな宗教論争みたいな話をしているからアジャイル技術の活用が進まないんだと思う)ので;、もうちょっと別の角度から話を整理してみたいと思います。

現場目線で言うと、アジャイルに関してはまず 2 つのレベル(粒度)に分けて考えた方がよい、と思います。

  • ①日常的なタスクといった細かい粒度でのプロジェクト管理手法としてのアジャイル
  • ➁サブシステム開発といった比較的大きな粒度でのプロジェクト管理手法としてのアジャイル


  • 例えばマイクロソフトのような内製中心の会社の場合、アジャイル技術や DevOps 技術を多用して、随時仕様変更を取り込むとともに、生産性を高めていくことは非常に有効ですし、やりやすいです。なぜなら、たとえ仕様変更が後から多発してお金が追加でかかってしまった場合でも、請負契約があるわけではないので、自社の中の問題として対処していくことができるためです。
  • 一方で、カスタム SI の請負契約の場合、ウォータフォールだろうとアジャイルだろうと、後から発生した仕様変更を正しく変更管理し、必要に応じて追加請求を行うことができないと、請負契約はあっさり破綻します。しかし、発注側が「アジャイル」という手法に最も期待するのは、「仕様変更をバンバン取り込んで、自分の望むものを完璧に作り上げてくれること」です。このため、ベースライン(どこからを変更とみなすのか? の基準となるもの)をきっちり合意し、そして発注側から要求される仕様変更をきっちり管理し、必要に応じて請負側からお金を追加請求できる状態になっていないと、うまくいくはずがありません。このことは、正直、仕様をかっちり決めてそれに基づいて進めるという合意があるはずのウォータフォールですら難しい(追加費用なしで後から仕様変更を無理矢理ねじ込まれる)のが実態なので、アジャイルであればなおさら難しいことになります。


  • エンド企業が SIer に対して請負契約で発注。
  • SIer が協力会社から開発者を準委任で集めてシステム開発を担当。(※ 実際には多重請負構造になっていることがほとんどですが、話を単純化するためにこの設定にします。話の本質がわかれば、ここがカスケードの請負契約になっている場合の解も論理的に検討できると思います)

この場合、最も簡単なのは、SIer + 協力会社の中に閉じてアジャイルプラクティスを回す方法です。

■ 請負契約の内部でのアジャイルプラクティスの活用

SIer + 協力会社の内部で作業効率を高めたい場合には、まず以下の 2 つの Agile プラクティスの活用がオススメです。前者の方が応用範囲が広いので、ここでは前者のみ解説します。

  • 日常的な担当者レベルの作業管理に Scrum のスプリントプラクティスを活用する
  • 実装作業において、CI/CD プラクティスを活用する

[Scrum のスプリントプラクティス]

Scrum って世の中でいろいろ説明されてるのですが、一般的な説明は正直わかりにくいと思うので、私なりの現場目線で Scrum のスプリントプラクティスを語ってみたいと思います。(専門家の方の中には「ちげーよ;」という方もいらっしゃるかもしれませんが、片目を瞑るぐらいで読んでいただけると助かります;)

  • まず、システム開発の作業を 1~3 週間程度の固定の長さ(スプリントと呼ばれる)ごとに区切る。(※ スプリント期間の取り方はフェーズや状況によりまちまちですが、基本的には比較的短めに切る。)
  • 各スプリントの初日のタイミングで半日程度をかけて、各作業者にそのスプリントに実施する作業タスクと、その作業時間の見積もりを作ってもらう。この際、各タスクは、1 タスクあたり最大でも 10h ぐらいになるまで細かく分解する。(スプリント計画ミーティングと呼ばれる)
  • 作業担当者には、毎日 1 回、帰り際に、「今日終わったタスクはどれか?」「明日やるタスクはどれか?」「終わらなかったタスクについては、あと何時間で終わらせられるか?」を報告してもらう。


実際にやってみると、スプリントバーンダウンチャートはそんなに綺麗な図にはなりません。例えばこんな感じ。タスク見逃しで、なぜか途中で総作業残時間が増えたりすることもよくあります。また下図では示していませんが、各スプリントの最後で残作業時間がゼロにならない(=計画した作業が終わらない)なんてこともよく起こります。(※ この場合でも、スプリント期間を延長することはしません。終わらなかったタスクは次のスプリントに繰り越します。)

このスプリントの仕組みの最大のメリットは何か? いろいろ言われていますが、私が思う最大のメリットは、現場担当者のボトムアップの作業見積もりスキルを向上させることができるという点です。現場目線で言うと、このメリットの大きさは計り知れないモノがあります。少し補足すると、以下の通りです。

  • WBS に基づく見積もりを行う場合、一般的に見積もり手法には、トップダウンアプローチとボトムアップアプローチがある。このうち、一般的にはボトムアップアプローチの方が見積もり精度が高いと言われるが、実際にはうまくいかないことが多い。これは、現場担当者が普段から見積もり作業に慣れているわけではないために、やたらとバッファーを積んだり、逆にできもしない作業を少ない作業時間見積もりでできると言ってしまったりするため。結果的に、各作業者から提示された見積もり作業時間を、PjM が KKD で増やしたり減らしたりして使っているのが実態だったりします。
  • これに対して Scrum では、スプリント終了時に各作業者に振り返りをしてもらい、次のスプリントでの見積もりに生かしてもらう、ということをします。往々にして現場担当者は見積もりを大きく外すのが常ですが、同じタイムボックス(※ スプリントの長さは必ず一定)を何度も繰り返していれば、それなりに見積もりスキルが上がってくるはずです。
  • 現場担当者の見積もりスキルが上がってくれば、チームが 1 つのスプリントでこなせる作業量が正確に見積もれるようになってきます。それがわかると、スプリントを繰り返していったときに当該システムの開発が本当に期間内に終了するのかどうか、というのが見えてくることになります。(これをリリースバーンダウンチャートと呼びます。)

これが Scrum のスプリントの基本的な仕組みなのですが、このミクロスコピックな作業管理のやり方は、ウォータフォールなどの大きなレベルでのシステム開発の進め方と全く矛盾しません。ですから、例えばシステム開発全体のプロジェクト管理としてはウォータフォール的にやるけど、ミクロスコピックな日常的な作業管理としては Scrum でやる(それによって設計フェーズの作業がちゃんと期間内で終わるかどうかの予測が立てやすくなる)、なんていう組み合わせ方は、割と取り組みやすいアジャイルプラクティスの導入方法です。


[スプリントプラクティス導入時の 2 つのポイント]

ただしこのスプリントプラクティスを導入する際には、いくつか注意点があります。中でも大きいのは以下の 2 つです。

  • タスクボードなどを導入し、作業者と PjM にほとんど負担をかけずにバーンダウンチャートを作る必要がある。
  • PjM/PL は、メンバーのやる気やモラルを最大限に引き出すことに注力する必要がある。

まずはタスクボードから。タスクボードとは、作業内容と残作業時間を書き出した付箋紙をホワイトボードに貼り付けたようなもので、3 つのレーン(未着手、作業中、作業終了)間で付箋紙を移動していくというものです。各作業担当者は、毎日、帰りがけにこの画面を開き、付箋紙をレーン間で移動させ、終わっていないタスクについては残作業時間をアップデートします。そうすると、システムがこれを自動集計してバーンダウンチャートを作ってくれます。超便利 & 超らくちんです。

タスクボードは、マイクロソフト製品だと Team Foundation Server 上に実装されており、オンライン版(Visual Studio Team Service)であれば 5 ユーザまで無償で使えます。めちゃめちゃ素晴らしいツールなのですが、より詳細な使い方についてはここでは説明しませんので、DevOps エバの牛尾さんに聞いてみてください。(ぉ

ちなみにこのタスクボードの仕組みから理解していただけると思いますが、Scrum のすごいところは、プロジェクト管理の仕組みの本質を捉えることで、非常にシンプルな「残作業時間の足し算」という仕組みだけで、手間をほとんどかけずに、プロジェクトの状況のリアルタイム把握を可能にした点です。もちろん、大規模システムへの適用などに関してはそんなに単純ではないのでいろいろ工夫が必要なのですが、KKD、あるいはやたらと複雑な仕組みを使いたがるプロジェクト管理というものを究極的に単純化し、数値ベースでの管理を実現した、という功績は非常に大きいです。初めてこの仕組みを知ったときには舌を巻きました。これ考えた人、マジで神だと思いますよ、ええ。

もう一つ、この仕組みが機能するための絶対必要条件は、各作業担当者から申告される残作業時間に、嘘偽りがないことです。当たり前ですが、実際には 3 時間で終わる作業を 10 時間と報告された瞬間に、このプロジェクト管理の仕組みは破綻します。しかし、もし各人が誠実に自分と向き合い、正しく作業時間を報告したとするのなら、自分のパフォーマンスを正確に知ることができますし、また自分のパフォーマンスが伸びたことも明確に数値に現れます。かつて 10 時間かかった作業が、スキルアップで 5 時間で終わるようになったら、エンジニアとしてはうれしいに決まってますよね^^。


一般に、多重請負構造を基本としている日本の開発現場には、職種による階級制度が引かれていることがほとんどです。プロマネが一番偉くて、次に SE、そしてデベロッパー、テスターは最下層、なんていうことが一般的でしょう。しかしこうしたピラミッド型の組織構造、すなわちロール間に職能的上下関係が存在すると、モラルハザードが起こりやすくなり、上の人間は権力を振りかざし、下の人間は事実を隠ぺいするようになるのが普通です。これでは Scrum のプロジェクトマネジメントの仕組みがうまく機能するはずがありません。

こうした問題を踏まえ、Scrum(というかアジャイル)を実践する組織では、フラットな組織構造(チームモデル)とするのが基本です。職種の違いは役割の違いであるとして互いが互いを尊重し合い、悪いことも包み隠さず正直に言える環境がないと、現場から正しい数字は出てきません。このため PjM の人は、指示命令を与えることが仕事ではなく、むしろ現場の他のメンバーの人たちにいかに気持ちよく働いてもらい、いかにメンバーのやる気やモラルを最大限に引き出すかに注力することになります。




ただ、最も重要なことは、仮にトップダウン型組織構造に近いモデルであったとしても、現場の他のメンバーの人たちにいかに気持ちよく働いてもらい、いかにメンバーのやる気やモラルを最大限に引き出すかが PjM の重要な役割になる、というポイントはきちんと押さえておく必要があります。


こうして考えると、現代のプロマネには、昔からあるような PMBOK 的なスキルセットはもちろんですが、それに加えて、計数ベースのプロジェクト管理技術や、モダンなサーバントリーダシップ的な考え方と対人スキルが求められると言えます。請負契約の契約境界の内側の方がアジャイルプラクティスは実践しやすいと思いますが、その際であっても、プロマネ技術の近代化が必要になってくると思います。

■ 請負契約をまたがる場合の考え方


ではどうすればよいのか? 上で述べた、請負契約とアジャイルが相反する理由を元に考えると、基本的な選択肢は以下のようなものになります。どれがよいのかはケースバイケースですが、いずれの方式も、エンプラ系企業では導入ハードルがかなり高いです。

  • エンド企業が、自ら内製に取り組む
    • 社内に開発リソースを持つか、あるいは請負契約ではなく準委任のような発注形態を取るようにして、自分たちで自ら開発の手綱を握る、という方法。
    • よく言われる方法である半面、現実的にはエンプラ系だとそのままでは取り組みが難しい方法。
      • 例えばオンラインゲームのように、自らがサービス提供者であり、かつ高速な開発とインクリメンタルなサービス増強を続けなければ生き残れない場合には、必然的に内製化や DevOps が進むが…
      • 多くのエンプラ系企業では、そもそもシステム開発そのものは戦略事業ではなく、システムを作ること自体は SIer または SI 子会社にアウトソースしたいというのが普通であるため。
    • やるとしても、コンシューマ系のサービスや小規模システムなど、取り組みやすいものから始めるのが現実的。
  • SI 企業側が請負型カスタム SI をやめ、SaaS 型でのサービス提供を行う
    • 請負型カスタム SI は、お客様の要求に振り回されることが多い。このため逆転の発想で、SaaS 型サービスにすることによって、開発のコントロールを自社側に持ってきてしまう、という方法。
    • カスタマイズ型パッケージ SI 製品の場合には実際に採用可能な戦略で、過去いくつかのお客様でこの手の戦略を聞いたことがあります。
  • エンド企業と SIer との間で、変更管理をきちんとやる
    • アジャイル型でシステムを段階的に構築していく場合であっても、そこに対する仕様変更についてはきっちりとお金をいただく、ということを最初にきちんとネゴる方式。
    • 理屈上は契約書で縛れるはずだが、現実的にはエンド企業と SI 企業との間の力関係によっては全く機能しないモデル。
    • さらに、実際にこれが成立するためには、エンド企業と SI 企業とが対等な関係であることはもちろんだが、それに加えて小規模ロットの見積もりがきちんと素早く精緻に行えること、そしてその見積もりに対して速やかに逐次で契約処理できるようになっていることが必要。これもまた実際にはハードルが高いです。

もしこの記事を読んでいる皆様が意思決定者またはそれに近いところにいる方であるのなら、上記のようなことを考えて部分的にでも実践するのは非常によいことだと思います。一方、皆様が現場担当者だとすると、これらを解決するのはかなりハードルが高いです……というよりほとんど無理;。うっかりすると、転職するのが最適解かもしれません。(※ 別に転職を薦めているわけではないです、念のため;。)


  • 仕様変更を高速に取り込んですぐにリリースできるようにする。(オンラインゲームみたいなケース)
    • この場合は、そもそも開発リソースを社内に抱えて、内製化を強力に推進すべきです。
    • ……というよりこのケースは、すでに内製化を進めて DevOps とかやってるケースがほとんどでしょう。
  • よりよいサービスやよりよい業務アプリを、より安価に作りたい。
    • 業務アプリの品質の良し悪しは、業務設計の良し悪しによって大きく左右される。なので、要件定義フェーズ+プロトタイプ開発のみ切り出して、準委任+アジャイルでやればよい。要件が早期の段階できっちり煮詰まれば、後ろのフェーズの手戻りも必然的に減るので、構築をウォータフォールでやっても開発リスクなどは下がる。
    • 「安価に作る」ことに関しては、開発プロセスの無駄を取り除くことでもまだまだ実現できる余地がある。典型的には、発注側が要求している無駄なドキュメント納品物を割愛するなど。(ただし発注側と請負側の両者が Win-Win にならないとうまくいかないので、実際には何らか一工夫が必要)

他にもいろいろあると思いますが、ただ、アジャイルを導入したいという前に、そもそも何を目指したいのか? をはっきりさせましょう。日本はソフトウェア開発の後進国で、欧米からは 5~8 年ぐらい遅れているわけですが、もしそうだとするのなら、型落ちの改善手法でも十二分に改善できる可能性はあるのです。欧米の最新手法がそのまま導入できればそれに越したことはないかもしれませんが、Fit & Gap が大きすぎるから今のままでもいいや、となることの方がよほど大きな問題です。少しずつでもよいから改善していくこと、これを常に念頭に置いていただければと思います。いやー、実際の開発現場なんて、そんなすぐに改善できませんって、ホントに;。

■ でもって、どこから始めるの?

というわけでいろいろ書いてきましたが、上の方に書いた、「システム開発を請け負う側の内部に閉じてアジャイルプラクティスを使う」ことや、「ウォータフォール型による全体管理と、ミクロスコピックな Scrum スプリントプラクティスを組み合わせる」ことは、エンプラ系開発現場でも割と取り組みやすい手法だと思います。使えそうであれば、ぜひ使ってみてください。


■ 『変わらない開発現場』を嘆く皆様へ






たとえそこに受発注、あるいは職種という上下関係が存在していたとしても、同じゴールを目指す仲間として、互いを尊重し、高め合うような人間関係に育まれた開発現場がもっと増えてほしいと切に願いますし、そのためのアイディアや情報が世の中にもっと増えてほしい、と思います。(情報発信が本業ではないので、なかなか blog が書けないのは恐縮なのですが;。ごめんなさい;。)

そういう意味で最初の話に戻りますが、変わりたいと思っている、けれどもどうすればいいのよ? と悩んで具体的な手法やヒントを欲している人や開発現場はきっと多いはず。そして多くのエンプラ系開発現場(そして人生)は、大量のしがらみと、ほんの少しの、物事を変える勇気からできている、と私は思います。このエントリであれこれ書いた話が、『変わらない開発現場』を嘆く皆様が物事をどう変えていくのかを考える際のヒントになれば、そして実際に一歩目を踏み出す手助けに(少しでも)なれば幸いです。


More Podcasting – this time for Office Developers

MSDN Blogs - Thu, 06/23/2016 - 21:17

I recently joined Richard diZerega as the co-host of the Office Developer Podcast. It’s been an interesting time getting things set up. For a start, Richard’s based in Texas, I’m in Sydney and our guest (if we have one) is somewhere else. Finding a mutually convenient time is an issue.

Next, recording remotely is a hassle too. Audio quality is a big issue if you’re trying to do things over Skype or some other VOIP connection, and connecting a real telephone to the computer to record is also non-trivial. We use Zencastr, a web-based service that allows any number of people to connect to the service and sets up a VOIP link for all of you. You then just chat away. The cool bit is that the audio is recorded locally (so no VOIP artefacts) and each participant’s file (as MP3 and, optionally, WAV) is uploaded to the organiser’s Dropbox after the recording. There’s also an option to do some standard post-production work on the files automatically. Very Cool.

I’ve done 3 episodes so far – have a listen and let me know what you think.

Opportunity scoring Machine Learning Models and installer

MSDN Blogs - Thu, 06/23/2016 - 20:52

Our team has released a “Opportunity Scoring solution”.

Solution help in improving sales team productivity and win more deals.
It uses historical sales data to predict which opportunities has high probability of winning.
It suggest what action should be taken to improve probability of winning.

How to to download opportunity scoring

Download is available at Download ML Models and opportunity scoring solution

Steps to install

Download zip file
Extract content
Double click on exe – CRMInstaller.exe
It will start installation wizard. Provide CRM Credential and provide Azure credential.

Opportunity scoring installer will create complete architecture – machine learning model, retraining and scoring pipeline. Set up connectivity between CRM and Azure.


MSDN Blogs - Thu, 06/23/2016 - 20:00


è Dynamics CRM Online 2016 更新プログラム 1 および、Microsoft Dynamics CRM 2016 サービス パック 1 における



情報元: Deprecation announcements with Dynamics CRM Online 2016 Update 1 and Microsoft Dynamics CRM 2016 Service Pack 1


Dynamics CRM を使用いただいている皆様に最適な機能を提供し続けるため、古い機能をより良いものに置き換える必要があります。





MSDN は開発者向け、 TechNet は管理者および、IT プロフェッショナルを対象にしています。



Dynamics CRM 2011 エンドポイント

Dynamics CRM 2011 エンドポイントの利用は推奨されません。

アプリケーションから CRM に接続する際に、新しい Web API (4 つの OData エンドポイント) を利用することを強く推奨します。

なお、プラグインやワークフローは、既存の SDK アセンブリを続けて利用することができます。

今後のリリースにおいて Dynamics CRM 2011 エンドポイントを、新しい Web API に置き換えるため SDK アセンブリを修正します。

Microsoft Dynamics CRM 2011 endpoint


CRM SDK アセンブリの更新

SDK のアセンブリを更新しています。最近リリースしたアセンブリには、すでに CRM Online のセキュリティに関する変更が適用されています。

CRM Online に接続するアセンブリの古いバージョンを使用しているアプリケーションは、更新されたアセンブリを再リンクする必要があります。

Updates to the CRM SDK assemblies




これはすべてのフォームに対して CRM Online 2015 年更新 1 で導入された


この新しいレンダリングは、ページの基になるドキュメント オブジェクト モデル (DOM) が変更され、


また、サポートされている Xrm.Page クライアント オブジェクト モデルにおいても、





下位互換性の問題は、CRM 問題解決のヘルプを表示するテクニカル サポートにお問い合わせください。

Removal of legacy form rendering option



KbArticle, KbArticleComment, KbArticleTemplate エンティティの利用は推奨されません。

CRM 2016 および CRM Online 2016 で紹介した新しい KnowlegeArticle エンティティを使用する必要があります。

Some knowledge management entities

古い Android バージョンの非サポート

将来リリースされる Android 用 Microsoft Dynamics CRM アプリにおいて、

いくつかの古い Android オペレーティングシステムのバージョンがサポートされなくなります。

Removal of support for some Android versions


Microsoft Dynamics CRM リストコンポーネント

Dynamics CRM Online 2015 更新プログラム 1 のリリースによって、非推奨の通知を最初に発表しましたが、

SharePoint Server 用 Microsoft Dynamics CRM リスト コンポーネント を

現在使用している顧客にはサーバー ベースの Microsoft SharePoint 統合を使用することを推奨します。

Microsoft Dynamics CRM List Component is deprecated


– プレミアフィールドエンジニアリング 河野 高也


Azure DevTest Labs 向け VSTS 拡張機能の一般提供開始

MSDN Blogs - Thu, 06/23/2016 - 19:38

執筆者: Raman Kumar (Senior Program Manager, Azure DevTest Labs)

このポストは、6 月 21 日に投稿された General availability of Azure DevTest Labs – VSTS extension の翻訳です。


数週間前に Azure DevTest Labs の一般提供開始が発表されました。このときに Azure DevTest Labs 向け VSTS 拡張機能 (英語) のプレビュー版についても発表しましたが、今回はその一般提供版の提供が開始されました。


この拡張機能は 3 つのタスクで構成されており、VSTS のビルド/リリース パイプラインを DevTest Labs と簡単に統合でき、テスト環境の作成や、ゴールデン イメージの保存などをが行えます。

詳細は、一般提供開始についてお伝えしたこちらのブログ記事 (英語) をご覧ください。ここでは拡張機能を使用してアプリケーション用のゴールデン イメージ環境を展開する方法についても説明しています。

この拡張機能は、VSTS のビルド/リリース パイプラインを Azure DevTest Labs と簡単に統合できるようにするために開発した最初の機能です。もちろん、機能的にはまだまだ改善の余地があります。皆様もぜひお試しになり、改善すべき点を DevTest Labs のフィードバック フォーラム (英語) までお知らせいただけますと幸いです。

この拡張機能に関する問題点やご不明な点がありましたら、MSDN フォーラム (英語) をご利用ください。

IntelliJ 用 HDInsight Tools の一般提供を開始

MSDN Blogs - Thu, 06/23/2016 - 19:38

執筆者: Jenny Jiang (Principle Program Manager, Big Data Team)

このポストは、6 月 13 日に投稿された HDInsight tool for IntelliJ is generally available の翻訳です。


IntelliJ 用 HDInsight Tools の一般提供が開始されました。IntelliJ 用 HDInsight Tools はオープン ソース コミュニティによって提供され、HDInsight を使用する Spark 開発者向けのツールです。このツールは IntelliJ とシームレスに統合されており、Scala や Java による Spark アプリケーションの開発エクスペリエンスをネイティブにサポートします。

HDInsight で Spark アプリケーションの開発を行う場合、最初のアプリケーションを構築するまでの準備が困難なことがあります。また、IDE での Spark アプリケーションの開発サイクルは長く煩雑なものになりがちです。そのような場合にこのツールを使用すれば、わずか数分で HDInsight による Spark 開発を開始できます。経験豊かな Spark 開発者であれば、イテレーションをさらに短期間で容易に実行することができます。


IntelliJ 用 HDInsight Tools は IntelliJ を拡張するもので、Spark ジョブの作成、オーサリング、デバッグ、Azure HDInsight Spark クラスターヘの送信までのライフサイクルをサポートします。このツールは Azure と高度に統合されており、HDInsight Spark クラスター間の移動や関連付けられている Azure ストレージ アカウントを表示することができます。また、Spark ジョブの履歴、詳細なログ、出力も表示されるため、さらなる生産性向上も期待できます。さらに、プレビュー時のユーザー フィードバックに基づいて、アーティファクトの自動作成、SDK の検索、Spark ログのキャッシュなどの操作性に関する機能強化も行われました。

IntelliJ 用 HDInsight Tools では以下のことを実行できます。

  • 組み込み済みのテンプレート、サンプル コード、インテリジェンスを使用して Spark プロジェクトを作成し、アーティファクトの自動作成やアセンブリの検索を実行


  • IntelliJ (主に Scala と Java) のネイティブなオーサリング支援機能 (IntelliSense、オートフォーマット、エラー チェックなど) を活用して Spark アプリケーションを開発


  • Spark アプリケーションを HDInsight クラスターに送信


  • YARN および Spark との統合によりジョブの履歴、ログ、結果を表示


  • 実行中の Spark アプリケーションの完了前にユーザーが停止


  • Spark アプリケーションのテストや検証をローカルで実施


  • ユーザーの Azure サブスクリプションに関連付けられている Spark クラスターをすべて表示


  • HDInsight Spark クラスターに関連付けられているストレージ リソースに移動


  • Spark ログのサイズが大きい場合にディスクにキャッシュ


  • リモート デバッグ


Spark アプリケーションの作成、オーサリング、送信、停止

IntelliJ 用 HDInsight Tools では、Spark アプリケーションの作成から送信までのライフサイクル管理をサポートします。IntelliJ との緊密な統合や Azure とのシームレスな統合により、クラスターで実行されている Spark アプリケーションのジョブの履歴、情報、統計を表示することができます。

Spark アプリケーションを新規作成

Spark クラスターを表示して関連付けられているストレージ アカウントに移動

Spark アプリケーションを送信

Spark アプリケーションを IntelliJ の UI から停止

Spark ジョブを HDInsight に送信した後、実行中の Spark アプリケーションの完了前にユーザーが IntelliJ から停止することができます。

ジョブの履歴、出力、ログを表示 インストール

最新のインストール ファイルを入手するには、IntelliJ リポジトリから「HDInsight」と検索します。また、IntelliJ プラグインが既にインストールされている場合は、最新の更新がリリースされるとユーザーに通知されます。






ご質問やご意見、不具合のご報告については、ページ下部のコメント欄に投稿していただくか、メール ( にてご連絡ください。


Notification Hubs によるテバイス トークンへの通知のバッチ送信

MSDN Blogs - Thu, 06/23/2016 - 19:36

執筆者: Mimi Xu (Program Manager, Azure Notification Hubs)

このポストは、6 月 13 日に投稿された Batch send notifications to device tokens using Notification Hubs の翻訳です。


Basic レベルと Standard レベルで Batch Direct Send 機能を使用できるようになりました。この機能は、以前に公開された Direct Send 機能のバッチ処理バージョンで、個別のデバイス トークンまたはチャネル URI に送信できます。この機能では Notification Hubs にデバイスを登録する必要がないため、必要に応じて Notification Hubs をスケーラブルなプッシュ エンジンとして使用することが可能で、カスタムのデバイス ストレージや移行といったシナリオが簡単になります。

この機能は REST (英語) によって使用できます。WNS の Batch Direct Send ペイロードのサンプルは以下のようになります。

// ペイロード内の空行は必須です const string payload = @" --simple-boundary Content-type: text/xml Content-Disposition: inline; name=notification <toast><visual><binding template=""ToastText01""><text id=""1"">Hello from Batch Direct Send!</text></binding></visual></toast> --simple-boundary Content-type: application/json Content-Disposition: inline; name=devices ['https://{foo}{bar}'] --simple-boundary--";

.NET の要求は以下のようになります。

var uri = new Uri("" + myHubName + "/messages/$batch?direct&api-version=2015-08"); var sendRequest = WebRequest.CreateHttp(uri); sendRequest.Method = "POST"; sendRequest.ContentType = @"multipart/mixed; boundary = ""simple-boundary"""; sendRequest.Headers["Authorization"] = GenerateSasToken(uri); sendRequest.Headers["ServiceBusNotification-Format"] = "windows"; sendRequest.Headers["X-WNS-Type"] = "wns/toast";

ぜひこの機能をお試しいただき、ご意見をお聞かせください。Notification Hubs をまだご利用でない方は、サービスの概要 (英語) およびこちらのドキュメント (英語) をご確認ください。


Global resources in Xamarin Forms! No App.xaml? Create one!

MSDN Blogs - Thu, 06/23/2016 - 18:03

Xaml developers moving to Xamarin Forms are hoping to take some of their good habits from the Windows (WPF/Silverlight/UWP) dev world with them. And probably a few of their bad ones as well but we don’t want to talk about those. But sometimes the constructs the devs hope to find in Xamarin Forms are not there waiting for them by default. Such is was the case with App.Xaml.

Declaring resources such as strings and styles (Resource Dictionaries) at an application level is a good thing.  App.xaml is a construct that enables us to declare global styles, strings, and resources in a declarative fashion, aka using XML and not C#. In fact, the only thing that can be put into the body of the App.xaml declaration is Application.Resources declarations ( see  ) for details on Application level resources.

App.xaml was not a default item in a Xamarin Forms PCL Template before version 4.1.  In lieu of App.xaml, Xamarin Forms would put an App.cs into the project for application level code and resource declarations. Even in Xamarin 4.1, the Blank Xamarin Forms ( Portable Class Library ) template still gives us an App.cs file, and not an App.Xaml file.  A blog post by Falafel gives us a great example of using code (C#) inside App.cs to create global level resources( ).
Read the post to get an idea of what I mean.  Definitely not XML declarations.

But… Xaml devs often want to define resources using declarative layouts (XML)  and not code ( C# ).

I’m going to show you how to add an App.xaml to an existing Xamarin Forms project using a Xaml based approach. If you want a non-declarative, code-driven approach, Falafel’s approach is great. Please stop reading this blog post immediately and surf to Falafel’s page.

NOTE: If you are using Xamarin Forms 4.1 or later, and creating a new project, you should start new Xamarin Forms projects with the Blank Xaml App ( Xamarin.Forms Portable ) instead of the Blank App ( Xamarin.Forms Portable ). I’ll detail the differences in a future post, but suffice it to say that the Blank Xaml App template in Xamarin 4.1 uses a full App.xaml as a default file in the template, versus pre 4.1 App.cs.

Follow the steps below to add App.xaml to an existing Xamarin Forms project.

  • Create a Blank App ( Xamarin.Forms Portable ) in Visual Studio and name it “HelloXamarinForms”
  • Rename App.cs to App.cs.saveme – this is a precautionary measure for us “just in case”
  • Add a new Xaml form to the page and name it “App.xaml”
  • Modify App.xaml.cs so that the class App inherits from Application
  • Add a call to InitializeComponent() to the constructor
  • Modify the App.MainPage initialization line to point to a new startup page we will created named UseGlobalResourceDictPage.xaml .
App.xaml.cs public partial class App : Application { public App() { InitializeComponent(); MainPage = new UseGlobalResourceDictPage(); } ... } ADD GLOBAL RESOURCES
  • Modify App.xaml to resemble the following. This is our application level resource dictionary.
App.xaml <Application xmlns="" xmlns:x="" x:Class="HelloXamarinForms.App"> <Application.Resources> <ResourceDictionary> <Color x:Key="PageBackgroundColor">Yellow</Color> <Color x:Key="HeadingTextColor">Black</Color> <Color x:Key="NormalTextColor">Blue</Color> <Style x:Key="LabelPageHeadingStyle" TargetType="Label"> <Setter Property="FontAttributes" Value="Bold" /> <Setter Property="HorizontalOptions" Value="Center" /> <Setter Property="TextColor" Value="{StaticResource HeadingTextColor}" /> </Style> </ResourceDictionary> </Application.Resources> </Application> USE GLOBAL RESOURCES
  • Add a new Xaml form called “UseGlobalResourceDictPage” to our project
  • Modify the Xaml of UseGlobalResourceDictPage to match the following. Note the use of StaticResources applying
    styles to our Buttons and Labels.
UseGlobalResourceDictPage.xaml <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="" xmlns:x="" x:Class="HelloXamarinForms.ResDictUseApplicationLevelPage"> <StackLayout> <StackLayout.Resources> <ResourceDictionary> <Style x:Key="LabelNormalStyle" TargetType="Label"> <Setter Property="TextColor" Value="{StaticResource NormalTextColor}" /> </Style> <Style x:Key="MediumBoldText" TargetType="Button"> <Setter Property="FontSize" Value="Medium" /> <Setter Property="FontAttributes" Value="Bold" /> </Style> </ResourceDictionary> </StackLayout.Resources> <Label Text="ResourceDictionary Demo" Style="{StaticResource LabelPageHeadingStyle}" /> <Label Text="This app demonstrates consuming resources that have been defined in resource dictionaries." Style="{StaticResource LabelNormalStyle}" /> <Button Text="Navigate" TextColor="{StaticResource NormalTextColor}" HorizontalOptions="Center" Style="{StaticResource MediumBoldText}" /> </StackLayout> </ContentPage> ENJOY

Give the page a run. We will see the styles and resources we have defined globally applied to
our Xaml form layout. Screenshots shown below for UWP and Android. Too lazy to get my Mac out of my backpack (yes, I’m on the road).

Have fun and enjoy. Feedback is welcome. This is blogged cause I couldn’t find a public blog on how to do this anywher. Feel free to post more links to aid in the App.xaml quest for Xamarin forms.


A Raspberry Pi2 VSTS Build Light – Part 1, unwrapping the package

MSDN Blogs - Thu, 06/23/2016 - 18:02

I just received an exciting package of goodies, which I will eventually turn into a Rangers build visualizer at the Microsoft Canada Excellence Centre.

THANK YOU to the folks at Codify, in Brisbane, Australia, for the kit and to Anthony Borton for dragging it across the vast ocean. If you cannot wait for me to catch-up, please review Anthony’s detailed blog posts to get you started:

My kit differs slightly from the Anthony’s blogs. It includes a Raspberry Pi 2 with USB WiFi dongle and a pigtail that ensures that I do not to have to cut the wires to the power brick. Love it!

Watch the space!

Issues with Alert notification in Visual Studio Team Services – 6/24 – Investigating

MSDN Blogs - Thu, 06/23/2016 - 17:21

Initial Update: Friday, 24 June 2016 00:11 UTC

We are actively investigating issues with Alert Notification in multiple regions. Customers will not be able to configure alert notifications in their Visual Studio Team Services account with grouped clauses. They will notice the grouped clause will be lost on saving the configuration and the email alert notification may not get fired as expected.

  • Next Update: Before 24 June 2016 12:00 UTC

We are working to resolve this issue and apologize for any inconvenience.


Increased Memory Size for In-Memory OLTP in SQL Server 2016

MSDN Blogs - Thu, 06/23/2016 - 16:02

We are happy to announce that SQL Server 2016 removes the size limitation on user data in memory-optimized tables. You can grow your memory-optimized tables as large as you like as long as you have enough available memory. This means that with Windows Server 2016 you can leverage all 12TB (Terabytes) of available memory in a given server with In-Memory OLTP.

When In-Memory OLTP was initially released in SQL Server 2014, there was one key size limitation: SQL Server supported up to 256GB of active user data in tables with durability SCHEMA_AND_DATA in a given database. This limit was due to limitations in the storage subsystem – there was a limit of 8192 checkpoint file pairs, with each containing up to 128MB of data. 256GB was never a hard limit, and it was theoretically possible to store more data in durable tables. However, the storage size is dynamic in nature (even if the data size is not), since it is an append-only system with merge operations, that can go up and down in size, as the source files for merges go through the garbage collection process. Based on both the expected behavior of the system in various scenario and our internal testing we settled on the supported limit of 256GB.

With SQL Server 2016 we revamped the In-Memory OLTP storage subsystem, and as part of that work we removed the limit on number of checkpoint files, thereby removing any hard limit from supported data size. When SQL Server 2016 was initially released we stated that we supported up to 2TB of data in memory-optimized tables. This was the limit up to which we had tested, and found that the system worked well.

We have continued testing with large data sizes, and we have found that with 4TB of data in durable memory-optimized tables SQL Server 2016 continues to perform well. The machine in question had 5TB of memory total – the 1TB of overhead was used for operational needs such as supporting the online workload as well as database recovery. We have not found any scaling bottleneck when going from 2TB to 4TB, either in the throughput of the online workload, or with operations such as database recovery. We have thus decided to remove any limitation from our statement of supported data size. We will support any data size that your hardware can handle.

Further reading:

Opportunity scoring – Machine Learning on Sales Pipeline

MSDN Blogs - Thu, 06/23/2016 - 14:39

Microsoft team has released a Opportunity Scoring solution.

Opportunity scoring uses a machine learning model trained on past sales data to predict the eventual probability that the sale will be won. Training and prediction are implemented with Azure Storage and Azure Machine Learning, orchestrated by Azure Scheduler, and executed within an Azure Web Job.

Where to download opportunity scoring

Download is available at
Click to download

What does download provide – opportunity scoring solution

1. The download provides an advanced solution reference architecture that a IT developer can customize to build customized end-to-end solutions.

2. The documentation has step-by-step instructions to guide you through the installation.

3. Once installed you will see three Machine learning models, plus web services, endpoints, and retraining and scoring web jobs in your Azure ML subscription.

4. You will also see customizations applied to your Dynamics CRM instance to allow users to refresh their scores, view explanations why the opportunity got its score and view the history of previous scorings of opportunities.



Open Source for Academics

MSDN Blogs - Thu, 06/23/2016 - 13:33

Open source software is a powerful way to advance software development and share data for experimentation. Microsoft offers open source code for academic projects as well as key software, such as the .NET Core. Our repositories contain over 50 projects and tools across all areas of computer science.
Read more on the Microsoft Research Open Source blog >

Open Source Projects


Programming models 

Artificial intelligence

Cloud computing







Document Handling

Hardware and Wireless

Interested in working with Microsoft Products or contributing to Microsoft Open source see

Check out Microsoft Imagine Github resources for UG Courses

FileNotFoundException (msshrtmi) starting debugging in Visual Studio LightSwitch

MSDN Blogs - Thu, 06/23/2016 - 11:00

I dabble in a variety of technologies and have found several great uses for Visual Studio LightSwitch.  Recently I was building a quick website site (HTMLClient) for admins to maintain some data in a database but had a ton of trouble because I wasn’t able to start debugging. 

When I clicked “Start Debugging” in Visual Studio 2015:

  • No browser popped up
  • Even if I launched a browser, I could load the site but Visual Studio wasn’t ‘attached’ so I couldn’t hit any breakpoints
  • I saw the error below in the debugger events window


Unexpcted Exception During Runtime Startup:System.IO.FileNotFoundException: Could not load file or assembly ‘msshrtmi, Version=, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The system cannot find the file specified.File name: ‘msshrtmi, Version=, Culture=neutral, PublicKeyToken=31bf3856ad364e35’   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeEnvironment()   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment..cctor()=== Pre-bind state information ===LOG: DisplayName = msshrtmi, Version=, Culture=neutral, PublicKeyToken=31bf3856ad364e35 (Fully-specified)


After digging into this problem (what’s gone wrong?), it turns out that LightSwitch isn’t able to launch the Edge browser correctly!  To switch back to Internet Explorer as a default browser, open the “Settings” app, search for “Default Apps”, and choose “Internet Explorer” for the default Web Browser.  Once you do this, “Start Debugging” works correctly again with Visual Studio LightSwitch!

Effective Patterns for Feature Flags

MSDN Blogs - Thu, 06/23/2016 - 10:49

Today, we are inviting Edith Harbaugh from LaunchDarkly as a guest writer for the ALM Blog to talk a little bit about the different patterns of Feature Flag implementations which has been a common topic I get asked about from many of you.  If you didn’t see it, Edith joined us on stage at Build 2016 earlier this year to launch a new marketplace extension of their feature flags service with Visual Studio Team Services.

Ed Blankenship
Product Manager, Visual Studio Team Services

A question I get asked is “Are feature flags better for risk mitigation, fast feedback, hypothesis-driven development or long term control?” My answer is “Yes!” There’s no one right way to use feature flags, they’re a valuable technique to power more effective DevOps. I’ll walk through how you can use feature flags to speed up, derisk, and improve your development.

Kill Switch

A feature flag is a conditional in your code, an If then for two different options.  At its simplest, a feature flag can be used to flag a new or risky behavior.  First, the feature is deployed “off”. Then, separate from deployment, you can turn on the new feature. If the feature doesn’t behave as expected, it’s possible to shut it off quickly. This is better than rolling back an entire version because you’ve isolated the change. In addition, it allows development on other features to continue without forcing a complete rollback. In effect, you’re isolating the change while your code base evolves around it. Risk is uncertainty of unknown issues. With feature flagging, you’re mitigating risk by making every feature encapsulated and controlled.

Feature Flags for Kill Switches


Beta Feedback and Feature Targeting

For faster feedback, beyond an on/off switch, you can control at a very granular level who sees the new feature. You can choose VIPs, early beta users, or regions of the country. This technique is known as canary launches or dark launches. Instead of having “one size fits all” releases, you can iterate with some users to quickly get their feedback. You can also block users who are known to be picky or want only the stablest versions. Microsoft has been using these techniques (canary launches, dark launches for decades in their own releases.  For example, Microsoft gives early access to Microsoft MVP awardees to get feedback on new features that are being built.

Feature Flags for Targeting


Hypothesis-Driven Development

Once a feature is cleanly encapsulated, it can be used for hypothesis-driven development, as Microsoft’s Yammer does. Want to know whether a feature helped with engagement or lifted revenue? Feature flags allow you to tie back real metrics to code. After knowing the impact of your feature, you can switch the feature on (or off) for all users.

Hypothesis-Driven Development

Feature flags are also good for long-term access level control. If you have a feature that only advanced users should access, you can use a feature to have a different experience for “newbie” vs “power users”. You can use feature flags to control localization, or you can also block an entire country if a feature shouldn’t be available there.


Subscription Plans and SKU Management

You can bundle several flags together to form a subscription. You can have a silver, platinum, and gold tier. You can build one-off tiers for users. LaunchDarkly does this ourselves to enable custom contracts.

Feature Flags for Subscription Management

Now, with the Visual Studio Team Services LaunchDarkly extension, it’s easier than ever to fit feature flags into your releases. From Visual Studio Team Services, you can tie flags per environment into your release. You’re in complete control of your releases and functionality.


Edith Harbaugh
CEO and Co-Founder, LaunchDarkly

Azure Government cloud expands coverage with DoD Impact Level 4 Provisional Authorization, ITAR readiness and FedRAMP High

MSDN Blogs - Thu, 06/23/2016 - 10:06

Today we announced three major Azure compliance additions to support government entities and government partners. Check out the announcement by Tom Keane, Partner Director, Program Management of Microsoft Azure, to learn more about what this means for our US Department of Defense and International Traffic in Arms Regulations (ITAR) customers and partners.

Dynamics + Cortana Intelligence EMEA Workshop

MSDN Blogs - Thu, 06/23/2016 - 09:39

Hello folks,

Last week, we completed the first version of the Dynamics + Cortana Intelligence integration workshop in Amsterdam, NL.  For the folks who attended, thanks for attending and providing your feedback and attention as we completed our initial delivery of the course content and labs.  We collected a lot of feedback and are working to include your responses into the product roadmap for Cortana Intelligence and Dynamics.  Attendees also got to see pre-release bits on the integration of the Retail Recommendations Cognitive Service APIs into Dynamics AX2012R3.  This solution is currently in active development and we are very interested to collect your feedback.

Akshey Gupta explains the ML Studio in the Dynamics + Cortana Intelligence workshop in Amsterdam.

For those who weren’t able to attend, we have another EMEA workshop coming up in September in the US (Raleigh, North Carolina) and we’ll announce more details, and invites will be sent for that soon.


Team Sapient from University of South Wales Imagine Cup 2016 World Finalist

MSDN Blogs - Thu, 06/23/2016 - 09:15

A group of computer game developers from the University of South Wales (USW) are through to the world finals of a global competition run by Microsoft.

Team Sapient – made up of Masters students Riccardo Deluca, Ciaran Harty, Michael Harty and Thomas Mahoney – were named the winners of the Games category at the UK Imagine Cup finals, after creating a game called HexWorld.

Imagine Cup is a global student technology programme and competition that provides opportunities for students across all disciplines to team up and use their creativity, passion and knowledge of technology to create applications, games and integrate solutions that can change the way we live, work and play.

HexWorld is a 3D adventure game that features an open and interactive world in which the player can explore, help natives and uncover mysterious dungeons and locations.

Team Sapient spent months developing the game before travelling to Microsoft UK headquarters in Reading to present it at the national finals.

The team, who are all studying the Masters course in Computer Games Development, are now preparing for the world finals of the competition, which will be held at Microsoft headquarters in Seattle next month (July). Where the winners will be awarded $50,000 and a mentoring session with Satya Nadella, Chief Executive of Microsoft.

The UK students could win $50,000 (£34,000) and a mentoring session with Microsoft chief executive Satya Nadella.

Riccardo DeLuca, Michael Harty, Thomas Mahoney and Ciaran Harty will compete at the Imagine Cup World Finals next month in Seattle after winning the UK national final and a global semi-final.

The team, called Sapient, will enter the game they created – Hex World – which sees a character called the tourist travel through various worlds made up of hexagonal shapes that are constantly changing. The lead character is armed with an umbrella and explores forests and dungeons, completing quests.

The game, which has been in development for around a year, includes “grass tiles that can be blown up, jump-pad tiles that can launch objects into the air, spike trap tiles that can eject spikes, and many more”, the team said. It has taken a “great amount of inspiration” from the hugely popular Discworld series of fantasy books, which have sold more than 80 million copies in 37 languages.

Sapient will compete in the Games category from July 26-29 against eight other teams from Indonesia, Thailand, Brazil, Bahrain, South Africa, Spain, Russia and South Korea. The winners of the group will then go up against the victors in the Innovation and World Citizenship categories. One team will then be crowned Imagine Cup Champions, win $50,000 and a private mentoring session with Nadella.

The four UK entrants are all current or former students at University of South Wales, studying computer game development, and have been working together for around four years.

DeLuca said: “Hex World was a game I designed last year, and it never stops amazing me to see how far it has come since then. I have spent countless hours programming various systems into this game that have brought its world to life. To see the world shifting and pulsing is something I never tire of. This is a project I have put my heart into and cannot wait to see how much further it can go.”

The Sapient team

The team were told about the developer competition by university lecturers last summer and originally worked on another game, before that was abandoned in favour of Hex World.

We had been told about the Imagine Cup in our university lectures and thought it would be a phenomenal opportunity to get involved with a Microsoft-hosted competition. It was something we just couldn’t let slip by us, the team said. So over the summer we started meeting up every week to create a video game that would be good enough for the Imagine Cup. We were initially making another game other than Hex World, but realised its scale would make it too difficult to make in time for the competition. However Riccardo was working on another game at the time and we all decide that this game had much more potential and a more manageable scale than the other, so we all starting to work on it to make it into the game it is today.

Hex World

The game won the UK national final in April – an event the four found “intimidating”.

When we saw who we would be in competition with we were slightly nervous. [But our] presentation went very well, and when watching all the other presentations from all the other students we were really enjoying the amount of passion they all had for what they were doing in their projects. When we won we couldn’t quite believe it, standing up there really felt like all the work we had put into this game had paid off. We also recently won the world semi-finals, and that took us all by surprise. Needless to say we were all rather ecstatic. None of us can really believe how far this game has gone, something that was just an idea a year ago is taking us to Seattle on a world stage.

After the tournament, they plan to “keep developing this game and bring it to market”.

Hex World

Speaking about the Seattle competition in general, Pablo Veramendi, Imagine Cup Competition Manager, said:

I never stop being awed by the forward-thinking and unique solutions that a fresh, young perspective can bring to the technology industry. These developers are poised to do great things, and I for one can’t wait to see what the future holds.

The Academic

Dr Mike Reddy, senior lecturer in computer games development, said:

As a former Imagine Cup Judge, I know the significance of extra-curricular work in making sure our games graduates stand out from the rest when seeking employment. The effort of producing a winning entry to the Imagine Cup is significant; at least doubling the work that students might be expected to do towards their courses. So, even being in the UK finals was quite an achievement. To win shows the determination that Team Sapient has to succeed in preparing themselves for a glamorous, but hard working industry.

The event will be livestreamed online on July 29.


Subscribe to Randy Riness @ SPSCC aggregator
Drupal 7 Appliance - Powered by TurnKey Linux