2016年9月30日金曜日

OBSとPSD2が金融業界に与える影響

 Chemitiganti氏は、世界の金融業界の今後に影響を与える2つの動きとして、英国のOpen Banking Standard(OBS)とEUのPayment System Directive 2(PSD2)に注目する。

 OBSは英国の銀行がサードパーティに対し、取引データなどの情報へのAPIアクセスを提供するためのガイドラインを定めている。これに付帯して、プライバシーおよびセキュリティについての規制が盛り込まれている。一方PSD2は、単一ユーロ決済圏における決済のバリューチェーンに、データアグリゲータなど新たな種類のプレイヤーを参加させるためのフレームワークを提示している。PSDは、これまでマーチャント、クレジットカードブランド、アクワイアラ、イシュアー、決済サービスプロバイダといった機能分担が固定化したことによる情報ギャップを埋めることにより、既存のプレイヤーにとっても新たなチャンスが生まれる。

 「OBSは、英国政府が英国の銀行に対し、『FinTech企業に変身しろ』と言っているようなものだ。PSD2は、EUにおけるこれまでの決済ビジネスモデルが変わらなければならないというメッセージだ。どちらも、誰が『顧客のオーナー』なのか、つまり誰が顧客の情報をコントロールするのかについて、新たな競争を生み出していく。結局、ビジネス上の価値につなげるためには、各顧客のことをどれだけ知り、理解できるかが勝負になってくる。このため、データレイクの価値はますます高まる」

FinTechに至る3つのアプローチ

1. 「守りのIT」からの段階的な移行

 大半の企業は守りのITのためにHadoopによるデータ基盤を構築し、徐々に用途を広げてきたという。

 「例えばリスク管理は、多くの金融機関にとって最初に取り組みやすい。これまで銀行は、多数のビジネスシステムがサイロとして存在している状況で、リスク分析のためにどうすれば情報を集約できるかに頭を悩ませてきた。また、データの品質問題の克服にも労力を費やしてきた。Hadoopではこの課題を解決できるので、導入メリットが分かりやすい。こうした分かりやすい用途で使い始め、コンシューマーバンキングやWebアドバイザリサービスなど、攻めの用途を後で追加する例は多い。また、ある程度の比率の企業が、Hadoopを使い始める動機として、ITコスト削減を挙げている。これまでのメインフレームやリレーショナルデータベース、エンタープライズデータウエアハウスによるデータ管理は、高価で、拡張が困難であり、迅速な処理という点でも課題が生じていた。Hadoopでは分散処理により、こうした課題を克服できる」

 ITコスト削減のためにHadoopを導入したとしても、これをきっかけとして徐々にでも情報サイロ化の打破を進めないと、FinTechを支える情報基盤には到達できないとChemitiganti氏は指摘する。つまり、このアプローチにおいて「用途を広げる」ということの裏のテーマは、どの情報サイロを次に壊すかということにある。

2. 既存組織とは切り離されたFinTechチームの結成

 第2のアプローチは、既存組織のしがらみと切り離されたFinTechチームの結成だ。

 「企業として、このチームに干渉しないと決める。独立した予算を与え、従来のITルールも適用しない。既存のITルールは官僚主義的になりがちで、データアクセスについても制限ばかりを押し付けてしまう。そこでFinTechチームには自由なアクセス権限を保証し、データレイクを構築させる」

こうしたやり方で成功している企業もあるという。

3. ハイブリッドなCOEモデル

 第3のアプローチは、第1、第2のモデルの中間ともいえるハイブリッドなものだ。

 「この取り組みは、IT部門に任せていると、企業としてFinTech時代に求められる体制に移行できないという認識から始まる」(Chemitiganti氏)。その意味では、第2のアプローチと出発点は似ている。

 「そこで組織全体から、最良の人材をかき集めたチームを結成する。そして、FinTechあるいはそれに関連する何らかのアプリケーションを作ってみるところから始める。一方で、事業部門と連携し、データレイクを推進する。事業部門のビジネス要件を理解し、これを反映させる形での情報統合および活動を進める」

