MDN 0115DG
MDN 0115DG
MDN 0115DG
magazine
14 Top Features
of Visual Basic 14.................16
0115msdn_CoverTip.indd 1
12/9/14 3:26 PM
0115msdn_CoverTip.indd 2
12/9/14 4:44 PM
magazine
14 Top Features
of Visual Basic 14.................16
VISUAL BASIC 14
Kevin Ashley . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Understanding TypeScript
Peter Vogel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Keith Pijanowski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Steven Edouard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
COLUMNS
CUTTING EDGE
DATA POINTS
TEST RUN
An Upstart Again
Untitled-7 2
12/4/14 2:22 PM
Untitled-7 3
12/4/14 2:23 PM
Instantly Search
Terabytes of Text
25+ fielded and full-text search types
dtSearchs own document filters
support Office, PDF, HTML, XML, ZIP,
emails (with nested attachments), and
many other file types
Supports databases as well as static
and dynamic websites
Highlights hits in all of the above
magazine
List Rental: This publications subscriber list, as well as other lists from 1105 Media, Inc., is available
for rental. For more information, please contact our list manager, Jane Long, Merit Direct. Phone: 913685-1301; E-mail: jlong@meritdirect.com; Web: www.meritdirect.com/1105
All customer service inquiries should be sent to MSDNmag@1105service.com or call 847-763-9560.
www.dtSearch.com 1-800-IT-FINDS
Printed in the USA
Untitled-2 1
11/3/14 11:03 AM
EDITORS NOTE
MICHAEL DESMOND
Back to Basic
When Microsoft convened its Connect(); event in New York City
in November, the company released so many vital development
technologiesincluding open sourcing the .NET Core Runtime
and librariesthat it prompted us to publish an extra issue of
MSDN Magazine covering some of the new updates. Included
in that coverage were looks at updated cross-platform tooling in
Visual Studio, a dive into ASP.NET 5 and the Azure SDK 2.5, and,
of course, a run through the newest versions of C# and C++.
What we werent able to include in that special issue, but do
feature in our pages this month, is a trifecta of articles focused on
developments at Connect();. These include Lucian Wischiks 14
Top Improvements to Visual Basic 14, Omid Afnans Hadoop
Made Easier for Microsoft Developers, and Manoj Bableshwars
Web-Based Test Case Management with TFS.
enabled by Roslyn compiler technology that would be impossible to access without the rewrite. And Wischik says the wholesale
update offered an opportunity to rearchitect the language from
scratch based on what the group had learned over the years.
But the risks involved were not insignificant, he says. Youre
investing a lot of developer years just to regain the functionality
you already had, even before you start to add any new end-user
value. Theres also the risk that you might fail to reproduce all
of the quirks or bugs of the old code base that people might
inadvertently depend upon.
Complicating matters is the surprising complexity of Visual Basica
function of the extensive array of features that the language, with its
cultural roots in Classic Visual Basic, had accrued over the years. As
Wischik observes, the team faced the challenging task of both replicating and modernizing the developer experience in Visual Basic.
Looking forward, Wischik expects more IDE improvements to
arrive after Visual Studio 2015 ships. Weve been working on a Read
Eval Print Loop (REPL), a sort of souped-up immediate window
for quick experimenting and prototyping. We also want to write
more analyzers and other plug-ins, he says.
Wischik urges Visual Basic developers to migrate to Visual Studio
2015, because it provides a host of benefitsincluding faster compile
times and support for analyzerswhile allowing round tripping of
code back to Visual Studio 2013. From there, developers can make
the decision to move to Visual Basic 14, which boasts new features
like string interpolation, nameof and the ?. operator.
Ultimately, the most important improvement in this latest version of Visual Basic may be the ironclad commitment Microsoft
has shown for it.
Its the strongest vote of confidence a business can make,
Wischik says. We believe our product has such a strong future
in the decades to come, that we can invest all our developer years
now to prepare for that future.
Visit us at msdn.microsoft.com/magazine. Questions, comments or suggestions for MSDN Magazine? Send them to the editor: mmeditor@microsoft.com.
2015 Microsoft Corporation. All rights reserved.
Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, you are not permitted to reproduce, store, or introduce into a retrieval system MSDN Magazine or any part of MSDN
Magazine. If you have purchased or have otherwise properly acquired a copy of MSDN Magazine in paper format, you are permitted to physically transfer this paper copy in unmodified form. Otherwise, you are not permitted to transmit
copies of MSDN Magazine (or any part of MSDN Magazine) in any form or by any means without the express written permission of Microsoft Corporation.
A listing of Microsoft Corporation trademarks can be found at microsoft.com/library/toolbar/3.0/trademarks/en-us.mspx. Other trademarks or trade names mentioned herein are the property of their respective owners.
MSDN Magazine is published by 1105 Media, Inc. 1105 Media, Inc. is an independent company not affiliated with Microsoft Corporation. Microsoft Corporation is solely responsible for the editorial contents of this magazine. The
recommendations and technical guidelines in MSDN Magazine are based on specific environments and configurations. These recommendations or guidelines may not apply to dissimilar configurations. Microsoft Corporation does not make
any representation or warranty, express or implied, with respect to any code or other information herein and disclaims any liability whatsoever for any use of such code or other information. MSDN Magazine, MSDN, and Microsoft logos are
used by 1105 Media, Inc. under license from owner.
4 msdn magazine
newrelic.com/azure
2014 New Relic, Inc. All rights reserved.
Untitled-2 1
3/10/14 12:39 PM
CUTTING EDGE
DINO ESPOSITO
RWD also changes the consolidated rules of project management and commonly ends up costing more than developing a plain
non-responsive site. Gantt charts tracking progress make little sense
as any new step requires team members to measure effects across
the full spectrum of supported views. So in the end, when having
one responsive Web site isnt an option, what can you do to meet
your customers expectations and make their life easier?
Serve
Requested
Page
Mobile
Landing Page
for Mobile Users
Mobile Site
Laptop
Landing Page
for Desktop Users
(If Any)
Mobile
Serve
Requested
Page
Untitled-1 1
12/2/14 4:42 PM
does the user expect to perform? What can you do to smooth and
speed up interaction as much as possible? This latter point involves
using HTML5 features to the fullest.
On a site you know will be used on mobile devices, its arduous to
not set the type attribute of an input element to a number or date when
numbers or dates are expected. This would greatly simplify typing. By
the same token, there may be new use cases introduced on top of similar
business logic to make life easier and more enjoyable to mobile users.
8 msdn magazine
MSDN
Magazine
Online
Wrapping Up
Users expect to seamlessly use Web pages on their smartphones
and tablets just as they do on their desktops. Processing power or
cache size is limited on mobile devices, but that cant be an excuse
to serve pages that require zooming and take seconds to load. Separating desktop from anything else isnt an insightful choice, either.
Some level of device detection is required to provide a good service.
When it comes to device detection and form factors, complexity
and development costs will grow.
Many companies think RWD is the classic Columbus Egg
an obviously simple and brilliant solution to a thorny problem.
Responsive Web sites are more complex and expensive to create
than commonly reckoned. More important, an RWD approach
works for new or significantly reworked sites. You cant just easily
add RWD to mobilize an existing site that was devised for the desktop. Nevertheless, addressing the needs of your mobile audience is
a business necessity. And the sooner you address it, the better. Q
DINO ESPOSITO is the coauthor of Microsoft .NET: Architecting Applications
for the Enterprise (Microsoft Press, 2014) and Programming ASP.NET
MVC 5 (Microsoft Press, 2014). A technical evangelist for the Microsoft
.NET Framework and Android platforms at JetBrains, Esposito frequently
speaks at industry events worldwide and shares his vision of software at
software2cents.wordpress.com and on Twitter at twitter.com/despos.
Code Downloads
The MSDN Magazine Blog
Digital Magazine Downloads
Searchable Content
All of this and more at
msdn.microsoft.com/magazine
magazine
DATA POINTS
JULIE LERMAN
Untitled-1 1
10/30/14 4:09 PM
EF7 isnt creating a new framework for data access. Instead, its
building a new, more sustainable base on which to support not
only the features and workflow youve depended on for years with
EF, but also one that will enable so much more. The team struggled with whether this should be the next EF or a new data access
technology. At one point, I even questioned whether it would be
EF Light. But the core functionality of EF is still there and after
a lot of consideration, I agree it makes sense to think of this as the
next version of Entity Framework. You can read more about this
in the teams blog post, EF7 v1 or v7? (bit.ly/1EFEdRH).
blog post says, For example, you could have an inheritance hierarchy that combined TPH, TPT and TPC mappings, as well as
Entity Splitting, all in the same hierarchy. If youve ever attempted
to work directly with the MetadataWorkspace API and run away
screaming, you know its an intricate and complex beast, useful for
being able to support this kind of flexibility. But that complexity has
prevented the team from being able to support other scenarios for
which users have asked. By simplifying the mapping possibilities,
the MetadataWorkspace API also became simpler and much more
flexible. You can easily get to metadata about your model schema
from the DbContext API in EF7, which gives you a low-level
capability to perform advanced techniques without having to have
the low-level ObjectContext at your disposal.
Beyond Relational
When Entity Framework was first introduced, Microsoft had a
vision of it being used for a variety of data stores, though the first pass
focused on relational databases. Non-relational databases existed at
that time, but were not widely used, unlike the NoSQL databases
especially document databasesthat are so popular today.
While EF is an Object Relational Mapper (ORM), developers who
use it want to be able to use the same constructs to interact with
non-relational databases. EF7 will provide a high level of support
msdnmagazine.com
for this, but keep in mind what high level really means. There are
vast differences between relational databases and non-relational
databases and EF will not make any attempt to mask those differences. But for basic querying and updates, youll be able to use the
patterns with which youre already familiar.
Figure 1 shows code from a sample app that targets Microsoft
Azure Table Storage, which is a non-relational document database. The sample comes from EF Program Manager Rowan Miller
at github.com/rowanmiller/Demo-EF7. Note that the sample runs against
the 11514 version of the EF7 alpha nightly builds.
The OnConfiguring method is new. Its a way to affect how
EF configures the DbContext at run time, somewhat like you
can do today with the DbConfiguration class. Notice the
builder.UseAzureTableStorage extension method, which exists
because Ive also installed the EntityFramework.AzureTableStorage
package into my project.
EF7 uses this pattern for its various providers. Heres an OnConfiguring method in a DbContext class within a project that
targets SQLite:
protected override void OnConfiguring(DbContextOptions builder) {
string dir = ApplicationData.Current.LocalFolder.Path;
string connection = "Filename=" + Path.Combine(dir, "VermontBrewery.db");
builder.UseSQLite(connection);
}
14 msdn magazine
EF and the providers are able to parse out which part of the query
will become SQL and which will get run locally on the client. Im
sure there will be protection from and guidance for avoiding some
potential performance issues for that particular feature.
The team was able to add the long-requested Unique Foreign
Keys capability for models. Theyre also looking closely at providing
support for table-valued functions and cleaner ways to handle disconnected data, which is something Ive focused on for many years
with Entity Framework. Its a common problem with disconnected
applicationsnot just when Entity Framework is involvedand
its not easy to create algorithms that will work consistently in
every scenario. So a new approach is needed, for sure.
Theres a lot more to get excited about with EF7. I highly recommend
a close look at the posts on the ADO.NET Team Blog at blogs.msdn.com/
adonet. In addition to the post I linked to earlier, Rowan Miller wrote
in-depth about the decision to drop designer support in EF7; see
EF7 - What Does Code First Only Really Mean at bit.ly/1sLM3Ur.
Keep an eye on that blog, as well as the GitHub project. The wiki on
GitHub (bit.ly/1viwqXu) has links to how to access the nightly builds;
how to download, compile and debug the source code; some walkthroughs and the design meeting notes. The team is eager for your
feedback and is excited to receive pull requests.
THANKS to the following Microsoft technical expert for reviewing this article:
Rowan Miller
Data Points
Untitled-1 1
10/30/14 4:10 PM
VISUAL BASIC
14 Top Improvements in
Visual Basic 14
Lucian Wischik
Visual Basic 14 is the newest version of Visual Basic,
and it will ship as part of Visual Studio 2015. This version has been
rewritten from scratch in about 1.3 million lines of VB codeearlier
versions were actually written in C++. The team took advantage of
the rewrite to rethink every part of VB from the ground up. I asked
the team to pick out their top 14 improvements. They chose their
favorites from across the boardin the coding experience, in the
project system fundamentals and in the language itself.
Better Coding Experience
Technologies discussed:
Visual Basic 14, Visual Studio 2015
16 msdn magazine
clashes if you pick a name thats already in use, it can avoid clashes
where possible, and it works across your entire solution, even
changing names in C# projects, as well.
2. Analyzers The feature is spectacular. I have so many ideas
for how to use this feature ... all the little things I see in peoples
code.Overheard from a Windows PowerShell MVP
Analyzers are a way to put those light bulbs, code actions and error
squiggles into your own hands. You can use them to enforce coding
guidelines throughout your team. If youre flown in to debug a problem, you can plug in an analyzer to quickly find common code defects
in the entire solution. And many of the libraries you use can become
code-aware with their own built-in analyzers. For instance, suppose
you havent yet used the Microsoft Azure Storage library or havent
read articles on best practices. Because the library now comes with
an analyzer that detects common pitfalls in use of its APIs, you can
be immediately confident that youre using it properly. Its like having
an expert code reviewer stand over your shoulder as you type.
You can add analyzers to your project under the new References
| Analyzers node, (or via NuGet). Once there they become part
of your projects compilationthey run live as you type to show
live error squiggles. They run when you build your project in
Visual Studio or on the command line, and will even run on build
servers. Analyzers get a chance to crack open the internals of the
compiler, to look at the syntax trees of the projects source code
and its types and members. Developers are pleasantly surprised
to discover how easy it is to code their expert domain knowledge
into analyzers, thanks to these syntax trees and types+members.
My favorite analyzer is one that detects where my team has been
using Async Sub methods that should have been Async Function
As Task and issues a warning. This is a rough corner of asynchronous programming that not enough people are aware of, and
it leads to difficult-to-catch concurrency bugs, so its great that
my team can now catch the error at compile time. To get started
writing your own analyzers, go to roslyn.codeplex.com.
3. No Need to Cursor off the Line We do the right thing
now.Dustin Campbell, Visual Basic Team Member
As a VB user, youve long been used to typing some code, then
doing a quick down-then-up cursor to see if any error squiggles
appear. Or youd write code to fix an error squiggle, but then have
to do the down-then-up for the squiggle to disappear.
Now you dont have to go through all of that. Just leave the cursor
where it is, and error squiggles will appear or disappear themselves.
4. References in XML Doc Comments For people passionate
about docs, this is an enormous step in the right direction..NET
MVP Sam Harwell
Are you passionate about XML doc comments? Heres a small example:
'''
'''
'''
'''
'''
Sub
End
<summary>
Similar to <see cref="List(Of Integer).Count"/>
</summary>
<param name="e">Thing to count</param>
<remarks></remarks>
Count(e As IEnumerable)
Sub
In previous versions of VB, when you typed out cref and paramname in your comments, you got completion-list help, but beyond
that you were on your own. The compiler did some minimal validation to check that the names existed, but they were typeset in grey
and not easy to find, look up or refactor.
Now in Visual Basic 14 the cref and param-name arguments are
colorized properly. You can hover over them to see tooltips. When
you do a rename-symbol refactoring (Ctrl+R, Ctrl+R), Visual Basic
renames all references to a symbol, including those in cref and paramname. You can right-click on one of them and Go to Definition, or
Find All References. If you want to refer to a method that has several
overloads, you can now unambiguously refer to the single overload
you want. These changes all make it easier to type references in your
XML doc-commentsand get them right.
Language Improvements
Did you know you can use the Immediate Window without
even launching your program? For instance, if youve just written
Console.WriteLine("{0} ({1})",
customer.Name,
a module with a function GetName, you can open the Immediate
customer.Address?.Country)
window (Debug | Windows | Immediate) and type ? GetName() and it will
evaluate.
Visual Studio 2015 will also have better
support for Edit and Continue such as in
Async and Iterator methods, as well as in
more common situations like inside of
and around LINQ queries and lambdas,
even allowing you to add a new query or
lambda expression to an existing method.
Although this didnt make it into the
Visual Studio 2015 Preview, youll be
able to do all of this in the final release.
9. Better Error List The before and
after really tell a great story.Visual Basic
Team Member Anthony D. Green
The Error List in Visual Basic 14 has
numerous practical improvements, ones
that answer long-standing user requests
(see Figure 4). Before, the Error List used
to show fully qualified type names; now Figure 4 The Error List in Visual Studio 2015 (bottom) is more Readable and Versatile
it shows only minimally qualified type Than in Visual Studio 2013 (top)
18 msdn magazine
Visual Basic
Untitled-1 1
12/8/14 11:11 AM
You can use ?. in a sequence and mix it with the regular dot operator, a?.b.c?.d, for example. It reads left-to-right. Any null value used by
?. will just stop the sequence short and give the answer Nothing, and
any null value used by . will throw a NullReferenceException as usual.
The ?. operator is a null-conditional version of the . operator. There
are null-conditional versions of most other operators, as well: indexing, array?(i); delegate invocation, delegate?(args); dictionary lookup,
dict?!key; and XML axis properties, xml?.@attr, xml?.<key>, xml?...<key>.
You can use ?. in other handy ways, too:
If customer?.Age > 50 Then ...
' If branch taken only if customer is non-null AND is older than 50
Dim name = If(customer?.Name, "blank")
' Pick a default name if customer is null
Dim first = customers?.FirstOrDefault()
' Only invoke this method if customers is non-null
Note that NameOf isnt yet in Visual Studio 2015 Preview, but
will be present in Visual Studio 2015 before its final.
14. Open Source Were trying to engage the community. There
are a lot of smart people out there. Well look at pull requests from
the community just like we do our own ideas.C#/Visual Basic
Architect Anders Hejlsberg
The final improvement is not in Visual Basic itself, but in the
process of working with VB.
The source code of the VB compiler is now open source. So is
the design process of the language itself. Each new feature proposal
is made in the open, with full public scrutiny. The members of the
Microsoft Visual Basic Language Design Team are essentially now
stewards of the language. The team looks at proposals, considers
them deeply, sees if there are unexpected gotchas or corner-cases,
and determines if they meet the bar for inclusion in the language.
The Language Design Meeting minutes are published openly. Its
truly an exciting time to be on the Visual Basic Language Design
Team, and an exciting time to be a user of VB.
Wrapping Up
There are a lot of improvements in Visual Basic 14. This article has
covered almost half of them. The general theme has been to make
the existing VB work better in easy-to-use ways, without introducing difficult new concepts. For more information, check out
roslyn.codeplex.com and blogs.msdn.com/vbteam.
Q
LUCIAN WISCHIK is on the Visual Basic/C# Language Design Team at Microsoft,
with particular responsibility for VB. Before joining Microsoft he worked in
academia on concurrency theory and async. Hes a keen sailor and long-distance
swimmer. Reach him at lwischik@microsoft.com.
THANKS to the following Microsoft technical experts for reviewing this article:
Dustin Campbell and Anthony D. Green
Visual Basic
Untitled-1 1
10/13/11 11:25 AM
Technologies discussed:
Visual Studio Online, Team Foundation Server
22 msdn magazine
by clicking on the Test tab in on-premises TFS, just the way you
access the Work tab to manage backlogs or the Build tab to monitor builds. Alternatively, you can sign up for a free Visual Studio
Online (VSO) account at visualstudio.com and activate the 90-day
account trial to try out Test Hub.
Like test plans, test suites are work items, so all the customization
benefits mentioned earlier apply to test suites. Some examples of
custom fields for a test suite are summary fields describing instructions to set up the test application and fields to describe the nature
of tests such as functional or integration, test complexity, and so
on. Just as with test plans, you can moderate access to test suites at a
user or team level with the Manage Test Suites permission. Changes
to test cases contained in the suite, owner, state or other fields can
be tracked in the test suite work item history.
on, plus these fields can be bulk-marked for multiple test cases.
If you have an intermittent Internet connection or are just more
comfortable writing test cases in Excel, youre welcome to do that.
Just copy and paste all the test cases youve written in Excel into
the grid and save them to populate them into the system. In fact,
if your team is just adopting the TFS Test Hub for testing, the grid
can help you import your test cases from Excel. Check out the
Test Case Migrator Plus utility at tcmimport.codeplex.com for advanced
import requirements from Excel.
Untitled-7 1
12/8/14 4:05 PM
Wrapping Up
The Test Hub isnt just for manual testers. Its a tool that product
owners and business analysts can use to gauge how their features
26 msdn magazine
THANKS to the following Microsoft technical expert for reviewing this article:
Ravi Shanker
Visual Studio 2015
Untitled-6 1
5/28/14 4:02 PM
MICROSOFT AZURE
Technologies discussed:
Microsoft Azure, Visual Studio, HDInsight, Hadoop
28 msdn magazine
can be boot-strapped using HDInsight and how you can use the
newly released Microsoft Azure HDInsight Tools for Visual Studio
to simplify your development experience.
Getting Set Up
wasb://container@storage.blob.core.windows.net/example/data/filename.ext
For this article Im going to use some log data thats available
as part of the sample code in HDInsight. You can navigate to the
HDISamples folder in the default container where youll find a set
of folders containing samples, including the file:
HDISamples/webloganalyticsstorage/webloganalytics/HdiSamples/
WebsiteLogSampleData/SampleLog/909f2b.log
Once the raw data is available, you can turn it into a Hive table
that can be referenced in other Hive queries as a rowset from which
you can select rows. To do this you create it as an EXTERNAL table,
which is a meta-data operation in Hadoop and doesnt change the
data on disk. The only step you have to take is to define the column
types and name them so you can refer to the data in the familiar
SQL-style fashion. This is an important aspect of the Big Data
modelthat you can do a late binding between the format of your
data and the data itself. Theres no need to create schemas up front,
or worry about cleansing your data at load time. In fact, theres no
checking that the rows in your data adhere to any schema you define.
Instead, its your job to build your queries such that different versions
of data or missing data is handled as your business logic requires.
Again, you can use the Visual Studio IDE to simplify this task.
Figure 2 shows the kind of table creation tool you may have seen
in SQL Server tools. You can simply define table columns by
adding entries to the Table Columns area, providing a name, data
type and additional comments. Beyond a name, nothing else is
needed to create a basic, empty table definition. However, in this
case, I want to apply this definition to an existing file, so I use the
External table property to specify the URI mentioned earlier.
Figure 4 Creating the Table and Inserting Data
DROP TABLE IF EXISTS RefersPerDay;
--create table RefersPerDay for storing references from external Web sites
CREATE EXTERNAL TABLE IF NOT EXISTS RefersPerDay(year int, month int, day int,
cs_referer string, cnt int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
--populate table RefersPerDay with data from the weblogs table
INSERT OVERWRITE TABLE RefersPerDay
SELECT year(s_date), month(s_date), day(s_date),
cs_referer, count(distinct c_ip) as cnt
FROM weblogs
WHERE sc_status >=200 and sc_status <300
GROUP BY s_date, cs_referer
ORDER BY cnt desc;
30 msdn magazine
Address
Verification
Phone
Verification
Email
Verification
Geocoding
Matching/
Dedupe
Change of
Address
Melissa Data.
Architecting data quality success.
Untitled-4 1
9/8/14 4:18 PM
but theyre based on the actual format of IIS logs. Therefore, they
should work against your actual server logs and serve as a basis for
creating more complex analyses.
Of course, running the queries means submitting them to your
Hadoop cluster in Azure. To do this, you have to choose the cluster
where you want to submit the job. The HDInsight toolbar allows
you to select your cluster from a list of clusters available across your
Wrapping Up
With HDInsight you can quickly and easily access large amounts of
data youve generated or transferred to the cloud. You can spin up
Hadoop clusters to process the data, accessing the data from anywhere in Azure. Hive allows you to specify the structure of your data
and to evolve with the changes that occur in your data format over
time. HDInsight Tools for Visual Studio further allows you to explore
your Hadoop clusters and data in intuitive ways. More important,
it allows you to create Hive query projects and manage them like
any other code, helping you move from simple, working queries to
complex information processing over time. Aggregate data created
using HDInsight is best visualized through tools such as Power BI,
which offer direct connection to HDInsight sources. Other capabilities, like machine learning, can also be used in conjunction with
these tools to extend the analytic possibilities. Watch this space for
more on solving Big Data problems using Azure services.
Q
OMID AFNAN is a principal program manager in the Azure Big Data team working
on implementations of distributed computation systems and related developer
tool-chains. He lives and works in China. Reach him at omafnan@microsoft.com.
/update/2015/01
www.componentsource.com
BEST SELLER
Add powerful document imaging functionality to desktop, tablet, mobile & web applications.
Universal document viewer & conversion framework for PDF, Office, CAD, TIFF & more
OCR, MICR, OMR, ICR and Forms Recognition supporting structured & unstructured forms
PDF & PDF/A Create, Load, Save, View, Edit
Barcode Detect, Read, Write for UPC, EAN, Code 128, Data Matrix, QR Code, PDF417
Zero-footprint HTML5/JavaScript UI Controls & Web Services
BEST SELLER
.NET Tools for the Professional Developer: Windows, HTML5/Web, and XAML.
Hundreds of UI controls for all .NET platforms including grids, charts, reports and schedulers
A line of HTML5 and JavaScript products for enterprise application development
Built in themes and an array of designers for creating custom themes and styling
40+ Windows 8.1 & Windows Phone 8.1 controls and Universal Windows app support
All Microsoft platforms supported, Visual Studio 2013, ASP.NET, WinForms, WPF & more
BEST SELLER
BEST SELLER
1996-2014 ComponentSource. All Rights Reserved. All prices correct at the time of press. Online prices may vary from those shown due to daily fluctuations & online discounts.
US Headquarters
ComponentSource
650 Claremore Prof Way
Suite 100
Woodstock
GA 30188-5188
USA
Untitled-1 1
European Headquarters
ComponentSource
30 Greyfriars Road
Reading
Berkshire
RG1 1PE
United Kingdom
(888) 850-9911
www.componentsource.com
11/17/14 11:56 AM
B I G D ATA
Technologies discussed:
Microsoft Bing, Microsoft Azure, Windows PowerShell
This type of log entry contains data not only about the requested
resource, but also the client browser, return code and time taken to
complete the request. More sophisticated services may enrich usage
data with derived information such as geolocation or applicationspecific information like user identification (for logged-in users).
There would be no usage data without actual users, except perhaps
for testing and monitoring agents.
Operational data refers to server and service operational
measurements. This includes CPU utilization or temperature, disk
space, network transfer rate, application exceptions, memory faults,
and similar factors logged as soon as a server is turned on and a
service started. In modern datacenters, log information typically
includes not only computing devices, but also aspects such as
air-conditioning measurements, presence of personnel and visitors
in zones containing sensitive data, doors being opened and closed,
and similar information required by operational security standards.
The code samples in this article will focus on processing usage
data. However, you could apply most of the principles outlined and
demonstrated here to identify vulnerabilities using operational
Input
Output
InputContainer
ClusterOutputContainer
ClusterName
Status
ClusterStatusContainer
InputStorageAccount
ClusterStorageAccount
Attacking Endpoints
The pace of changes for a large online service makes it hard to protect
using only typical Security Development Lifecycle practices, such
as code reviews and static analysis tools. Thousands of changes are
committed every month. And there are often at least a few hundred
experiments in flight at any given point. These experiments present
new features to select users to gather feedback before widespread release.
Besides following good development practices and having penetration
test teams constantly trying to pinpoint vulnerabilities, its important to
automate as much of the vulnerability discovery as possible.
Near the end of 2014, Microsoft Bing services generated hundreds
of terabytes of usage data on a daily basis, logging up to hundreds of
billions of requests. Its safe to assume some of these requests were
actually attacks, trying to identify or exploit vulnerabilities. A typical
query to Bing is made sending to the service a URL request:
http://www.bing.com/search?q=election+results&form=PRUSEN&mkt=en-us
msdnmagazine.com
Assuming you could derive from the usage logs a list with all
canonical requests to a service, you could then probe for vulnerabilities trying to inject known malicious payloads into the parameter
values. For example, an intruder could use the following request
to verify if the Bing video application is vulnerable to cross-site
scripting (XSS) in the query parameter:
http://www.bing.com/videos?q=<script>alert("XSS")
</script>&form=PRUSEN&mkt=en-us
Processing Environment
Weblogs are usually distributed across several machines, making
sequential log file reads extremely efficient (even better if the files
are partitioned across different storage devices in a distributed file
system). That makes processing Weblogs a great application for the
MapReduce framework.
For this example, well place Weblogs in Microsoft Azure Blobs
under the same container called InputContainer. As a processing
platform, well use Azure HDInsight Streaming MapReduce jobs.
Theres good information already available online on how to set up
and configure HDInsight clusters. The code explained in this article
will generate binaries you should place in a container accessible to
the HDInsight cluster, referred to as ClusterBinariesContainer. As
code executes and processes input, it will create output in another
container called the ClusterOutputContainer, along with status
information saved to the ClusterStatusContainer. A visualization of
the Azure HDInsight processing configuration is shown in Figure 1.
January 2015 35
paramName = nameValuePair.Substring(0,
indexOfSeparatorParameterNameFromValue);
uniqueParameterNames.Add(paramName);
sb.Append(paramName);
sb.Append(DataFormat.ParameterNameFromValueSeparator);
sb.Append(DataFormat.OneOccurrence);
sb.Append(DataFormat.ParametersSeparator);
return keyAndValues.ToString();
}
}
return sb.ToString();
}
This code goes through every input line and extracts the unique
key, as well as any complementary values relevant to the problem
being solved. For example, if you were seeking the most common
user queries, the key would be the value passed for the query
parameter. Raw log lines appear as follows:
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port
cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus scwin32-status time-taken
2014-10-27 20:46:57 127.0.0.1 GET /search q=elect
ion+results&form=PRUSEN&mkt=en-us 80 - 127.0.0.1
Mozilla/5.0+(Windows+NT+6.4;+WOW64;+Trident/7.0;+Touch;+rv:11.0)+like+Gecko
- 200 0 0 5265
Columns cs-uri-stem and cs-uri-query have the relevant information you need to have parsed to get the canonical form of the
36 msdn magazine
request (the sample code doesnt include multiple hosting processing). The function to extract key and values from each log line
is outlined in Figure 3.
The only missing logic relates to extracting the parameter names
from the query column. Code to perform the task is shown in
Figure 4. The input for that functionthe previously provided
sample linewould be a string like this:
q=election+results&form=PRUSEN&mkt=en-us
The canonical form used in the sample code will remove the
parameter values, sort the parameter names and transform this
into a still valid query string:
form=1&mkt=1&q=1&
1
1
1
Figure 5 has the outline for the reducer code. It reads input lines
and splits those into key and values. It keeps
a counter until the key changes, and then
outputs the result.
You could easily modify the code and script
provided in this article for other purposes.
Change function ExtractKeyAndValuesFromLogLine to have the parameter values
as the keys and youd have a useful distribution of value frequency. In its current form,
the output will be a list with the attack surface, showing the normalized application
path and frequency of requests:
search?form=1&mkt=1&q=1&
video?form=1&mkt=1&q=1&
3
10
January 2015 37
Ground Truth:
Training Data
(Log Labeled Data)
Scoring
True Positive
True Negative
False Positive
False Negative
Action
Boosting GT
Boosting GT
Solution
ML Module
Prepare
Features
Feature
Experiments
ML Training
Classification
or Regression
ALISSON SOL is a principal architect for Microsoft. He has many years of software
development experience, with a focus on image processing, computer vision, ERP
and business intelligence, Big Data, machine learning and distributed systems.
Prior to starting at Microsoft in 2000, he cofounded three software companies,
published several technical papers and recorded several patent applications. Read
his blog at AlissonSol.com/blog.
Scoring
Process
THANKS to the following Microsoft technical experts for reviewing this article:
Barry Markey and Viresh Ramdatmisier
Big Data
Untitled-1 1
11/17/14 2:56 PM
vslive.com
Redmon
Code Home
August 10 14
Microsoft HQ
Redmond, WA
JUST
ADDED!
Sa FranciVc
Code By The Bay
June 15 18
The Fairmont
San Francisco, CA
SAN FRANCISCO
Multi-track Events
Focused, Cutting-edge .NET
Education
Covering the Hottest Topics
Relevant and Useable
Content
Expert Speakers, Including
Many Microsoft Instructors
Interactive Sessions
Discuss Your Challenges
Find Actionable Solutions
Las Vegas
March 16 20
Ballys Hotel & Casino
Las Vegas, NV
SUPPORTED BY
PRODUCED BY
magazine
Untitled-2 2
12/8/14 2:37 PM
NAVIGATE THE
.NET HIGHWAY
New York
WITH
NOW
Locations
t Cho
Fro!
Orland
AuVti
Dont Mess with Code
June 1 - 4
Hyatt Regency
Austin, TX
SharePoint Live!
SQL Server Live!
Modern Apps Live!
TechMentor
November 16 20
Loews Royal Pacic Resort
Orlando, FL
vslive.com
Untitled-2 3
12/8/14 2:38 PM
MICROSOFT AZURE
Occasionally Connected
Data in Cross-Platform
Mobile Apps
Kevin Ashley
Most mobile apps need to stay offline for some periods of process in the OS. In addition, there are different types of data
time, and mobile users expect their apps to work gracefully in both
connected and disconnected states. Hundreds of millions of mobile
device users might not be aware of needs that the apps have with
regard to online and offline states; they simply expect the apps to
work under any circumstances. In this article Ill show you ways
to enable your mobile app to work in both states and synchronize
data gracefully with the cloud in Windows, iOS and Android using
cross-platform Xamarin tooling and Microsoft Azure Mobile Services.
As a mobile app developer myself, I encountered the need to
synchronize offline data early on. For my Winter Sports ski app
(winter-sports.co) and Active Fitness activity tracking app (activefitness.co),
its somewhat expected that you cant get a decent connection on
the slopes or on the run. So those apps need to be able to synchronize data collected offline, without significant impact on battery
life and reliability. In other words, the apps need to work efficiently
in any conditions.
Theres more than meets the eye when considering persistent
storage. To start, there are multiple approaches to synchronizing,
meaning it can be done from within an app or as a background
This article discusses:
Using cross-platform functionality
Offline synchronizing of structured data
Manually synchronizing serialized data
Synchronizing unstructured data with the cloud
Technologies discussed:
Microsoft Azure Mobile Services, Xamarin
used by many sports and fitness tracking apps, such as Active Fitness,
or apps that need to synchronize structured data from local storage
with the cloud. I added latitude, longitude, speed and distance to the
SensorDataItem class as an example of data collected by sensors,
such as GPS, to illustrate the idea. Of course, the data structure in the
actual app might be more complicatedand include dependencies
but my example will give you an idea of the concept.
to specify a subset of data, or any OData query. Unlike push operations, which happen on an entire context, pull is executed on the table
level. If items are pending in the synchronization queue, those items
are pushed firstbefore pull operations executeto prevent data loss
(yet another benefit from using Azure Mobile Services for data synchronization). In this example, I pull data that has a nonzero speed
(collected by my GPS sensor, for example), stored earlier in the server:
var query = sensorDataTable.Where(s => s.speed > 0);
await sensorDataTable.PullAsync(query);
The Purge Operation This clears data specified from local and
remote tables, causing synchronization. Similar to pull, you can
use LINQ to specify a subset of data, or any OData query. In this
example, I purge data that has zero distance (which might also
come from my GPS sensor) from my tables:
var query = sensorDataTable.Where(s => s.distance == 0);
await sensorDataTable.PurgeAsync(query);
await client.SyncContext.PushAsync();
pulling data from a remote store into the local store. You can use LINQ
msdnmagazine.com
[JsonProperty]
public double speed { get; set; }
}
January 2015 43
44 msdn magazine
Untitled-1 1
11/26/12 3:02 PM
is twofold. First, you must write more code. Second, the app must
be running, potentially draining battery life and limiting the UX.
The best solutions leverage some of the elegance of built-in data
synchronization techniques.
I provided source code for a basic upload and download operation
in a cross-platform Xamarin app in BlobTransfer.cs (see accompanying code download). This code should work on iOS, Android and
Windows. In order to use platform-independent file storage, I used
the PCLStorage NuGet package (Install-Package PCLStorage), which
allows me to abstract file operations on iOS, Android and Windows.
To initiate an in-process transfer, I call my TransferQueue AddInProcessAsync method:
var ok = await queue.AddInProcessAsync(new Job {
Id = 1, Url = imageUrl, LocalFile = String.Format("image{0}.jpg", 1)});
46 msdn magazine
THANKS to the following Microsoft technical experts for reviewing this article:
Greg Oliver and Bruno Terkaly
Microsoft Azure
Untitled-7 1
11/5/14 4:57 PM
AZURE INSIDER
BYOD Challenge:
Connect Mobile Devices
to the Enterprise
Greg Oliver and Bruno Terkaly
There are still many concerns surrounding the Bring
Your Own Device (BYOD) movement in corporate environments
and how Azure Mobile Services can help developers. A core value
of Mobile Services is that it democratizes identity and lowers the
cost and effort to provide secure access to protected corporate
resources. In this article, Well take a closer look at what it takes to
support more complex scenarios when connecting mobile applications to enterprise resources.
Well start by defining the identity stakeholders and look at the
similarities and differences with respect to employees, trading partners and customers. Well also look at software architectures that
provide secure connectivity for browser and mobile device users
accessing on-premises services and sites. Later in the article, well
demonstrate these techniques using an iOS app that connects to a
Mobile Services back end, as well as an on-premises service endpoint.
Technologies discussed:
Microsoft Azure, Azure Mobile Services
48 msdn magazine
Corporate Network
Company A
Perimeter Network
Company A
Active Directory
Federation
Services
Federation Proxy
Employee for
Company A
Internet Users
Employee
Company A
Firewall
Firewall
Employee
Company B
Perimeter DNS
Perimeter Network
Company B
Corporate Network
Company B
Federation Proxy
Active Directory
Federation
Services
Firewall
Firewall
Perimeter DNS
Employee for
Company B
Trust Relationship
Trading Partners
The traditional way companies have managed authentication across
each others IT infrastructures has been through federation trust.
This involves establishing a trust between the federation services of
the two companies (see Figure 1). This supported secure Web-based
transactions with business partners. However, its not as straightforward as it sounds, and can indeed present challenges.
The partner needs to set up a trust relationship between their
Active Directory and the other enterprises Active Directory. This
lets an employee from one company authenticate through their
own Active Directory and then swap authentication tokens with
the other companys Active Directory in order to gain access to an
app in the other network. This approach requires a lot of coordination and manual workflows for IT administrators.
On-Premises Datacenter
Active Directory
Federation Services
Azure Datacenter
Synchronize
with Directory
Synchronization
On-Premises-Hosted LOB
Cloud-Hosted LOB
VMs
VMs
Web Sites
Web Sites
Databases
Employee
Databases
Figure 2 depicts a more modern approach to identity management. Generally, a copy of employee identities are hosted in Azure,
although some identities may reside in Azure alone. Maintenance
is kept at a minimum because the original copy of most identities
is managed on-premises. A background synchronization process
keeps the cloud copy of identities fully synchronized. Users can
connect directly to Azure AD in a datacenter in the cloud and then
get redirected to the appropriate application.
For mobile app developers, youll find a number of libraries on
GitHub you can use to take advantage of Azure AD (bit.ly/1qmeipz).
Android, iOS, the Microsoft .NET Framework, JavaScript,
Node.js and more are all supported. For example, the iOS sample
shows you how to obtain an interactive authorization code to work
with a work account. You can tie this work account to an Active
Directory server running in your datacenter or live completely in
the cloud with Azure AD. On the back end, you could use either a
REST-based Node.js API or .NET Web API.
Customer Access
You dont usually think of customer-facing sites and services having
access to protected company resources. However, this is more
common than you think. For example, Wells Fargo might want
to expose a customers financial data across the Web via a secure
Web site or mobile app, while Netflix might want to provide secure
access to protected resources such as current account balance or
payment history. This becomes especially important for customers
using mobile devices.
In some scenarios, it even makes sense to leverage social identity
providers, such as Microsoft Account, Facebook, Google or Twitter.
This approach was demonstrated in detail in the November Azure
Insider article (msdn.microsoft.com/magazine/dn818496), in which we wrote
a native iOS application that uses Twitter as the identity provider.
The assumption here is that anyone can download your app or
access the Web site. Theres a publicly available service tier. Prospects
typically have an unauthenticated experience, and see only publicly
available information.Even in this case, there may be some need to
access on-premises resources.Your service could provide an unauthenticated tier of service or respond to a set of default credentials.
HTTP Rest
Customer
Training Partner
Firewall
On-Premises
Web Service
The third advantage of an Application Proxy is it provides isolation between cellular networks and on-premises networks. Back-end
services are never directly exposed because the Application Proxy
itself lives in Azure AD and the connector reaches out directly
from the protected resource. Finally, an Application Proxy protects
against denial-of-service attacks, giving you control over throttling,
queuing and session management.
API Management
A third approach to providing access to protected resources is Azure
API Management, which also behaves as a proxy to your on-premises
resources. This lets you expose Web services implemented within
your firewall to the outside world. To make this option work, youll
need to make some modifications to your on-premises Web server,
as well as create and configure an API in the Azure portal. You can
author your API with either .NET Web API or Node.js.
First, well consider authenticating with Azure API Management
basic authentication to provide outside access to an on-premises
IIS-based Web server. The first step to enabling this scenario is to
make some changes to your on-premises IIS Web server and enable
basic authentication. Within IIS, you can choose the authorization
icon and drill down to basic authentication to add a user. Azure
API Management will access on-premises IIS with this user profile.
The next approach you can use with Azure API Management
is shared secret authentication. This means the API Management
proxy will need to store a secret key. It will place that key in the
HTTP header before trying to connect to the on-premises backend Web service. It should be no surprise the back-end Web service
will need to pull the secret key from the HTTP header and process
the authorization request.
You can implement shared secret authentication by going to the
Azure Management Portal, navigating to the API Management
section and selecting Policies from the menu. Here, youll add
a policy, which is nothing more than a secret key sent to your
on-premises Web server. The policy definition file that youll add
is an XML document.
Hybrid Connections
The fourth and arguably simplest approach to granting access to
protected resources is using Hybrid Connections (see Figure 4), a
feature of the Azure BizTalk Services currently in Preview. Hybrid
Connections leverages Service Bus Relay technology to create a
iOS
Azure Datacenter
Android
Hybrid Connection
(Hostname and Port)
Windows Phone
Web
Corporate Network
Database
Hybrid
Connection
Manager
simple, secure and effective connection between on-premises process and an Azure Mobile Services service or an Azure Web Sites
site. You can use Hybrid Connections to connect to any on-premises
resource that uses TCP or HTTP for connectivity, including databases and ERP solutions such as SQL, Oracle and SAP.
A requirement for this is the on-premises process must be
accessible via a static TCP port, such as SQL Server on port 1433. You
can use any framework to connect to the resource, including Node.js,
Java or the .NET Framework. Most of the configuration requirements of
Service Bus Relay are abstracted away by Hybrid Connections. There
are no required changes to the source code of the on-premises process.
To use Hybrid Connections, configure a small amount of metadata in the Azure Management Portal. Install an agent on the server
that hosts your process (SQL Server, MySQL, your Web service and
so on). Theres a Service Bus Relay connection under the covers, using
an SAS key for authentication. You can rotate both service-side and
client-side keys independently from within the portal. Because it uses
Service Bus Relay, no incoming endpoints or proxies are required.
If you prefer more simplicity in your set up and developer efforts,
Hybrid Connections might be your solution.Better yet, because
its available in the free tier of Azure BizTalk Services, you can use
it cost-effectively, only paying for egress bandwidth.
Figure 5 Client Code Leverages Protected
Resources via a Hybrid Connection
// Use the SQL Server connection
try
{
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder["Data Source"] = "myserver";
builder["Integrated Security"] = false;
builder["Initial Catalog"] = "mydb";
builder["User ID"] = "greg";
builder["Password"] = "S3cr3t";
int count = 0;
string query = "SELECT COUNT(*) FROM mytable";
using (SqlConnection conn = new SqlConnection(builder.ConnectionString))
using (SqlCommand cmd = new SqlCommand(query, conn))
{
conn.Open();
cmd.CommandType = System.Data.CommandType.Text;
count = Convert.ToInt32(cmd.ExecuteScalar());
}
string results = string.Format("Count of records in mytable is {0}", count);
Services.Log.Info(results);
}
catch (Exception ex)
{
Services.Log.Error(ex.Message);
}
// Use the Web service connection
try
{
const string URL = "http://mydevbox:31106/";
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(URL);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
string response = await client.GetStringAsync("api/values/5");
Services.Log.Info("Accessing the web service succeeded.");
}
catch (Exception ex)
{
Services.Log.Error(ex.InnerException.Message);
}
msdnmagazine.com
Wrapping Up
Identity is becoming increasingly important in the world of BYOD.
Businesses are under increasing pressure to support mobile
devices in the workplace. Its made more complex by the fact that
we live in a hybrid world. Key resources are located in the cloud and
on-premises. Authentication may occur in the cloud or on-premises
or both. Protected resources might include business apps, services
running on-premises or cloud-hosted Web services. With so many
variables, you need multiple flexible approaches.
For full details of this implementation, check the Go Live on
Azure blog post at bit.ly/1rVbtCp, and for a Java-based treatment of
the topic, bit.ly/1zW7XpZ.
Q
GREG OLIVER joined the Microsoft Azure ISV organization in 2010. He spends most
of his time helping companies with their migration plans and implementations.
Most recently, he has been working with a popular consumer games company with
their migration from a competing cloud provider. Prior to joining Microsoft, he
was a technology partner in a startup company.
THANKS to the following Microsoft technical expert for reviewing this article:
Santosh Chandwani
January 2015 51
TYPESCRIPT
Understanding TypeScript
Peter Vogel
In many ways, its useful to think of TypeScript on its own
merits. The TypeScript language specification refers to TypeScipt as
a syntactic sugar for JavaScript. Thats true and probably an essential step in reaching to the languages target audienceclient-side
developers currently using JavaScript.
And you do need to understand JavaScript before you can understand TypeScript. In fact, the language specification (you can read
it at bit.ly/1xH1m5B) often describes TypeScript constructs in terms of
the resulting JavaScript code. But its equally useful to think of TypeScript as a language on its own that shares features with JavaScript.
For example, like C#, TypeScript is a data-typed language, which
gives you IntelliSense support and compile-time checking, among
other features. Like C#, TypeScript includes generic and lambda
expressions (or their equivalent).
But TypeScript, of course, is not C#. Understanding whats
unique about TypeScript is as important as understanding what
TypeScript shares with the server-side language youre currently
This article discusses:
Using TypeScript to develop apps
The similarities and differences of TypeScript and JavaScript
How TypeScript works with JavaScript
Technologies discussed:
JavaScript, C#, TypeScript
52 msdn magazine
TypeScript Is Data-Typed
TypeScript doesnt have many built-in data types you can use to
declare variablesjust string, number and Boolean. Those three
types are a subtype of the any type (which you can also use when
declaring variables). You can set or test variables declared with those
four types against the types null or undefined. You can also declare
methods as void, indicating they dont return a value.
This example declares a variable as string:
var name: string;
You can extend this simple type system with enumerated values
and four kinds of object types: interfaces, classes, arrays and functions.
For example, the following code defines an interface (one kind of
object type) with the name ICustomerShort. The interface includes two
members: a property called Id and a method called CalculateDiscount:
interface ICustomerShort
{
Id: number;
CalculateDiscount(): number;
}
As in C#, you can use interfaces when declaring variables and return
types. This example declares the variable cs as type ICustomerShort:
var cs: ICustomerShort;
You can also define object types as classes, which, unlike interfaces,
can contain executable code. This example defines a class called
CustomerShort with one property and one method:
class CustomerShort
{
FullName: string;
UpdateStatus( status: string ): string
{
...manipulate status...
return status;
}
}
Like more recent versions of C#, its not necessary to provide implementation code when defining a property. The simple declaration of
the name and type is sufficient. Classes can implement one or more
interfaces, as shown in Figure 1, which adds my ICustomerShort
interface, with its property, to my CustomerShort class.
msdnmagazine.com
Besides object types (class, interface, literal and array), you can
also define function types that describe a functions signature. The
following code rewrites CalculateDiscount from my CustomerShort class to accept a single parameter called discountAmount:
interface ICustomerShort
{
Id: number;
CalculateDiscount( discountAmount:
( discountClass: string, multipleDiscount: boolean ) => number): number
}
Like C#, you can declare variables using an interface and then
set the variable to an object that implements that interface:
var cs: ICustomerShort;
cs = new CustomerShort();
cs.Id = 11;
cs.FullName = "Peter Vogel";
Finally, you can also use type parameters (which look suspiciously
like generics in C#) to let the invoking code specify the data type
to be used. This example lets the code that creates the class set the
datatype of the Id property:
class CustomerTyped<T>
{
Id: T;
}
January 2015 53
This flexibility lets you assign TypeScript object literals to variables declared as classes or interfaces, provided theyre structurally
compatible, as they are here:
var cs: CustomerShort;
cs = {Id: 2,
FullName: "Peter Vogel"
}
var csi: ICustomerShort;
csi = {Id: 2,
FullName: "Peter Vogel"
}
54 msdn magazine
Classes can extend other classes in the same way one interface can
extend another. The class in Figure 4 extends CustomerShort and
adds a new property to the definition. It uses explicit getters and setters
to define the properties (although not in a particularly useful way).
TypeScript enforces the best practice of accessing internal fields
(like id and fullName) through a reference to the class (this). Classes
TypeScript
Declaring a constructors parameter as private creates an internal property it can only be accessed from code inside members of
the class through the keyword this. If the parameter isnt declared
as public or private, no property is generated.
and private members (all public members of the base class are
overrideable while private members are not). To override a public
member, simply define a member in the derived class with the same
signature. While you can use the super keyword to access a public
method from a derived class, you cant access a property in the base
class using super (though you can override the property).
TypeScript lets you augment an interface by simply declaring an
interface with an identical name and new members. This lets you
extend existing JavaScript code without creating a new named type.
The example in Figure 5 defines the ICustomerMerge interface
through two separate interface definitions and then implements
the interface in a class.
Classes can also extend other classes, but not interfaces. In
TypeScript, interfaces can also extend classes, but only in a way that
involves inheritance. When an interface extends a class, the interface includes all class members (public and private), but without
the class implementations. In Figure 6, the ICustomer interface
will have the private member id, public member Id and the public
member MiddleName.
The ICustomer interface has a significant restrictionyou can
only use it with classes that extend the same class the interface
Figure 5 The ICustomerMerge Interface Defined Through
Two Interface Definitions
interface ICustomerMerge
{
MiddleName: string;
}
interface ICustomerMerge
{
Id: number;
}
class CustomerMerge implements ICustomerMerge
{
Id: number;
MiddleName: string;
}
January 2015 55
extended (in this case, thats the Customer class). TypeScript requires
that you include private members in the interface to be inherited from the class that the interface extends, instead of being
reimplemented in the derived class. A new class that uses the
ICustomer interface would need, for example, to provide an
implementation for MiddleName (because its only specified in the
interface). The developer using ICustomer could choose to either
inherit or override public methods from the Customer class, but
wouldnt be able to override the private id member.
This combination of interfaces, classes, implementation and extension provides a controlled way for classes you define to extend classes
defined in other object models (for more details, check out section
7.3 of the language specification, Interfaces Extending Classes).
Coupled with the ability of TypeScript to use information about
other JavaScript libraries, it lets you write TypeScript code that
works with the objects defined in those libraries.
56 msdn magazine
on the DefinitelyTyped site at definitelytyped.org. Through these definition files, TypeScript can effectively read the documentation
about the libraries with which you need to work.
Reading the documentation, of course, means you get datatyped IntelliSense support and compile-time checking when using
the objects that make up the library. It also lets TypeScript, under
certain circumstances, infer the type of a variable from the context in which its used. Thanks to the lib.d.ts definition file included
with TypeScript, TypeScript assumes the variable anchor is of type
HTMLAnchorElement in the following code:
var anchor = document.createElement( "a" );
THANKS to the following Microsoft technical expert for reviewing this article:
Ryan Cavanaugh
TypeScript
ement1); areaSerie
areaSeries
ies.A
Add(seriesElement2);
A
dd(se
(s riesElement2
t2);
) areaSeries
areaSeries.Ad
Add(seriesElement3);
A d(seriesElement3); // Add series to the plot area plotArea
plotArea.Series.Add(areaSeries);
Series Add(areaSeries); //page
//page.Elemen
Elements
em ts.Add(
Add(
dd( new
ne LayoutGrid()
LayyoutGrid() ); /// Add
La
Add the page elements to the page AddEA
s, 240, 0); AddEAN1
AN 3Sup
Sup5(pa
5(p ge.Eleme
ent
nts, 480, 0); Ad
ddUPCVersionA(page.Elemen
e ts, 0, 135); AddUPCVersionASup2(page.Elements, 240, 135); Ad
dd
dUPC
UPC
CVers
sionA
o Sup5((page.Elemen
nts,
t 480, 135); AddEAN8(page.Elements, 0,
.Elements, 480, 270);; Add
ddU
UPCVersionE(pa
page.Elementts, 0, 405); AddUPCVersionESu
E p2(page.Elements, 240, 405); AddUPCVersionESup5(page
age.Ele
.Ele
lem
ments,
s, 48
480, 405); // Add the page
e tto the document document.Pages.Add(pa
CaptionAndRectang
a le
e(eleme
ements, EAN/JA
/JAN 13 Bar Cod
de, x, y, 204, 99); BarCode barCode = new Ean13(123456789012, x, y + 21); barCode.
ode.X
X+
+= (20
04 - ba
arCo
ode.GettSymbolWidth()
h ) / 2; elements.Add(barCode); } private vo
dRectangle(element
e s,, EAN
EAN/JAN 13 Bar
ar Code,
C
2 digit supplement, x, y, 204, 99); BarCode barCode = new Ean13Sup2(1
2 2345
56789
678 012
1212,
2, x, y + 21
21);
1); barCo
ode.X
X += (204 - barCode.GetSymbolWidth()) / 2; elements.Add((barC
ts, oat x, oat y) { AddCa
A CaptionAndRectan
angle(elements, EAN/JAN 13 Bar Code, 5 digit supplement, x, y, 204, 99); BarCo
a C de barCo
arC
Code
de = new
n
Ean13Su
Ean1
S p5(12
2345
567890
01212345, x, y + 21); barCode.X += (204 - barCode
e.Get
ddUPCVersionA(Grou
Group elemen
em ts, oat x, oat
oa y) { AddCaptionAndRectangle(element
e s, UPC Version A Bar Code, x, y, 204,
2
99);
9) Ba
B
BarrCode
C
barC
bar
Code = ne
ew UpcVe
pcVersionA
A(12345678901, x, y + 21); barCode.X += (204 - ba
arCo
ddUPCVersionAS
Sup2(
up2 Grou
oup
p elements,, oat
oa x, oat y) { AddCaptionAndRectangle(ele
( ments, UPC Version E Bar Code, 2 digit
git sup
supp
up lement
nt, x,
x y, 204, 99
9); Ba
arCod
de barC
Code = new UpcVersionASup2(12345678
7 90112, x,
x, y +
s.Add(barCode); } private
te vo
oid AddUPCV
PCVersi
ers onASup5(Group elements, oat x, oat
o y) { AddCaptionAndRectangle(ele
em
ment
ents, UPC
UPC Ver
Version E Bar Code, 5 dig
git su
upplem
ment, x, y, 204, 99); BarCode barCode = new UpcVe
ersio
ode.GetSymbolW
Width(
dth )) / 2
2; elements.Add
Add(bar
(ba Code); } private
e voi
v d AddEAN
EAN8(Group
p elements, oat x, oat y) { AddC
ddCapti
tionAn
onA
n dRec
Rec
ect
ctangle(elem
ments, EAN
N/JAN
N 8 Bar Cod
de, x, y, 204, 99); BarCode barCode = new
n
Ean8(1234
34
g(); leDialog.Title
le = Op
Open
en File
F Dialog
g; l
eDialog.Filter = Ad
Adobe PDF
F les
es (*.pdf)
f)|*.pdf|All Files (*.*)|*.*; if (leDi
eDialog.
log.Sh
Show
wDiallog()
og == Dialog
gResult.OK) { pdfViewe
ewer.Op
penFile(leDialog.FileName, ); } Save
Sav File
F Diallog sa
av
aveF
File Dialog; ssaveF
veFileDialo
al g.Filter = Ado
Adobe
e PDF les (*.pdf)
f)|*.pdf|All Files (**.*)|*.*; if (saveFileDialog.ShowD
owDialo
ialo
a g()=
g()==Dia
=Dia
Di logResul
esult
.O
OK) { pdfV
fViewe
ewerr.SaveAs(saveFileDia
Dialog.FileName
e); } if (p
( dfVi
dfV ewe
wer.P
Page
WithDialog(); } else
e se { Mess
Me ageBox.S
Show(
w P
Please open a le to printt); } OpenFile
F Dialog leDi
D alog
log = ne
ew Ope
penFileD
pen
Dialog(); le Dialog.Tiitle = Open File Dialo
og; lleDialog.InitialDirec
ecto
ory = @c:\
:\ ;
leD
leDialog
lo .Filter
ter = All
F
) == DialogResul
es t.O
t.OK) { Dy
D namicPDF
FView
ewerrClass test = new
ew Dynam
D
micPDFVie
ewerC
r lass(); PDF
DFPrin
Printter prin
inter
nter
er = test.OpenF
pe ileForP
orPrin
in
ntter
(leDia
(le
alog.FileName); prin
nter.PrintQuie
Quiet();
() } byt
by e[] cont
contents
t =
pServices; GCH
GC and
andle gc
ch = GCHandle
d .All
Al oc
c(contents, GCH
Hand
ndleTyp
Type.Pinned
d); Int
IntPtr cont
contents
entsIntPtr =gc
ch.
ch.
h.A
AddrOfPinned
nn Obje
ect()
ct ;p
pd
df
Viewer.O
.OpenB
pe ufffe
fer(co
r( ntentsIntPtr
t ,
ageElements,
s, oat
a x, oat
at y) { // Adds
dss a circltt to the pageElleme
ents AddCaptio
onAndR
AndRecta
ectangle(pag
pag
geEle
eEl ment
men s, Circle Page Elem
ment:
ent:,
t:: x,,
y); pageEl
geElements.A
s.Add(n
dd(new Circle(x
dd
(x + 112.5f
2 ,
shLarge)); } priva
vate
te void AddF
Ad or
ormatted
te
edTextArrea(Group
p page
geElemen
nts, oat x, oa
oatt y)
y { // A
Adds a fo
for
o mattted
d text area to
o thepageE
eElle ments strring formatt
m edHt
edHtml = <p><
<p <i>Dynamic</i><b>PD
b>P F</b
b>&tm
tm;
m Genera
era
ator
o v6.0 for
or
or .NE
matting suppo
ort for
or text th
that appearss in the document.
t. You
Y u havve + com
complet
ple
ete co
ontro
rol ovve
err 8 par
aragraph
ph properties:
p
spacing befo
efore
e, spacing
g after, r
rst liine + indenta
ntation, left indentati
tation, righ
r t in
ndent
ntatio
tion
n, aliignment, al
alllowi
<font face=Tim
Times
es>fontt fac
f e, </fon
nt>
><font poin
o tSiz
Size=6>ffont + size, </fon
</fon
nt><fo
<f ntt co
color
olo
llor=FF0000
00 >
>colo
or, </font>
><b>b
<b> old, </b
</b><
<i>italic and </i><
<u>u
underline</u>
>; + and 2 line pro
opert
rties: lea
eading
ng, an
nd le
ead
ding type. Text
extArea = ne
ew Format
Form tedT
dTextA
Area(for
orrmattedH
Htm
tml, x + 5, y + 20,, 215
5, 60,, F
Font
ontFamil
mi y.He
He
elvet
lv
vetica
e ica, 9, false)
e); // Sets the indent prope
roperty fo
formatte
att dTextAre
ea.Styyle.P
Paragrap
ph.In
ndent = 18; AddC
CapttionAndRect
Rectangl
gle(pa
e(pa
e
(pa
pa
ageE
geElements,
ts, F
ageEleme
m ntts, Fo
Form
mattedT
dTextA
tArea Overow
ow Text:, x + 279
9, y); pag
geEle
ement
men s.Ad
Add(fo
Ad
d(fo
d
ormat
orm
rmat
atttedTextA
tArea)); // Create
ea
an overow formatted
ed ttextt a
area forr the
t over
ow textt Fo
ormattedTextArea
a ove
overowFor
Formatt
ma edTe
Text
xtAr
tArea
ea = formatte
e
a(x + 284, y + 20);
20) p
pageE
Elemen
ements.Ad
dd(o
(over
verow
ow
wForm
wFo
rmat
a tedTe
extArea); } priv
private
ate void A
Add
dImag
mage(Group
mag
up pag
geElem
eme
ents, oat x, oat y) { /// Adds an
n image
e to th
he pa
ageElem
men
ents AddCaptionAndRe
dRectangle((pag
pageElem
ments
en
nts Image
nts,
ge
e Pag
es/DPDFLo
ogo.pn
.png), x + 112.5
5f, y + 50f,
50f, 0.24
0.24f
4f); // Image is size
ed an
nd cente
entered
d in
n the rec
ecta
tangle ima
m ge.SetBo
B unds(215, 60); image.VAlign = VAlign.Cen
enterr; ima
age.Align
n = Align.Center; pag
geE
eElements.Ad
.Add
d(imag
ge); } priv
vate void A
pageElemen
nts Ad
AddCap
dC tion
onAndRecta
angle(pag
ngle(pag
geElements,
eEle
L
Labell & PageNumbe
Page
eringL
erin
g bel Page E
gLab
Elem
ementts:, x, y); string labelText
T
= Labels can be rottated; strring number
mbe Text = PageNum
mbe
eringLabels
els cont
contai
ain page num
mb
be
ering
xt, x + 5, y + 12,
12 22
220, 80,
0 Fontt.Time
messRom
Roman,
an, 12, TextAlign..Cen
nter);; lab
label.Ang
Ang
gle = 8; Page
eNumb
Num erin
ri gLa
gLabel pageNumLabel = new PageNumber
b ingLabel
ab (n
numb
berText, x + 5, y + 55, 220, 80, Font.TimesR
esRoman, 12,
12 TextAl
tAlig
ign.
ign
n Ce
m nts.Add(labe
me
abel);
l); } private
e void AddL
dLin
ne(G p pageElemen
ne(Group
nts, oat x, oa
oat y)) { /// Addss a lin
ne to the
he pageE
pag lements AddCaptionAndRectangle(p
( ageEleme
e nts, Line Pa
age Element:, x, y); page
eElemen
nts.A
s.Add(ne
ew Line(x
x+5
5, y +
w Line(x
x + 220,
2
y + 20, x + 5, y + 80, 3,
3, RgbCo
Rg olor.Green)); } pr
priv
iva
ate void
d AddLi
A
ink
nk(Group
up p
pag
pa eElement
ments, oat x, oat y) { // Adds a link to the pageEleme
em ntts Fo
ont font = Fo
ont.TimesRoman;; st
string text = T
This iss a link
k to Dyna
amic
m :, x, y); Label label = ne
ment
new Lab
Label(textt, x + 5, y + 20, 215
5, 80
5,
0, fon
nt, 12, Rgb
R bColor.
or.B
Blu
lue);; label.Und
Under
erline = true; Link link = new Link(x + 5, y + 20, font.
on GetTe
extWidth
h(tex
xt, 12), 12 - font.G
GetD
Descend
der(1
r(12), ne
ew Url
UrlA
lAction(
n(h
http
E men
Ele
nts.Add(li
( nk);; } priva
p vate
e vvoid
d AddPath(
ath Grroup pageElem
mentts,
oat
oat x, oatt y) { // Ad
Adds a path
h to the pageElements ceTe.DynamicPDF.PageElement
en s.Path
h path = new
w ceTe.DynamicPD
PDF.P
F.PageElemen
men
nts.P
s.Pa
ath(
h(x
x + 5, y + 20,
2 R
P s.A
Path
Add(new Line
eSubPat
Pa h(x
x + 215, y + 40))); path.Su
h.S bPatths.A
Add
dd((new Curv
urve
eToSubPat
Pa h(x + 10
08, y + 80, x + 160, y + 80)); path.SubPaths.Add(new
w Curv
veSu
ubPath(x + 5, y + 40, x + 65,
6 y + 80, x + 5, y + 60))); Add
AddC
Ca ionA
Capt
And
Add(p
path); } private
e void AddR
Rec
ctangle(Gr
G oup
p page
eElemen
nts, oat
oat x, oat
at y)
y) ordere
e dLis
dL t = ord
deredList.GetOverFlowList(x + 5, y + 20); AddCaptionAn
AndR
Recta
ang
gle(pag
ge.Elements, Order
r ed List
L Page
ge
e Ele
El ment
nt Ove
Ove
v row
r :, x, y, 2
8; //
8;
// Create
C
an uno
ordere
ed list Unordered
nor e List unorder
e edList
er
stt = ne
ew Uno
norder
rderedL
edList(x
x + 5, y + 20,
20 400, 90, Font.Helvetica, 10); unorderedList.Items.Add(
Add(Fruits); unordered
ere List.Items.Add(
d Vege
Vege
g table
es); U
Unorde
r eredS
re
edS
d ub
bList unord
t();
(); unorderedSubList.Items.
ms.Add(
dd(( Citrus); unord
ordered
eredSu
edSubLiist.Ite
emss.Ad
Add
d( Non
n-Citr
t us)
s ; Ad
AddC
CaptionAndRectangle(page.Elemen
nts, Unordered Lis
st Page
e Elem
me
ent:, x, y,
y 225, 110); Uno
n rd
dere
edSubLis
bLis
st u
un
norde
deredS
redS
d ubLi
ub st2 = uno
erredSub
bList2.Items.Add((Po
Potato); unorderedS
SubLis
ubLiist2.Item
ms.Ad
dd(B
Beans); Unor
no dere
deredSub
dSubLisst subUnorderedSubList = unordered
e SubL
S
ist.Items[0]].Su
ubLists.A
AddUnorder
rde edSubList(); ssub
bUnor
UnorderedSub
dS
Sub
bList.Ite
te
ems.A
m Add
d(Lime); s
;<M<CFG<;=FI
@EKL@K@M<LJ<
List sub
bUnorderedS
SubList2
st = unorderedSubL
S bList.Items
ist.
s[1].Su
ubLis
sts.A
AddUnorde
eredSu
edS bLis
bL t();
t() su
ubUnorderedSubList2.Items.Add(Man
a go); subUnorrdere
edS
SubList2.I
t2 tem
ms.A
Add(Banana);
); Un
Unord
deredS
dS
Su Lis
Sub
List
s sub
ubUnor
n dere
de dSubList
t();
() subU
Unordered
dSubList3.Items.Add(Swe
Swee
w t Po
Potato); Uno
order
d redS
SubList sub
bUnor
Uno dere
er dSub
dSubList
List4
4 = unorrderedSubList2.It
2 ems[1].S
].SubLists.AddUno
orde
ered
dSub
bList(
s ); subUn
ubU orderedSubLi
ubList
b st4.
s Ite
ems.Ad
A d(S
Ad
Strin
ing Be
ean)
an ; subUno
U rde
Add(Kid
dney Bean
ean); x += 279; pag
a e.Eleme
ements.Ad
dd(u
d nordere
edLisst); unorderedList
Lis = unord
nordered
ere List.GetOver
e FlowList(x + 5, y + 20);
) Add
A CaptionAndRec
ctan
ngle(p
page
ag .Eleme
ents, Unor
Unordere
dere
r d List Page
e Elem
ment Ove
ve ow:
ver
o , x, y, 225
oid
d Add
dTextField(Group pageElemen
dTextF
me ts,, o
oat x,, o
oat y)) { Tex
xtField txtt = new TextFi
xtF eld(txt
t fna
fname, x + 20, y + 40, 120, 20); txt.Defaul
u tValue = This is a Scrrollab
ble
e TextF
Field
d; txt.Borde
derCol
rCol
C o
or = Rgb
RgbC
Colo
or.B
r.Black; txt
xt ackgro
xt.Bac
kgroundC
un o
d(txt); T
d(
TextField
ex
txt1 = new TextFi
Field(
ld tx
xtf1na
f1 me,
me x + 175, y + 40, 120, 20); txtt1.Def
De ault
u Valu
alue = TextField; txt1.Password = true; txt1.MaxLength = 9; txtt1.Bo
ord
derColor = RgbCollor.Black;
or.B
B
txt1.B
1.Backg
ckgroun
ou dCol
olor
or = Rgb
R Colo
Colorr.Al
Al
e ies(); pieSeries.DataLabel = da
er
da;
a; plo
p tAre
Area
a.Series
rie .Add(pieS
Series
s); pieSeries.Eleme
lementss.Add(
Add(27,
27, Website A); pieSeries.Elements.Add
d (19, Website B)); pieSerries
es.Element
men s.Add(21
d(21, W
Web
ebsi
s te
e C);
); pieS
p eries.El
Elemen
ements[0
me ts[0
s[0].Co
s[0
].C lor
or = a
ess.Elements[2].Color = aut
utogra
og dien
dientt3;RgbC
RgbColo
or.Alice
eBlue; txt2.Too
.ToolTip = Multilin
ne; page
pageEl
Elements.Add(txt2); AddCaptionAndRectangle(pageEleme
men
nts, Tex
xtFi
Field Form
orm Pag
Page
e Elemen
Elemen
nt:,
:, x, yy,, 504
04, 85);
5) } priva
ate
e void
oid AddC
dComb
omb
C
Comb
oBox(cm
mbnam
bna e, x + 51, y + 40, 150,
15 20); cb.B
BorderColo
or = RgbColor.Blac
Black; cb.Ba
b.Back
ckgroundColor = RgbColor.AliceBlue; cb.Font = Font.Helve
elvetica
a; cb
b.Fon
Fo tSiz
Sizze = 12; cb.I
cb.Items
temss A (Item
tems.Add
e 1);
em
); cb.
cb.Items
tems.Add
.Add(It
Ad (It
( Item
em 2); cb
d table);
di
) cb.Item
ms[
s[
[Edita
able].Select
cted
ed = true;; c
cb.Editable = tru
ue; cb.ToolTip = Edi
Ed tabl
ab e Co
C mbo Box; pageElements.Add(cb); ComboBox cb1 = new
ew Combo
omb
b Box(
B x(cmb
mb1nam
me, x + 303,
303, y + 40, 150, 20);
20); cb1.B
cb1 Borde
rder
derColor = R
= Font.H
Helvetic
ca; cb
cb1.FontS
nt ize = 12
2; cb1.Itemss.A
Add(IItem 1); cb1.Ittems.Add(It
Item
em 2);
) cb1.
cb1.It
Items.Add(Item 3); cb1.Items.Add(Item 4); cb1.Itemss.A
Add
d(No
on-Edi
ditab
table
e);
); c
cb1.Items[
[NonNon-Edit
Editable
able].S
].Se
elected = true; cb1.
1 Edita
nts.Ad
nt
s
d(cb
(cb1); Converter.Co
C nvert(http://www.go
goog
ogle.c
com, Outputt.pdf);Convert
ve er.C
er.Conve
onvert(GetDocPath(DocumentA.rtf), Output.pdf);System.Dia
iagno
ostics
css.Pro
P ocess
ess.S
s Start(Outp
tput.p
ut.pdf)
pdf);; AsyncC
As ncConverter
rt aCo
Co
onverte
nve er = new A
err(aCo
(aC nverrter_Converted); aConverter.ConversionErro
or += new Con
nversionErrorEv
ventH
tHandler(aConverter_ConversionError); aConverter.Convert(@C:\t
C:\ em
mp\Docum
mp
mentA.rtf, @C:\tem
ment
em
mp\Ou
p\Output
tputA.pd
A.pdf);
f);
) aConver
v rter.
ter.Co
onvert(@C
ve t(@C:\temp\DocumentC.rtf, @C:\temp\OutputC
ver
C.pdf)); aCo
onve
erter.Convert(
e h
http://
p://www.yahoo.com, @C:\Temp\yahoo.pdf); ConversionOptions
ion op
option
ns = new Conversio
ns
sionOpt
nOpttions
ions(720
(720,, 720,
72 72, true); ce
eTe.D
Te. ynamicPDF
te \\o
temp
output.pdf, options); ceTe.DynamicPDF.Conve
ersion.Con
nvertter.Convert(C:\\\te
emp\\Document2.docx, C:\\temp\\output.pdf, options); string
g sam
ampl
mp eHtm
mp
H mll = <ht
h ml><
ml><body
body><p>
><p>
p This is a very simpl
m e HTML
ML strring includ
<t le border=\1\>
<tab
1 <tr><td>100</td><td>200</td> + <ttd>3
300<
</td></tr><tr><
<td>
>400</td><td>500</td><td>600</t
< d></tr></table><
></bod
/body><
y></
</h
</
/htm
ht >;Conve
html
o version.Co
n.Co
C nver
nverter.
ter.C
ConvvertHtmlString(sa
ample
mpleHtmll, C:\\
C \temp\
emp\\Sam
\Sam
erName
er
e, Path.Comb
o ine(GetPath(), LetterPortrait.pdff)); prrintJo
ob.D
DocumentName
e = Lett
Letter
e Portrait; if (printJob.P
ob. rinter.Color)
r
pri tJob.PrintOp
prin
P ntO
n
tions.Co
s. lor
o = true;
true; if (prin
(prin
ri tJob
tJo .Printer.Col
C late) printJob.P
b.P
.P
PrintOpti
Opti
p ons.
ons Co
on
ollat = tru
ollate
;peXd`ZG;=:fdgi\_\ej`m\G;=Jfclk`fej]fi%E<K;\m\cfg\ij
Z\K\ Jf]knXi\j ;peXd`ZG;= gif[lZkj gifm`[\ i\Xc$k`d\ G;= ^\e\iXk`fe# dXe`glcXk`fe# Zfem\ij`fe#
gi`ek`e^#m`\n`e^#Xe[dlZ_dfi\%Gifm`[`e^k_\Y\jkf]Yfk_nfic[j#k_\fYa\Zkdf[\cjXi\\oki\d\cp
\o`Yc\ Ylk jk`cc jlggcp k_\ i`Z_ ]\Xkli\j pfl e\\[ Xj X [\m\cfg\i% I\c`XYc\ Xe[ \]Z`\ek# k_\ _`^_$
g\i]fidXeZ\ jf]knXi\ `j \Xjp kf c\Xie Xe[ lj\% @] pfl [f \eZflek\i X hl\jk`fe n`k_ Xep f] fli
Zfdgfe\ekj#j`dgcpZfekXZkZ\K\Jf]knXi\ji\X[`cpXmX`cXYc\#`e[ljkip$c\X[`e^jlggfikk\Xd%
NNN%;PE8D@:G;=%:FD
KIPFLIG;=JFCLK@FEJ=I<<KF;8P
K
nnn%;peXd`ZG;=%Zfd&\mXcfiZXcc/''%-*(%,''-s"(+('%..)%/-)'
n
Untitled-1 1
9/8/11 12:41 PM
Technologies discussed:
Windows Phone 8.1, Visual Studio 2013 Update 3
can also be downloaded for offline use. This allows the map control
to fit in with the offline functionality of your app. Ill also show how
to take the Map control offline and keep the offline data up-to-date.
msdnmagazine.com
A Few Tips
In the code shown in Figure 3, the OnNavigatedTo event performs time-consuming work. Specifically, this event calls the
GetGeopositionAsync function of a Geolocator object. This function gets the devices current location, which is needed before the
image control and the TextBlock control can be properly positioned on the map. In situations like this, any controls added to the
map as children via XAML are initially displayed in the upper-left
corner of the map until they can be positioned on the map.
This creates a poor UX. To correct this, simply set up any added
controls as Collapsed within your XAML. The added controls can
be made visible once the control locations are calculated and the
object in which the controls are bound is set up. (Refer to Figure
1 and the last few lines of code in Figure 3.)
Consider using the DesiredAccuracyInMeters property of the
Geolocator object. Setting this property to 100 meters or less will
get the most accurate data available. If the device has GPS capabilities, the GPS will then be used to determine the devices current
location. If this value is greater than 100 meters, the Geolocator
object will optimize for power and use non-GPS data, such as Wi-Fi
signals. The 100 meter threshold could change as devices evolve,
so set this property based on the needs of the application and not
the underlying threshold, which triggers different behavior. Finally,
the DesiredAccuracyInMeters property overrides anything set in
the Geolocators DesiredAccuracy property.
Also, consider using the overload of GetGeopositionAsync,
which accepts a maximumAge parameter and a timeout parameter. The maximum age parameter is a TimeSpan that specifies the
maximum acceptable age of cached location data. The timeout
parameter is also a TimeSpan and will cause the GetGeopositionAsync function to throw an exception if determining the current
location takes longer than specified.
January 2015 59
vslive.com/lasvegas
Las Vegas
MARCH 16 20
EVENT PARTNERS
SUPPORTED BY
PRODUCED BY
magazine
Untitled-4 2
12/10/14 3:26 PM
NAVIGATE THE
.NET HIGHWAY
TRACKS INCLUDE:
Visual Studio / .NET Framework
JavaScript / HTML5 Client
Modern App Development
ASP.NET
Cross-Platform Mobile
Development
vslive.com/lasvegas
Untitled-4 3
12/10/14 3:10 PM
vslive.com/lasvegas
Las Vegas
MARCH 16 20
AGENDA AT-A-GLANCE
Ballys Hotel & Casino
will play host to
Visual Studio Live!, and
is offering a special
reduced room rate to
conference attendees.
CONNECT WITH
VISUAL STUDIO LIVE!
twitter.com/vslive
@VSLive
facebook.com
Search VSLive
linkedin.com Join the
Visual Studio Live group!
Untitled-4 4
ASP.NET
Cross-Platform Mobile
Development
Cloud Computing
JavaScript /
HTML5 Client
START TIME
END TIME
7:30 AM
9:00 AM
9:00 AM
6:00 PM
6:45 PM
9:00 PM
Dine-A-Round
START TIME
END TIME
7:00 AM
8:00 AM
8:00 AM
9:00 AM
Keynote: To Be Announced
9:15 AM
10:30 AM
10:45 AM
12:00 PM
12:00 PM
1:30 PM
1:30 PM
2:45 PM
3:00 PM
4:15 PM
4:15 PM
5:30 PM
Welcome Reception
START TIME
END TIME
7:00 AM
8:00 AM
8:00 AM
9:00 AM
9:15 AM
10:30 AM
10:45 AM
12:00 PM
12:00 PM
1:30 PM
1:30 PM
2:45 PM
3:00 PM
4:15 PM
4:30 PM
5:45 PM
7:00 PM
9:00 PM
START TIME
END TIME
7:00 AM
8:00 AM
8:00 AM
9:15 AM
9:30 AM
10:45 AM
11:00 AM
12:15 PM
12:15 PM
1:30 PM
Lunch
1:30 PM
2:45 PM
3:00 PM
4:15 PM
START TIME
END TIME
7:30 AM
8:00 AM
8:00 AM
5:00 PM
F01 - Workshop: Hybrid Mobile Apps with Cordova, Angular, and Azure - Brian Noyes
12/10/14 3:10 PM
NAVIGATE THE
.NET HIGHWAY
Database and
Analytics
Visual Studio /
.NET Framework
Windows Client
Windows Phone
W21 - To Be Announced
TH23 - To Be Announced
vslive.com/lasvegas
Untitled-4 5
12/10/14 3:38 PM
a progress bar shown across the Map control tells the user that its
the Map control doing work.
the XAML editor will not like this syntax and the value will never
get set. Microsoft is aware of this problem.
Figure 5 shows the Map control displaying the NFL stadium
locations. (This screenshot is from the code sample that accompanies this article. The code sample contains all the ancillary code
not shown here for the sake of brevity, such as instantiating the collection and properly formatting the control to fit nicely on a page.)
Figure 4 Setting Up the Map Control for Collection Binding
<Maps:MapControl
x:Name="myMapControl" Grid.Row="1"
MapServiceToken="{StaticResource MapServiceTokenString}" >
<Maps:MapItemsControl x:Name="MapItems" >
<Maps:MapItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding ImageSource}"
Maps:MapControl.Location="{Binding StadiumLocation}"
Maps:MapControl.NormalizedAnchorPoint="{Binding NAP}"
Height="15" Width="15"
/>
</DataTemplate>
</Maps:MapItemsControl.ItemTemplate>
</Maps:MapItemsControl>
</Maps:MapControl>
Scaling Controls
Its possible to size controls so they
represent a specified distance.
For example, you may want to
show a scale on your map. A scale
gives users a visual clue, allowing
them to guess distances between
objects on the map. Also, if youre
using the Map control to depict
a geofence, a good way to do this
is to add an ellipse to the Map
control, shape it into a circle,
and size the radius of the circle
such that the circle covers the
alert distance of the geofence.
Controls in Windows Phone
8.1
are sized by specifying width
Figure 5 The Stadiums of the
and
height in pixels. Therefore,
National Football League
scaling controls to represent a certain distance involves determining how much distance is represented
by a single pixel on the Map control. Heres the equation for determining the distance represented by a single pixel on the Map control:
const double BING_MAP_CONSTANT = 156543.04;
double MetersPerPixel =
BING_MAP_CONSTANT * Math.Cos(latitude) / Math.Pow(2, zoomLevel);
The latitude used should come from the Map controls center
property. It must be in radians, not degrees. Because latitude is
typically expressed in degrees, youll have to convert it to radians
by multiplying the degree value by Pi/180 (Math.PI/180). The zoom
level comes from the zoom level of the Map control and is a value
from 1 to 20. On Windows Phone 8.1, its expressed as a double.
A complete mathematical derivation of the equation shown here is
beyond the scope of this article; however, a few comments are in order.
At first glance the equation may seem incorrect. Why does the
latitude matter? Shouldnt the scale of a map simply be a function of
the zoom level? The truth is that latitude does matter and the zoom
level alone is insufficient when determining the scale of a map.
Bing Maps, which is the back end for the Map control, makes use
of the Mercator projection. The Mercator projection is a technique
for projecting the details of the surface of a sphere (in this case the
Earth) onto a square surface. This projection introduces inconsistencies in scale because the farther you go from the equator, the more
stretching there is to maintain a square fit. A simple experiment can
help you better understand the Mercator projection. Peel an orange
and save all the pieces. When the orange is completely peeled, put
the pieces back together on a flat surface and try to get them to
exactly fit into a square shape. Its impossible. The only way to get these
pieces into a square shape is to stretch the pieces that are not on the
equator of your orange. The closer you get to the poles, the more
stretching you need to do to get a square fit. This stretching creates a
difference in scale as compared to locations close to the equator. The
amount of stretching needed is a function of the distance from the
equator. Hence, the dependency on latitude. As an example of this
stretching in action on a Mercator projection of the Earth, consider
the two cities of Quebec, Canada, and Key West, Fla. A completely
zoomed-in view (Zoom Level of 20) of Quebec using the Map control will result in 100 pixels representing 33.5 feet. The same zoom
level of Key West will result in 100 pixels representing 44.5 feet. The
residents of Quebec enjoy a scale thats 11 feet better than the residents of Key Westa small consolation for the colder climate. For
more information on the Mercator projection, check out the MSDN
Library article, Understanding Scale and Resolution, at bit.ly/1xIqEwC.
The final fact to note on the equation is the Bing Map Constant.
The Bing Map Constant is based on the Earths radius and on the
equations Microsoft uses to determine the map view for a specified
zoom level. Its units are meters per pixel.
Figure 6 shows a TextBlock and a Rectangle added to a Map
control to be used as a distance scale. Figure 7 shows the ZoomLevelChanged event and the logic needed to create a distance scale.
(The code sample checks the RegionInfo.CurrentRegion.IsMetric
property and shows metric values for users who are more familiar
with the metric system.) Finally, Figure 8 show a screenshot from
the code samplea distance scale added to a Map control.
<Maps:MapControl
x:Name="myMapControl" Grid.Row="1"
MapServiceToken="{StaticResource MapServiceTokenString}"
ZoomLevelChanged="myMapControl_ZoomLevelChanged">
// Aditional units.
double KilometersPerPixel = MetersPerPixel / 1000;
double FeetPerPixel = MetersPerPixel * 3.28;
double MilesPerPixel = FeetPerPixel / 5280;
<!-- Distance scale, which is located at the lower left of the Map control. -->
<TextBlock Name="tbScale" Text="Scale Text" FontSize="15" Foreground="Black"
Margin="24,530,24,6" Opacity="0.6" />
<Rectangle Name="recScale" Fill="Purple" Width="100" Height="6"
Margin="24,548,24,24" Opacity="0.6" />
</Maps:MapControl>
msdnmagazine.com
January 2015 65
The built-in maps application is named Maps and the page shown
in Figure 9 can also be accessed by tapping the Download maps
button from the Settings menu option. Because this function takes
the user to another application (the built-in maps application), he
will have to return to the original application manually.
The page shown in Figure 9 shows all the maps that have been
previously downloaded. It also contains a menu option that allows
you to delete any of the previously downloaded maps in case storage on the device needs to be freed or a map is no longer needed.
Tapping the add button (+) starts the map selection wizard,
displaying a page that lets you specify the continent containing
the map you wish to download. Once a continent is selected, the
page displaying all countries within the selected continent will be
displayed. You can select all the countries within a continent and
download maps for the entire continent, but this would require a
large amount of storage. For example, all the maps for the United
States require 3.4GB of storage. The entire continent of North and
Central America would require much more.
If you select a large country that contains multiple regions or
states, youll see a page that lets you choose specific regions or states.
You can select more than one region by using the Select button.
When a region is specified, youll be taken to the Download page
shown in Figure 10. This same page will also be shown if you
select a small country without any regions or states.
Before downloading any maps, its a good idea to encourage users to
check the available space on the device by going to the Settings application and selecting Storage sense. This will show the available space
on the device, as well as the storage used by each application on the device in case space needs to be freed up. At the time of this writing, there
are no WinRT APIs that allow you to programmatically determine the
amount of storage used on a device or the amount of storage available.
Its also a good idea to download maps while connected to an
unrestricted network, such as Wi-Fi. The code sample for this
article shows how to check the current network connection and
warn the user if theyre on a metered connection.
The ShowMapsUpdateUI function is similar to the ShowDownloadedMapsUI function in that it takes the user to the built-in maps
application. When this function is called, all downloaded maps
are checked to see if they need to be updated. If any previously
downloaded maps require updating, the user will be told the size
of the update and given the option to either cancel or proceed with
the download. This same functionality is also available from the
Settings menu option of the Maps application.
If your application encourages the downloading of maps by
utilizing ShowDownloadedMapsUI, its a best practice to also use
ShowMapsUpdateUI so that downloaded maps can stay current.
Wrapping Up
In this article, I showed you how to add application data to the
Map control for Windows Phone 8.1. This included adding XAML
controls to a map, data binding and drawing controls to scale.
I also showed how to take the Map controls underlying data
offline so the Map control can be set up to work seamlessly within
applications designed for offline use.
Q
KEITH PIJANOWSKI is an engineer, entrepreneur, and business guy. He has more
than 20 years of experience in the software industry, working for startups
and large companies in roles that have ranged from writing code to business
development. Reach him at keithpij@msn.com or twitter.com/keithpij.
THANKS to the following Microsoft technical expert for reviewing this article:
Mike OMalley
Windows Phone 8.1
Untitled-2 1
5/31/13 10:57 AM
MICROSOFT AZURE
Cross-Platform
Cloud Automation
with JavaScript
Steven Edouard
Not everyone knows Microsoft Azure has the Cross-Platform
Command-Line Interface (xplat-cli) for managing Azure Infrastructure-as-a-Service (IaaS) and Platform-as-a-Service (PaaS) services,
but it does. For years, Microsoft has advocated using Windows
PowerShell as a scripting language, which worked well for provisioning
cloud-based resources. But now that more developers are involved
in deploying and moving applications to the cloud, it makes more
sense to use JavaScript. The Azure Service Management REST APIs
make this cross-platform implementation easier. The official Azure
xplat-cli is implemented on top of Node.js, the same runtime often
used to build high-performance Web sites and APIs with JavaScript.
Building on top of Node.js makes scripting truly cross-platform.
It means you can run your scripts for managing virtual machines
(VMs), SQL Databases, Web sites and virtual networks from any
machine. This frees you to do automation scripts in a wider variety of
languages and for a wider variety of client computers (see Figure 1).
There are many advantages to scripting cloud resource provisioning. For example, the Web portal isnt repeatable and requires
human input. Another advantage is being able to source control the
steps to provision and deploy your service using different specific
configuration values. In this article, Ill walk through scripting the
process of creating VMs associated with an Affinity Group and a
virtual network using Node.js as our script automation environment.
Windows
PowerShell Scripts
JavaScript
Shell Script
Node.js xplat-cli
Azure Datacenter
Azure Management REST API
Databases
Compute
Storage
Technologies discussed:
Microsoft Azure, Windows PowerShell, Node.js
68 msdn magazine
BatchScript
After a few lines of output from the Node Package Manager, youll
have your azure-cli installed and you can start using it immediately.
msdnmagazine.com
To get started, take a look at how you can make a batch of VMs.
First, install the necessary packages:
# a
npm
# a
npm
# a
npm
70 msdn magazine
// vmNames now only contains the name of VMs that do not exist.
// Create them.
Microsoft Azure
domainName = nconf.get('dns_name');
userName = nconf.get('vm_username');
password = nconf.get('vm_password');
imageName = nconf.get('vm_image_name');
vmCreationTasks = [];
taskArguments = [];
Notice how the azure-scripty library lets you easily parse output
from the azure-cli via callback function result argument. It also lets
you create CLI commands by declaratively specifying the command,
positional and named parameters.
The pattern in Figure 6 is the same one you use to create your
virtual network and uses the azure-scripty library in the same way.
Some of the code in Figure 6 has been omitted for brevity, but
the same pattern exists. The needed resource is specified in the
configuration file. Youll need to provision it if it doesnt exist.
You can create a batch of VMs once youve created the dependencies (the affinity groups and networks). The number of VMs
youll create is specified in the vm_count field in the config.json
configuration file. Following the same pattern, first list the current
VMs on the subscription, check if any of the VMs youll create
already exist and create only the ones that dont exist.
Figure 7 will follow a simple algorithm to name the VMs using
the vm_base_name field in the config.json and append the numbers 0 (vm_count 1) to the end of the VM name. Given the
current config.json, create sedouardmachine0, sedouardmachine1
and sedouardmachine2 because none of those machines already
exist on the subscription.
Figure 7 confirms the list of non-existing VMs in the vmNames
array. Figure 8 will use the async library to manage the asynchronous tasks that will go off and create the VMs.
Figure 8 creates a task for each VM you need to create. Then
you need to add those tasks to an array, vmCreationTasks. Each
task function is bound to the necessary arguments in order to call
the Azure azure-cli with the correct VM name. Afterward, use
the async library to run each task in series and execute the callback with a null or an error parameter indicating if the VMs were
successfully created. Figure 9 confirms the output of the script and
lists out all the VM that have been created.
Each of your VMs has been successfully created. You can even
check back to your portal to confirm that the machines have been
created and are part of the specified virtual network. Use the GitHub
repository at bit.ly/azure-xplat-cli to get started scripting your Azure
setup using Node.js.
Wrapping Up
The Azure xplat-cli lets you completely automate the process of
configuring and deploying Azure resources in portable scripts
you can use on virtually any OS. It also lets you use source control
and configuration files to simplify sharing. You could have multiple versions of config.json, each one representing a deployment
model for test, staging and production.
You can also recreate the deployment process quickly and efficiently. The forthcoming Azure Resource Manager Microsoft will
release in 2015 will go above and beyond whats illustrated here, but this
approach is virtually identical to what the Azure Resource Manager
will dowhich is declaratively specify how resources are provisioned
in the Azure datacenter.
Q
STEVEN EDOUARD is a developer evangelist at Microsoft. Before that, he worked
on the .NET runtime team as a software
test engineer delivering products like the
Microsoft .NET Framework 4.5 and .NET
Native Compilation. Now his passion
resides in exciting people on the limitless
potentials of cloud computing services
through engaging technical demonstrations, online content and presentations.
NAVIGATE THE
.NET HIGHWAY
2 LRcatiRQ to ChR e frRm in JuQe!
Visual Studio Live! is hitting the open
road on the ultimate code trip to help you
navigate the .NET Highway. In June,
were pullin into Austin, TX, June 1 4
and then headed to San Francisco, CA,
June 15 18.
Both of these great locations will feature
four days of .NET developer training sessions,
workshops and networking events all
designed to make you better at your job.
Code with industry experts, get practical
answers to your challenges, and immerse
yourself in what's to come on the
.NET horizon. The full agenda and speaker
line-up will be available for both events
in early 2015. Stay tuned!
SUPPORTED BY
PRODUCED BY
GOLD SPONSOR
magazine
Untitled-4 2
12/10/14 4:30 PM
Austin
TRACKS
INCLUDE:
JUNE 1 - 4, 2015
HYATT REGENCY, AUSTIN, TX
vslive.com/austin
JavaScript/HTML5
ASP.NET
Windows 8.1/WinRT
Cloud Computing
SharePoint/Ofce
REGISTER NOW
AND SAVE $300!
Scan the QR code to
register or for more
event details.
San FraQcisco
JUNE 15 - 18, 2015
THE FAIRMONT, SAN FRANCISCO, CA
vslive.com/sf
vslive.com
March 16-20
June 1-4
June 15-18
August 10-14
Nov. 16-20
FOLLOW US
twitter.com/vslive @VSLive
Untitled-4 3
12/10/14 4:31 PM
TEST RUN
JAMES MCCAFFREY
The 10,000-item data set is randomly split into an 8,000-item training set used to create the LR model, and a 2,000-item hold-out test set
used to evaluate the accuracy of the model after training. The demo
program creates an LR classifier and then uses four swarms, each
with three particles, to train the classifier. MSO is an iterative process
and the maximum number of iterations, maxEpochs, is set to 100.
A swarm is a collection of
particles that move in a way
inspired by group behavior such
as the flocking of birds.
The demo displays the best (smallest) error found by any particle,
every 10 epochs. After training is completed, the best weights found
are (4.09, 10.00, 8.43, 1.86, -9.27, 1.84). Using these weights, the
accuracy of the LR model is computed for the training data (99.98
percent correct, which is 7,998 out of 8,000) and for the test data
(99.85 percent correct, which is 1,997 out of 2,000). The accuracy
of the model with the test data gives you a rough approximation
of how well the model would do when presented with new data
that has unknown output values.
This article assumes you have at least intermediate programming skills, but doesnt assume you know anything about logistic
regression classification or multi-swarm optimization. The demo
program is coded using C#, but you shouldnt have too much
difficulty refactoring the code to another language such as Visual
Basic .NET or Python.
The demo code is too long to present here in its entirety, but
the complete source code is available in the code download that
accompanies this article. The demo code has all normal error
checking removed to keep the main ideas as clear as possible and
the size of the code small.
int numFeatures = 5;
int numRows = 10000;
int seed = 0;
Console.WriteLine("End demo");
Console.ReadLine();
} // Main
static double[][] MakeAllData(int numFeatures,
int numRows, int seed) { . . }
msdnmagazine.com
January 2015 75
The Main method has a lot of WriteLine noise. The key calling
statements are quite simple. The synthetic data is generated, like so:
int numFeatures = 5;
int numRows = 10000;
int seed = 0; // Gives representative demo
double[][] allData = MakeAllData(numFeatures, numRows, seed);
And the accuracy of the model is evaluated with these two statements:
double trainAcc = lc.Accuracy(trainData, bestWeights);
double testAcc = lc.Accuracy(testData, bestWeights);
particle in any swarm. Term w is a constant called the inertia factor. Terms c1, c2 and c3 are constants that establish a maximum
change for each component of the new velocity. Terms r1, r2 and r3
and random values between 0 and 1 that provide a randomization
effect to each velocity update.
...
Next, the current swarms best error and the overall global best
error are computed:
Figure 4 New Velocity for Current Particle Is Calculated
for (int k = 0; k < dim; ++k)
{
double r1 = rnd.NextDouble();
double r2 = rnd.NextDouble();
double r3 = rnd.NextDouble();
p.velocity[k] = (w * p.velocity[k]) +
(c1 * r1 * (p.bestPosition[k] - p.position[k])) +
(c2 * r2 * (ms.swarms[i].bestPosition[k] - p.position[k])) +
(c3 * r3 * (ms.bestPosition[k] - p.position[k]));
if (p.velocity[k] < minX)
p.velocity[k] = minX;
else if (p.velocity[k] > maxX)
p.velocity[k] = maxX;
} // k
msdnmagazine.com
The values for constants w, c1 and c2 are the result of some PSO
research. Interestingly, compared to many numerical optimization
algorithms, PSO and MSO are relatively insensitive to the values
used for internal magic constants (called free parameters or hyper
parameters). Theres little available research for the c3 constant,
which influences the tendency of a particle to move toward the
best-known position found to date by any particle in any swarm.
The value I use, 0.3645, is half the value of the inertia constant, and
has worked well for me in practice.
The sequence array holds indices of the training data. This array
will be scrambled so that in each swarm, particles will be processed
in a different order in each iteration of the main training loop.
The main training loop begins:
while (epoch < maxEpochs)
{
++epoch;
// Optionally print best error here
for (int i = 0; i < numSwarms; ++i) // Each swarm
{
Shuffle(sequence);
for (int pj = 0; pj < numParticles; ++pj) // Each particle
{
int j = sequence[pj];
Particle p = ms.swarms[i].particles[j];
...
Knowing when to stop training is one of the most difficult challenges in machine learning. Here, a fixed number, maxEpochs, of
iterations is used. This is a simple approach, but theres a risk you
might not train enough. Or you might train too much, which would
result in a model that fits the training data extremely well, but works
poorly on new data. This is called over-fitting. There are dozens of
techniques that can be used to combat over-fitting.
Next, the new velocity for the current particle is calculated, as
explained earlier (see Figure 4).
After the velocity is calculated, each of its component values
is checked to see whether the magnitude is large, and if so, the
value is reined back in. This prevents a particle from moving a
very great distance in any one iteration. For some ML training
tasks, eliminating the velocity constraint appears to speed up
the training, but there are no solid research results to give any
specific advice here.
January 2015 77
After the current particle has moved, its new error is calculated:
p.error = Error(trainData, p.position); // Expensive
if (p.error < p.bestError) // New best position for particle?
{
p.bestError = p.error;
Array.Copy(p.position, p.bestPosition, dim);
}
After the replacement particle has been created, that particle may
be, by pure luck, a new swarm best or global best:
if (q.error < ms.swarms[i].bestError) // Best swarm error by pure luck?
{
ms.swarms[i].bestError = q.error;
Array.Copy(q.position, ms.swarms[i].bestPosition, dim);
if (q.error < ms.bestError) // Best global error?
{
ms.bestError = q.error;
Array.Copy(q.position, ms.bestPosition, dim);
}
}
The death mechanism concludes by exchanging the current particle for the replacement, effectively killing the current particle:
...
ms.swarms[i].particles[j] = q;
} // Die
and then swaps the random particle with the current particle. As
coded, theres no guarantee the randomly selected particle will be
in a swarm different from the current particle.
The immigration mechanism finishes by checking to see if swapping
particles in two swarms resulted in one or two new swarm-best positions:
...
if (q.error < ms.swarms[i].bestError) // Curr has new position
{
ms.swarms[i].bestError = q.error;
Array.Copy(q.position, ms.swarms[i].bestPosition, dim);
}
if (p.error < ms.swarms[ii].bestError) // Other has new position
{
ms.swarms[ii].bestError = p.error;
Array.Copy(p.position, ms.swarms[ii].bestPosition, dim);
}
} // Immigrate
Wrapping Up
This article and accompanying code should get you up and running if
you want to explore logistic regression classification using multi-swarm
optimization for training. MSO is really more of a meta-heuristic than
an algorithm. By that I mean MSO is a set of design principles that
can be implemented in many different ways. There are dozens of
modifications to the basic MSO design you can investigate.
Logistic regression is one of the simplest forms of machine
learning classification. For many classification problems, LR just
doesnt work well. However, many ML practitioners, including me,
usually begin investigating a classification problem using LR, and
then use more sophisticated techniques, if necessary.
Compared to older, calculus-based numerical optimization
techniques such as gradient descent and L-BFGS, based on my
experience, training using MSO tends to produce better ML models, but MSO is almost always an order of magnitude slower. Q
DR. JAMES MCCAFFREY works for Microsoft Research in Redmond, Wash. He has
worked on several Microsoft products including Internet Explorer and Bing. Dr.
McCaffrey can be reached at jammc@microsoft.com.
THANKS to the following Microsoft technical experts for reviewing this article:
Todd Bello and Alisson Sol
Test Run
Untitled-7 1
12/8/14 4:44 PM
DAVID S. PLATT
An Upstart Again
Its interesting to watch Microsoft as an underdog.
Not that long ago that underdog bestrode the computing world
like a colossus. You probably remember the joke, How many Microsoft programmers does it take to change a light bulb? The answer,
of course, was: None. Bill Gates just declares Microsoft Darkness
to be the new standard.
But while Microsoft concentrated on PCs (see msdn.microsoft.com/
magazine/hh224515), new business sectors exploded across the IT industry, namely mobile devices and the cloud. The most recent figures show Microsoft doing well in the latter, which can be seen as
the logical progression of the server side of its PC business.
Microsoft is having much more difficulty in the former.
As I wrote in my November 2013 column (msdn.microsoft.com/magazine/dn463796), Microsofts key to greater market share is making
more and better apps available in its ecosystem. This in turn means
Untitled-10 1
12/5/14 1:59 PM
Untitled-7 1
11/5/14 4:36 PM
6
/QPFC[(TKFC[/CTEJ
5
7%
%'
55
(7
.
;'
#4
%GPVTCN*CNN9GUVOKPUVGT.QPFQP
ALLEN HOLUB
. H H S \ R X U
Z K R O H G H Y H O R S P H Q W
W H D PV V N L O O V X S
W R G D W H Z L W K W K H
O D W H V W W H F K Q R O R J L H V
E H V W S U D F W L F H V
DQGIUDPHZRUNV
KEVLIN HENNEY
DINO ESPOSITO
NEAL FORD
(7..&#;914-5*125
/+076'$4'#-1765'55+105
CPFOCP[OQTG
)1.&52105145
8
EEA8O<H?:7O
)&@7DK7HO(&'+
I7L;KFJEw(&&
52105145
/'&+#2#460'45
7]_b[| 7hY^_j[Yjkh[ | 8?| 8_]:WjW| 9bekZ| :WjWXWi[| :[lEfi| ?eJ| B[WZ[hi^_f| CeX_b[ | CG| CIJ[Y^
FWjj[hdi| Fhe]hWcc_d]BWd]kW][i%J[Y^d_gk[i| I[Ykh_jo| Ie\jmWh[:[i_]d| J[ij_d]| K?%KN| M[X
Y Y Y F G X Y G G M E Q O
DevWeek_2015_Brochure.indd 1
1/5/15 10:52 AM
&'89''-
/10&#;4&/#4%*
/#4%*
'
IXOOGD\ZRUNVKRSV
PLQXWH
EUHDNRXWVHVVLRQV
H[SHUWVSHDNHUV
3OXVNH\QRWHSUHVHQWDWLRQV
IURP#NNGP*QNWDDQG
-GXNKP*GPPG[
W
n
S
O
G
s
y
m
a
p
s
e
8'07'
?DJ>;>;7HJE<BED:ED
For five full days, from Monday 23 March
to Friday 27 March, DevWeek takes over
Westminsters iconic Central Hall.
D
o
d
L
D
d
o
a
c
0'#4'5667$'56#6+105
Westminster
(District, Circle & Jubilee)
St Jamess Park
(District & Circle)
T
a
c
+
c
2 | YYYFGXYGGMEQO |
DevWeek_2015_Brochure.indd 2
"&GX9GGM
1/5/15 10:52 AM
V
'0,1;;174%10('4'0%';1749#;
With shareable tickets and online catch-up, DevWeek gives you all the information you
need, when you want it ensuring you and your team make the most of every session.
Share your ticket
Only have time to attend one day?
Getgreat value out of DevWeek by
sharing your ticket with others in
yourteam. That way, you can make the
most of five packed days of sessions
and workshops. Our online registration
page lets you add colleagues details
so we know who will be joining us for
eachday of DevWeek.
Topics
Agile
Architecture
BI
Big Data
Cloud
Database
DevOps
IoT
Leadership
Mobile
MQ
MS Tech
Patterns
Programming Languages /
Techniques
Security
Software Design
Testing
UI/UX
Web
D
52105145*+2':*+$+6+10
he
eng
)1.&52105145
M>EM?BBOEKC;;J7J:;LM;;A5
Consultant
DBA
C-Level, Director
Developer,
Engineer,
Programmer
Analyst
Where are they from?
Architect
UNITED
KINGDOM
EUROPE
ROW
Development
Head, Manager,
Team Lead
52105145
/'&+#2#460'45
"&GX9GGM | YYYFGXYGGMEQO | 3
DevWeek_2015_Brochure.indd 3
1/5/15 10:52 AM
/10&#;/#4%*
24'%10('4'0%'914-5*125
&GX9GGMU
RTQITCOOG
QHRTG
EQPHGTGPEG
YQTMUJQRU
EQXGTUC
YKFGTCPIGQH
UWDLGEVUHTQO
#IKNGU[UVGOU
VQCRR
FGXGNQROGPV
$//(1
+2/8%
7=?B;%:;I?=D<HEC
IJ7HJJE<?D?I>
#NNYQTMUJQRU
TWPHQTC
HWNNFC[
HTQO
VQ
YKVJUJQTV
DTGCMUKPVJG
OQTPKPICPF
CHVGTPQQP
CPFC
NWPEJDTGCM
CV
( [ F H O O H Q W P L [
RIVXEMHFWV
Z R X O G U H F R P P H Q G
XQUHVHUYHGO\
IE<JM7H;:;L;BEF;H
(&'*:;B;=7J;
4 | YYYFGXYGGMEQO |
DevWeek_2015_Brochure.indd 4
3($5/
&+(1
?DJ;HD;JJ?D=
OEKHJ>?D=I
6$+,/
0$/,.
@7L7I9H?FJ0
8;OED:J>;
87I?9I
914-5*12
4'(&9
914-5*12
4'(&9
914-5*12
4'(&9
-$0(6
0217(0$*12
H;KI?D=OEKH
$D;J7D:9
IA?BBIJE:;L;BEF
D7J?L;7FFI<EH
M?D:EMI"?EI
7D:7D:HE?:
914-5*12
4'(&9
J>
H;
Re
col
sta
the
we
the
Bu
wo
so
Ro
wi
con
des
rev
of t
the
sor
per
thr
for
We
to u
ma
an
beh
top
int
def
un
wo
ple
ho
eff
rev
en
91
4'
"&GX9GGM
1/5/15 10:52 AM
C.
#.51'#%*&#;
&2))(( 5(*,675$7,21
52%(5760$//6+,5(
$867,1%,1*+$0
J>;FEM;HE<
H;L?;M
Review by peers,
colleagues, experts and
stakeholders is perhaps
the most effective tool
we have for improving
the quality of software.
But if review is so
wonderful, why is it used
so infrequently?
In this workshop,
Robert and Austin
will show you how to
conduct effective code,
design and requirements
reviews using a variety
of techniques from
the relatively informal
sort of reviews youre
perhaps doing already,
through to the most
formal inspections.
Well work together
to understand what
makes a good review,
and help you to identify
behaviours that lead
topoor outcomes,
inthe form of either
defective software or
unhappy colleagues.
Throughout this
workshop, youll receive
plenty of advice on
howyou can introduce
effective technical
reviews into your
engineering culture.
914-5*12
4'(&9
-8/(6
0$<
<0J>;B?JJB;
B7D=K7=;M?J>
7BEJE<8?J;
914-5*12
4'(&9
| &2))((%5($. |
,'2
)/$72:
I;9KH?D=7IF$
D;J7FFB?97J?EDI
7D:I;HL?9;I0
<HEC7#P
914-5*12
4'(&9
/81&+%5($. | &2))((%5($.
./$86
$6&+(1%5(11(5
',12
(6326,72
IGBI;HL;HGK;HO
JKD?D=<EH
:;L;BEF;HI
ED;:7OE<
JM?JJ;H
8EEJIJH7F
914-5*12
4'(&9
914-5*12
4'(&9
6(%
526(
8::8O;N7CFB;
As a responsive web
framework, Twitter
Bootstrap is leading
the world of web
development today,
setting new standards
and capturing followers.
In this workshop, Dino
will provide a day-long
tour of the library and
delve deep into its
HTML chunks, CSS
styles and JavaScript
components.
Well focus on
facilities available for
building static and
responsive layouts,
rich input forms and
advanced features such
as auto-completion,
modals, tabs, carousels
and more. Well also
consider the downsides
of the framework,
missing pieces (ie. image
handling) and its overall
role in the broader
context of responsive
and device-friendly
sites. This workshop
is ideal for clearing up
a few things you may
already have heard
about Bootstrap, or just
for gaining an additional
perspective about it.
In any case, after this
workshop you should
be ready to get into it
at any level of further
complexity.
914-5*12
4'(&9
"&GX9GGM | YYYFGXYGGMEQO | 5
DevWeek_2015_Brochure.indd 5
1/5/15 10:52 AM
67'5&#;56#24+.
67'5&#;/#4%*
&GX9GGMUTUVFC[QHUGUUKQPUMKEMUQHHYKVJQWTMG[PQVGRTGUGPVCVKQPUIKXKPICNN
CVVGPFGGUVJGEJCPEGVQJGCTKPFWUVT[GZRGTVU-GXNKP*GPPG[CPF#NNGP*QNWDVCEMNG
VYQQHVJGDKIIGUVKUUWGUKPUQHVYCTGFGXGNQROGPV
&#;#)'0&#
7IOIJ;C?IDEJ7JH;;
.(9/,1
+(11(<
-';016'
24'5'06#6+10
52%(57
60$//6+,5(
KD:;HIJ7D:?D=
JH7DI:K9;HI
Transducers a
portmanteau of
transform reducers
are a new functional
programming concept
introduced into the
Clojure programming
language. Although
transducers are actually
pretty straightforward,
wrapping your brain
around them, especially
if youre not already a
competent Clojureist,
can be challenging. In
this session, Robert will
introduce transducers
by implementing
them from scratch in
everybodys favourite
executable pseudocode:
Python. Well start with
the familiar staples of
functional programming
and derive transducers
from first principles.
6 | YYYFGXYGGMEQO |
DevWeek_2015_Brochure.indd 6
Trees. Both beautiful and useful. But were not talking about
the green, oxygen-providing ones. As abstract structures we
see trees all over the place file systems, class hierarchies,
ordered data structures, and so on. They are neat and tidy,
nested and hierarchical a simple way of organising things;
a simple way of breaking large things down into small things.
The problem is, though, that there are many things
from modest fragments of code up to enterprise-wide IT
systems that do not comfortably fit into this way of looking
at the world and organising it. Software architecture, design
patterns, class decomposition, performance, unit tests
all of these cut across the strict hierarchy of trees. In this
keynote, Kevlin will look at what this means for how we
think and design systems, whether large or small.
6$6+$
*2/'6+7(,1
7KJEC7J?D=
FHE8B;C7D7BOI?I
7D:JH?7=;
What do you do when
your application crashes
or hangs in production?
Nothing can compete
with a debugger or a full
process dump captured
on a production system.
But you cant always
afford the time to analyse
hundreds of crash
dumps. In this session,
Sasha will show you how
to perform automatic
dump analysis and triage
using Microsofts ClrMD,
a .NET library that can
explore threads, call
stacks and exceptions;
visualise threads and
locks to form wait chains
and detect deadlocks;
and walk heap memory
to inspect important
objects for your
application.
-2+1
.3$8/
;9C7I9H?FJ,
<EH7BBE<KI
Coming from a Java
background, there was
a time when JavaScript
was nothing but
annoyances. Now, even
after weve grown to love
the language, there are
dozens of times when we
feel the pain of missing
features that Java has
built in. ECMAScript 6
is changing all of that.
The next version of
JavaScript brings with
it an amazing standard
library that rivals that of
Java, Python and their
ilk. In this session, John
will explain some of
the great new additions
to the language and
demonstrate use cases
that take advantage of
ES6s elegance for clientside development.
'525
+(/3(5
D7L?=7J?D=J>;J::
7BF>78;JIEKF
TDD, BDD, ATDD are
all methodologies that
enable incremental
design that is suitable
for Agile environments.
It seems that every day a
new xDD methodology
is born with the promise
of being better than what
came before. Should
you use behaviourdriven tests or plain
old unit tests? Which
methodology is better?
And how exactly
would it benefit the
development life cycle?
In this session, Dror
will help to sort out the
various methodologies
explaining where they
came from, the tools
they use, and discussing
how and when to use
each one.
-'
24
$//(1
+2/8%
I;9KH?JO'&'07D
?DJHE:K9J?EDJE
IE<JM7H;I;9KH?JO
As more and more of
our applications move
on to the web, security
becomes even more
critical. Good security,
however, has to be built
in, not tacked on as an
afterthought. In this
session, Allen will give
you an overview of what
it means to make an
application secure. Hell
cover topics such as
security architectures,
code and design review,
penetration testing, risk
analysis and risk-based
testing, security-related
requirements, static
analysis, abuse cases,
security operations
andcrypto.
"&GX9GGM
1/5/15 10:52 AM
IG
?D#
:;
He
wo
go
OL
20
pe
tim
Kl
the
an
co
(M
on
is b
loo
tha
He
loc
lat
Se
fou
int
of
as
tra
be
#.51'#%*&#;
&2))(( 5(*,675$7,21
| &2))((%5($. |
/81&+%5($. | &2))((%5($.
-2,186)25'5,1.6$77+((1'2)'$<1(7:25.,1*'5,1.66321625('%<
DE;IJ?C7J;I
$//(1
+2/8%
-';016'
24'5'06#6+10
./$86
$6&+(1%5(11(5
IGBI;HL;H(&'*
?D#C;CEHOEBJF
:;;F:?L;>;A7JED
Hekaton is the Greek
word for 100 and the
goal of In-Memory
OLTP in SQL Server
2014 is to improve query
performance up to 100
times. In this session,
Klaus will look inside
the case of Hekaton
and the multiversion
concurrency control
(MVCC) principles
on which Hekaton
is built. Hell start by
looking at the challenges
that can be solved by
Hekaton, especially
locking, blocking and
latching within SQL
Server. Based on this
foundation, hell move
into the principles
of MVCC, and how
a storage engine and
transaction manager can
be built on that concept.
'(-$1
6$5.$
?DJHE:K9?D=H7D:
7PKH;CB
R is a free software
programming
language and software
environment for
statistical computing,
data mining and
graphics. Azure
Machine Learning
(Azure ML) is the new
Microsoft cloud service
and environment for
advanced data analysis,
which utilises the R
algorithms intensively.
In this session, Dejan
will introduce both R,
with RStudio IDE, and
Azure ML.
$//$1
.(//<
:?7BE=K;I>;;JI
<EHH;JHEIF;9J?L;I
7D::?I9KII?ED
Retrospectives are a
key tool in the Agile
toolkit, but they arent
easy. In fact, its not
just retrospectives.
Teams need to learn
to talk, discuss and
reflect together over
many things. Good
conversation makes
for good software.
Retrospective
dialogue sheets can
help overcome these
problems. In this
hands-on session,
inwhich everyone
willget the chance to
work with a dialogue
sheet, discovering
whatone is and how
touse it, Allan will
discuss some of the ways
teams are using them
and look to the future.
0$5.
60,7+
:;I?=D?D=7:7FJ?L;
7FFB?97J?EDI<EH
J>;?EIFB7J<EHC
With the introduction
of the iPhone 6 and 6+,
we now have several
form factors to consider
when designing our
iOS applications. In this
session, Mark will focus
on the designer and
layout features Apple
has included in iOS to
help you create a single,
unified storyboard that
is capable of working
with all variations of
iOS. This will include
layout constraints (auto
layout), size classes,
unified storyboards
and the updated
UISplitViewController.
6(%
526(
0,&+$(/
.(11('<
B;II?ICEH;
7D?DJHE:K9J?ED
JEBEM#<?:;B?JO
7FFHE79>;I
In this session, Seb will
demonstrate some key
techniques that help
decompose large
problems. Decomposing
problems is a skill all
software developers
need, but were often not
very good at. Whether its
stories that take longer
than an iteration, or
features that cant be
delivered in the expected
release, weve all seen the
problems that tackling
an over-large problem
can cause. Well work
through two detailed
examples to demonstrate
the value of delivering
small, low-fidelity pieces
of work early rather than
prematurely focusing
onfully-polished
finalversion.
=;JJ?D=IJ7HJ;:
M?J>IM?<J7FFB;I
D;M;IJB7D=K7=;
Swift is Apples newest
language for building
native, high performance
applications for both iOS
and OS X. This session
will introduce you to
this exciting language.
Developers with a
background in either C#
or Python will see many
similarities. Almost
everyone will find Swift a
much more comfortable
and inviting language
when compared to
Objective C or C. Come
and learn why its now
fun to develop (natively)
for iOS and OS X.
"&GX9GGM | YYYFGXYGGMEQO | 7
DevWeek_2015_Brochure.indd 7
1/5/15 10:53 AM
67'5&#;/#4%*
&#;#)'0&#%106+07'&
$'$0
7251+,//
JH;7JOEKH9E:;7I
79H?C;I9;D;
Well never be able to
understand large-scale
systems from a single
snapshot of the code.
Instead, we need to
understand how the
code evolved and how
the people who work
on it are organised. We
also need strategies
that let us find design
issues and uncover
hidden dependencies
between both code and
people. Where do you
find such strategies if
not within the field of
criminal psychology?
In this session, Adam
will use this approach
to predict bugs, detect
architectural decay and
find the code that is most
expensive to maintain.
('
&2857(1$<
?DL;HI?EDE<
9EDJHEB'&'
The dependency
injection/inversion
of control design
pattern is an important
technique that helps
to write testable and
maintainable code. In
this session, Ed will
debunk the myth that
its hard to understand
or only for enterprise
development, and
demonstrate how to use
it in everyday code. This
demo-led session will
discuss the rationale
behind dependency
injection, demonstrate
injection with and
without a dependency
container, as well
as writing a simple
container from scratch.
8 | YYYFGXYGGMEQO |
DevWeek_2015_Brochure.indd 8
72%,$6
.20,6&+.(
J>;FHEC?I;:B7D:
E<KN
In todays competitive
landscape, a stellar user
experience is a strong
product differentiator
and enabler of market
success. Companies
hope to get to this
Promised Land
where their own staff
deploys mature UX
design practices, their
customers are happy,
and their market share
and profits increase.
Noone ever said that
this journey to the
Promised Land is easy
a lot of companies
havetried and failed.
In this inspirational
overview session, Tobias
will showthe path and
identify what strategic
elements are critical
tosuccessful design.
3($5/
&+(1
?DJ;HD;JJ?D=
OEKHJ>?D=I
From big consumer
success stories, such as
the Nest Thermostat, to
more offbeat monitoring
systems, such as
Botanicalls (which lets
your plant call you when
it is thirsty), your things
are finding their own
voice through small but
powerful embedded
microcontrollers. The
market for the Internet
of Things (IoT) and
wearables is exploding.
But what are your
options for getting
started with making
physical things when
youre more used to
writing software? In this
session, Pearl will go
through a few hardware
options that are great
for hobbyists and rapid
prototyping.
6+$<
)5,('0$1
7D=KB7H@IJ>;ED;
<H7C;MEHAJEHKB;
J>;C7BB
In the last couple of years,
weve seen the rise of
client-side JavaScript
frameworks. From almost
nothing, now we have at
least a dozen to choose
from. One of the new kids
in the block, AngularJS,
comes straight from the
Google offices and tries
to stand out from the
crowd with a complete
set of tools and utilities.
Some are very powerful
and tryto ease your
way towards your SPA
web site. In this session,
Shay will go through
the different features
of AngularJS and see
what makes it one of the
most popular JavaScript
frameworks out there.
3+,/
/(**(77(5
F7JJ;HDI7D:
FH79J?9;I<EH
8K?B:?D=;DJ;HFH?I;
I97B;>JCB+7FFI
Developing large apps
is difficult. Ensuring
that code is consistent,
maintainable, testable
and has an architecture
that enables change is
essential. When it comes
to large server-focused
apps, solutions to some
of these challenges have
been tried and tested.
But, how do you achieve
this when building
HTML5 single-page
apps? In this session,
Phil will highlight
signs to watch out for
as your HTML5 SPA
grows, andpatterns
and practices to help
you avoid problems.
He will also explain
thearchitecture that
their HTML5 apps
havethat is core to
ensuring they scale.
5$/3+
'(:$5*1<
9E:?D=J>;
F7H7BB;B<KJKH;
?D9!!
Many-core processors
and computing
platforms will be
ubiquitous in the future:
from multi-core and
many-core CPUs to
integrated GPUs to
compute clusters in
the cloud, its the new
parallel universe for
software developers.
In this session, you
will learn the tools,
techniques and best
practices available to
C/C++ developers to
make sure your code is
ready today to run with
maximum performance
and reliability in this
new parallel universe.
25(1
58%,1
J;IJ7KJEC7J?ED
:ED;H?=>J0
J>;>EBO=H7?B
E<9EDJ?DKEKI
:;FBEOC;DJ
In this session, Oren
will explain all there is
to know about end-toend test automation.
Starting with the basics
and a comparison to
unit testing, he will then
drill down into what is
considered uncharted
territory for many
developers. You will
learn the best practises
and design patterns,
common pitfalls, and
most importantly
the full ecosystem
and how it connects to
your existing toolchain.
You will learn about
different approaches to
UI verifications, and see
real industry use cases
and bugs.
',12
(6326,72
7IF$D;J?:;DJ?JO"
9B7?CI7D:IE9?7B
7KJ>;DJ?97J?ED
ASP.NET Identity is the
new and comprehensive
membership system for
the whole ASP.NET
platform, including Web
API and SignalR. Similar
in many ways to the
popular simple
membership provider,
ASP.NET Identity goes
well beyond in a number
of aspects: replaceable
storage, flexible
representation of user
profiles, external logins,
claims-based
authentication and role
providers. Dino will use
the Identity API to set
upsocial authentication
via Facebook and
Twitter, and to collect
any user information
made available by
socialnetworks.
I9
M
Th
No
be
ou
up
M
co
sca
gen
mo
No
Mo
wh
to
see
of
(re
geo
No
da
ou
on
wi
sca
ac
lev
6$6+$
*2/'6+7(,1
M>7JID;M?D
L?IK7BIJK:?E(&'+5
In this session, Sasha
will lead us through
a sample of the new
Visual Studio 2015
features, ranging from
developer productivity
to low-level C++ code
optimisations. In a
series of quick-paced
demos, we will show
how Visual Studio 2015
makes key diagnostics
experiences easier,
improves IntelliTrace
analysis, helps
developercollaboration
and productivity, and
produces higher-quality
and faster code for
both managed (with
.NET Native) and C++
applications. If youre
using Visual Studio,
youcant afford to
missthis talk!
"&GX9GGM
1/5/15 10:53 AM
C;
F7
Th
wh
me
be
ap
as
in
me
In
wo
pu
pro
sp
exp
ne
to
op
ses
sev
int
can
me
loo
me
gu
tec
#.51'#%*&#;
&2))(( 5(*,675$7,21
| &2))((%5($. |
/81&+%5($. | &2))((%5($.
-2,186)25'5,1.6$77+((1'2)'$<1(7:25.,1*'5,1.66321625('%<
0,&+$(/
.(11('<
I97B?D=J>;DEIGB
M7OM?J>CED=E:8
The great promise of the
NoSQL databases has
been their ability to scale
out rather than scaling
up. In this session,
Michael will look at a
concrete example of
scaling one of the most
generally useful and
most widely deployed
NoSQL database:
MongoDB. Hell explore
why you might need
to scale out, and youll
see the full spectrum
of choices for scaling
(replication, sharding,
geo-replication, etc).
NoSQL document
databases typically
outperform RDBMSes
on single servers but
with the ability to
scale out they can truly
achieve an entirely new
level of performance.
0,.(
:22'
C;II7=?D=
F7JJ;HDI
There are many reasons
why asynchronous
messaging should
be introduced in
applications, as well
as many approaches
in incorporating
messaging subsystems.
In some cases, intensive
workloads need to be
pushed to back-end
processing, or perhaps
specialised (and often
expensive) resources
need to be utilised
to perform certain
operations. In this
session, Mike will cover
several scenarios where
introducing messaging
can help, discuss a few
messaging patterns, and
look at abstracting your
messaging subsystem to
guard against evolving
technology and designs.
,4%$/
.+$1
B;7HD>EMJE
I97B;$D;J7FFI?D
C?9HEIE<J7PKH;
M?J>:?IJH?8KJ;:
979>?D=
Discover the scalability
bottlenecks for your
.NET applications in
Microsoft Azure, and
how you can improve
their scalability with
distributed caching.
This session provides
a quick overview of
scalability bottlenecks,
and answers some key
questions: What is
distributed caching and
why is it the answer in
Microsoft Azure? Where
in your application can
you use distributed
caching? What are some
important features in
a distributed cache?
Youll also see hands-on
examples of using a
distributed cache.
*$5<
6+257
:7J7I9?;D9;<EH
<KD7D:FHE<?J
Make no mistake: data
science can be hard,
but it can also be fun. In
this session, Gary will
introduce you to classic
and Bayesian statistics
and machine learning, all
through the medium of
predicting horse-racing
results. Hell explore a
number of techniques
for making such
predictions and finish by
combining them into a
powerful mixed model
prediction engine thats
sure to pick the next big
winner. This session
wont only improve your
knowledge, itll improve
your bank balance too!
(Note: Session may not
improve bank balance.)
1($/
)25'
8K?B:?D=
C?9HEI;HL?9;
7H9>?J;9JKH;I
Inspired by the success
of companies such as
Amazon and Netflix,
many organisations
are moving rapidly
towards microservice
architectures. This
style of architecture is
important because its
the first architecture
to fully embrace the
Continuous Delivery
and DevOps revolutions.
In this session, Neal will
cover the motivations for
building a microservice
architecture, some
considerations you must
make before starting
(such as transactions
versus eventual
consistency), how
to determine service
partition boundaries,
and ten tips for success.
$867,1
%,1*+$0
>?=>#GK7B?JO
:;9?I?EDC7A?D=
M?J>EF;D:;I?=D
FHEFEI7BI
Making complex
decisions in software
design involves
balancing many factors,
and maintaining
that balance can be
challenging. By opening
up the decision process
for evolution, we can
harness the insight
of fellow developers,
communicate plans and
designs more effectively,
and produce a useful
record of the work we do.
In this session, Austin
will look at a specific
technique: Open Design
Proposals. Hell examine
implementations of this
approach, see why its
effective, and show how
development teams can
use it to manage their
own decision making.
1812
*2',1+2
;L;DJ>K8I"7PKH;
IJH;7C?D=7D:
7PKH;?II
Recently, there has
been a lot of talk
around IoT, M2M,
big data and similar
topics. Its important
to understand how we
can take advantage of
these concepts, and how
they can help us achieve
our goals. Fortunately,
Microsoft has some
solutions for us. These
are Azure Event Hubs,
Azure Stream Analytics
and Azure Intelligence
Systems Service (ISS).
In this session, Nuno
will explore these three
topics, demonstrate
their interconnectivity,
and show how they
provide the perfect
answer for our nextgeneration solutions
andinteractions.
-$0(6
0217(0$*12
?8;79EDI7D:
9EDJ;NJK7B
BE97J?ED
7M7H;D;II?D?EI
7D:7D:HE?:7FFI
iBeacons are taking the
world by storm from
retail stores to major
sporting events, youll
soon be finding iBeacons
just about everywhere.
This gives you the ability
to enable any number of
device proximity-based
scenarios that were
never before possible.
Inthis session, James
will explain what an
iBeacon is, how they
work, how you would
want to use them, and
how to get started
making apps in both
Android and iOS. All
demonstrations will be
coded in C#, but will be
applicable to any iOS or
Android developer in
any language.
-8/(6
0$<
6$+,/
0$/,.
?<9EDI?:;H;:
>7HC<KB0>EMJE
;H7:?97J;/+E<
7BBOEKH8K=I?D
ED;I?CFB;IJ;F
In 1968, CACM
published a letter from
Edgar Dijkstra, called
Go To statement
considered harmful.
In it, he explained why
most bugs in programs
were caused by Gotos,
and appealed for
Goto to be expunged
from programming
languages. But Goto has
a twin brother, which is
responsible for nearly
every bug that appears
in our programs today.
That twin is If. In this
session, Jules revisits
Dijkstras original
explanation to show
why If and Goto have
thesame pathology, and
how you can avoid it.
.(9/,1
+(11(<
JEF'&
@7L7I9H?FJJ?FI
JavaScript, the lingua
franca of the web, is
incredibly freeform and
therefore hard to get
right. Weve all hacked
JavaScript, but what
do you need to know
when you are doing big
and complex JavaScript
projects? This isnt your
Dads browser, yknow!
So you have written
JavaScript, but want to
go beyond the basics? In
this session, Sahil will
show you the JavaScript
concepts that every
modern JavaScript
developer needs to know.
6$+,/
0$/,.
<F*EEF<JM
Although not yet fully
mainstream, functional
programming has
finally reached a critical
mass of awareness
among developers.
Theproblem, however,
is that many developers
are up against an even
greater critical mass
of existing code. Much
of this code purports
to be object oriented,
but beyond theuse
of the class keyword,
falls somewhatshort
of putting the
OO to gooduse.
Manytechniques
identified as functional
have broader
applicability. In this
session, Kevlin will
explore how some
FP habits can be
incorporated into
OOPpractice.
JEF'&@7L7I9H?FJ
:;8K==?D=JH?9AI
Weve all been writing
lots of JavaScript code
lately. But JavaScript
is incredibly free
form, and that sharp
double-edged sword can
also make debugging
JavaScript errors a lot
more difficult. The new
operating system is the
browser, and complex
JavaScript pages cannot
ignore performance,
or their unpredictable
behaviour under
different bandwidths.
In this session, Sahil
will showyou some
really useful debugging
techniques and
demonstrate how to
use each browser for
itsbest capabilities.
Ninety minutes spent
here willsave you hours
inyour day job.
"&GX9GGM | YYYFGXYGGMEQO | 9
DevWeek_2015_Brochure.indd 9
1/5/15 10:53 AM
9'&0'5&#;/#4%*
&C[QH&GX9GGMEQPVKPWGUYKVJCRCEMGFRTQITCOOGQHYQTMUJQRUCPFDTGCMQWV
UGUUKQPUCPFFQPVHQTIGVVJCVKH[QWECPVOCMGKVVQCP[QHVJGVCNMU[QWTGKPVGTGUVGFKP
CUCTGIKUVGTGFFGNGICVG[QWNNDGCDNGVQECVEJWRNCVGTQPNKPGCVVJG&GX9GGMYGDUKVG
&#;#)'0&#
$'$0
7251+,//
9E:;J>7J<?JI
OEKH8H7?D
People think, remember
and reason in a very
different way from that in
which code is presented.
So how should code
look to make it both
easier to understand and
maintain? To see what
really works, we need to
look across languages
and paradigms. In this
session, Adam will
start with common
problematic constructs
such as null references,
surprising cornercases and repetitive
code, and discuss the
cognitive costs and
consequences of each.
Hell then apply ideas
from object-orientation,
functional programming
and lesser-known array
languages to explore
better approaches.
3$9(/
6.5,%7629
9ECFKJ?D=B?A;
J>;8H7?D07D
?DJHE:K9JEHO
=K?:;JE7?
Every now and again,
every professional
developer faces a
program that he or she
has trouble writing. Try
to imagine an algorithm
that has to differentiate
a dog from a cat. They
come in different shapes
and sizes, and there is
no single feature that
could discriminate
between the two. Any
attempt to code that
algorithm manually
using deep-nested
if/else branches is
doomed. Human beings,
on the other hand, have
no trouble with this task.
In this session, Pavel will
introduce the basics of
an artificial intelligencebased approach to
solving these problems.
10 | YYYFGXYGGMEQO |
DevWeek_2015_Brochure.indd 10
72%,$6
.20,6&+.(
L?IK7B:;I?=D<EH
DED#:;I?=D;HI0
?JIDEJ@KIJ
78EKJ9EBEKH
In an ideal world,
front-end developers
dont need to worry
about visual design
because they get
specs and assets from
professionally trained
designers. The reality
is that developers often
need to make their own
decisions about how to
make the UI attractive.
In this session, Tobias
will provide a solid
base knowledge about
what constitutes
attractiveness and what
design principles can
be applied to boost the
visual appeal of UIs. By
the time you leave, youll
be ready to step up to the
mark when designers
are nowhere to be found!
-2(
1$72/,
J>?DA<?HIJ0M>O
=H;7JKNIJ7HJI
8;JM;;DOEKH;7HI
7D:DEJEDJ>;
I9H;;D
When developers are
tasked with improving
UX, their focus tends
to be on the screen:
elements, interactions,
workflow, often
accompanied by the
worrying cry, Im
not a UI designer!
Fortunately, Joe has
good news: you can
still design great user
experiences without a
shred of visual design
talent. In this session,
Joe will show you
how changing the
way you think about
features, functions and
implementations can
make a massive, positive
change in the experience
people have with your
UIand your product.
3+,/
/(**(77(5
M>OOEKI>EKB:
8;KI?D=M;8
9ECFED;DJI
7D:>EM
Web Components are
touted as the future of
web development. In this
session, Phil will explain
what Web Components
are, the state of native
support in web browsers,
what your options are for
building componentised
web apps right now
using AngularJS, Ember,
Knockout or React, and
why Web Components
probably are the future of
web development. Hell
also cover the benefits
of a component-based
architecture and how
it helps when building
JavaScript apps, as well
as how components
can communicate
in a loosely coupled
way,andwhy.
$//(1
+2/8%
ADE9AEKJ07D
?DJHE:K9J?ED
The Knockout
framework is
a standalone
implementation of the
MVVM (Model-ViewViewModel) pattern,
which is one of the
best user-interface
architectures for
web applications. It
provides an alternative
to AngularJS more
limited in scope but
smaller and, in some
contexts, faster. In this
session, Allen will look at
Knockouts architecture
and how to leverage
that architecture to
build highly interactive
web-application user
interfaces. The session
will include several code
(JavaScript) examples.
('
&28571(<
7D?DJHE:K9J?ED
JEJOF;I9H?FJ
JavaScript is the
scripting glue that
holds the web together
largely because of
its flexibility. This
flexibility also means
that it can be difficult to
manage, especially in
large-scale applications.
In this session, using
real-world examples,
Ed will explore some
of the problems with
client-side JavaScript
development as a
motivating example and
introduce TypeScript as
a way of solving some of
these issues. Hell also
explore how existing
JavaScript codebases
can be targeted by
TypeScript and how it
can be integrated into
build systems.
'525
+(/3(5
87JJB;E<J>;
$D;JCE9A?D=
<H7C;MEHAI
Writing unit tests is
hard, isnt it? You need an
entire set of tools just to
start. One of the crucial
decisions when building
this set is picking up a
mocking framework.
But beware the
mocking framework
you choose has the
ability to make or break
you! In this session,
Dror at one time a
mocking framework
developer will cover
the capabilities and
functionality of the
leading frameworks,
showing the good and
the bad of the different
options (both free
and commercial), and
making them battle to
the death!
6$6+$
*2/'6+7(,1
9EEBB?8H7H?;I
<EHCE:;HD9!!
The C++ standard
library dates back to the
1990s, but that doesnt
mean there arent new
and exciting frameworks
to use in your C++
application. Inthis
session, Sasha will look
at some brand-new
and some existing C++
libraries that can speed
up C++ cross-platform
development rapidly.
Some of the libraries
we might cover include:
Casablanca (C++ REST
SDK), Cinder (creative
coding), Boost (generalpurpose), Google Test
(unit testing), SOCI
(modern database
access) and many others.
Theres something
foreveryone!
J>
8;
BE
Yo
Lo
Se
fle
da
sh
yo
the
co
Bo
ca
pe
tha
CP
In
wi
un
Bo
ho
SQ
ou
he
ab
pe
the
6+$,
5(=1,.
8K?B:FHE:K9J?ED#
H;7:O@7L7I9H?FJ
7FFIM?J>=HKDJ
In this session, Shai will
deliver an overview of
the steps required in
order to build JavaScript
apps and get them
ready for deployment.
Hell cover build
theory,asking Why
build in JS? Hell also
talk about the build steps
and then jump to Grunt,
explaining what it is and
providing a live demo.
Finally, Shai will cover
the scaffolding tool,
Yeoman. This session
is intended to be both
funny and informative,
so get ready to have a
good time while picking
up some essential tips to
make your day job that
much easier.
"&GX9GGM
1/5/15 10:53 AM
7F
M?
7D
No
in t
tod
is N
use
app
ses
dig
dat
the
the
the
(ke
doc
for
exp
app
No
dat
han
the
and
doc
Mo
#.51'#%*&#;
&2))(( 5(*,675$7,21
| &2))((%5($. |
/81&+%5($. | &2))((%5($.
s.
./$86
$6&+(1%5(11(5
J>;:7D=;HEKI
8;7KJOE<8EEAC7HA
BEEAKFI
You know Bookmark
Lookups in SQL
Server? You like their
flexibility to retrieve
data? If you do, then you
should be warned that
you are dealing with
the most dangerous
concept in SQL Server!
Bookmark Lookups
can lead to massive
performance losses
that will devastate your
CPU and I/O resources!
In this session, Klaus
will provide a basic
understanding of
Bookmark Lookups and
how they are used by
SQL Server. After laying
out the foundations,
helltalk in more detail
about the various
performance problems
they can introduce.
0,&+$(/
.(11('<
7FFB?;:DEIGB
M?J>CED=E:8
7D:FOJ>ED
NoSQL is a hot topic
in the tech industry
today. But what exactly
is NoSQL and should I
use it to build my next
application? In this
session, Michael will
dig into why NoSQL
databases are sweeping
the industry and discuss
the trade-offs between
the various types
(key-value stores vs
document databases,
for example). He will
explore the most broadly
applicable variant of
NoSQL, document
databases, through
hands-on demos with
the most popular
and successful of the
document databases,
MongoDB.
'(-$1
6$5.$
:7J7C?D?D=
7B=EH?J>CIM?J>
IGBI;HL;H7D:H
F7HJ'
Data mining is gaining
popularity as the most
advanced data analysis
technique. With modern
data mining engines,
products and packages,
such as SQL Server
Analysis Services
(SSAS) and R, data
mining has become a
black box. Its possible to
use data mining without
knowing how it works,
but this can lead to many
problems, such as using
the wrong algorithm for
a task, misinterpretation
of the results and more.
In this session (and Part
2, at 11.30), Dejan will
explain how the most
popular data mining
algorithms work and
when to use each one.
'(-$1
6$5.$
:7J7C?D?D=
7B=EH?J>CIM?J>
IGBI;HL;H7D:H
F7HJ(
Data mining is gaining
popularity as the most
advanced data analysis
technique. With modern
data mining engines,
products and packages,
such as SQL Server
Analysis Services
(SSAS) and R, data
mining has become a
black box. It is possible to
use data mining without
knowing how it works,
but this can lead to many
problems, such as using
the wrong algorithm for
a task, misinterpretation
of the results and more.
In this session (following
on from Part 1, at 09:30),
Dejan will explain how
the most popular data
mining algorithms
workand when to
useeach one.
1($/
)25'
9EDJ?DKEKI
:;B?L;HO<EH
79>?J;9JI
Yesterdays best practice
is tomorrows antipattern. Architecture
doesnt exist in a
vacuum: a painful
lesson developers who
built logically sound
but operationally
cumbersome
architectures
learned. Continuous
Delivery is a process
for automating the
production-readiness
ofyour application every
time a change occurs
to code, infrastructure
or configuration. In
this session, Neal will
take a deep dive into
the intersection of the
architect role and the
engineering practices in
Continuous Delivery.
',12
(6326,72
:::
C?I9ED9;FJ?EDI
For too long, domaindriven design (DDD)
has been sold as the
ideal solution for very
complex problems
that only a few teams
are actually facing.
While technically
correct, this statement
sparked a number of
misconceptions. In
fact, DDD is only an
approach to the design
of software systems and
is driven by the domain
of the problem. In this
session, Dino will clear
the ground around
DDD, emphasising
the theoretical pillars
of theapproach:
ubiquitouslanguage
andbounded context.
-$0(6
0217(0$*12
?EI7D:7D:HE?:
:;L;BEFC;DJ<EH
9:;L;BEF;HM?J>
N7C7H?D
As the mobile landscape
continues to expand
and evolve, managing
multiple codebases in
different programming
languages and
development tools
can quickly become a
nightmare. Wouldnt
you love to build native
UIs for iOS, Android and
Windows Phone from
a single codebase? In
this session, James will
show how to leverage the
awesome features of C#
and combine them with
Xamarin technology to
create beautiful, native,
cross-platform, mobile
apps from a shared C#
codebase, with the tools
that you love.
0,.(
:22'
+B?=>JM;?=>J
C?9HEIE<J7PKH;
<;7JKH;I<EH<7IJ#
CEL?D=CE8?B;:;LI
Mobile development
has exploded, and
everyone has an idea
they want to try out.
But bootstrapping a
mobile app doesnt
always seem that easy.
Consumers demand
slick user experiences
and the ability to share
data across a plethora of
devices and platforms,
while were trying to
get a minimal viable
product out the door
totest our ideas as fast
as possible. Thankfully,
Azure has powerful
features available to
help. In thissession,
Mike willtake a practical
lookat five features of
Azure that are useful
formobile developers
ofany platform.
6$+,/
0$/,.
$1'<&/<0(5
5,&+$5'%/(:(77
B;7HD7D=KB7H@I0
J>;HE7:JE
FEM;H<KB"
C7?DJ7?D78B;
7FFB?97J?EDI
JavaScript, by its nature,
makes it difficult to
write maintainable code.
HTML, by its nature,
is loosely structured.
AngularJS fixes both of
those. Itsastructural
framework for dynamic
web apps, allowing you to
extend HTMLs syntax,
enabling you to write
powerful, maintainable
applications succinctly.
In this workshop,
Sahil will build on your
existing knowledge of
JavaScript and teach
you the ins and outs of
AngularJS. There are
plenty of examples,
which will walk
you through a basic
introduction, models,
controllers and views in
Angular, templates and
databinding, services
and dependency
injection, directives,
routing and single-page
applications.
IEB?:7IOD9
FHE=H7CC?D=
?D$D;J
In this special two-day
workshop, Andrew and
Richard will take you
through the core skills
required to successfully
develop async and
multithreaded code,
both in the .NET and
web worlds. Not only do
we cover the core APIs,
but also how they are
used effectively, tested
and debugged.
For a full description
ofthe workshop, please
seePage 20
10'&#;914-5*12
691&#;914-5*12
914-5*12
4'(/%
914-5*12
4'(/%
"&GX9GGM | YYYFGXYGGMEQO | 11
DevWeek_2015_Brochure.indd 11
1/5/15 10:53 AM
9'&0'5&#;/#4%*
&#;#)'0&#%106+07'&
('
&2857(1$<
8;>7L?D=B?A;7
=?J"7D:=;JJ?D=
7M7OM?J>?J
Although Git has rapidly
become almost a de facto
standard in recent years,
it can be intimidating
or confusing for those
transitioning from
other systems or those
new to using source
control. In this session,
Ed will explain how to
use Git effectively, how
to navigate your way
around a repository, and
how to work as part of a
team. Hell attempt to cut
through the mystique
and demonstrate how
easy it can actually be
to use. Then hell go on
to show some of the
more advanced ways
ofworking with Git.
.(9/,1
+(11(<
FHE=H7CC?D=
M?J>=KJI
These days, testing
is considered a sexy
topic for programmers.
Whod have thought
it? But what makes
for good unit tests
(GUTs)? Theres more
to effective unit testing
than just knowing the
assertion syntax of a
testing framework.
Testing represents a
form of communication
and, as such, it offers
multiple levels and
forms of feedback,
not just basic defect
detection. Effective
unit testing requires
an understanding of
what forms of feedback
and communication
are offered by tests. In
this session, Kevlin will
explore exactly what
makes a good unit test.
12 | YYYFGXYGGMEQO |
DevWeek_2015_Brochure.indd 12
+2:$5'
'(,1(5
9EDJ?DKEKI
:;B?L;HO0J>;
M>OI"M>7JI"
7D:>EMI
DevOps is commonly
believed to be
accomplished by having
the development staff
collaborate more closely
with the operations
staff. Thats definitely
necessary, but woefully
inadequate to achieve
the goal of faster and
better delivery in the
last mile of an Agile
shop. In this session,
Howard will discuss
the rationale behind
Continuous Delivery,
along with specific
practices to get you
started on making your
sprints toward customer
satisfaction less tiring
and more enjoyable for
everyone involved.
-8/(6
0$<
J;7C8K?B:?D=
No programmer is
an island. Modern
programs are created
by teams of developers.
And everybody knows
you need great teams to
build great products so
you need to build your
teams carefully. But
what, exactly, makes
a great programming
team? Great
programming skills?
Great interpersonal
skills? Working-allnight-because-theboss-has-thrown-a-fit
skills? Turns out, its
none of these. In this
session, Jules will reveal
that what makes a
programming team great
is exactly the same stuff
that makes any other
team great and most
programming teams
dont have it.
6$6+$
*2/'6+7(,1
C7A?D=$D;J
7FFB?97J?EDI
<7IJ;H
Speed is king on mobile
devices, embedded
systems, and even
run-of-the-mill
desktop applications
that need to start up
quickly and deliver
good performance on
low-power machines.
In this session, Sasha
will review a collection
of practical tips you
can use today to make
your .NET applications
faster. Hell talk about
choosing the right
collection, improving
start-up times, reducing
memory pressure, and
many other techniques
for quickly improving
your apps performance.
,'2
)/$72:
7IF$D;JLD;NJ0
H;?C7=?D?D=
M;87FFB?97J?ED
:;L;BEFC;DJ
?D$D;J
ASP.NET vNext is being
designed from the
bottom up to be a lean
and composable .NET
stack for building web
and cloud-based
applications. Envision
an ASP.NET stack
where MVC, Web API,
and web pages are all
merged into the same
framework, where you
have a server-optimised
version of ASP.NET
with a smaller memory
footprint. This is the new
ASP.NET vNext. In this
session, Ido will explore
the ecosystem of ASP.
NET vNext, its new
project system and
configuration system,
and how to use it to build
exciting web applications.
0,&+$(/
+$%(50$1
KD?JJ;IJ?D=7D:
;(;J;IJ?D=KI?D=@I#
87I;:<H7C;MEHAI
Unit testing and end-toend (e2e) testing are the
tools to enforce stability
on applications. They
create an environment
that ensures our code
does what it was
designed to do. Recently,
web application
developers are looking
to identify the best
testing option, as their
applications are getting
increasingly large and
more complex. In this
session, Michael will
review two methods for
testing web applications
in different JS-based
frameworks: the
unit-testing approach
and end-to-end
testing. He will also
review thebenefit of
combiningthe two.
6+$<
)5,('0$1
9>HEC;:;L;BEF;H
JEEBI7:;;F:?L;
Every developer needs
a set of tools, especially
web developers that
bend under the pressure
of multiple languages,
environments, IDEs
and what not. One of the
most comprehensive
toolsets out there today
is Chrome Developer
Tools. It contains so
many amazing features
beyond the common
ones, and its just a
shame most developers
dont know about
them! In this session,
Shay will tell you all
about the known and
less-known features
of Chrome Developer
Tools, and youll see
how your everyday
web development can
become easier with just
a few simple steps.
$17+21<
61(('
I;9KH?D=M;87F?i
J>;D;MM7OM?J>
EM?D7D:A7J7D7
Sometimes the
technology landscape
is changing so fast, it
feels like youre standing
on quicksand. That is
certainly the case with
ASP.NET Web API,
the new OWIN hosting
model and Microsofts
Katana implementation.
In this session, Anthony
will show how to
correctly apply security
at the transport level to
ensure confidentiality,
integrity and server
authentication, as well
as the nuts and bolts of
configuring SSL for both
web and self-hosted
web APIs using the new
OWIN hosting model.
P;
H7
C;
7=
I9
M
ess
hig
dy
ser
the
pa
inf
ser
wo
far
lev
for
da
log
far
int
tha
Al
fro
pe
pr
Ra
6$6+$
*2/'6+7(,1
FH79J?97B9,
7D:8;OED:
Visual Studio 2015, .NET
2015 and C# 6 are just
around the corner. The
new language features
have been out ofthe
bag for a while now,
but how do you apply
them effectively? How
do you refactor existing
code to be shorter and
sweeter? In this fastpaced session, Sasha
will lead us through
experiments with the
new language features,
including expressionbodied members,
enhancements to
automatic properties,
null propagation,
stringinterpolation
andmany others.
"&GX9GGM
1/5/15 10:53 AM
KD
7I
?D
Is i
use
as
Se
lot
DB
the
by
clu
In
wi
ofu
wh
bad
goo
dis
the
you
cri
If t
ne
wi
pra
res
wi
un
#.51'#%*&#;
&2))(( 5(*,675$7,21
$//(1
+2/8%
P;HECG7D:
H788?JCG0
C;II7=?D=<EH
7=?B?JO7D:
I97B78?B?JO
Messaging is an
essential technology in
high-volume,
dynamically scalable
server applications. Its
the most effective way to
pass non-time-critical
information between
servers, and to distribute
work within a server
farm. At the inter-server
level, messaging is ideal
for use with remote
databases, monitoring,
logging and so on, and a
far better solution to
intra-server data sharing
than a shared database.
Allen looks at messaging
from an architectural
perspective, with
practical examples using
RabbitMQ and ZeroMQ.
./$86
$6&+(1%5(11(5
KD?GK;?:;DJ?<?;HI
7IFH?C7HOA;OI
?DIGBI;HL;H
Is it good practice to
use uniqueidentifiers
as primary keys in SQL
Server? They have a
lot of pros for devs, but
DBAs just cry when
they see them enforced
by default as unique
clustered indexes.
Inthis session, Klaus
will cover the basics
ofuniqueidentifiers:
why they are sometimes
bad and sometimes
good; and how to
discover if they affect
the performance of
your performancecritical database.
If they are having a
negative impact, you
will also learn some best
practices you can use to
resolve those limitations
without changing your
underlying application.
*$5<
6+257
>7:EEF
A?9AIJ7HJ;H<EH
C?9HEIE<J:;LI
Big data is the new
shiny thing right now,
and if you read the
blogosphere youd be
forgiven for thinking
it was a tool just for
Linux devs or worse,
only for those annoying
hipsters with their shiny
Macs. Nothing could
be further from the
truth. Windows makes
an excellent platform
for Hadoop and, in this
session, Gary will show
you everything you need
to know to get started.
From downloading and
installing, to writing your
first map-reduce job,
using both the streaming
API and the SDK. This
session will cover it all,
so come along and join
the big data wave!
'$1
&/$5.
7KJEC7J?D=II?I
F79A7=;9H;7J?ED
M?J>8?CB
(BIML) is a powerful
XML-based markup
language that allows
you to generate
SSIS packages
programmatically. Using
BIML along with C#,
you can create metadatadriven packages, greatly
reducing development
time and increasing
consistency across the
team. In this session,
Dan will show you how
to automate your SSIS
package creation using
the power of BIML and
C#. Youll see how to
create a template for
loading dimension tables
that will greatly increase
your productivity.
| &2))((%5($. |
6$1'(5
+22*(1'2251
?D:?L?:K7BI7D:
?DJ;H79J?EDI
EL;HFHE9;;
7D:<EEBI
The first statement in
the Agile Manifesto
favours individuals,
teams, interaction
and collaboration over
processes and tools.
But there are two sides
to every story. When
it comes to tools, the
Agile Manifesto is often
misinterpreted, in the
sense that its wrong
to use tooling in Agile
projects. Despite this,
more and more vendors
are trying to jump on the
Agile bandwagon and
sell their tools as being
the most Agile toolset
available. In this session,
Sander shines a critical
light on the sense and
nonsense of tools in
theAgile field.
6(%
526(
9K9KC8;H7D:
IF;9<BEM7I
F7HJE<OEKH
:;L;BEFC;DJ
FHE9;II
Behaviour-driven
development (BDD) and
specification by example
(SBE) are quite recent
additions to the software
development toolbox.
Sometimes it feels like
were using a hammer
to drive in a screw.
So,inthis session, Seb
will explore what theyre
good for and when to
use them. Hell also look
at what problems they
dont help with and when
not to use them. Bythe
end of this session, youll
know enough to decide
whether your problems
are more like a screw
or a nail and whether
Cucumber/SpecFlow
isthe right hammer.
/81&+%5($. | &2))((%5($.
0$5.
60,7+
=;JJ?D=OEKH
CE8?B;7FFIH;7:O
<EHJ>;MEHB:
Localising your
applications can open up
a whole new audience of
users for your software.
In this session, Mark will
take a look at how to get
your application ready
for localisation and
how to then utilise the
built-in services of iOS,
Android and Windows
Phone to display proper
information for different
cultures and regions.
6$+,/
0$/,.
$1'<&/<0(5
5,&+$5'%/(:(77
B;7HD7D=KB7H@I0
J>;HE7:JE
FEM;H<KB"
C7?DJ7?D78B;
7FFB?97J?EDI
One-day workshop
continues from the
morning session.
For a full description
ofthe workshop, please
seePage 21
IEB?:7IOD9
FHE=H7CC?D=
?D$D;J
Two-day workshop
continues from the
morning session.
For a full description
ofthe workshop, please
seePage 20
1812
*2',1+2
?EJC(C0>EM7H;
J>;O9>7D=?D=J>;
MEHB:M;B?L;?D5
Internet of Things (IoT)
is here, and every day
a new sensor or device
starts to generate more
data. With that, more
and more machineto-machine (M2M)
communications start
to happen, which make
our solutions behave
differently and face new
issues. In this session,
Nuno will look at how
both of these new buzz
words are changing the
world we live in, from
fitbit to Google Glass
and smart watches. How
can we prepare for this?
How can we anticipate
and get some business
opportunities from it?
Join us and find out.
10'&#;914-5*12
691&#;914-5*12
914-5*12
4'(/%
914-5*12
4'(/%
"&GX9GGM | YYYFGXYGGMEQO | 13
DevWeek_2015_Brochure.indd 13
1/5/15 10:53 AM
6*745&#;/#4%*
&GX9GGM&C[UGGUVJGEQPENWFKPIRCTVQHQWTVYQFC[YQTMUJQRQPCU[PEJTQPQWU
RTQITCOOKPIKP0'6RNWUCPGYYQTMUJQRQP'PVKV[HTCOGYQTMRNWUOQTG
DTGCMQWVUGUUKQPUEQXGTKPICYKFGTCPIGQHVQRKEU
&#;#)'0&#
0,&+$(/
.(11('<
FOJ>ED0
7D7C7P?D=I;9ED:
B7D=K7=;<EH
$D;J:;L;BEF;HI
The modern software
development landscape
isa terrain of many
platforms and
technologies. Gone are
the days where knowing
one technology really
well was enough to stay
on the cutting edge. Even
as we know we should
learn more and branch
out, that choice is
increasingly difficult as
the technology options
explode. In this session,
Michael offers one very
solid choice: Python. It
may seem like a very
different language and
ecosystem from .NET
but beneath the surface,
there are many more
similarities than
differences.
3$9(/
6.5,%7629
:;;FB;7HD?D=0
J>;>7D:9H7<J;:
9E:;A?BB;H
In this session, Pavel
will reveal how a new
direction in artificial
intelligence, called deep
learning, is gradually
reducing demand for
hand-crafted code for
intellectual data analysis,
primarily in the area
of feature extraction.
He will explain why
the internet giants
(Google, Microsoft
etc) are interested in
deep learning, and the
connection with big data
projects. He will also
cover practical examples
of applying existing
deep-learning software
frameworks to an imagerecognition problem.
14 | YYYFGXYGGMEQO |
DevWeek_2015_Brochure.indd 14
',12
(6326,72
J>;:H7C7J?95
?CF79JE<KN
EDIE<JM7H;
7H9>?J;9JKH;
7D::;I?=D
Always neglected in
favour of domain
analysis and modelling,
the presentation layer of
applications receives
little attention. But
whether your application
is web, mobile or desktop,
the presentation layer is
the face it shows to users.
Dino will discuss a
design approach that
starts from requirements
and builds the system
from top to bottom,
focusing on use-cases,
screens and overall user
experience measured by
a new professional figure
the UX architect and
backed by new, but
partially green, tools such
as UXPin and Balsamiq.
$0<
&+(1*
:H7M?D=M?J>
@7L7I9H?FJ0
7D?C7J?EDI7D:
?D<E=H7F>?9I
A number of libraries
and frameworks allow
developers to use
JavaScript to create
engaging visuals without
switching programming
languages. So lets
explore the visual (and
fun) side of JavaScript!
In this session, Amy will
provide a whirlwind
tour of a few libraries
and frameworks that let
you create animations,
simple drawings and
infographics with
JavaScript. First, shell
examine the advantages
(and disadvantages)
of using JavaScript for
graphics and animations.
Then shell go through
Hello World examples
of a few JavaScriptbased libraries.
&+5,6726
0$76.$6
C;;JJ>;D;M
A?:EDJ>;8BE9A0
C?9HEIE<J7IF$D;J+
Imagine if you could
write an ASP.NET
application using your
favourite text editor,
compile it and run it on
Mac OS X. Imagine if
you could mix and match
Web Forms, MVC, Web
API and SignalR within
a single project. How
would it feel to create a
faster, leaner and more
memory-efficient ASP.
NET application that
has been freed from the
shackles of Windows,
and all you need are your
coding skills, a couple of
NuGet packages and
your imagination? In
this session, Christos
provides an intro to
Microsofts ASP.NET 5
the new kid on
theblock.
6$1'(5
+22*(1'2251
?DJHE:K9?D=
7D:;NJ;D:?D=
8EEJIJH7F
Bootstrap is by far
the most popular web
framework of all, with
many ready-to-use styles
and components in CSS
and JavaScript. In this
session, Sander will
show you how to build a
basic web site, leveraging
the many components
of the Bootstrap
framework. He will then
go on to show the use of
additional frameworks
and libraries to add
drop-down support,
icons and date pickers
to your web pages, and
how to build additional
reusable components
using Razor syntax,
in JSF, and applying
Angular directives. Of
course, Sanders talk will
be illustrated with many
coding demos.
'525
+(/3(5
KD?JJ;IJ?D=
F7JJ;HDI<EH
9ED9KHH;DJ9E:;
Getting started with
unit testing is not hard,
the only problem is that
most programs are more
than a simple calculator
with two parameters
and a return value thats
easy to verify. Writing
unit tests for multithreaded code is harder
still. In this session,
Dror will demonstrate
useful patterns that he
has discovered over
the years, and that
have helped him to test
multi-threaded and
asynchronous code and
enabled the creation of
deterministic, simple
and robust unit tests.
Hell also point out the
pitfalls to avoid.
$//(1
+2/8%
:89
:;I?=D8O9E:?D=
Design by Coding
(DbC) is a way to
develop an architecture
incrementally as you
code. It builds on testand behaviour-drivendevelopment techniques,
but adds a focus on the
story thats central to
all Agile processes. The
process answers the
question of how you can
build a coherent Agile
system incrementally,
without a formal upfront design process.
In this session, Allen
will explain how DbC
eliminates the need for
a separate design phase
in the development
process, since your code
is effectively your design
artefact.
(2,1
:22'6
IOIJ;CI;9KH?JO
8;OED:J>;
B?8H7H?;I
Security is now
important to all of us, not
just people who work
at Facebook. But its a
complicated domain,
with a lot of concepts
to understand. In any
technical ecosystem,
there is a blizzard of
security technology,
as well as generic
concepts such as keys,
roles, certificates, trust,
signing and so on. Yet
none of this is useful
unless we know what
problem were really
trying to solve. In this
session, Eoin will dive
into the fundamentals
of system security to
introduce the topics we
need to understand in
order to decide how to
secure our systems.
>;
=K
:;
IG
SQ
loc
pro
asp
As
wo
dea
a
for
ses
loo
loc
in S
on
you
the
dea
in S
tro
and
the
que
stra
dat
721,
3(75,1$
7M;IEC;J>?D=I
OEK97D:E
M?J>HEIBOD
Roslyn, the revamped
compiler for C# and
Visual Basic.NET,
goes beyond a mere
black-box compiler
and gives us limitless
possibilities. Besides
enabling a new era for
C# as a language, it gives
everyone a chance to
utilise compiler powers
for building custom
tools. It acts as a CaaS,
or Compiler as a Service,
which allows you to plug
in at any point in the
compilation process.
But what can you do
with it? In this session,
Toni will show you,
demonstrating how you
can build Visual Studio
extensions, create your
own editors or host
C# compiler to form a
scripting environment.
"&GX9GGM
1/5/15 10:53 AM
H7
DE
Th
is a
dat
sup
of d
sca
que
bes
for
bec
cla
aL
ses
sho
dat
sto
how
effi
con
wil
you
mil
rev
and
sup
ver
cap
#.51'#%*&#;
&2))(( 5(*,675$7,21
./$86
$6&+(1%5(11(5
>;7:79>;
=K7H7DJ;;:0
:;7:BE9A?D=?D
IGBI;HL;H
SQL Server needs its
locking mechanism to
provide the isolation
aspect of transactions.
As a side-effect, your
workload can run into
deadlock situations
aguaranteed headache
for any DBA! In this
session, Klaus will
look into the basics of
locking and blocking
in SQL Server. Based
on that knowledge,
you will learn about
the various kinds of
deadlocks thatcan occur
in SQL Server, how to
troubleshooting them,
and how you can resolve
them by changing your
queries, your indexing
strategy and your
database settings.
6$6+$
*2/'6+7(,1
H7L;D:80J>;$D;J
DEIGB:7J787I;
The big data hype
is all about NoSQL
databases that can
support huge amounts
of data, replication,
scaling and super-fast
queries. RavenDB is the
best NoSQL database
for .NET developers,
because it has a firstclass .NET client with
a LINQ API. In this
session, Sasha will
show you how to model
data as documents for
storage in RavenDB;
how to query the data
efficiently; and how to
construct indexes that
will help you get the data
you need in just a few
milliseconds. Well also
review full-text search
and query suggestions
support, which make it
very easy to add search
capabilities.
'(-$1
6$5.$
:7J7
;NJH79J?ED7D:
JH7DI<EHC7J?ED
M?J>FEM;H
GK;HO7D:C
Power Query, a free
add-in for Excel 2010
and 2013 and part of the
Power BI suite in Excel
365, is a powerful tool.
Dejan will show how you
can use Power Query to
gather all kinds of data,
from databases to web
sites and social media,
inside Excel data models.
In this way, you can
make Excel an analysing
engine for structured
and unstructured data.
In addition to the queries
you can create through
the UI, there is a fully
functional language,
called M, behind the
scenes. This session
introduces both Power
Query and M.
'$1
&/$5.
9H;7J?D=IEB?:
FEM;HF?LEJ
:7J7CE:;BI
Self-service business
intelligence is gaining
popularity among
business analysts
today. It greatly
relieves the problems
created by traditional
data warehouse
implementations.
Using tools such as
Microsofts Power Pivot,
Power Query and Power
View alters the process
significantly. In this
session, Dan will take
you through the process
of creating a solid data
model in Power Pivot.
You will learn how to
import data from various
sources, combine
these in a scalable data
model, use DAX to
create measures, and
incorporate time-based
analysis.
| &2))((%5($. |
$//(1
+2/8%
C?9HEI;HL?9;I0
797I;IJK:O
In this session, Allen
will take a deep dive
into a micro-service
implementation.
Hell look at both the
architecture and the
implementation of
authentication and
comment-management
micro-services suitable
for use in a blog or
similar application. The
core system is written
in Java, so youll need
to know Java, C++, C#,
or equivalent to follow
along easily. Auxiliary
technologies include
Mongo, JavaScript,
AngularJS and
Bootstrap, so this session
provides a real-world
example of how those
technologies work. You
dont need to be familiar
with any of them, though.
+2:$5'
'(,1(5
=;JJ?D=F7IJ
J>;+&!-&3'(&
97B9KB7JEH?D
9K9KC8;H0'(J>?D=I
JEMEHAED
With the best intentions,
people have flocked to
behaviour-driven
development by way of
Cucumber over the past
few years, and thats a
great thing! But often,
BDD can fall by the
wayside due to the
pressure to deliver more
and more functionality,
sprint after sprint. In this
session, Howard will
explore 12 of the most
important issues, such
as imperative versus
declarative style, and
how to keep Gherkindriven Selenium
WebDriver tests
working dependably
through the use of
advanced ExpectedCondition techniques.
/81&+%5($. | &2))((%5($.
6$6+$
*2/'6+7(,1
CE:;HD?I?D=
9!!9E:;
The C++ standard
library dates back to
the 1990s, but that
doesnt mean there
arent new and exciting
frameworks to use in
your C++ application. In
this session, Sasha will
look at some brand-new
and some existing C++
libraries that can speed
up C++ cross-platform
development rapidly.
Some of the libraries
we might cover include:
Casablanca (C++ REST
SDK), Cinder (creative
coding), Boost (generalpurpose), Google Test
(unit testing), SOCI
(modern database
access) and many others.
Theres something for
everyone!
1812
*2'+,12
7H9>?J;9JKH;
8;IJFH79J?9;IED
M?D:EMI7PKH;
When new technologies
and paradigms appear,
its essential to learn
them quickly and
well. But this can be
difficult, since some
things are only learned
with experience. Thats
why best practices are
so important. In this
session, Nuno will look
at some architecture
best practices that
will help us make our
solutions better across
several levels, including
performance, cost,
integration, security
and so on. By doing this,
youll gain the knowledge
needed to quickly start
using the technology and
paradigms that can help
improve your business.
$17+21<
61(('
$1'<&/<0(5
5,&+$5'%/(:(77
IEKFJEDKJI0
:;L;BEF?D=H;7B#
MEHB:8KI?D;II
7FFIM?J>;DJ?JO
<H7C;MEHA7D:
7IF$D;JM;87F?
Performance. Scalability.
Maintainability.
Testability. Security.
Todays application
developers need to build
systems that are
designed to achieve
these goals from the
outset. In this in-depth
workshop, Anthony will
take you beyond the
basics, to learn how to
build RESTful services
that are robust, scalable
and loosely coupled, using
dependency injection
with repository and unit
of work design patterns.
But theres more
to building loosely
coupled systems than
applying a set of design
patterns. Anthony
will show you how to
harness the power
of code generation
by customising T4
templates for reverse
engineering Code First
classes from an existing
database, in order to
produce entities with
persistence concerns
that are completely
stripped away. Youll also
learn ninja techniques
for handling cyclical
references with codebased configuration
and using efficient
binary formatters,
all without polluting
your entities with
mapping, serialisation or
validation attributes.
This workshop will
focus on developing
real-world business
apps using the Entity
framework and ASP.
NET Web API.
IEB?:7IOD9
FHE=H7CC?D=
?D$D;J
Two-day workshop
continues from the
previous days session.
For a full description
ofthe workshop, please
seePage 20
10'&#;914-5*12
691&#;914-5*12
914-5*12
4'(/%
914-5*12
4'(/%
"&GX9GGM | YYYFGXYGGMEQO | 15
DevWeek_2015_Brochure.indd 15
1/5/15 10:53 AM
6*745&#;/#4%*
&#;#)'0&#%106+07'&
3(7(5
2+$1/21
8K?B:?D=D7JKH7B
KI;H?DJ;H<79;I
M?J>H;7BI;DI;
:;L?9;I
The Intel RealSense
SDK is the powerhouse
behind the perceptual
computing cameras
powering the next
generation of Ultrabook
devices. In this session,
Peter will take a look at
how RealSense devices
can provide unique
ways to interact with
applications, explaining
the advantages, and
offering tips and tricks
to building compelling
applications using
RealSense devices. You
will learn how to easily
create applications that
use gesture and facial
recognition, emotion
detection, as well as
speech recognition and
speech synthesis.
.(9/,1
+(11(<
=?L?D=9E:;7
=EE:D7C;
Code is basically made
up of three things:
names, spacing and
punctuation. With
these three tools, a
programmer needs to
communicate intent,
and not simply instruct.
But if we look at most
approaches to naming,
they are based on the
idea that names are
merely labels, so that
discussion of identifier
naming becomes little
more than a discussion
of good labelling. A
good name is more than
a label; a good name
should change the way
the reader thinks. Good
naming is part of good
design. In this session,
Kevlin will look at why
and what it takes to get a
good name.
16 | YYYFGXYGGMEQO |
DevWeek_2015_Brochure.indd 16
$1'5(<
$'$029,&+
=HEELO:;LEFI
?DJ>;9BEK:
In this session, Andrey
will focus on a set of
tools to automate the
provisioning of (cloud)
servers using Groovy
libraries and Gradle
plug-ins. He will explore
how to leverage those to
create an infrastructure
for building, configuring
and testing the
provisioning of boxes in
the cloud elegant and
groovy. This session will
help those Java/Groovy
developers interested
in reusing their existing
skills for infrastructure
provisioning and
learning more about
problems encountered
during system
operations.
-2(
1$72/,
J>;8?=B?;0M>O
<EHC:E;IDJ7D:
I>EKB:DJ<EBBEM
<KD9J?ED
The prescriptive
interpretation of this
axiom has guided the
work of engineers,
programmers,
developers and even
designers for a very
long time. The result
of this has been sites,
software and systems
that exhibit poor
usability, frustrating
user experiences and a
marked failure to deliver
expected business
results. In this session,
Joe will show you why
pure function is rarely
the single or most
important component of
success. He will explain
how every force at play
in any project is what
really evolves form (and
dictates function).
6+$,
5(=1,.
'.J?FI<EHJ>;
7D=KB7H7H9>?J;9J
So your company is
planning to build a largescale web application,
and has chosen to do it in
Angular.js. That raises a
lot of questions: Where
do I start from? What
tools should I use? And,
basically, how do I avoid
making mistakes and do
the job efficiently? Shai
has worked with more
than 20 companies,
helping them with their
struggles migrating to
Angular and avoiding
crucial mistakes in the
process. In this talk,
Shai will present useful
time-saving architecture
tips that will help you
prepare for scalability,
write cleaner code, and
even make your life
happier.
',12
(6326,72
C7A?D=7D;N?IJ?D=
M;8I?J;7CE8?B;#
<H?;D:BOM;8I?J;
Do you feel frustrated
every time you run
across a web site
that doesnt adjust to
the viewport of your
current phone browser?
In some cases, for a
better experience, you
have to know that a
mobile version of the
site exists somewhere
with a different URL.
Theres no reason to
further delay plans to
make your primary web
site display nicely on
small-screen devices,
including smartphones.
In this session, Dino will
lead the discussion and
explore pros, cons and
technologies that could
make each option viable.
,'2
)/$72:
:;8K==?D=J>;M;8
M?J><?::B;H
Every web developer
needs to see what goes
on in the wire, whether
it is a jQuery call from
JavaScript, a WCF
service call from a client
app, or a simple GET
request for a web page.
With Fiddler, the most
famous HTTP sniffer,
this is simple enough
to do. But Fiddler is
more than just a sniffer.
With Fiddler you can
intercept, alter and
record messages, and
even write your own
message visualiser. In
this session, we will
learn how to use Fiddler
from bottom to top to
debug, test and improve
web applications.
*,/
),1.
J>;9>7H79J;H?IJ?9I
E<7IK99;II<KBIF7
Single-page applications
(SPAs) are web
applications that are
built using a single page,
which acts as a shell to
all the other web pages,
with a rich JavaScript
front-end. As opposed
to traditional web
applications, most of
the SPA development is
done on the front-end.
The server, which once
acted as a rendering
engine, provides only
a service layer to the
SPA. In this session,
Gil will explain the
characteristics and
building blocks that form
the foundation of any
successful SPA.
0,&+$(/
+$%(50$1
<HECN7CB%9
JE>JCB%@I
In recent years, the
mobile evolution caused
many developers
to find themselves
migrating from desktop
applications to web
applications. In this
session, Michael will
explore how to make the
transition from XAML
and C# to HTML5 and
JavaScript. He will
review how to port the
MVVM design pattern
to the web environment,
and go on to tackle
important architecture
concepts, such as
dependency injection
and modularity.
:7
;H
IE
Th
is n
wit
alo
pla
im
Lin
up
thi
tal
.NE
wh
cor
and
goi
app
als
and
of t
an
to m
com
tre
1($/
)25'
8K?B:OEKHEMD
J;9>DEBE=OH7:7H
ThoughtWorks
Technical Advisory
Board creates a
technology radar
twice a year: a working
document that helps
the company make
decisions about what
technologies are
interesting. This is a
useful exercise both for
you and your company.
In this session, Neal
will describe the radar
visualisation, how to
create litmus tests for
technologies, and the
process of building a
radar. Attendees will
leave with tools that
enhance your filtering
mechanisms for new
technology and help you
(and your organisation)
develop a cogent strategy
to make good choices.
"&GX9GGM
1/5/15 10:53 AM
@E?
#7I
Ha
an
pe
tw
yo
a
act
tw
Se
In
wi
ho
ha
Ini
the
joi
dig
joi
exe
att
yo
to
var
us
#.51'#%*&#;
&2))(( 5(*,675$7,21
6$6+$
*2/'6+7(,1
:7MDE<7D;M
;H707DEF;D#
IEKH9;$D;J
The .NET framework
is now open source,
with the CLR to follow
along and a crossplatform reference
implementation for
Linux and OS X to show
up during the year. In
this session, Sasha will
talk about the future of
.NET in this new era,
what it means for the
core stack on the server
and desktop, and how its
going to affect our .NET
applications. We will
also see how to build, test
and run our own version
of the .NET framework
and CLR, and how
to make changes to
components previously
treated as a black box.
./$86
$6&+(1%5(11(5
@E?DI?DIGBI;HL;H
#7I;7IO7I7895
Have you ever looked at
an execution plan that
performs a join between
two tables? And have
you ever wondered what
a Left Anti Semi Join
actually is? Joining
two tables using SQL
Server is far from easy!
In this session, Klaus
will take a deep dive into
how join processing
happens in SQL Server.
Initially, he will lay out
the foundation of logical
join processing, then
dig deeper into physical
join processing in the
execution plan. After
attending this session,
you will be well prepared
to understand the
various join techniques
used by SQL Server.
'(-$1
6$5.$
L?IK7B?I?D=
=H7F>?97B7D:
J;CFEH7B:7J7
M?J>FEM;HC7F
Power Map is a new 3D
visualisation add-in
for Excel, used for
mapping, exploring
and interacting with
geographical and
temporal data. Power
Map exists as free
preview add-in for Excel
2013 and in the Power
BI suite in Office 365.
In this session, Dejan
will explain how to
use Power Map to plot
geographic and temporal
data visually, analyse
that data in 3D, and
create cinematic tours to
share with others.
*$5<
6+257
JHEBB>KDJ?D=ED
J>;?DJ;HD;J
With so many people
on social media these
days, almost inevitably
not a day goes by
without some tragedy
befalling someone. As
if that wasnt horrible
enough, these poor
souls and their families
can then become
victims of the perverse
behaviour of the
trolls. In this session,
Gary will examine
this problem from a
data scientists point
of view, showing how
to use computational
linguistics to ensure that
such posts never reach
peoples streams, and
network theory to trace
and expose the trolls so
that they no longer have
the shield of anonymity
to hide behind.
| &2))((%5($. |
-8/(6
0$<
FHE8B;CIF79;
7D7BOI?I
How do you design
a large system? The
architecture of any
system is crucial to
its success get this
wrong, and the project
may never recover. And
yet, we are expected
to deliver designs
that can last five, 10,
sometimes 30 years into
an unknowable future.
Problem space analysis
is a technique that
informs and documents
system designs by
anticipating and defining
the variabilities of a longlived, evolving system.
In this session, Jules will
explain the principles
of the method, give an
outline of the benefits,
and demonstrate its
power with some
illustrative examples.
6(%
526(
CED7:7JJ>;
>OF;H8EB;7D:
EJ>;H7M;IEC;
IJEH?;I
In this session, Seb will
help you to be a better
software developer. As
software developers, we
have to deliver
something useful to our
customers. We have to
produce it in a manner
that acknowledges their
requirements and
context. And usually, we
need to be able to work
as part of a team. Are my
customers more likely to
be satisfied if Im
awesome? In what
circumstances would
monads (or any other
implementation level
detail) be a critical part
of a successful solution?
Seb will analyse
real-world examples
ofprojects that
succeeded and failed.
/81&+%5($. | &2))((%5($.
786+$5
6+$50(5
:E;IOEKH:;I?=D
IC;BB5
In this session, Tushar
will propose a unique
approach to developing
high-quality software
design. Borrowing
a phrase from the
healthcare domain,
agood doctor is one who
knows the medicines
but a great doctor is
one who knows the
disease, the proposed
approach is grounded
on the philosophy that
a good designer is one
who knows about the
design principles but
a great designer is one
who understands the
problems (or smells)
with the design, their
cause, and how they
canbe addressed by
applying proven and
sound design principles.
$17+21<
61(('
$1'<&/<0(5
5,&+$5'%/(:(77
IEKFJEDKJI0
:;L;BEF?D=H;7B#
MEHB:8KI?D;II
7FFIM?J>;DJ?JO
<H7C;MEHA7D:7IF$
D;JM;87F?
One-day workshop
continues from the
morning session.
For a full description
ofthe workshop, please
seePage 21
IEB?:7IOD9
FHE=H7CC?D=
?D$D;J
Two-day workshop
continues from the
morning session.
For a full description
ofthe workshop, please
seePage 20
,'2
)/$72:
C?=H7J?D=
7FFB?97J?EDIJE
C?9HEIE<J7PKH;0
B;IIEDIB;7HD;:
<HECJ>;<?;B:
How much time will
it take us to move to
Azure? Can we just Lift
& Shift our servers?
Will my load-balancer
work in Azure? Should
I use SQL Databases
or an SQL Server VM?
These are just some of
the questions customers
ask when they consider
migrating their
applications to Azure. If
youre evaluating Azure,
come to this session,
where Ido will explain
what to do, what not to
do, what to avoid and
what to embrace when
moving your apps to
Azure. These are not
general best practices;
these are lessons learned
from the field.
10'&#;914-5*12
691&#;914-5*12
914-5*12
4'(/%
914-5*12
4'(/%
"&GX9GGM | YYYFGXYGGMEQO | 17
DevWeek_2015_Brochure.indd 17
1/5/15 10:53 AM
(4+&#;/#4%*
2156%10('4'0%'914-5*125
&GX9GGM
EQPENWFGU
YKVJQWTPCN
FC[QHRQUV
EQPHGTGPEG
YQTMUJQRU
1($/
)25'
#UQP
RTGXKQWUFC[U
CNNYQTMUJQRU
TWPHQTC
HWNNFC[
HTQO
VQ
YKVJUJQTV
DTGCMUKPVJG
OQTPKPICPF
CHVGTPQQP
CPFCNWPEJ
DTGCMCV
9EDJ?DKEKI
:;B?L;HO
* U H D W O H F W X U H V
Y H U \ L Q I R U P D W L Y H
)D Q W D V W L F Y H Q X H
@KD?EHM;8:;L;BEF;H
(&'*:;B;=7J;
18 | YYYFGXYGGMEQO |
DevWeek_2015_Brochure.indd 18
-2(
1$72/,
=;D;H7J?D=
C;7D?D=<KB
H;GK?H;C;DJI
914-5*12
4'(&9
-8/(6
0$<
FHE8B;CIF79;
7D7BOI?I
786+$
6+$50$
79>?;L?D=
:;I?=D7=?B?JO
8OH;<79JEH?D=
:;I?=DIC;BBI
914-5*12
4'(&9
J>
JE
JH
7I
7F
Is y
wo
an
you
app
wo
AS
you
thi
aw
tric
des
It r
fro
an
bet
sin
are
Jav
cod
to u
acc
wi
of t
we
dem
use
tra
an
the
ho
we
pro
an
to t
the
NE
an
.NE
IIS
tip
Jav
91
4'
"&GX9GGM
1/5/15 10:53 AM
#.51'#%*&#;
&2))(( 5(*,675$7,21
,'2
)/$72:
J>;;II;DJ?7B
JEEB8EN<EH
JHEK8B;I>EEJ?D=
7IF$D;JM;8
7FFB?97J?EDI
6$6+$
*2/'6+7(,1
C7A?D=J>;CEIJ
E<9!!''%'*
914-5*12
4'(&9
914-5*12
4'(&9
| &2))((%5($. |
'(-$1
6$5.$
8?M?J>
C?9HEIE<JJEEBI0
<HEC;DJ;HFH?I;
JE7F;HIED7B
B;L;B
914-5*12
4'(&9
/81&+%5($. | &2))((%5($.
*,/
),1.
6(%
526(
$//(1
+2/8%
8K?B:?D=
I97B78B;
@7L7I9H?FJ7FFI
J>;IM?<J
FHE=H7CC?D=
B7D=K7=;
Swift is Apples
new programming
language. It represents a
significant improvement
over both Objective C
and C++; incorporating
many contemporary
language features
(such as duck typing
and closures) without
abandoning object
orientation. It promises
to become the dominant
language of the Apple
platform.
Swift is, unfortunately,
a mixed bag. It supports
many important
language features, but it
also omits features that
are essential for longterm maintainability
(privacy, for example).
In this workshop,
geared to programmers
who already know an
OO language (C++,
Java, C#, etc.), Allen
will present all the
interesting parts of the
Swift language. Well
gloss over the basic
stuff (declarations,
flow control, etc.) and
focus on those parts
of the language that
will be new to you
(lambdas, subscripts,
the inheritance model,
extensions and chaining,
etc.), with considerable
emphasis on places
where the language can
get you into trouble.
914-5*12
4'(&9
914-5*12
4'(&9
914-5*12
4'(&9
Building and
maintaining large
andscalable JavaScript
web apps isnt easy.
So how do you build
your front-endoriented applications
without being driven
to madness? Using
and combining proven
JavaScript patterns will
do the trick.
In this workshop,
Gil will discuss the
patterns behind some
of the largest JavaScript
apps, such as Gmail
and Twitter, and well
explore how to apply
them in your own apps.
Well start from object
patterns and discuss
how to write more
object-oriented-like
code in JavaScript.
Then, we will focus
on module patterns
and asynchronous
module definitions
(AMD). Wewill also
discuss patterns such
as promises, timers and
mediator. At the end of
the day, we will combine
the patterns and see how
to use them to build your
next scalable JavaScript
webapp.
7FFB?;:8::M?J>
9K9KC8;H%@7L7
7D:IF;9<BEM%9
"&GX9GGM | YYYFGXYGGMEQO | 19
DevWeek_2015_Brochure.indd 19
1/5/15 10:53 AM
/#+0%10('4'0%'
/10&#;4&/#4%*
914-5*125
&GX9GGMUOCKPEQPHGTGPEGFC[UPQYQHHGTOQTGEJQKEGVJCPGXGTDGHQTG#NQPIUKFGVJG
DTGCMQWVUGUUKQPU[QWECPEJQQUGHTQOCURGEKCNVYQFC[YQTMUJQRVJCVTWPUCETQUUDQVJ
9GFPGUFC[CPF6JWTUFC[CPFQPGFC[YQTMUJQRUVQEJQQUGHTQOQPGCEJFC[
691&#;914-5*12
9'&6*745
Collections package, now available on NuGet,
which provides another way to model data for
async applications.
$1'5(:
&/<0(5
5,&+$5'
%/(:(77
IEB?:7IOD9FHE=H7CC?D=
?D$D;J
In this special two-day workshop, Andrew
and Richard will take you through the core
skills required to be successful developing
async and multithreaded code, both in the
.NET and web worlds. Not only do we cover
the core APIs but also how they are used
effectively, tested and debugged.
Tasks
When the Parallel Framework Extensions (PFx)
were first announced, it looked as though they
were going to target a narrow set of requirements
around parallelising processor intensive code.
Over time, the scope of the library has grown
significantly, such that it will become the main
model for building asynchronous code. The
pivotal type enabling this transition is the Task
class. This is a functionally very rich type,
allowing the creation of both short- and long-lived
asynchronous work, Tasks can have dependencies
on one another and support cancellation. In this,
the first of the PFx modules we look specifically
at how this class gives us a unified framework for
building multithreaded code.
Thread safety
Asynchronous programming requires careful
attention to detail, since most objects are
not designed with multithreaded access
in mind. This module introduces the
importance of Interlocked and Monitor-based
synchronisation.
$ Z R Q G H U I X O Z D \
W R U H W K L Q N Z K D W
L W P H D Q V W R E H D
JUHDWGHYHORSHU
IE<JM7H;:;L;BEF;H
(&'*:;B;=7J;
20 | YYYFGXYGGMEQO |
DevWeek_2015_Brochure.indd 20
Parallel
The initial goal of PFx was to simplify the
parallelisation of processor intensive tasks and this
remains a key feature. This part of its functionality is
focused on the Parallel class and its For and ForEach
members. In this module, we look at the simplified
model but also highlight that parallelising algorithms
is never as simple as it might first seem we show
you some of the pitfalls that you should be aware of
when trying to parallelise functionality using the
Parallel class.
async/await
C# 5 builds on the Task API, introducing async
and await keywords, which bring asynchronous
execution as a first-class concept in the C# language.
These new keywords create a very elegant model for
all sorts of async work and this module explains not
only how to use them but also how they work under
the covers.
Server-side async
The nature of server-side applications often means
they are asynchronous by their very design, servicing
many clients at the same time on different threads.
But as you dig deeper, you often find these threads
performing long-running blocking operations
particularly in terms of IO resulting in consuming
more threads (an expensive resource) than
necessary. This module focuses on a range of serverside technologies and demonstrates how to perform
maximum concurrency for least number of threads.
TPL Dataflow
TPL Dataflow is a downloadable addition to the
TPL (Task Parallel Library) that ships with the
.NET framework. TPL Dataflow provides an
alternative approach to define concurrency. Instead
of just simply throwing threads at a synchronously
structured program and having to deal with all the
thread safe and race conditions that introduces; we
have the concept of many autonomous objects, each
with its own thread of execution. These autonomous
objects co-operate with other such objects through
asynchronous message passing. In this module, we
will see how TPL Dataflow can greatly reduce the
complexity normally associated with asynchronous
programming.
Rx
Reactive Framework is a new library that uses the
.NET 4.0 IObservable interface and LINQ to create a
compelling new programming model that allows you
to build event-based code with declarative LINQ
statements. This module introduces the Reactive
Framework and shows how it can greatly simplify
your code.
"&GX9GGM
1/5/15 10:53 AM
#.51'#%*&#;
&2))(( 5(*,675$7,21
| &2))((%5($. |
/81&+%5($. | &2))((%5($.
J
10'&#;914-5*125
9'&0'5&#;
B;7HD7D=KB7H@I0
J>;HE7:JEFEM;H<KB"C7?DJ7?D78B;7FFB?97J?EDI
JavaScript, by its nature,
makes it difficult to write
maintainable code. HTML, by
its nature, is loosely structured.
AngularJS fixes both of those.
6$+,/
It is a structural framework
0$/,.
for dynamic web apps,
allowing you to extend HTMLs
syntax, enabling you to write powerful, maintainable
applications succinctly.
In this workshop, Sahil will build on your existing knowledge
of JavaScript and teach you the ins and outs of AngularJS.
There are plenty of examples, which will walk you through a
basic introduction, models, controllers and views in Angular,
templates and databinding, services and dependency injection,
directives, routing and single-page applications.
An introduction to AngularJS
AngularJS is a structural framework for dynamic web apps.
It lets you use HTML as your template language and lets
you extend HTMLs syntax to express your applications
components clearly and succinctly. This module gets you
started with AngularJS showing the basic syntax and some
quick starts to get us running.
Models, controllers and views
Controllers in AngularJS are a fundamental building block
of Angular. AngularJS encourages better code architecture
by encouraging you to use MVC-based patterns. There is
rich support for controllers and views, and this module will
familiarise you with those.
9H U \ L Q I R U P D W L Y H F R Y H U L Q J D E U R D G U D Q J H R I W H F K Q R O R J \
D Q G D J R R G R S S R U W X Q L W \ W R H Q J D J H Z L W K L Q G X V W U \ H [ S H U W V
IE<JM7H;7H9>?J;9J"(&'*:;B;=7J;
6*745&#;
IEKFJEDKJI0:;L;BEF?D=H;7B#MEHB:8KI?D;II7FFI
M?J>;DJ?JO<H7C;MEHA7D:7IF$D;JM;87F?
Performance. Scalability.
Maintainability. Testability.
Security. Todays application
developers need to build
systems that are designed
$17+21<
to achieve these goals from
61(('
the outset. In this in-depth
workshop, Anthony will take
you beyond the basics, to learn what it takes to build
RESTful services that are robust, scalable and loosely
coupled, using dependency injection with repository and
unit of work design patterns.
"&GX9GGM | YYYFGXYGGMEQO | 21
DevWeek_2015_Brochure.indd 21
1/5/15 10:53 AM
/10&#;4&/#4%*
/''6;17452'#-'45
&GX9GGMUURGCMGTUCTG
CEMPQYNGFIGFGZRGTVU
KPVJGKTGNF4GEQIPKUGF
KPVGTPCVKQPCNN[VJG
URGCMGTHCEWNV[
EQORTKUGURTQHGUUKQPCN
EQPUWNVCPVUVTCKPGTU
KPFWUVT[XGVGTCPU
VJQWIJVNGCFGTUCPF
RWDNKUJGFCWVJQTU(KPF
QWVOQTGCDQWVVJGOJGTG
$0<
&+(1*
Amy is a web developer
at the Brooklyn Museum
of Art in New York City,
working to increase
dialogue between the
museum and its visitors
through technology, and
has been a mentor for
the non-profit Girls Who
Code. She is interested in
using code to create art.
,'2
)/$72:
Ido is a senior architect
and trainer at SELA
Group, a Microsoft ASP.
NET/IIS MVP, and an
expert on Microsoft
Azure and web
technologies such as
WCF, ASP.NET and IIS.
He has co-authored a
number of books and
official Microsoft courses.
6$1'(5
+22*(1'2251
Sander is the author
of the best-selling
book ThisIs Agile. An
independent mentor,
trainer, programmer,
architect, speaker
and writer, Sander
is a catalyst in the
innovationof software
development at many
international clients.
22 | YYYFGXYGGMEQO |
DevWeek_2015_Brochure.indd 22
'$1
&/$5.
Dan is a senior business
intelligence (BI)/
programming consultant
specialising in Microsoft
technologies. A former
physics teachers, he has
written several books and
numerous articles on
.NET programming and
BI development, and is a
regular conference speaker.
1($/
)25'
Neal is director,
softwarearchitect
andmeme wrangler at
ThoughtWorks, a global
IT consultancy focusing
on end-to-end software
development and
delivery. Hes the author
of applications, articles,
and books on a variety of
subjects and technologies.
$//$1
.(//<
Allan has held just about
every job in software,
before joining Software
Strategy to help teams
adopt and deepen Agile
practices. He has written
books including Xanpan
Team-centric Agile
Software Development,
and is a regular speaker
and journal contributor.
52'#-'4241(+.'5
$1'5(<
$'$029,&+
Andrey is a software
craftsman with years of
experience. His true love
is the JVM ecosystem,
and applying it to his
companys DevOps
initiatives. He is one
of the authors of the
Groovy 2 Cookbook,
and a frequent speaker
at conferences.
$1'5(:
&/<0(5
Andy is a co-founder of
Rock Solid Knowledge,
creating Kiosk-based
solutions on Windows
Embedded with
.NET. He cut his teeth
programming on a host
of platforms at various
start-ups, and now
consults and teaches for
adiverse range of clients.
6+$<
)5,('0$1
Shay is a Visual C#/
IronRuby MVP and the
author of IronRuby
Unleashed. With more
than 10 years experience
in the software industry,
he is the co-founder of
CodeValue, a company
that creates products for
developers, consults and
conducts courses.
0,&+$(/
.(11('<
Michael is an author,
instructor and technical
curriculum director
at DevelopMentor,
and lead developer
for its online training
platform, LearningLine.
He has been building
commercial applications
with .NET since its initial
public beta in 2001.
./$86
$6&+(1%5(11(5
Klaus provides
independent SQL Server
Consulting Services
across Europe and the
US. He has worked
with SQL Server
2005/2008/2012/2014
from its very beginning,
and has also written
the book Pro SQL
Server2008.
('
&2857(1$<
Ed is an experienced
software developer and
technical evangelist who
has been programming
professionally for
more than 25 years.
He currently works for a
major manufacturer and
retailer in the UK, leading
the team responsible for
its ecommerce web site.
1812
*2',1+2
Nuno is Director of
Cloud Services, Europe
at Aditi Technologies,
and has more than
16 years experience in IT.
His specialities include
enterprise architecture
and solution architecture,
cloud computing,
development
and training.
72%,$6
.20,6&+.(
Tobias is Senior Director
of User Experience at
Infragistics, Inc., and
has worked in user
experience for more than
10 years. He specialises
in Human Factors
Engineering, which is
rooted in his academic
background in cognitive
psychology.
$867,1
%,1*+$0
Austin is a founder of
Sixty North, a Norwaybased software consulting,
training and application
development company.
Developer of industryleading oil reservoir
modelling software
in C++ and Python,
he is anexperienced
presenterand teacher.
+2:$5'
'(,1(5
Howard is a software
consultant and educator
who specialises in Agile
process and practices.
With a career spanning
more than 30 years, hes
been a developer, analyst,
team lead, architect and
project manager, and is a
long-standing member
of the ACM and IEEE.
6$6+$
*2/'6+7(,1
Sasha is the CTO of
SelaGroup, a Microsoft
C# MVP and Azure
MRS, a Pluralsight
author, and an
international consultant
and trainer. The author
of two books, Sasha is
a prolific blogger and
author of numerous
training courses.
,4%$/
.+$1
Iqbal is the President
and Technology
Evangelist of software
developer Alachisoft,
maker of NCache,
the industrys leading
open-source distributed
cache for .NET. NCache
is also available for
Microsoft Azure.
5,&+$5'
%/(:(77
Richard has worked on
distributed systems,
including as middle-tier
architect on the UK
national police systems.
He focuses on technologies
that enable developers to
build large-scale systems
on the Microsoft platform,
such as WCF, BizTalk,
Workflow and Azure.
',12
(6326,72
Dino is a trainer,
speaker, consultant and
author. CTO of Crionet,
a company providing
software and mobile
services to professional
sports, Dino is also
technical evangelist
for software developer
JetBrains, focusing on
Android and Kotlin.
0,&+$(/
+$%(50$1
Michael (MCT, MCPD)
is a senior consultant and
lecturer specialising in
rich client technologies
such as WPF, Windows
Phone, XNA and
HTML/JS. He has
helped to develop
complex infrastructures
using Prism, MVVM
andAngular.
3+,/
/(**(77(5
Phil is a Developer
Evangelist at Caplin
Systems, working on
the BladeRunnerJS
open source project.
Hewrites frequently
andspecialises in
JavaScript development
and real-time web
technologies.
3($5/
&+(1
-'
Pearls cross-disciplinary
approach ranges from
Android to Arduino,
HTML to LEDs. Her
work has taken her from
Facebook campaigns for
Google Chrome to projects
that turn payphones into
gumball machines or
dynamically create origami
from SMS messages.
*,/
),1.
&
0
Ch
eng
10
ma
the
wo
inc
Str
Am
Ign
and
6+
5(
'525
+(/3(5
Dror is a senior
consultant at software
company CodeValue,
with a decade of
experience ranging from
Intel and SAP to small
start-ups. He evangelises
Agile methodologies and
test-driven design in his
work, at conferences
andas a consultant.
Sha
cons
ente
help
and
proj
foun
ano
web
fron
with
5
6
6$+,/
0$/,.
Sahil, the founder
and principal of
Winsmarts.com, has
been a Microsoft MVP
and INETA speaker
for 11 years. Author of
books and articles about
Microsoft technologies,
iOS and JavaScript,
Sahil helps make the
most difficult topics fun.
"&GX9GGM
1/5/15 10:53 AM
Rob
dire
a so
con
Nor
in s
tech
role
dea
of in
from
#.51'#%*&#;
&2))(( 5(*,675$7,21
om
for
jects
nto
ment
for
nd
and
om
l
ises
and
his
VP
f
out
ies,
fun.
/81&+%5($. | &2))((%5($.
-';016'52'#-'45
nary
m
gami
| &2))((%5($. |
.(9/,1
+(11(<
&+5,6726
0$76.$6
Christos is a software
engineer with more than
10 years experience
mainly focusing on
the .NET stack. He has
worked with big names
including MarkIT,
Strathclyde University,
Amor/Lockheed Martin,
Ignis Asset Management
and Barclays.
-8/(6
0$<
Jules is a software
architect with a particular
interest in languages
(both for programming
and discourse), presently
active in web and mobile
convergence. He has been
writing, teaching and
speaking for 25 years,
andis the originator of
Problem Space Analysis.
6+$,
5(=1,.
Shai is an AngularJS
consultant working with
enterprise companies,
helping with migration
and building large-scale
projects. He recently
founded HiRez.io,
anonline training
web site teaching
front-end architecture
with humour.
6(%
526(
Seb focuses on helping
teams adopt and refine
their Agile practices. The
founding trainer with
Kickstart Academy, he
has more than 30 years
industry experience
(including IBM Rational
and Amazon), and is
a popular speaker at
international meetings.
52%(57
60$//6+,5(
Robert is a founding
director of Sixty North,
a software product and
consulting business in
Norway. He has worked
in senior architecture and
technical management
roles, providing tools for
dealing with the masses
of information flowing
from todays energy sector.
0$5.
60,7+
Mark runs the curriculum
team at Xamarin
University, building and
managing the growing
course catalogue
used to train Xamarin
developers all over the
world. He is a Microsoft
MVP, Wintellect
author andXamarin
Consultingpartner.
-$0(6
0217(0$*12
James is a Developer
Evangelist at Xamarin.
He has been a .NET
developer for more than
a decade, working in
industries including
games development,
printer software and web
services, with several
published apps on iOS,
Android and Windows.
25(1
58%,1
Oren has more than 16
years experience with
IBM, Cadence, Wix and
others, and is the founder
of Testim.io. He regularly
speaks about new
technologies in web
development and test
automation, and teaches
at the Techion, Israel
institute of Technology.
$17+21<
61(('
Tony is a course author,
instructor and consultant
for Wintellect, specialising
in robust, scalable and
maintainable applications
using Entity framework,
WCF, Windows Identity
Foundation and ASP.NET
Web API. He is the
authorof two popular
open-source frameworks.
Allen is an internationally
recognised consultant, trainer,
speaker and author. He specialises
in lean/Agile processes and culture,
Agile-focused architecture and
cloud-based web-application
development. He has written a
dozen books, hundreds of magazine
articles, and currently blogs on
Agilefor Dr Dobbs Journal.
$//(1
+2/8%
-2(
1$72/,
Joe has been preaching
and practising the gospel
of user and customer
experience to Fortune
100, 500 and government
organisations for more
than 25years. As founder
of Give Good UX, he
offers coaching, training
and product audit
programmes.
'(-$1
6$5.$
Dejan, MCT and
SQL Server MVP,
is an independent
consultant, trainer and
developer focusing on
database and business
intelligence applications.
He specialises in topics
like data modeling, data
mining and data quality,
and has written 13 books.
$'$0
7251+,//
Adam combines degrees
in engineering and
psychology for a different
perspective on software.
An architect and
programmer, he writes
open-source software in a
variety of languages, and
is the author of Your Code
as a Crime Scene.
3(7(5
2+$1/21
Peters fascination
withnew technologies
has seen him writing
articles for CodeProject,
blogging and contributing
to open-source projects.
He was recently made an
Intel Software Innovator
for his work with
RealSense technology.
786+$5
6+$50$
Tushar is a technical
expert at the Siemens
Research and Technology
Center in Bangalore,
India. His research into
software design, design
smells and refactoring
has resulted in several
patents, research papers
and tools.
5$/3+
'(:$5*1<
Ralph has spent 10 years
focusing on the software
development market at
Intel, helping companies
and institutions to
maximise application
performance and move
code from serial to parallel.
He has spoken at TechEd,
TechDays, OOP and other
conferences across Europe.
721,
3(75,1$
-2+1
.3$8/
John is the VP of
engineering at Penton
Media and former lead
technical architect of
Cond Nasts platform
engineering team.
Healsoorganises the
NYC HTML5 meetup
group, and contributes
toa number of opensource projects.
3$9(/
6.5,%7629
Pavel is a graduate of
the Moscow Institute of
Physics and Technologies
(MIPT), with a PhD
in Neurocomputer
application for the
representation of static
and dynamic 3D data. He
is also the founder, CEO
and ideological leader of
Pawlin Technologies Ltd.
Toni is a Microsoft
MVP for C#, developer,
speaker, blogger and
technology enthusiast.
With years of
professional experience
working on range of
technologies, his recent
focus has been on
Windows Phone and
Windows 8 as a platform.
*$5<
6+257
Gary is a freelance data
science practitioner
and trainer. He has a
deep understanding
of the fullHadoop and
HDInsight environment,
as well as an interest in
Social Network Analysis,
(UCINet and Pajek)
and computational
linguistics(NLTK).
(2,1
:22'6
0,.(
:22'
Mike is a Technical
Evangelist for Red Gate
Software, on the Cerebrata
Team. He describes
himself as a problemsolving, outdoorsy, user
group founding, dog-loving,
blog writing, solutioncreating, event planning,
married, technologyspeaking, father-of-one.
"&GX9GGM | YYYFGXYGGMEQO | 23
DevWeek_2015_Brochure.indd 23
1/5/15 10:53 AM
4')+56'44&
/10&#;
/#4%*
24+%+0)126+105
$11-
019
:;LM;;A(&'+FH?9?D=IJHK9JKH;
$OOSULFHVLQFOXGHUHIUHVKPHQWV
EXIIHWOXQFKDQGVHVVLRQ
QRWHVEXWH[FOXGHWUDYHO
DQGDFFRPPRGDWLRQ
8EEA8O<H?:7O
'/:;9;C8;H(&'*
I7L;KFJEw)&&
8EEA8O<H?:7O
)&@7DK7HO(&'+
I7L;KFJEw(&&
8EEA8O<H?:7O
,C7H9>(&'+
I7L;KFJEw'&&
8EEA7<J;H
<H?:7O
,C7H9>(&'+
KD?L;HI7BF7II
7BB+:7OI
c 8#6
c 8#6
c 8#6
c 8#6
*#:7OF7II
C7?D9ED<;H;D9;!
FH;%FEIJMEHAI>EF
c 8#6
c 8#6
c 8#6
c 8#6
)#:7OF7II
C7?D9ED<;H;D9;EDBO
c 8#6
c 8#6
c 8#6
c 8#6
(#:7OMEHAI>EFF7II
C7?D9ED<;H;D9;
(#:7OMEHAI>EF
c 8#6
8#6
c 8#6
c 8#6
c 8#6
c 8#6
c 8#6
c 8#6
'#:7OMEHAI>EFF7II
FH;%FEIJC7?D
9ED<;H;D9;MEHAI>EF
$FFRPPRGDWLRQLVQRWLQFOXGHGLQWKHSULFHRIDWWHQGLQJ'HY:HHN,I\RXZRXOGOLNHWRERRNDKRWHOURRP
SOHDVHFKHFNWKHOLVWRIUHFRPPHQGHGKRWHOVRQWKH'HY:HHNVLWHZZZGHYZHHNFRPDERXW
6 1 4 ' ) + 5 6 ' 4
8 + 5 + 6 & ' 8 9 ' ' - % 1 /
)RUIXUWKHULQIRUPDWLRQ
GHYZHHN#EVLFRXN
6'4/5#0&%10&+6+1052NGCUGPQVGVJCVVJGQPNKPGUWDOKUUKQPQHCEQORNGVGFTGIKUVTCVKQPHQTOEQPUVKVWVGUCTODQQMKPIUWDLGEVVQVJGHQNNQYKPIVGTOU
CPFEQPFKVKQPU#P[ECPEGNNCVKQPUTGEGKXGFCHVGT(TKFC[,CPWCT[YKNNKPEWTCCFOKPKUVTCVKQPHGG%CPEGNNCVKQPUOWUVDGOCFGKPYTKVKPICVNGCUV
FC[UDGHQTGVJGEQPHGTGPEGQTVJGHWNNHGGYKNNDGEJCTIGF9GCTGJCRR[VQCEEGRVUWDUVKVWVKQPUKHVJG[CTGUWDOKVVGFKPYTKVKPIDGHQTGVJGEQPHGTGPEGDGIKPU
6JGQTICPKUGTUTGUGTXGVJGTKIJVVQOCMGEJCPIGUVQVJGRTQITCOOGCPFURGCMGTUYKVJQWVPQVKEGKHVJKUKUWPCXQKFCDNG+HFGNGICVGUCTGWPCDNGVQCVVGPFHQT
CP[TGCUQPVJCVKUDG[QPFVJGEQPVTQNQHVJGQTICPKUGTUUWEJCUVTCPURQTVRTQDNGOURGTUQPCNKNNPGUUDGTGCXGOGPVKPENGOGPVYGCVJGTVGTTQTKUOQT#EVQH)QF
KVYKNNPQVDGRQUUKDNGVQOCMGCP[TGHWPFUQHEQPHGTGPEGQTYQTMUJQRHGGU
24 | YYYFGXYGGMEQO |
DevWeek_2015_Brochure.indd 24
"&GX9GGM
1/5/15 10:53 AM