「Google Apps for Work」が「G Suite」に改称 AI機能や「Team Drive」を追加

 米Google929日(現地時間)、これまで「Google Apps for Work」として提供してきた企業向けプロダクティビティスイートの名称を「G Suite」に改称すると発表した。G Suiteは、同日発表の「Google Cloud」の一部と位置付けられる。

 G Suiteを構成するサービスは従来通り、GmailGoogleドキュメント、Googleドライブ、Googleカレンダー、ハングアウトなどだ。

 

 G Suiteという名称変更に加え、人工知能(AI)の機械学習技術を応用した新機能をG Suiteのアプリの幾つかに追加したことも発表した。

 GoogleGoogleフォトGoogle翻訳Inboxのスマートリプライなどで機械学習技術を採用してきた。

 同日発表された新機能の幾つかを紹介する。

Googleドライブで必要なファイルを提示する「Quick Access

 Googleドライブの新機能「Quick Access」は、Googleドライブ内のファイル検索にかかる時間を短縮する機能。ユーザーのドライブ利用履歴やGoogleカレンダーに入力されたチームミーティングの予定などを解析し、必要になると推測されるファイルを必要なタイミングで提示する。

 Quick Access機能は、まずはG SuiteAndroidGoogleドライブで提供を開始する。

Google Docsのアドバイザー「Explore

 Google Docsのドキュメント、スプレッドシート、スライドのそれぞれに、コンテンツ作成を様々な形でサポートする「Explore」機能が追加された。

 各アプリの右下で待機するExploreボタンをクリックすると、作成中のコンテンツを解析したExploreが必要だと推測した関連資料や関数(スプレッドシートの場合)、スライドのデザイン案などを画面右に提示する。

 
スライドのデザイン案を提示する「Explore

グループ向けドライブ「Team Drives

 従来のGoogleドライブはユーザー個人のもので、ファイルを共有するにはドライブ内に他のユーザーを招待する形だった。「Team Drives」は複数のユーザーが共同で持つドライブ。共有設定などをしなくても、このドライブのファイルはすべてのメンバーがアクセスできる。Team Drivesはまだプレビュー版で、こちらから参加を申し込める。

 
Team Drives

 

A free Linux operating system based on Debian GNU/Linux and optimized for Raspberry Pi Read more: http://linux.softpedia.com/get/System/Operating-Systems/Linux-Distributions/Raspbian-89289.shtml#ixzz4LhbeDRKs

Raspbian is an open source operating system based on the award-winning Debian GNU/Linux distribution specifically designed for the Raspberry Pi computer board. It is an active development with an emphasis on improving the performance and the stability of as many Debian packages as possible.

Distributed as a Raspbian image

The Raspbian operating system is distributed as a Raspbian image, a binary file that users can download from Softpedia as deploy it onto a SD card, which can be booted on the Raspberry Pi computer. In addition, users can purchase high-quality, branded SDHC cards that contains the latest official stable release of the Raspbian operating system preinstalled on Pi Hut's Raspberry Pi Store. The distribution is compatible with ARMv6 CPUs and higher

Uses the LXDE desktop environment

Raspbian uses LXDE (Lightweight X11 Desktop Environment) for its default graphical session, which looks traditional and comprises of a single taskbar located on the bottom edge of the screen. The taskbar includes several applets that allow you to cycle between virtual workspaces, interact with running programs, access essential system functions, as well as to launch your favorite applications.

Features more than 35,000 packages

Raspbian features more than 35,000 packages, pre-compiled software, bundled in a handy format that will allow anyone to easily install it on your Raspberry Pi. Among some of the most popular applications pre-loaded on Raspbian, we can mention the Midori web browser, Scratch offline editor for programmers, LXTerminal terminal emulator, Leafpad text editor, and many others.

aspberry Pi Foundation Unveils New LXDE-Based Desktop For Raspbian Called PIXEL

Raspberry Pi Foundation's Simon Long has unveiled a new desktop environment for the Debian-based Raspbian GNU/Linux operating system for Raspberry Pi devices.

From a Softpedia report (submitted by an anonymous reader):Until today, Raspbian shipped with the well-known and lightweight LXDE desktop environment, which looks pretty much the same as on any other Linux-based distribution out there that is built around LXDE (Lightweight X11 Desktop Environment). But Simon Long, a UX engineer working for Raspberry Pi Foundation, was hired to make it better, transform it into something that's more appealing to users. So after two years of work, he managed to create a whole new desktop environment for Raspbian, the flagship operating system for Raspberry Pi single-board computers developed and distributed by Raspberry Pi Foundation. Called PIXEL, the new Raspbian desktop offers a more eye-candy design with the panel on top (not on the bottom like on a default LXDE setup), new icons, new Applications Menu, and new theme. "It's actually surprisingly easy to hack about with the LXDE desktop once you get your head around what all the bits do, and since then I've been slowly chipping away at the bits that I felt would most benefit from tweaking," reveals Simon Long. "Stuff has slowly been becoming more and more like my original concept for the desktop; with the latest changes, I think the desktop has reached the point where it's a complete product in its own right and should have its own name."

 

2016年9月28日水曜日

Make a Snow Leopard 10.6.7 Installer Disc from a Mac Restore Disc

So there was this hint the other day at MacWorld's OS X Hints site:
10.6: Make a universal 10.6.7 Snow Leopard installer – Mac OS X Hints

It was a very useful hint for hacking together a retail Snow Leopard disc (10.6.0/10.6.3 ) and the newest system specific restore disc (10.6.7 for iMacs and MacBook Pros) to make a "universal" 10.6.7 disc that would work on new and old machines alike, that are qualified to run Snow Leopard. Useful not only for techs who need a one disc does it allbut others who might lack bandwidth for updates since this cuts down on some Software Update downloads (10.6.8 is only a smaller "delta" update this way.)

So, it was a good hint because it got to the heart of the matter, that OSInstall.mpkg was where the script logic determines if your machine is qualified for the restore. However using the original 10.6 disc and copying over all the old printer drivers is a little too kludgy for me, the less donethe better. I knew there had to be a more elegant way…

Voila – this bash script strives for automagic: it reads in your restore disc, prompts you to grab your disc and pop in a blank DVD, then modifies the install logic, and burns the disc you can use on all your Snow Leopard elligible Macs (P.S. Don't steal OS X). It hasn't been QC'd or QA'd beyond a few runs using one set of 10.6.7 restore disc, but I hope it comes in handy for some Mac tech out there somewhere who is in a pinch and needs to restore Snow Leopard – if only to get App Store on a machine and then up to 10.7 or 10.8!

makeUniversalSnowLeoDisc.command

#!/bin/bash
clear

destination=~/Desktop/Mac\ OS\ X\ Install\ DVD

#make destination folder
[ ! -d "$destination" ] && mkdir "$destination"

#make sure disc is in drive
while [ ! -d /Volumes/Mac\ OS\ X\ Install\ DVD ] ; do
echo Please insert Mac OS X Install DVD and press Enter
read
done

#get device node for block copy
device=$(diskutil info /Volumes/Mac\ OS\ X\ Install\ DVD/ | grep Node | cut -f2 -d:)

#create disk image from device (retains Finder window custom background)
echo "Creating Disc image at $destination, please wait..."
/usr/bin/hdiutil create -srcdevice $device -format UDRW "$destination"/Mac\ OS\ X\ Install\ DVD.dmg

#disk image using source folder (loses custom Finder background)
#/usr/bin/hdiutil create -srcfolder /Volumes/Mac\ OS\ X\ Install\ DVD/ -format UDRW "$destination"/Mac\ OS\ X\ Install\ DVD.dmg

#eject media
/usr/bin/drutil eject

#tell user to take out disc
echo -e $'\a'$'\a'$'\a'$'\n'"Please Remove the disc and press Enter"$'\n'
read

echo "Modifying Image"
#mount r/w image
hdiutil attach "$destination"/Mac\ OS\ X\ Install\ DVD.dmg

#expand OSINstall.mpkg
/usr/sbin/pkgutil --expand /Volumes/Mac\ OS\ X\ Install\ DVD/System/Installation/Packages/OSInstall.mpkg /Volumes/Mac\ OS\ X\ Install\ DVD/System/Installation/Packages/OSInstall.expanded

#modify Distribution script in place with no backup
/usr/bin/sed -i '' "s/modelProp\ \=\=\ hwbeSupportedMachines\[i\]/1/g" /Volumes/Mac\ OS\ X\ Install\ DVD/System/Installation/Packages/OSInstall.expanded/Distribution

#modify Distribution script in place with backup (for sissies)
#/usr/bin/sed -i '.original' "s/modelProp\ \=\=\ hwbeSupportedMachines\[i\]/1/g" /Volumes/Mac\ OS\ X\ Install\ DVD/System/Installation/Packages/OSInstall.expanded/Distribution

#remove original OSInstall.mpkg package
/bin/rm -rf /Volumes/Mac\ OS\ X\ Install\ DVD/System/Installation/Packages/OSInstall.mpkg

#flatten new package
/usr/sbin/pkgutil --flatten /Volumes/Mac\ OS\ X\ Install\ DVD/System/Installation/Packages/OSInstall.expanded /Volumes/Mac\ OS\ X\ Install\ DVD/System/Installation/Packages/OSInstall.mpkg

#remove expanded folder
/bin/rm -rf /Volumes/Mac\ OS\ X\ Install\ DVD/System/Installation/Packages/OSInstall.expanded

### image is now ready to be burned ###

#eject disk image
hdiutil eject /Volumes/Mac\ OS\ X\ Install\ DVD/

#burn disc image
/usr/bin/drutil burn "$destination"/Mac\ OS\ X\ Install\ DVD.dmg

echo -e $'\a'$'\a'$'\a'$'\n'"Disc Complete, Please Remove the disc"$'\n'

 

2016年9月27日火曜日

Springでのトランザクション管理

Springのトランザクション管理は大きく分けて以下の2つの管理方法が存在する。

1.プログラミングによるトランザクション管理

プログラミングによってトランザクションを手動管理する方法。以下のようなイメージでトランザクション制御コードをソースコード内に記述する。
transactionManager.begin();  transactionManager.commit();  transactionManager.rollback();  
ソースコード内にトランザクション制御コードも入りこむため、見通しが悪くなったり制御を間違えるとバグの温床にもなったりするので、極力使うべきではない。

2.宣言的トランザクション管理

「あるメソッドを呼び出したときにトランザクションをかける」と宣言する方法。以下のようなイメージでメソッド(やクラスに)に@Transactionalアノテーションを付与することで実現される。
以下の例では、updateFooメソッドを呼び出したときにトランザクションをかける、ということ。
※XMLベースでも宣言可能だがここではアノテーションベースを利用する
アノテーションベースのイメージ.
public class DefaultFooService implements FooService {            public Foo getFoo(String fooName) {                  // do something          }            // these settings have precedence for this method          @Transactional          public void updateFoo(Foo foo) {                  // do something          }  }  
トランザクション制御コードがソースコード内に入りこむことがないため、この管理方法が推奨されている。
詳細は後述するが、メソッドやクラスに@Transactionalアノテーションを付与することで管理され、トランザクションの開始、コミット、ロールバックは自動で行われる。
ただし、ロールバックの注意点として、非検査例外(RuntimeException及びそのサブクラス)が発生した場合はロールバックされるが、検査例外(Exception及びそのサブクラスでRuntimeExceptionのサブクラスじゃないもの)が発生した場合はロールバックされずコミットされる。
なお、Springの宣言的トランザクションはAOPを使って実現されている。
※AOPについてはSpringでAOPを参照。
本記事では「2.宣言的トランザクション管理」について明記する。

トランザクションマネージャ

Springではいくつかのトランザクションマネージャが用意されている。
これらは利用するDBアクセスAPIによって使い分ける。
DBアクセスAPIトランザクションマネージャ
JDBCorg.springframework.jdbc.datasource.DataSourceTransactionManager
JDOorg.springframework.orm.jdo.JdoTransactionManager
JTAorg.springframework.transaction.jta.JtaTransactionManager
Hibernateorg.springframework.orm.hibernate.HibernateTransactionManager

トランザクション制御

冒頭でも述べたが、以下のようにメソッドにTransactionalアノテーションを付与する方法とクラスにTransactionalアノテーションを付与する方法がある。

メソッドにTransactionalアノテーションを付与する

メソッドにTransactionalアノテーション付与することで、メソッドが呼ばれたタイミング(正確にはメソッド開始前)にトランザクションが開始され、対象のメソッドが正常終了した場合はコミット、例外で終了した場合はロールバックされるようになる(再掲になるがロールバックの注意点として、非検査例外(RuntimeException及びそのサブクラス)が発生した場合はロールバックされるが、検査例外(Exception及びそのサブクラスでRuntimeExceptionのサブクラスじゃないもの)が発生した場合はロールバックされずコミットされる)。いづれもアノテーションを付与しておくだけで自動でやってくれる。
public class DefaultFooService implements FooService {            public Foo getFoo(String fooName) {                  // do something          }            // these settings have precedence for this method          @Transactional          public void updateFoo(Foo foo) {                  // do something          }  }  

クラスにTransactionalアノテーションを付与する

以下のようにクラスにTransactionalアノテーションを付与することで、そのクラス内の全てのメソッドにトランザクション制御をかけることができる。
@Transactional(readOnly = true)  public class DefaultFooService implements FooService {        public Foo getFoo(String fooName) {          // do something      }        // these settings have precedence for this method      @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)      public void updateFoo(Foo foo) {          // do something      }  }  
ただし、クラスに対して記述した設定はメソッドで記述された設定で上書きされることに注意する必要がある。上記の場合、updateFooメソッドは@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)が適用される(クラスに付与されている@Transactional(readOnly = true)は効かない)。
なお、Transactionalアノテーションはpublicメソッドのみに適用可能。public以外のメソッドにも付与できてコンパイルも通るが、実行時エラーにもならないので注意が必要。
you should apply the @Transactional annotation only to methods with public visibility. If you do annotate protected, private or package-visible methods with the @Transactional annotation, no error is raised, but the annotated method does not exhibit the configured transactional settings. Consider the use of AspectJ (see below) if you need to annotate non-public methods.

Transactionalアノテーションのプロパティと設定例

Transactionalアノテーションに指定可能なプロパティ

プロパティ定義
valueString1つのアプリケーションで複数のトランザクションマネージャを利用する場合に、どのトランザクションマネージャを利用するかを指定する。
propagationEnum: Propagationどのような場合にトランザクションを開始するか等の属性を指定する。
isolationEnum: Isolationトランザクションの分離レベルを指定する。デフォルトはDEFAULTレベル。
readOnlyboolean読み取り専用かどうかを指定する。デフォルトはfalse。
timeoutint (in seconds granularity)そのトランザクションがタイムアウトする時間を指定する(秒指定)。デフォルトは利用しているトランザクション管理システムのタイムアウトを利用する。
rollbackForClass<? extends Throwable>[]検査例外が発生した際もロールバックしたい場合に指定する。
rollbackForClassNameString[]rollbackForと同じ、違いは例外クラス名また例外クラス名の配列を指定するところ。
noRollbackForClass<? extends Throwable>[]ロールバックしたくない場合に指定する。
noRollbackForClassNameString[]noRollbackForと同じ、違いは例外クラス名また例外クラス名の配列を指定するところ。

プロパティの設定例

value

// 利用したいトランザクションマネージャの名前を指定する  @Transactional("order")  

propagation

設定例.
//   常に新しいトランザクションを開始する  @Transactional(propagation=Propagation.REQUIRES_NEW)  
propagationのその他の設定値
プロパティ定義
MANDATORYトランザクションが開始されていなければ例外を発生させる。
NESTEDトランザクションが存在する場合はネストしたトランザクションを開始し、他のPROPAGATION_REQUIREDのように振る舞う。
NEVERトランザクションが開始されていれば例外を発生させる。
NOT_SUPPORTEDトランザクションが存在する場合は中断して、トランザクションをはらない(トランザクションを利用しない)
REQUIREDトランザクションが開始されていなければ新規に開始し、すでに開始されていればそのトランザクションをそのまま利用する。
REQUIRES_NEW常に新しいトランザクションを開始する。トランザクションが存在する場合は中断して新しいトランザクションを開始する。
SUPPORTSトランザクションが開始されていればそれを利用。開始されていなければトランザクションをはらない(トランザクションを利用しない)。

isolation

設定例.
// ダーティーリード・ファジーリードは発生しないが、ファントムリードは発生する可能性がある  @Transactional(isolation=Isolation.REPEATABLE_READ)  
isolationのその他の設定値
※下に行くほど分離レベルが高くなる
プロパティ定義
DEFAULT利用するデータストアのデフォルト分離レベルを利用する。
READ_UNCOMMITTEDダーティーリード・ファジーリード・ファントムリードが発生する可能性がある。
READ_COMMITTEDダーティーリードは発生しないが、ファジーリード・ファントムリードは発生する可能性がある。
REPEATABLE_READダーティーリード・ファジーリードは発生しないが、ファントムリードは発生する可能性がある。
SERIALIZABLEダーティーリード・ファジーリード・ファントムリードは発生する可能性がない。

readOnly

設定例.
// 読み取り専用トランザクション  @Transactional(readOnly = true)  

timeout

設定例.
// 10秒でタイムアウト  @Transactional(timeout = 10)  

rollbackFor

設定例.
//   全ての例外が発生した場合、ロールバックさせる  @Transactional(rollbackFor=Exception.class)  

rollbackForClassName

設定例.
//   全ての例外が発生した場合、ロールバックさせる  @Transactional(rollbackForClassName={"Exception"})  

noRollbackFor

設定例.
//   全ての例外が発生した場合、ロールバックさせないようにする  @Transactional(noRollbackFor=Exception.class)  

noRollbackForClassName

設定例.
//   全ての例外が発生した場合、ロールバックさせないようにする  @Transactional(noRollbackForClassName={"Exception"})  

参考

Windows 10 will soon run Edge in a virtual machine to keep you safe

Microsoft has announced that the next major update to Windows 10 will run its Edge browser in a lightweight virtual machine. Running the update in a virtual machine will make exploiting the browser and attacking the operating system or compromising user data more challenging.

Called Windows Defender Application Guard for Microsoft Edge, the new capability builds on the virtual machine-based security that was first introduced last summer in Windows 10. Windows 10's Virtualization Based Security (VBS) uses small virtual machines and the Hyper-V hypervisor to isolate certain critical data and processes from the rest of the system. The most important of these is Credential Guard, which stores network credentials and password hashes in an isolated virtual machine. This isolation prevents the popular MimiKatz tool from harvesting those password hashes. In turn, it also prevents a hacker from breaking into one machine and then using stolen credentials to spread to other machines on the same network.

The Edge browser already creates a secure sandbox for its processes, a technique that tries to limit the damage that can be done when malicious code runs within the browser. The sandbox has limited access to the rest of the system and its data, so successful exploits need to break free from the sandbox's constraints. Often they do this by attacking the operating system itself, using operating system flaws to elevate their privileges.

Credential Guard's virtual machine is very small and lightweight, running only a relatively simple process to manage credentials. Application Guard will go much further by running large parts of the Edge browser within a virtual machine. This virtual machine won't, however, need a full operating system running inside it?just a minimal set of Windows features required to run the browser. Because Application Guard is running in a virtual machine it will have a much higher barrier between it and the host platform. It can't see other processes, it can't access local storage, it can't access any other installed applications, and, critically, it can't attack the kernel of the host system.

In its first iteration, Application Guard will only be available for Edge. Microsoft won't provide an API or let other applications use it. As with other VBS features, Application Guard will also only be available to users of Windows 10 Enterprise, with administrative control through group policies. Administrators will be able to mark some sites as trusted, and those sites won't use the virtual machine. Admins also be able to control whether untrusted sites can use the clipboard or print.

Microsoft recognizes that this feature would be desirable on consumer machines, too, and not just for Edge. Other browsers such as Chrome would also benefit from this kind of protection. So too would Office's "Protected Mode" that's used for opening documents from untrusted sources.

However, doing this has certain complexities. Currently, virtualized sites can't store persistent cookies, for example, because virtual machines get destroyed when the browser is closed. This may be acceptable for a locked-down enterprise environment, but it isn't a good fit for consumers.

There are also compatibility constraints. VBS installs the Hyper-V hypervisor. This requires a processor with hardware virtualization support, and it also requires I/O virtualization (such as Intel's VT-d) to protect against certain known attacks. This means that some systems in the wild won't support it. There are also software concerns; only one hypervisor can be installed at a time, which means that a machine that's running Hyper-V cannot also run VMware Workstation or Virtual Box, say, or software that uses virtualization behind the scenes, such as the Bluestacks Android-on-Windows software.

This virtualization also likely comes at some performance cost, although Microsoft is not saying just what that performance cost is right now.

Nonetheless, this use of virtualization to harden a system is an exciting move. Experimental and special-use systems such as Qubes OS have used virtualization in a similar way, but are far from mainstream offerings. Microsoft is uniquely positioned take this kind of capability mainstream.

Application Guard will become available later this year in Insider builds of Windows, hitting a stable version some time in 2017.