ndc magazine 3 2014

68
DON’T IGNORE AZURE STORAGE SERVICES MARK RENDLE CREATE YOUR VERY OWN IOT DEVICES SUZ HINTON SENSORS, THE INTERNET AND YOUR EVERYDAY COMMUTE KRISTOFFER DYRKORN STATUS FIELDS ON ENTITIES – HARMFUL? UDI DAHAN www.ndcmagazine.com NDC LONDON Conference, 3.-5. Dec Pre-workshops, 1.-2. Dec NDC LONDON ISSUE Creativity and Innovation: CRITICAL TOOLS FOR SUSTAINED SUCCESS DENISE JACOBS Creativity and Innovation: CRITICAL TOOLS FOR SUSTAINED SUCCESS DENISE JACOBS N O 3/2014 MAGAZINE FOR SOFTWARE DEVELOPERS AND LEADERS THE DEVELOPER

Upload: ndc-the-developer

Post on 06-Apr-2016

250 views

Category:

Documents


5 download

DESCRIPTION

Special NDC London and IoT issue

TRANSCRIPT

Page 1: Ndc magazine 3 2014

DON’T IGNOREAZURE STORAGE

SERVICESMARK RENDLE

CREATE YOUR VERY OWNIOT DEVICESSUZ HINTON

SENSORS,THE INTERNET AND YOUREVERYDAY COMMUTE KRISTOFFER DYRKORN

STATUS FIELDS ON ENTITIES –HARMFUL?

UDI DAHAN

www.ndcmagazine.com

NDCLONDONConference, 3.-5. DecPre-workshops, 1.-2. Dec

NDC LONDON ISSUE

Creativity and Innovation:

CRITICAL TOOLS FORSUSTAINED SUCCESS

DENISE JACOBS

Creativity and Innovation:

CRITICAL TOOLS FORSUSTAINED SUCCESS

DENISE JACOBS

NO 3/2014

MAGAZINE FOR SOFTWARE DEVELOPERS AND LEADERS

THE DEVELOPER

Page 2: Ndc magazine 3 2014

I think it’s a fantastic time to be working in the software industry. We now truly have multiple platforms and delivery mechanisms from cross platform desktop apps, highly functional web sites, mobile applications, wearables, and devices with no UI coming with the Internet of Things. For developers we have functional languages, great client side frameworks, cross platform mobile tools and the server side ecosystem is being enriched with open source and Microsoft rebooting with ASP.NET vNext supporting cross platform execution for more effective cloud deployment. Now that (some) developers have fi nally admitted their fallibility we have placed testing into the development process as a fi rst class citizen. Now, we need to convert that continuous integration into continuous delivery and deployment too. In addition it’s time to see whether the original promise of Agile and XP is actually being fulfi lled, and how we can

improve the process of creating software. As our l i v e s b e c o m e m o r e entwined with devices and software, we bear a great responsibility of getting things right and delivering software that is usable, flexible and reliable. With this abundance of topics, creating a conference agenda that is fully inclusive is a formidable task, but I think we’ve managed to make NDC London provide a fantastic snapshot of where software development is heading in 2015.

LIAM WESTLEYApplication Architect at Huddle

THE DEVELOPER 3-2014

NDC Magazine for software developers and leaders

and meet your target group!For more information about advertisement, please contact Charlotte Lyng at +47 93 41 03 57 or [email protected]

Advertise in the NDC MagazineF O R S O F T WA R E D E V E L O P E R S A N D L E A D E R S

M A G A Z I N E

CREATING YOUR OWN SKUNK WORKS

NIALL MERRIGAN

FLUENT API’S

KEVIN DOCKX

SPECIAL NDC ISSUE

ACCELERATING WINDOWS

STORE APP DEVELOPMENT

DAVID BRITCH

Add new dimensions

to your algorithms

using

F# TYPE INFERENCE

VAGIF ABILOV

5 AUDIO TRICKSyou didn't knowbrowsers could do JORY PRUM

NO

2/2

014

NORWEGIAN DEVELOPERS CONFERENCEOslo Spektrum, 4-6 JunePre-workshops, 2-3 June

F O R S O F T WA R E D E V E L O P E R S A N D L E A D E R S

M A G A Z I N E

NO

2/2

014

NDC-Magazine_2-2014-NEW.indd 1 09.05.14 11:09

From Crisis to Success

Publisher: Norwegian Developers Conference AS. By Programutvikling AS. Organisation no.: 996 162 060Address: Martin Linges vei 17-25, 1367 Snarøya, Norway. Phone: +47 67 10 65 65. E-mail: [email protected]

Page 3: Ndc magazine 3 2014

3

Member of Den Norske Fagpresses Forening

Design: Ole H. StørksenUncredited images are from Shutterstock, except portraits.

Editor: Kjersti Sandberg

Marketing Manager: Charlotte Lyng

Contents

© K

rist

offe

r Sun

nset

ARTICLESSensors, the Internet and your everyday commute ................................................................................................................................ p. 4Using the Arduino platform tocreate your very own IoT devices .............................................................................................................. p. 8Status fi elds on entities –HARMFUL? ........................................ p. 12Don’t Ignore Azure Storage Services ........................................... p. 20Unlock the value of your data with ElasticSearch ....... p. 24Architecture for CD ............................................................................................. p. 30Creativity and Innovation: Critical tools forsustained success ................................................................................................ p. 34Thinking like an Erlanger – Part 1 ..................................................... p. 38Create a custom agile process for your organization .................................................................................................................... p. 44Exceptional naming ............................................................................................. p. 48Course descriptions .......................................................................................... p. 50

NDC LONDON 2014Tickets ................................................................................................................................. p. 55The NDC Agenda Committee .................................................................. p. 56Workshops ........................................................................................................................ p. 58 London .................................................................................................................................. p. 60 Entertainment and food ................................................................................ p. 62Program Wednesday - Friday ................................................................... p. 64

Page 4: Ndc magazine 3 2014

4

Sensors, the Internet and your everyday commute

Page 5: Ndc magazine 3 2014

I sometimes hear that Norwegians tend to do the same things at the same time. We are a little bit like herd ani-mals since we go to work at around the same time, deliver kids to school or kindergarten at the same time and drive to our cottages on Friday afternoons and back on Sunday evenings. Since the roads are not built for our habitual behaviour, we get stuck in traffi c - especially in our more densely populated areas.

It must also be said that road construction and maintenance is a challenging task in Norway. Due to the topography and the harsh climate the costs associated with building and keeping roads at high standards are substantial. In addition, planned or unplanned maintenance will often lead to con-gestion - and setting up detours is sometimes impossible since our road network is sparse. Still, proper maintenance is vital for cost-effective operation.

The new traffi c measurement system will be benefi cial for both us and the road administrators. It will produce more detailed data about traffi c patterns - data that will be publicly available for us to download and build applica-tions upon. The same type of information will be used for creating detailed maintenance plans or improving road safety. Traffi c volumes and vehicle weights are two of the main factors that decide wear and tear on road surfaces. The climate, and especially seasonal phenomena like frost heaving, also contribute.

The Norwegian Public Roads Adminis-tration is building a new infrastructure for road traffi c measurements. Besides classical project goals like improved data quality and lower maintenance costs, you and me will also benefi t: the system will make it possible to pinpoint where and when congestion normally occurs in the rush hours and on special holidays. So in the future, you might look at both weather and traffi c forecasts when planning your Easter holidays in the mountains!

5© h

obbi

t /Sh

utte

rsto

ck

By Kristoffer Dyrkorn

Page 6: Ndc magazine 3 2014

6

The system consists of roadside sensors, embedded devices for vehicle registration and classification, a data gathering network and a server side application for analysis, storage and reporting.

The information that is gathered should be harmless from a privacy point of view. The sensors utilise induction and pressure sensitivity. They are built into the road pavement and do not register any identifying information about the passing vehicle, owner or driver. Only the fact that a vehi-cle has passed, and its speed and weight, is logged. The model, colour or registration number cannot be detected by the sensors.

A registration and classification device converts the mag-netic signature of a vehicle into a record containing a time stamp and the measured vehicle length, weight and speed. The record is then transmitted over a standard Internet con-nection using OPC-UA, a protocol stemming from the auto-mation and process control industry. The data is encoded in a compressed binary format while the protocol itself guarantees reliability, security and integrity - at the same time being platform independent and resource efficient.

The record is received by a Java application that does simple near-time analysis. As an example, it is important to immediately detect and flag any vehicle that is driving in the wrong direction on a motorway. Such a situation is extremely dangerous and nearby drivers should be informed through any channels available. The detection of these so-called "ghost drivers" is based on the registration of nega-tive speeds. On two-lane roads, however, a negative speed might come from a car passing another car - which is a nor-mal event. The application thus contains logic to separate these two situations from each other.

The record is then stored in a database. Here NoSQL tech-nology provides the needed support for high-speed writes, large data volumes, robustness and quick and efficient reporting. The system stores all records explicitly to secure full flexibility in the report creation, both for current and historical data.

Currently, the system is in its start-up phase. The software has all the needed basic functionality for data-gathering and

reporting. A large batch of roadside sensors is now being acquired and will be installed along the main roads in Norway in the next couple of months. After that, the system will be enhanced with new functionality and adaptations for larger traffic volumes as more and more sensors get installed.

One of the main goals of the system is to improve road traf-fic statistics for better maintenance planning and invest-ment control. However, it is also a clear goal that the system should provide open and near real-time traffic data to the public and to public and private institutions. There are sev-eral use cases that illustrate the value of such data: police or ambulance drivers in an emergency can get driving rec-ommendations that consider the current traffic situation. Ordinary drivers can be advised about congestions ahead and be offered alternative routes. Also, parcel service com-panies can provide more precise estimates on expected arrival times to their customers.

The potential value of this system thus spans efficient pub-lic spending, nice-to-have information for technology and/or driving nerds and time savings of potentially life-saving character. We will need to wait some time to see how the system will be used and whether its full potential will be reached. One thing is clear: all of this is made possible just by using software, sensors, the Internet and hardware that is connected!

Kristoffer is a Scientist at BEKK. He has been a developer, team lead or solution architect the latest 15 years and has broad experience from a variety of fields such as search engines, performance tuning, NoSQL for analytics and 3D graphics. At the moment he is mostly working on systems architectures for distributed stream processing.

© h

obbi

t /Sh

utte

rsto

ck

One day of Internet of Things

6. NovemberRadisson Blu Scandinavia Oslo

Page 7: Ndc magazine 3 2014

TIME BUSINESS & APPLICATIONS TECHNICAL I TECHNICAL II

08:00 - 09:00 Registration – Coffee and snacks

09:00 - 10:00 Keynote: Internet of Things – a driver for innovation and growth - John Baekelmans (Business & Applications track)

BREAK

10:15 - 10:45 Enabling Business transformation by predictive analytics, a case study ThyssenKrupp Elevators - John Hicklin

Internet of Things – Hyper-Scale Control and Analytics Systems on Microsoft Azure (and Windows Server) - Clemens Vasters

Bluetooth Smart, the standard that will fuel the IoT growth - Reidar Martin Svendsen

10:45 - 11:15 Is it possible to secure micro-controllers used within IoT? - Aaron Ardiri

BREAK

11:30 - 12:00 IoT & The People-Centric Approach: Transforming lives in a meaningful way - Anna Kirah

A fragile internet of things - Einar Otto Stangvik & Erlend Oftedal

Elixir and the Internet of Things - Douglas T. Rohrer12:00 - 12:30

Audio Design and Branding for the Internetof Everything - Tom Trones

LUNCH BREAK

13:30 - 14:00 The anatomy and technology of connected products - Nick Ludlam

Beating the traffic jam using IoT - Kristoffer Dyrkorn & Erling Berg-Tesdal

How a simple IoT solution is driving sales and empowering the customer - Stephen Harrison

14:00 - 14:30 Supercharge your IoT toolbox with MQTT and Node-RED - Simen Sommerfeldt

BREAK

14:45 - 15:15 Using IoT in health care - Johan Ivarson New Bits, New Pieces: Inspiration for building IoT for everyday use - Aras Bilgen

Electric driving with front end technology - Trygve Lie

15:15 - 15:45 An early road-map to making the right Internet of Things investment - Thor Henning Hetland

Internet of Machine Learning -Kristoffer Rolf Deinoff

BREAK

16:00 - 16:45 Real-Time Data From One Million Sensors - Steinar Rune Eriksen & Ståle Heitmann

RealTime communication and IoT walks hand in hand - Uffe Björklund

JavaScript army – making things walk, talk, and network to do your bidding - Suz Hinton

BREAK

17:00 - 17:30 Closing Keynote by Steve Teixeira

17:30 - late Evening mingle with drinks and tapas

One day of Internet of Things

6. NovemberRadisson Blu Scandinavia Oslo internetofthingsday.com

CONNECTING PEOPLE AND THINGS - BRIDING BUSINESS AND TECHNOLOGY The term Internet of Things and its possibilities have been discussed for a decade, however we seem to be at a point of

rapid acceleration of the field. In 2008 the number of devices on the internet exceeded the number of people on the earth. By 2020 it is estimated that there will be 50 billion devices on the internet.

Page 8: Ndc magazine 3 2014

8

MODULAR JAVASCRIPTThis is just a quick project showing how simple it is to get up and running with building and programming your own Internet of Things devices.

When all assembled and placed in a mailbox, this contrap-tion will connect via WiFi to both email and SMS you when you get mail!

In this example, I'm using an Arduino microprocessor teamed with a light sensor and a WiFi module. A battery

powers the Arduino, which constantly keeps track of how much light is in the mailbox. When the postal delivery opens the little back door to put your mail and parcels in, light streams into the mailbox. This trips the device, which will then connect to WiFi and send the email and SMS to you.

If you do not have one of those door opening mailboxes, you can program it the opposite way - put it in your mailbox so that the sensor gathers light from the mail slot, and when envelopes are pushed through it blocks the light momentar-ily. Effectively that will be the trigger.

As a software developer, there's something magic about being able to say, "I made this myself!". Building hardware to integrate with software is no different. Sure, you can buy off the shelf IoT devices for your home and lifestyle, but there's much more fun in building your own. You'll learn a lot about how they work, and will take away a sense of pride and achievement.

By Suz Hinton

© Vudhikrai/Shutterstock

Using the Arduino platform to

create your very own IoT devices

Page 9: Ndc magazine 3 2014

9

This only works in daylight, but it's pretty cool anyway. Your mileage may vary with WiFi strength if your mailbox is made of metal.

The full code is hosted on Github: https://github.com/noopkat/tinyduino-wifi-helloworld

**Warning** - postal companies might not be too pleased about spotting a mysterious device in a mailbox. They won't always assume it's a perfectly harmless Internet of Things device. I am not condoning breaking the law with this pro-ject. Make sure you're familiar with mail/mailbox tampering laws in your country. Long story short - don't scare your friendly neighbourhood post deliverer. Nobody wants the police outside their house!

SHOPPING LIST• TinyCircuits Processor board• TinyCircuits WiFi module• TinyCurcuits Proto module (any will do)• TinyCircuits USB programmer module (not pictured)• Micro USB cable• 10k Ohm resistor• Photocell resistor• 3.7v LiPo battery, at least 500mA Tools I assume you have already:• LiPo charger• Soldering iron• Solder

ASSEMBLYMy favourite feature of the TinyCircuits system (other than the tiny size) is the way they easily click together to supply the technology you need. First, we're going to click every-thing together as we need it.

Take the processor board, and click the USB module to the top of it. Then, click the WiFi module to the top of the USB one. Lastly, click together the proto board to the very top of the stack. This will be the order of the stack when we develop it. It allows us to power the board without a bat-tery via the computer, and we can also program it this way.

Next, remove the proto module from the top of the stack. Solder the resistor and photocell to it. The resistor goes from A0 to GND, and the photocell shares the A0, and the

other end goes to VBATT. VBATT is a special pin that makes both the USB and battery power sources available to use.

See the photo on the next page for how it will look when complete. Note I have left the component arms rather long so that it's easier to see what's going on.

UPLOAD ARDUINO CODEClick the proto module back onto your TinyCircuit stack. Plug a micro USB cable into the programming board, then connect to your computer. In the Arduino software, set the board to 'Arduino Pro Mini 3.3v w/ ATMega 328'. Open the sketch from the repo and click 'upload'. Select the correct USB device if prompted.

Parts needed

Page 10: Ndc magazine 3 2014

10

Final assembly

The main loop of the sketch is pretty simple, see the truncated code below:

uint32_t ip = cc3000.IP2U32(10,0,1,4);int port = 8081;String path = "/mailbox/token/";String token = "558822";String request = "GET " + path + token + " HTTP/1.0";

void loop(void){ sensorValue = analogRead(sensorPin); // print to serial monitor for debugging purposes Serial.println(sensorValue);

// if light source appears, set bright to true and send request // you may have the fiddle with this value to suit your light source if (sensorValue < 450 && bright == false) { // this will ensure request is sent only once bright = true; // send request to mailbox server send_request(request); }

// light source gone, go back to dark mode again if (sensorValue > 450 && bright == true) { bright = false; } delay(300);}

You'll definitely need to play with the default light reading value set in the code above for best results with the physical place you're setting up your device in.

Page 11: Ndc magazine 3 2014

11

SET UP YOUR SERVERI created a really simple NodeJS hapi server instance for deal-ing with the email and SMS. It is running on the local network the device is connected to via WiFi. The server simply waits for a GET request to the specified route, then verifies the request with a static token the Arduino will send as part of the request. This token should help stop your friends pranking you!

When the request is successful, the route handler will call some third party API's to send the notifications. I'm using Twilio for SMS, and Mailgun for the email.

A truncated sample of the code:

var Hapi = require('hapi');var server = new Hapi.Server('10.0.1.4', 8081);var passToken = '558822';

server.route({ method: 'GET', path: '/mailbox/token/{token?}', handler: function (request, reply) { if (request.params.token && request.params.token === passToken) { // Twilio sendSMS(); // MailGun sendEmail(); // simple reply for testing manually reply('you\'ve got mail!'); } else { // someone's being a prankster if missing/wrong token reply('why you gotta troll me, friend :('); } }});// Start the serverserver.start();

Start the server in bash:

node index.js

TEST YOUR DEVICEWhile still plugged in to your computer, reset your device, and make sure your NodeJS server is running. To debug, watch both the Arduino app serial monitor's output, and your bash window. Play with the photo sensor, covering it up and then exposing it to light. You should start receiving emails and SMS's.

Once verified, you can take the USB programming module out of your TinyCircuit stack completely, as we no longer need it. You'll see 2 terminals on the processor board. Solder a LiPo battery JST connector to these terminals in order to have this device run truly wire free and discreetly. Test again with the LiPo battery connected, then you're ready to use your finished device!

OPTIONAL STEP3D print a case for your new contraption, to make it look geek professional.

Suz Hinton is a software engineer by day, and maker by night. Having developed several delightful devices over the years with the help of mi-crocontrollers, Suz is a big supporter of the recent IoT movement. Her interests within the IoT sphere are on a data ownership and educational level. She believes that empowering people to utilize the latest technol-ogy and manufacturing techniques will see a high level of innovation and an increase in access to the field of wearables, home automation, and medical assistive devices.

Page 12: Ndc magazine 3 2014

12

It all started so innocently – just a little status field on an entity.

Now, there’s no way to know whether it was truly the root cause of all the pain that came afterwards, but there does seem to be some suspicious correlation with what came next.

By Udi Dahan

Status fieldson entities – HARMFUL?

Page 13: Ndc magazine 3 2014

13

© K

irill

_M/S

hutt

erst

ock

Today, our batch jobs periodically poll the database looking for entities with status fields of various values and, when they do, the performance of the front-end takes a hit (though the caching did help with the queries). Once upon a time it used to be man-ageable, but with over 50 batch jobs now the system just can’t get its head back above water.

Even in the cases where we used regular asynchronous invocations, the solution wasn’t particularly solid – it was enough for a server to restart and any work not completed by those tasks would be rolled back, and any memory of the fact that we really need that task to be done gone along with it.

And don’t get me started on the maintainability or, more accurately, the lack of it. Every time someone on the team made changes to some front-end code, they invariably for-got at least one batch job that should have been changed as well. And since some of these jobs can run hours and days later, we didn’t really know that the system worked properly when we

Page 14: Ndc magazine 3 2014

14

deployed it. And don’t bring up that automated testing thing again – we’ve got tests, but if the developer was going to forget to change the code of the batch job, don’t you think they’d forget to change its tests too?

If only I could say “never again”, but this is the third system rewrite that I’ve seen go bad in my career. And the alternative of continuing to battle an aging code base that gets ever more monolithic isn’t any more appealing.

It’s like we’re doomed.

DID ANY OF THAT SOUND FAMILIAR?If so, you might be able to take some comfort in the fact that you’re not alone. Misery does love company, after all.

In any case, let’s rewind the story back a bit and look at some of the inflection points.

As time goes by, the logic of many systems gets more and more com-plex – starting slowly with some status fields which influence when logic should be triggered. Together with that complexity, the execution time of the logic grows often making it difficult to for the system to keep up with the incoming load. It’s at that point in time that developers turn to asynchronous technologies to offload some of that processing.

THE PROBLEM WITH ASYNC/AWAITWhen you have some work that can take a long time, it is often appropri-ate to invoke it asynchronously so that the calling thread isn’t blocked. This is most significant in web front-end scenarios where the threads need to be available to service incoming HTTP requests.

Of course, as often is the case with web requests, we do want to give the user some feedback when the pro-cessing completes. This can be done by marshalling the response from the background thread to the original web thread – something that has been greatly simplified with the async/await keywords in .net version 4.5.

The issue is, as mentioned above, that there is no built-in reliability around these in-memory threaded con-structs. If an appdomain is recycled, a web server crashes, or any number of other glitches occur – not only is the work done on the async thread lost (if it didn’t complete), but the manag-ing thread that knew what needed to happen next is also gone, in essence leaving our process in a kind of limbo.

Interestingly enough, sometimes batch jobs are created as a kind of clean-up mechanism to fix these kinds of problems. Also, since batch jobs frequently operate with database rows as their input as well as their output, it is believed that many of the reliability concerns of in-memory threading are resolved.

But we’ll get to that in a bit.

First, let’s talk about how the intro-duction of these batch jobs influences our core business logic:

THE IMPACT OF BATCH JOBS ON BUSINESS LOGICWhile developers and business stake-holders do understand that introduc-ing these batch jobs into the solution will increase the overall time that it takes for a business process to com-plete, it is considered a necessary evil that must be endured so that the front-end can scale.

Unfortunately, what is often over-looked is the fact that the business logic that used to be highly cohesive has now been fragmented as shown in Figure 1.

Now, if the logic was merely divided into two parts things might have remained manageable, but often the logic in the batch job is rewritten as stored procedures1 in the database or using other Extract-Transform-Load2 (ETL) tools like SQL Server Integration Services3 in an attempt to improve its performance. This is sometimes exacerbated by the fact that a different team, one focused on those other technologies, ends up maintaining that batch job.

And while a single batch job is likely not considered to be all that “evil”, it does seem that when a second batch job comes along they start to repro-duce. And their devilish spawn is what ultimately brings our system to its knees with logic scattered all over the place.

And, although each decision taken seemed to make sense at the time, it seems that this road to hell was also paved with plenty of good intentions.

THE NOT-SO-NIGHTLY BATCHIt was not so long ago that business was conducted from 9 to 5 in a spe-cific time zone.

You could assume that your users wouldn’t need to access various sys-tems during “off hours”.

But it’s a very different world these days – a more connected and more global world. Systems that used to be accessed only by employees of the company have been opened up for end-user access and these end users want to be able to do anything

Figure 1. Introducing a batch job into a system results in the fragmentation of business logic

Page 15: Ndc magazine 3 2014

and everything on their own schedule, 24x7. In an attempt to keep pace with end-user demand, employees have similarly transitioned to an “always on” mode of work, on top of increas-ing travel demands.

In short, that once luxurious night in which we could run our batch jobs uninterrupted has shrunken so much over the past 20 years that it’s practi-cally nonexistent anymore.

THE PERFORMANCE IMPACTThe whole idea of moving logic into a nightly batch was so that it wouldn’t impact the performance of the sys-tem while the users were connected but it seems that this has boomer-anged on us. Anybody who tries to use the system at a time when a batch is running gets significantly worse performance than if we had kept the original logic running in “real time” as at that time the batch is processing all records rather than just the ones that the user cares about.

On top of that, the fact that a batch job runs only periodically increases the end-to-end time of the business process by that period. Meaning that if you have a nightly batch, it could be that a given business process that started right as the nightly batch com-pleted would have to wait almost 24 hours to complete.

If there are additional batch jobs that pick up where other jobs left off as a part of an even larger enterprise pro-cess, that sequence of batch jobs can cause these processes to drag on over a period of days or weeks.

And if we start looking at how failures are dealt with, the picture begins to look even more bleak.

DEALING WITH FAILUREIf any job actually fails as that can add even further delays. This failure could be caused by some other transaction processing the same record at the same time – a concurrency conflict. To

be absolutely clear, what this means is that the records which are the most active are the most likely to fail.

Unfortunately, there is no built-in way to have the processing retry automatically so developers usually don’t remember (or put in the effort) to create one. “It’ll just be picked up in the next cycle”, they tell themselves. However it may be just as likely that a conflict will happen on the next cycle as it did in the last one. Every time something fails, that’s another delay in the business process.

RISKS AROUND PERFORMANCE OPTIMIZATIONSSometimes developers attempt to optimize the performance of the batch jobs in an attempt to get them to keep pace with the ever increas-ing number of records in the system. One of the techniques that’s used is to operate on multiple records within the same transaction rather than doing one transaction per record.

15

Page 16: Ndc magazine 3 2014

16

While this does tend to improve performance, it has the unfortunate side effect of increasing the impact of transaction rollbacks when fail-ures occur. Instead of just one record reverting to its previous state, all the records in that transaction get reverted.

This increases the business impact as more instances of the business process get delayed.

Also, as mentioned above, since the most active records are the ones most likely to fail, and the activity levels of various records fluctuate over time, it is quite possible that a given set of records will end up failing repeat-edly as conflicts occur for different records within the same set.

In short, while more records can be theoretically processed per unit time when performing multi-record trans-actions, it may very well be the case that the rate of successful record processing actually decreases.

So, how do we resolve all of these issues?

USE A QUEUE AND MESSAGING (PART 1)When developers hear the term “queue” they usually think of tech-nologies like MSMQ, RabbitMQ, or something else that ends in the let-ter MQ (meaning message queue). While those are viable approaches, it is important to understand the archi-tectural implications of a queue first.

A queue is a “first-in, first-out” (FIFO) data structure that enables differ-ent actors to interact in a decoupled manner.

The important thing about the “mes-sages” that are pushed into and popped out of the queue is that they are immutable – meaning their values don’t change.

HOW QUEUES & MESSAGING ARE DIFFERENT FROM DATABASESWhile it is common to have differ-ent actors reading and writing from tables in a database, the difference is that the entities in those tables are modified by those actors – meaning that they are not immutable. In this

sense, traditional batch operations aren’t really using queuing or messag-ing patterns for their asynchronous communication.

While it is perfectly feasible to imple-ment a queue on top of a regular table in a database, it is important that the code that reads and writes from that table treats its contents as immuta-ble messages – not as a master data entity.

For this reason, it is usually desirable to abstract the underlying techno-logical implementation of the queue from the application-level code – something like an IQueue interface with Push and Pop methods that have copy-semantics on the message objects flowing through the queue.

QUEUE VS. DATABASE – CONSIDERATIONSThe advantage of using a database-backed implementation of an abstract queue is that all data continues to flow through the exact same persis-tence mechanism resulting in simpler deployment, high availability, backup, and restore.

The disadvantage of using the data-base is that, depending on your database technology, it may be more expensive to scale the database to meet increasing performance needs than a message queue. That being said, just like there are numerous free and open-source message queues, there are also numerous free and open-source databases.

The main advantage of using mes-

sage queuing technology is that it was designed specifically to address these kinds of problems. You’ll usually find that queues are able to achieve higher throughput as well as give you better control around how messages should be delivered and processed.

For example, you may have certain kinds of messages which represent data arriving from sensors at a high rate that don’t actually have to be persistent as you don’t care if they get dropped in case of a server crash. A message queue enables you to define these messages as non-durable and thus achieve much better performance.The main disadvantage to introduc-ing message queueing technology is that it is another moving part in your system – something that administra-tors will need to learn how to config-ure, deploy, etc. That has its own cost (if the administrators aren’t already familiar with it).

LEAKY ABSTRACTIONSWhile you might think that having this abstraction will practically insu-late your system from the underlying technological implementation, it is important to understand that once the system is live there will be many messages flowing through it on an ongoing basis.

In order to switch from one implemen-tation of a queue to another (to/from a queue to/from a database), it isn’t just a simple matter of changing the class that implements the interface. You may need to “drain” the system – meaning having it refuse any new requests until it finishes processing all

Page 17: Ndc magazine 3 2014

17

the existing messages. This can mean significant downtime for a system.

Alternatively, you could write scripts which move all of the messages cur-rently in-flight from one persistent store to the other. Like all data migra-tions, this can be tricky and should be tried and tested in pre-production environments sufficiently well before attempting it in production.

USE A QUEUE AND MESSAGING (PART 2)If you start writing your applica-tion code using this kind of IQueue interface, adopting a more explicit message-passing communication pat-tern in your system, is that many of the problems mentioned above will be much easier to solve – let’s see why.

Once you use an explicit message object to pass data between actors (rather than having them polling enti-ties of various statuses and updat-ing those exact same entities), you reduce the contention on your mas-ter data entities. The message object communicates the important status changes and can serve as a more for-mal contract between those actors.

Just like any other interface in your system, a message contract should

be versioned carefully, taking into account which consumers could be affected.

PROCESS STATE VS. MASTER DATAEntities with status fields often end up doing double-duty as both master data as well as holding the state of some longer-running business pro-cess. This probably isn’t the best idea, as stated by the tried-and-true Single Responsibility Principle4.

If you have an entity with a status field where that status changes values over time, that is usually an indication that you should create a separate process-centric entity that holds data related to the process that isn’t necessarily master data. While it can sometimes be tricky to draw the line between the two, it is a worthwhile exercise.

Don’t be influenced by the need to show the state of the process to the user – you can just as easily create a UI on top of a persistent process entity as you could on top of a regular business entity.

That being said, sometimes you can model these processes as a kind of event cascade as shown in Figure 2 and Figure 3.

Often in a system, a combination of approaches is used with some event-driven, publish/subscribe interaction and some process objects where we require more control and visibility of progress.

THE PERFORMANCE IMPACTRegardless of whether you use an actual message queuing technology or a database, once you make your messages immutable, you will have removed some of the contention on the entities (as they won’t be serving double duty as both a message and an entity anymore).

When taken together with build-ing blocks with their own database schema, the rest of the contention is removed thus enabling us to perform the processing in “real time” rather than as a batch.

This combination can reduce business process times from days and weeks when performed as a series of batch jobs to minutes and seconds.

DEALING WITH FAILUREThe second significant benefit of message driven solutions is that many queues already have retry semantics built in so that even in the case of message processing failure, not only do things roll back but they get pro-cessed again automatically (and in the same real-time as before).

Queuing technology usually has addi-tional capabilities in this area includ-ing the ability to move “problematic” messages off to the side (into a “poi-son letter queue”) so as to free up the processing of other messages. You can usually configure the policy around how many times a message needs to fail before it is flagged as a “poison message”.

TRANSITIONING FROM BATCH TO QUEUESThe good news is that if you’re already making use of batch jobs, a lot of your code is already running asynchro-nously from previous steps – this makes introducing a queue much easier than if you had everything run-ning in one big long process in your front end.

Figure 2. Batch processing moving forwards a business process

Figure 3. Cascading events using a queue as a business process

Page 18: Ndc magazine 3 2014

18

One challenge you may have, if a lot of the batch job logic was (re)written as stored procedures in the database, will be rewriting that logic back in your original programming language. You’ll usually get better testability along the way, but this can take some time.

It is best to start your transition from the last batch job in the sequence and slowly work your way forwards. That way, you’re not destabilizing critical parts in the business process where it isn’t clear what other jobs are depend-ing on them.

When opportunities present them-selves for building new functionality, or extending an existing business pro-cess, look to create new events that you can publish and have a new sub-scriber run the logic for those events using these new patterns. Hopefully, this will allow you to demonstrate the shorter time to market that this approach enables.

IN SUMMARYEvery time you see yourself creating a status field on a given entity, keep your eyes peeled for some batch job that will be created to poll based on that status. It would be better to create an explicit event that models what happened to the entity and have a subscriber listening for that specific case.

If your system is built using .NET and you’d like to use a framework that abstracts away the queuing system as well as enabling you to run on top of regular database tables for simpler deployment, take a look at NService-Bus. All of that functionality is avail-able out of the box as well as giving you the ability to extend it for your own needs. Production monitoring and debugging tools are also avail-able for NServiceBus as a part of the Particular Service Platform.

For more information, go to http://www.particular.net

REFERENCES1) http://en.wikipedia.org/wiki/ Stored_procedure2) http://en.wikipedia.org/wiki/ Extract,_transform,_load3) http://en.wikipedia.org/wiki/SQL_ Server_Integration_Services4) http://en.wikipedia.org/wiki/ Single_responsibility_principle

Udi Dahan is one of the world’s foremost experts on Service-Oriented Architecture and Domain-Driven Design and also the creator of NServiceBus, the most popular service bus for .NET.

Page 19: Ndc magazine 3 2014

19

Database Lifecycle Management

Your SQL Servers get source control, continuous integration, automated deployment, and real time monitoring. You get fast feedback, safe releases, rapid development, and peace of mind.

Find out how at www.red-gate.com

@redgate /RedGateSoftwareTools /RedGateVideos

Page 20: Ndc magazine 3 2014

20

By Mark Rendle

© E

very

thin

g_po

ssib

le/S

hutt

erst

ock

Don’t Ignore Azure StorageServices

Azure

Page 21: Ndc magazine 3 2014

21

Microsoft’s Azure cloud platform has come a very long way since the first public preview just five years ago. Back then, the only option for running applications was Cloud Services, which were hard to work with and could take half an hour to start. And the only option for data storage was Azure Storage Services, offering Blobs for unstructured data, Tables for structured data, and Queues for durable messaging.

These days things are very different. There are multiple ways to run your code (or other people’s), from Infrastructure-as-a-Service (IaaS) VMs, running Windows or Linux, to high-density Platform-as-a-Service (PaaS) Azure Web Sites. And for data storage, you’re spoiled for choice. For relational databases, Azure SQL Database is a good, solid service; ClearDB provide managed MySQL; you can run full SQL Server, or Oracle, or whatever database you like (hint: PostgreSQL) in an IaaS VM. You can get managed NoSQL solutions like RavenDB, MongoDB or Microsoft’s just-launched DocumentDB. Fast, non-persistent caching is now available with the Redis Cache Service. Messaging can be handled using Service Bus or Redis.

With this smörgåsbord of services available, then, it’s easy to forget about the original Storage Services, but that would be a mistake. They were designed to provide massively scalable and cost-effective solutions, and they still do that today. In fact, they’re more cost-effective than ever, with per-gigabyte storage and bandwidth and per-transaction prices regularly being cut.

So let’s take a fresh look at these ser-vices, and talk about what you should use them for to increase performance and save money.

BLOB STORAGEThis is the old faithful, the service that everybody uses, even if they don’t know it. You can put any file in Blob Storage and it’s stored in at least three

places; more if you have the Zone- or Geo-Redundancy switched on. If you’re running any kind of VM, the underlying virtual disk (VHD) file is a page blob. But a lot of people, particularly those who have migrated an existing system to Azure, still keep massive lumps of binary data in their SQL database. Don’t do this. For one thing, it’s really expensive; for another, if you do it with Azure SQL Database, you’re really going to hurt performance.

Take the time to rewrite your file stor-age code to use Blob storage, and just store the URI in your database (Docu-mentDB’s “attachments” feature actu-ally does this for you, automatically). If you’re using an off-the-shelf CMS or blog engine, most of them have plug-ins available to store uploaded files in Azure Blobs. You’ll save money and your site or application will run faster.

You can also use Blob Storage accounts as end-points for the Azure Content Delivery Network (CDN), allowing you to upload your data to a single point and have it served through nearly thirty data-centres around the world.

TABLE STORAGEAzure Table Storage is what’s techni-cally known as a “Key-Value store”, like Cassandra or DynamoDB. That means it scores highly for performance, scal-ability and flexibility, but not so great for complexity or functionality. Azure Tables have no schema: an Azure Table entity is a collection of key-value pairs, and entities within a table can have dif-ferent keys. There are no indexes, no cross-table joins, and no real transac-tional capabilities.

So what can you use Table Storage for? All sorts of things! Anything where you just need really quick, scalable storage and retrieval of individual records. In my Azure applications, I use Table Storage for system concerns like User tables, configuration, and Session data. It’s a great repository for logging or audit data, and libraries like log4net, NLog and Serilog all support Table Storage as a target.

My rule of thumb here is: start with the simplest thing; if it works, use it; if you need more features, look at the next simplest thing.

QUEUE STORAGEAs mentioned earlier, there are now a variety of messaging solutions available in Azure, and Service Bus in particular is far more powerful than Azure Queue Storage. It supports topics and pub/sub models, as well as providing similar basic queue functionality. If you need: very low latency messaging; to send messages to multiple receivers; to store messages for more than a week; or to send messages larger than 64KB; then use Service Bus.

If, however, your requirements are simpler, Queue Storage is still a good option. The most common use case is for scheduling background operations to run in Worker roles or Azure Web Jobs, but I’ve also seen Queues used as a data synchronization mechanism to push arbitrary data to on-premises systems. As with Tables, if Queue Storage meets your requirements then use it. If it doesn’t, use Service Bus.

Page 22: Ndc magazine 3 2014

22

FILE SERVICEThis is a recent addition to Azure Storage Services, and a very welcome one. Until the File Service launched, if you wanted a persistent File System in a Cloud Service or Virtual Machine, you had to create a Cloud Drive: a VHD held in Blob Storage as a Page Blob. These “drives” could be mounted to multiple server instances at a time, but only one would have write access. And if you wanted to get the files off the drive, you’d have to download the VHD and mount it locally.

File Service offers a much simpler solution. You create “Shares”, which you can then access as SMB (Samba) network drives from Windows or Linux running in Azure. Multiple instances can read and write to these network drives simultaneously, and systems outside Azure can use a REST API or one of the SDKs to access the contents directly.

CROSS-SERVICE FEATURESAll these services benefit from several fundamental features. You can choose from various redundancy levels, from the cheapest, “Local Redundancy”, which stores three copies of each piece of data within the same data-centre, through other options which store additional copies in another

data-centre, and in the most powerful case, provide read-only access to that data through the secondary data-centre, which is great for reporting and data-warehousing.

You can also opt-in to extensive met-rics and analytics that provide com-plete and comprehensive data on operations, bandwidth and storage space used for all services, down to minute-by-minute stats.

With Blob, Table and Queue storage, you can create Shared Access Signa-tures (SAS) to allow explicitly-limited (e.g. read-only or write-only) direct access to the service via the HTTP API or one of the many SDKs, so mobile applications can store and retrieve data without you needing to maintain and run a web service. You can also set up Cross-Origin Resource Sharing rules so that sites running on specific domains can use a SAS to read or write directly to the service as well.

So, whether you already have systems running in Azure, or are considering building or migrating an application to run there, take some time to see if some or all of these services can boost your performance, increase your scalability, or just save you some money.

Mark is the founder and CEO of Oort Corporation, a new company building cloud-based software for people who build cloud-based software. Oort's first product,Zudio, a web-based Windows Azure Storage toolkit, launched in April 2013. Mark has been a Windows Azure Development MVP for three years. In his spare time, Mark work's on the Simple.Data not-an-ORM and Simple.Web projects, and wanders the world speaking at conferences and user groups. Or he just geeks out learning new programming languages and frameworks; in 2013 he's working a lot with TypeScript and AngularJS.

Certified ScrumMaster - CSM2 days: 15. December in Oslo

Certified Scrum Product Owner - CSPO2 days: 17. December in Oslo

BECOME A CERTIFIEDSCRUMMASTER OR A PRODUCT OWNERWITH MIKE COHN

For complete course descriptions, time and place, visit www.programutvikling.no

Page 23: Ndc magazine 3 2014

23

Programming in Functional Style

JAVA 8 IN A DAY

24. November in Oslo with Venkat Subramaniam

with Venkat Subramaniam

This three day course, offered by award winning author and trainer Venkat Subramaniam, will get you programming in functional programming. This course is not a theory of why this is a good idea, but a practical deep dive into the key aspects of functional programming. It will help you learn why, what, and exactly how to make use of this. Venkat is known for being a polyglot programmer and will demonstrate the functional style of programming in languages that the attendees use at their work each day.

The Java 8 release has brought the biggest and much needed change to the arguably most powerful programming language in mainstream use today. The new syntactical additions are relatively small, but the semantic difference that makes is large. Why is that? What are the reasons why Java decided to introduce yet another programming paradigm? How can we benefi t from these new features?

For sign up and complete course description visit

www.programutvikling.no

International Developers in London is a group of meetup events conceived in early 2013, starting with a group for Italian speaking developers in London. Since this early inception, Adam (the host) has organised events for French, Spanish, Portuguese and Polish speaking developers in London.

Community is at the heart of what we do, with 2 technical talks at every meetup (on diverse topics such as Arduino development, Javascript coding, Design, Agile methodologies and TDD to name a few) given by the members, for the members.

Presentations are given in English to help people with their presentational skills.

We will be represented by Adam in the community zone at NDC-London, or you can see more at www.idinlondon.co.uk.

International Developersin London

Page 24: Ndc magazine 3 2014

24

Amazon, Google, Wal-Mart, Yahoo, Facebook and Dell are all examples of global behemoths that crunch a lot of data. They use data-driven insights to drive and shape ad campaigns, social campaigns, product placement etc. The quality and accuracy of their sys-

tems is mainly driven by large amounts of data collected both externally and internally. This intense crunching of data, thankfully leads to great open source technology and best practices that are shared with to the outside world. Hadoop and Cassandra are just

two examples in this industry. A com-mon trait of the tools are that they are all linearly scalable it the terms of processing and storage and sup-ported by an external open source community. However, the learning curve is often quite steep before you

We are living in the data age, with endless and ever growing amounts of data. It may sound like a cliché; but data driven decision-making is one of the most important differentiators for successful businesses.

By Tarjei Romtveit

© V

udhi

krai

/Shu

tter

stoc

k

Unlock the value of your data with ElasticSearch

Page 25: Ndc magazine 3 2014

25

can put them into production and many smaller organizations have hesitated to deploy them. But gaining actionable insights from large amounts of data doesn’t have to be that diffi cult. You don’t necessarily need a full Hadoop environment to make sense of your data. Let’s take a look at a typical use case for a smaller company, and let’s see how we can make sense of data with the help of ElasticSearch. Elas-

ticSearch is a great technology that is both easy to learn, feature rich and with great scalability out of the box.

THE USE CASE: ACME INCACME Inc is a mid sized company that sells electronic components through an online store and mainly utilizes social media channels to target con-sumers. ACME collects a lot of infor-mation about their operations into an

ERP system that contains massive amounts of sales and inventory infor-mation. In addition, they store analyt-ics data from Facebook and the other media channels that they use for out-bound communications.

We assume that the ERP system has a JSON API where you can export trans-actional history. The data format is shown in Fig. 1:

Fig 1.

Page 26: Ndc magazine 3 2014

26

Lets assume that all these entries are downloaded into a file called aBun-chOfSalesData.txt and we have an installation of ElasticSearch running locally. We can then index the data into ElasticSearch through the bulk API by using this curl command:

curl -s -XPUT localhost:9200/_bulk --data-binary @aBunchOfSalesData.txt

You can test that the insertion was correct by running a search query: http://localhost:9200/acme/sales/_search?q=*&pretty=yes

At the same time, ACME has a system for querying the Facebook Insight API every hour for updates and store it in a document store. This can be indexed by using the bulk API and the format is shown in Fig 2.

Let’s say the CMO at ACME wants to understand if the money spent in their Facebook ad-campaign actually gener-ates sales. The ad-campaign basically consists of a product ad being written on the ACME Facebook page and pro-moted to all of their followers. Since ElasticSearch have both historic sales information and historic Facebook

data, we can create a query to try to answer the CMOs question. It would be benefi cial to get a timeline view with both sales data and the most impor-tant metrics from Facebook. If there are any positive correlations it could indicate that the campaign did work. To perform this query we utilize the very powerful aggregation feature, together with the equally strong date and time functions in ElasticSearch.

The JSON query we use to extract the information is displayed in Fig 3 on the next page:

Fig 2.

F# VIA MACHINE LEARNING WORKSHOPMathias BrandewinderMachine Learning and Functional Programming are both very hot top-ics these days; they are also both rather intimidating for the beginner. In this workshop, we'll take a 100% hands-on approach, and learn practi-cal ideas from Machine Learning, by tackling real-world problems and implementing solutions in F#, in a functional style.8. December 2 days NOK 6900

DESIGN AND IMPLEMENTATION OF MICROSERVICESSam NewmanMicroservices Architecture is a con-cept that aims to decouple a solu-tion by decomposing functionality into discrete services. Microser-vice architectures can lead to easily changeable, maintainable systems that can be more secure, performant and stable.28. November 1 day NOK 4900

KOTLIN WORKSHOPHadi HaririKotlin is gaining a lot of traction. Close to release, there are already many companies and individuals that are shipping production code in Kotlin, with some having called it the Swift for Android. 12. January 1 day NOK 4900

F O R C O M P L E T E C O U R S E D E S C R I P T I O N S , T I M E A N D P L A C E , V I S I T W W W. P R O G R A M U T V I K L I N G . N O

Page 27: Ndc magazine 3 2014

27

Fig 3.

At fi rst glance, the query displayed in Fig 3 looks quite verbose, but this is everything we need to be able to make an hourly comparison of the Facebook post views and the net total sales during the past 48 hours. In most other systems you will need to run several queries and maybe do the hourly aggregations manually in the application layer. Two of the rea-sons you do not need to run multiple

sub-queries, is that you are able to query two entirely different indexes without joins and apply the power-ful nested aggregation feature. The nested aggregation feature is able to calculate values based on the output of its parent aggregation that com-pletely removes the need for traversal in ACMEs application layer. The result of all these features is that you can add data types as they emerge and

just make small changes to a single query to be able to get comparable answers immediately.

The output of the query is a list of all the hits and several aggregations called buckets. Each of these buckets contains the aggregations of “netTo-tal”, “views” and any other data we want to aggregate. To be able to visualize the result of the queries, you can use

Page 28: Ndc magazine 3 2014

28

the ElasticSearch Kibana dashboard. Another option is to feed the JSON data to a slightly more sophisticated graphing tool like D3.js or Google Charts. An example graph output from the query we ran earlier is shown in Fig 4.

Fig 4 shows that the accumulated post views are increasing heavily quite early

in the morning. Around the same time, the amount of sales peaks at 70 000 K NOKs for the campaigned product.However a few further questions emerge by just looking at the data in the graph. What triggers the peak late in the evening of 23.09? What other products and product ranges are lev-eraged in the same period? How many customer transactions and how many

items per transaction are there in the campaign period? To answer these questions you may have to add some more data and extend the query and run the process again iteratively until your CMO is satisfi ed, but the oppor-tunities are endless.

Fig 4.

Tarjei Romtveit is a senior consultant and co-founder of Monokkel A/S. Monokkel is a consulting company that focuses on all things data. Before founding Monokkel; Tarjei was CTO at a Norwegian social media analytics and intelligence start-up Integrasco A/S. In this company Tarjei solved big data related problems on a daily basis since 2006.

CONCLUSIONWe have looked at a typical business question, added some data and tried to query ElasticSearch for an answer. We have seen that ElasticSearch is hugely

versatile and fl exible in handling dif-ferent data types, and not only full-text search. The query language and APIs enable you to quickly explore your data and unlock the value of the

data and rapidly improve your results. Go try it out yourself!

Page 29: Ndc magazine 3 2014

29

Aspose.Words

Aspose.Pdf

Aspose.Cells

Aspose.Slides

Aspose.Email

Aspose.BarCode

Aspose.Imaging

Aspose.Tasks

. . . and many more

100% Standalone - No Office Automation

a

EU: +44 141 416 [email protected]

Page 30: Ndc magazine 3 2014

30© R

on D

ale

/ Shu

tter

stoc

k

By Rachel Laycock

Architecturefor CD

Page 31: Ndc magazine 3 2014

Three months later the executives were asking “where is my Continuous Delivery?”. We had failed to implement CD in any meaningful way. So what went wrong? How did we fail at something we knew how to do and had done on many projects before?

Their code based was huge and complex - over 70 million lines of code and millions of dependencies. To be blunt, their architecture was a mess.

There are specific considerations for your architecture when you are deploying early and often. You put your software in operational mode early - which is good. But what does this mean to how you design and architect your system? Especially if you would like to achieve continuous delivery and you have existing “balls of mud”. My experi-ence left me with three considerations:

1. Conway’s Law is the law

2. Keep things small

3. Evolve your architecture

A few years ago a client asked for us (ThoughtWorks) to help them to implement Continuously Delivery in their organisation. They were on six monthly release cycles which were painful and fraught with risk, requiring the entire development, testing and operations team to come in for a whole weekend to release their products, sometimes several if the first attempt wasn't successful. An executive read the Continuous Delivery book and decided they wanted to and needed to deliver much more rapidly to continue to compete in the market. We of course said “sure”. My team had all being delivering software using the principles and practices of Continuous Delivery for years. But…

31

Page 32: Ndc magazine 3 2014

32

CONWAY’S LAW IS THE LAWOne of the main reasons software architecture is so hard is because of it’s fundamental link between an organisation's structure. Also known as the people and process. Once you get humans involved in any problem then you now have a very complex problem to solve.

Conway's Law states: "organisations which design sys-tems ... are constrained to designs which are copies of the communication structures of these organisations".

The most explicit example I have seen of this is the mono-lith problem.

Most organisations that have a monolith system with teams broken up into specialists like UI developers, Java developers and Database developers, many of the issues are at the seams of the communications between these specialisms. This problem presents itself in many ways; bottlenecks or wait time in your delivery cycle for any fea-ture that requires more than one specialised team, code being put in weird places just because it needs to be there but your specialism can’t actually check-in to any of the layers that are owned by another team. The latter issue is eloquently described by Fred Brooks in the Mythical Man Month, “Because the design that occurs first is almost never the best possible, the prevailing system concept may need to change. Therefore, flexibility of organisa-tion is important to effective design.” With a specialized inflexible team structure like this you are likely to either get stuck with your original design - good or bad - or your abstractions will start to leak as you put thing like business logic wherever you can rather than where they should go from a sound design perspective.

I’ve seen many teams fall on the wrong side of Conway’s Law and end up with the dreaded “ball of mud” architecture. But there is hope. You can leverage Conway’s Law to your advantage. Another client had a similar monolith problem...

The had built an monolith application whose users were country based e.g. Australia, Italy, UK. Many of their requirements were the same, but many were region

specific. Because they were all in the same monolith when changes were made it affected everyone regardless of whether than made sense to that region. This was caus-ing problems getting software out of the door. They were tripping over one another during release time, breaking shared components to meet their own needs. Eventually they had enough and decided they needed to make some fundamental changes in order to continuously delivery.

First they re-organised their specialists to create feature teams; these teams were made up of all the skills they needed to create their full stack from UI developers to the database. These new teams needed to figure out what was really shared and what was not, but initially they just needed to get stuff to production. So, they forked the code base. They now all had their own code, which meant they could release independently, but it did not solve the problem of figuring out what was shared. They had to cre-ate a “scrum of scrums” to decide as a group what were the shared components. Because they had been burned badly by sharing they were very careful to be absolutely certain it really was a fundamental component that would rarely change. They did this one small single responsibility at a time. The end result of these shared components were micro services.

KEEP THINGS SMALLMicro-services can be loosely defined as “fine grained SOA” or as some people refer to it “SOA done right given what we have learned about SOA done wrong and automa-tion of our deployments and infrastructure configuration”, but that wouldn’t be as catchy. They are small, run on inde-pendent processes and decoupled enough that they can be deployed independently. Much of their appeal lies in being able to use “the right tool for the job” instead of the golden hammer approach and in the ability to build in resilience that would be difficult to do in a monolith system. They can also be scaled independently and easily replaced as long as you keep them small and follow the single responsibility principle. But this is not a free lunch…

Page 33: Ndc magazine 3 2014

33

Microservices move communication and complexity into your infrastructure, which increases the cognitive load of your architecture. And to get the resilience benefits you have to build it. Monitoring your system becomes as important as writing tests for it, you need a decent ver-sioning strategy and a very high level of automation of your deployment and environment configuration to deploy and run these services in independent processes with confi-dence. Neal Ford put it best when he said recently “You have to be this tall to use micro-services”. Meaning a high level of maturity needs to be achieved in things like auto-mated and deployment before micro services can be for you. Otherwise you will end up with a much worse problem than the monolithic one.

EVOLVE YOUR ARCHITECTUREFinally, as you will be operationalises your software early you need to be able to evolve your architecture.

Neal Ford in his IBM series talks about Evolutionary Archi-tecture and Emergent Design. There are 5 principles to Evolutionary Architecture:

1. The Last Responsible Moment2. Architect for Evolvability3. Postel’s Law4. Architect for Testability 5. Conway’s Law

I recommend reading the series to get more details on each of these principles. There are many considerations to concern yourself with in the architecture of your system, but not all will be prioritised equally for the problems your organisation is trying to solve. These principles will guide you to only solve those you need to now and leave the rest for a later point in time, but not irresponsibly late!

Since the world of Continuous Delivery has started to become the norm, we are finding ourselves in deployment

and operational early and often. The world of software architecture has changed as a result. We now have to archi-tect for build, run and deploy. Structure your teams how you want your software to look and create communication structures for the interconnected pieces. You will need to keep working at this because you are unlikely to get it right the first time. None of us do.

Rachel Laycock works for ThoughtWorks as a Market Technical Principal with over 10 years of experience in systems development. She has worked on a wide range of technologies and the integra-tion of many disparate systems. Since working at ThoughtWorks, Rachel has coached teams on Agile and Continuous Delivery technical practices and has played the role of coach, trainer, technical lead, architect, and developer. She is now a member of the Technical Advisory Board to the CTO, which regularly produces the ThoughtWorks Technology Radar. Rachel is fascinated by problem solving and has discovered that people problems are often more difficult to solve than software ones.

Page 34: Ndc magazine 3 2014

34

© a

lpha

spir

it/S

hutt

erst

ock

Page 35: Ndc magazine 3 2014

The landscape of business has changed dramatically over the past several years. For decades, the focus has been on cost control and technology, whereas the current business climate has prompted a paradigm shift. Success for companies in the 21st century is now dependent upon creativity and innovation, both hailed as the most important contributors to the growth of the economy.

35

By Denise Jacobs

Creativity and Innovation: CRITICAL TOOLS FOR SUSTAINED SUCCESS

Creativity is the ability to develop meaningful new ideas through exercising imagination and originality. Contrary to popular belief, creativity is not relegated to a select few: we are all born creative. However, creativity is like a muscle: it grows stronger with repeated practice and exercise – and weaker with disuse.

Innovation is the practice of making changes to that which is established, using creativity to enhance and improve upon known concepts, practices, or processes. Similar to creativity, an innovation mindset becomes ingrained through building the habit of thinking in certain ways, and is sustained through a supportive environment.

PROBLEMS AND SOLUTIONSUnfortunately, despite recognizing creativity and innovation as critical tools for sustained success, many companies are slow to adapt to this new environment. At best, the few business leaders who truly understand how critical it is to initiate the shift within their organizations are at a loss at how to start the process. At worst,

organizations merely pay lip service to the importance of creative thinking and having an innovation mindset, but do little to support it. These are the companies that encourage people to take risks and be innovative, but then punish them when they make mistakes or their ideas aren’t immediately lucrative.

The sad thing about both of the above scenarios is the supreme waste talent and resources that they produce. Brilliant employees become unmotivated and bored, merely going through the motions of their jobs, and the company’s greatest source of creativity and innovation lay dormant.

The good news is that leveraging the untapped, latent talents of the members of an organization can reverse this downward spiral. Through reigniting your workforce’s creative spark and inspiring innovation at all levels – from the top down and the bottom up – companies will be well on their way to improving employee engagement by helping people feel connected to and passionate about

Page 36: Ndc magazine 3 2014

36

their work and their ability to meaningfully contribute to their company. Therefore, training your employees on creative thinking and innovation skills so that they not only understand the power of creative thinking, but they also have the tools to do so should be a top priority for your organization.

FOUR TIPS FOR REIGNITING CREATIVITY ANDINSPIRING INNOVATIONWhether you need to instill the creative spirit or revive flagging creative inspiration with the members of your organization, here are four ways to do so:

1. Help individuals and teams get unblocked creativelyOften, the biggest blocks to creative, innovative thinking come from fears: fear of making a mistake and fear of failure. Further, people often feel creatively stymied when they perceive that there are no proper outlets for sharing ideas: that they’ll be criticized for original thinking, or that their unique concepts will be dismissed.

Make it a policy to be more open-minded and to suspend judgment on ideas – especially in the early stages – and particularly with the unusual or seemingly random ideas. Encourage spontaneity and experimentation, and give people the responsibility and freedom to make mistakes.

The more comfortable people feel with being able to fail and try again with fewer repercussions, the more they relax their guard and allow ideas to flow. They will relearn how to trust their creative “gut”, and start the process of breaking down their creative blocks.

2. Advocate and practice effective communicationCreativity and innovation flourish most in groups where there is fantastic communication: the sharing, listening to, and amplification of ideas – not only amongst the team members with customers as well.

Effective communication has two sides: listening and sharing. People with the best ideas are most often those who are adept listeners and so are the best leaders. They are stimulated by the concepts of others and connect the dots in novel ways to create even better ideas. Listening well requires being present, giving people your full attention, and relaxing your own agenda. Doing so allows you to hear the brilliance in others.

Almost as important as listening is being able to clearly articulate and share ideas. In fact, companies with highly creative cultures support their employees in idea-selling, because “it’s not about good ideas. It’s about selling those ideas and making them happen,” according to Marketing guru Seth Godin. Learning presenting skills a great way to give people the tools and the confidence to articulate and sell their concepts, making it easier for their great ideas to gain traction within the team and company.

By learning to become excellent listeners and generous sharers, team members will become master communicators who practice a dynamic, responsive, and generous sharing and exchange of ideas.

3. Champion a culture of creative collaborationForget the mythology of the lone genius cranking out innovations from a garage. People coming together to share ideas, compare observations, and brainstorm solutions to complex problems power inspired creativity and sustained innovation. Fostering and harnessing the creative abilities of a group produces a wider range of creative ideas and innovative solutions arising from the range of knowledge, experience, and perspectives of the individuals of the group.

One of the best ways to help the people within your teams to create better together is to teach people to amplify the creative ideas of others. Our tendency is to try to find problems with another’s ideas, which brings ideations to standstill. However, ideas blossom when team members to get in the habit of responding to a offered idea not with a “Yes, but…”, but instead with a “Yes, AND…”.

36

© a

lpha

spir

it/S

hutt

erst

ock

Page 37: Ndc magazine 3 2014

37

Encouraging teaching and learning within the team is also powerful. Creating a culture of mentorship facilitates the brain-share of the more experienced members with the more junior, and not only brings up the whole level of the team, but also strengthens connections and trust, fueling strong collaboration down the road. Brand-new members coming into the team should be on-boarded with the innovation mindset of the group, so that they come into their new work environment ready to develop and share their ideas. The trust built by these dynamics binds the team members together in productive collaboration.

4. Provide the resources to support and execute upon great ideasIt’s one thing to talk the creativity and innovation talk, but to actually walk that talk, the very necessary resources of time, money, manpower, training/methods, and materials

must be available in order to support the workforce in implementing their creative and innovative processes and products.

Individuals and teams need the space to generate, develop, and experiment on ideas. Because of this, one of the most critical resources that encourage and support creativity and innovation is time. The best example of this is Google’s 20% time, which has created some of the most successful Google products.

But time is not enough. Make sure there is budget for taking great ideas to the next level. Ensure that your initiative to cultivate creativity and spur innovation is strengthened by trainings and medium to long-term programs. Doing so will help build teams that are synergistic and can produce well together when it’s time to start moving their grand ideas to market.

WELL-WORTH THE EFFORTOnce you get on-board with promoting creativity and innovation within your organization, you’ll wonder why you didn’t do it sooner. Even in the short-term, you’ll begin to see benefits such as improved teamwork and team cohesion, better employee engagement and productivity, increased attraction and retention of talented employees, and enhanced problem-solving and interaction.

By providing the resources that sustain and grow an enduring culture of creativity and innovation, you’ll make it safe for people in your organization to bust through their creative blocks in order to grow their ideas and experiment with them, generously listen to and share ideas, and creatively collaborate to generate innovative solutions as a team. The companies that prevail in upcoming years will boast both a creative and innovative leadership and workforce that, in tandem, will skyrocket the success of the company’s products and services.

So, are you ready to make a commitment to igniting creativity and inspiring innovation within your organization? Make the effort, and you’ll see how you can transform how you and your team work… for the better.

37

Denise Jacobs is a Speaker + Author who speaks at conferences and consults with companies world-wide. As the Founder + Chief Creativity Evange-list of The Creative Dose, she teaches techniques to make the creative process more fluid, methods for making work environments more conducive to creative productivity, and practices for sparking innovation. She is the author of The CSS Detective Guide, and co-authored the Smashing Book #3 1/3 and Interact with Web Standards. Denise is the Chief Unicorn of Rawk The Web, and the Head Instigator of The Creativity (R)Evolution.

Page 38: Ndc magazine 3 2014

© P

hoto

sani

/Shu

tter

stoc

k

Page 39: Ndc magazine 3 2014

The three principles and their interaction that sets Erlang apart are:* share nothing processes communicating with message passing* fail fast approach to errors; let the processes fail when they err* failure handling by using supervision of processes by other processes

One thing is to understand what each of them means, another thing is to understand how they work together and yet another thing is how to apply them when develop-ing a program.

In this article I will not go into lengthy explanation of how the Golden Trinity of Erlang (see figure on the left) plays out, but rather focus on showing how to think with the principles as we look at the creation of an Erlang program.

In this article we will look at processes and how to program with asynchronous message passing. In later articles we will deal with fail fast and failure handling.

GAME OF LIFEConway's famous Game of Life (GOL) [https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life] is the example we will look at in this article.

GOL is a zero-player game where a number of cells arranged in a 2-dimensional grid evolve over time in a step-wise manner based on the configuration of the grid.

The rules for the state - alive or dead - of a cell in the next step are simple: . Any live cell with less than 2 neighbours dies. . Any live cell with 2 or 3 neighbours survives. . Any live cell with more than 3 neighbours dies. . Any dead cell with exactly 3 neighbours becomes alive.

The typical way of representing a GOL world is to use a – not surprisingly – 2-dimensional array.

You could do that in Erlang too, but that is not the Erlang way!

PROCESSES, PROCESSES, PROCESSESWhen you want something done in Erlang you throw pro-cesses at it.

In object-oriented languages you think in objects. In Erlang the cheap resource is processes, which the run-time pro-vides in a very lightweight manner allowing the creation of 136.000 processes on a Raspberry-Pi!

So for GOL the Erlang way is to let each cell in the grid be a process.

When computing the next value the cell needs to know the status of each of its neighbours. The only way the pro-cesses can communicate in Erlang is by message passing, so the cell process has to send a message to each of its neighbours and collect the answers to count the number of neighbours it has.

You will hear people talking about Erlang being different, I, for one, am putting that statement forward. By being different I'm not referring to the peculiar syntax Erlang has due to its first interpreter being written in Prolog. No. What makes Erlang truly different is the Golden Trinity of Erlang.

39

By Torben Hoffmann

THINKING LIKE AN ERLANGER – Part 1

Page 40: Ndc magazine 3 2014

40

query_neighbours(T, Neighbours) -> lists:foreach( fun(N) -> N ! {self(), {get, T}} end, Neighbours).

Here Neighbours is a list of Pids and T is the current time in the simulation. After sending messages to all its neigh-bours the process starts collecting answers and respond-ing to requests form its neighbours:

collecting(#state{time=Time, content=C, xy=XY}=State, NeighbourCount, WaitingOn) -> receive {From, {get, Time}} -> C -> From ! {cell_content, {{XY,Time},C}}, collecting(State, NeighbourCount, WaitingOn); {cell_content, {{{_X,_Y},Time}=XYatT, NeighbourContent}} -> collecting(State, NeighbourCount + NeighbourContent, lists:delete(XYatT, WaitingOn)) end.

So if a neighbour queries a cell for its value ({get, Time}) the response is sent back to the requesting process as a tuple {cell_content, {{XY, Time}, C}} and the cell con-tinues its loop. If a reply comes back from one of the neigh-bours the NeighbourCount is updated and the neighbour is removed from the list of neighbours the cell is waiting on.

When there are no more neighbours to collect from the cell updates its state to the next point in time:

collecting(#state{xy=XY, content=Content, time=T, history=History}=State, NeighbourCount, []) -> NextContent = next_content(Content, NeighbourCount), lager:info("Cell ~p changing to ~p for time ~p", [XY, NextContent, T+1]), State#state{content=NextContent, time=T+1, history=[{T, Content}|History];

This code is straightforward: it figures out what the new content of the cell should be based on how many neigh-bours it has (the next_count/1 function) and then ince-ments time and history for the state of the cell.

ALL IS WELL, RIGHT?

Not really.

We have dealt with the first problem when it comes to making processes communicate between one another: asking for information and replying to queries. If we run this code one time step at a time it will be fine. We will get all the cells to update and once they are done we can do the next step.

But if we let the cells run freely, i.e., proceed as fast as they can from one time step to the next they will quickly come out of sync. E.g., the first cell to go to time T=2 will

start asking for cell content that its neighbours have not computed yet and their requests for the cell content at T=1 hits the cell it will not have a message clause to match the incoming request since it is now looking for {From, {get, 2}} messages and not {From, {get, 1}} messages.

This is a problem that is painfully obvious and hits you really fast with the Game of Life simulation, but when you are doing distributed systems this problem is often a lot harder to spot and tends to hit you when you least expect it.

Page 41: Ndc magazine 3 2014

41

So how does one go about solving such a problem with processes getting slightly out of sync without resorting to synchronous solutions?

You have to provide two things in the processes:1. Dealing with being ahead of the rest.2. Dealing with being behind the rest.

For our Game of Life we solve the problem of being ahead by introducing a function that uses the history of the cell to give replies to neighbours that are behind:

content_at(Time, #state{xy=XY, time=Time, content=Content}) -> {{XY,Time}, Content};content_at(Time, #state{xy=XY, history=History}) when is_integer(Time), Time >= 0-> {_, Content} = lists:keyfind(Time, 1, History), {{XY, Time}, Content}.

Solving being behind requires a bit more work. First we change content_at/2 to return the atom future if the value has not been calculated yet:

content_at(Time, #state{time=T}) when Time > T -> future;

Now we can write the handling of requests like this:

receive {From, {get, Time}} -> case content_at(Time, State) of future -> collecting(State#state{future=[{From, Time}|State#state.future]}, NeighbourCount, WaitingOn); C -> From ! {cell_content, C}, collecting(State, NeighbourCount, WaitingOn) end; ...

So if someone wants something that we consider the future we add the request to the future list in our state and carry on.

Page 42: Ndc magazine 3 2014

42

Those future requests collected are then resolved when the cell computes its next step:

collecting(#state{xy=XY, content=Content, time=T, history=History, future=Future}=State, NeighbourCount, []) -> NextContent = next_content(Content, NeighbourCount), NewFuture = process_future(XY, T+1, NextContent, Future), lager:info("Cell ~p changing to ~p for time ~p", [XY, NextContent, T+1]), State#state{content=NextContent, time=T+1, history=[{T, Content}|History], future=NewFuture};

The process_future/2 function simply sends replies to those waiting on this new value:

process_future(XY, Time, Content, Future) -> {Ready, NewFuture} = lists:partition( fun({_Pid,T}) -> T == Time end, Future), lists:foreach( fun({Pid,_}) -> Pid ! {cell_content, {{XY,Time}, Content}} end, Ready), NewFuture.

It takes all those waiting on the current Time and sends them a message and keeps the rest as they are even fur-ther out in the future.

WRAPPING UPDealing with asynchronous message passing can be a bit tricky, but the rewards in terms of making your system more scalable are so great that it is worth it.

The Reactive Manifesto [http://www.reactivemanifesto.org] also embraces asynchronous message passing and Erlang is a wonderful language for doing reactive systems in that spirit.

If you want to play with the entire code base for Game of Life you can go to [https://github.com/lehoff/egol] and clone it. The tag ndc1 has the commit that was used to create the fi nal version of the code for this article.

In part 2 of Thinking like an Erlanger I will look at fail fast and supervision so that we can make Game of Life more robust.

Torben is the CTO of Erlang Solutions and has been working with Erlang in Motorola and Issuu as technical architect and developer since 2006. He has talked about his Motorola achievements at Erlang eXchange 2008 and EUC 2010. He has been holding the Erlang banner high as a self confessed Erlang Priest at several conferences such as CodeMesh, Build Stuff, Goto, Craft and Lambda Days. Before becoming an Erlanger he worked with software quality assurance, process improvement and people management.

Page 43: Ndc magazine 3 2014

We transform how you and your team work…for the better. Discover our leading-edge approach to creative inspiration and thinking,

idea generation and execution, and effective communication and team

cohesion that will skyrocket engagement, innovation, and productivity.

We’re available and at the ready for workshops, consulting, keynotes/

playnotes/speaking, and coaching.

Work Better. Produce More. Create Betterness.

Isn’t it time to reignite your team’s creative spark, inspire

innovation, and cultivate collaboration?We can help.

Isn’t it time to reignite your team’s creative spark, inspire

innovation, and cultivate collaboration?We can help.

TheCreativeDose.com A CREATIVITY + INNOVATION COLLECTIVE

Come see us in action at NDC People, February 2015 in Oslo, Norway!

For more information and to register, visit people.ndcevents.com.

Page 44: Ndc magazine 3 2014

44

I’ve been working with Scrum since its earliest days and over the past few years have had the privilege of getting to sit on the board of directors of the Scrum Alliance. From this vantage point I have observed that collectively as an industry, we suffer from “Scrumbutaphobia”. This is the fear that we are doing Scrum wrong and are not following the Scrum “rules” also know as “Scrum But”. (When asked if you are using Scrum in your organization and answer: “I am doing Scrum, but…”)

By Stephen Forte

Create a CUSTOM AGILE PROCESS for Your Organization

© O

llyy/

Shut

ters

tock

Page 45: Ndc magazine 3 2014

45

This fear comes from the fact that we all have taken Scrum to its limits, modifi ed it beyond the “rules” to suit our needs, and implemented something that looks and feels like Scrum in our organization-usually with success. That said, even successful organizations have Scrumbutaphobia.

OVERCOMING SCRUMBUTAPHOBIAThis is crazy; Agile is all about embracing change! When asked what kind of methodology they were using in their organization in an industry survey, organizations adhering to a single Agile methodology was only 31%. Organizations using mixed methodologies, both Agile and non-Agile, was 67%. You are not alone.

Page 46: Ndc magazine 3 2014

46

Instead of fearing the changes you have made to Scrum, why not embrace them? It is entirely possible, downright preferable, to build your own agile process in your organi-zation. There is a fairly simple process you can put in place to build your own Agile process. You may build a unique process for each project in your organization if the char-acteristics of each project are different.

BUILDING A UNIQUE AGILE PROCESS FOR YOUR ORGANIZATIONFirst start with the values of the Agile Manifesto. When you look at it, Agile is set of values, not rules. Understand-ing these values above all else will help you transform your organization.

Then look at most popular “brands” of Agile: XP, Scrum, and Kanban. Look at all of their features or rules. For example you can think of something like this short (and incomplete) list of “features” of each Agile brand:

XP• Pair Programming• TDD• Co-location• User Stories

Scrum• Time boxed work (aka “Sprints”)• Cross-functional team• Daily Scrum meeting• Product Owner manages the backlog

Kanban• Limited Work in Progress• Make process policies explicit• Measure and Manage Flow• Visualized Workflow

After you have all of the features of each brand put them out on the whiteboard or use sticky notes and then design your process. For example, your current project may have the following characteristics:

• Remote team in different time zones• Greenfield project• Project uses contractors

Now map the features that are useful from each Agile brand to your project’s needs. You may come up with some-thing like this:

From XP • User Stories• Pair Programming• Continuous Integration

From Scrum• Use Sprints of fixed duration• Daily (virtual) Scrum meeting

From Kanban• Make Process Policies Explicit• Use Models to Suggest Improvement

As you build your new Agile process remember to always adhere to the values of the Agile manifesto. In addition, remember that once you have built the process, remem-ber to check in all the time and suggest improvements. No process should remain static.

Be Agile and embrace change!

Stephen Forte is the Chief Strategy Officer of Telerik, a leading vendor of developer and team productivity tools. Stephen is also a board member of the Scrum Alliance. Involved in several startups, he was the co-founder of Triton Works, which was acquired by UBM (London: UBM.L) in 2010 and was the Chief Technology Officer and co-founder of Corzen, Inc., which was acquired by Wanted Technologies (TXV: WAN) in 2007. Stephen also speaks regularly at industry confer-ences around the world. He has written several books on application and database development including Programming SQL Server 2008 (MS Press). Prior to Corzen, Stephen served as the CTO of Zagat Survey in New York City (acquired by Google in 2011) and also was co-founder of the New York-based software consulting firm The Aurora Development Group. He currently is a Microsoft MVP award recipient, Microsoft Regional Director, INETA speaker, and is the co-modera-tor and founder of the NYC .NET Developer User Group. Stephen is also a Certified Scrum Professional and PMP and holds an MBA from the City University of New York. An avid mountain climber, Stephen leads a trek in the Mt. Everest region every fall to raise money for charity. Stephen lives in Hong Kong with his wife.

Page 47: Ndc magazine 3 2014

47

ProgramUtvikling offers the best courses and most flexible training to the developer community wher-ever you want us to. Our philosophy is to provide “practical, applicable knowledge” by providing the highest quality training with the best instructors.In addition to our permanent staff we have a number of exciting and well-known instructors such as Herb

Sutter, Craig Larman, Billy Hollis, Mike Cohn, Geoff Watts, Gill Cleeren, Sahil Malik and a great staff of excellent Scandinavian instructors.

NDC has become one of the largest conferences dedicated to .NET and Agile development and is hosted by ProgramUtvikling AS. www.ndc-london.com www.ndcoslo.com

We develop developersTraining and conferences in Oslo and London

OSLO - www.programutvikling.no

Phot

o: S

hutt

erst

ock

Page 48: Ndc magazine 3 2014

One of the hardest things in software development is naming. Naming of products, of paradigms and of parts of your code. The reason naming is both hard and important is because it is an act of communication; without good names your code might as well be

written in, well, code.

© to

tally

Pic/

Shu

tter

stoc

k

By Kevlin Henney

EXCEPTIONAL NAMING

48

Page 49: Ndc magazine 3 2014

We often adopt conventions to make some aspects of naming easier, but while such consistency is often a good thing, some practices are flawed from the outset. Although having a com-mon vocabulary of concepts is useful across a codebase, the basis of the consistency must be useful other-wise it's just noise and can become homeopathic: programmers make names longer by adding more words but end up diluting the meaning of their code with every Factory/Man-ager/Object/Controller/Aggregate/Value they add. One such ritual common to both the .NET and the Java worlds is adding the suffix Exception to a class to denote that its instances are excep-tions. Exceptions are privileged in the language, meaning that they appear in specific and compiler-enforced places in your code: in a throw, in a catch and, in the case of the Java, in a throws list. By definition things that appear in these places can only be exceptions; the reader already knows they are exceptions, so there's nothing more to add. Of course, there is also the definition of the exception class. That a class is an exception should be obvious either by its parentage or by its name. The name should represent whatever the problem is, and should do so directly and precisely. To add Exception to the end is either redundant — so remove it — or an indication of a poor name — so rename it. Consider, for example, the following core Java exception classes: ClassNotFoundExceptionEnumConstantNotPresentExceptionIllegalArgumentExceptionIllegalAccessExceptionIndexOutOfBoundsExceptionNegativeArraySizeExceptionNoSuchMethodExceptionTypeNotPresentExceptionUnsupportedOperationException Dropping the Exception suffix gives the following names: ClassNotFoundEnumConstantNotPresentIllegalArgumentIllegalAccess

IndexOutOfBoundsNegativeArraySizeNoSuchMethodTypeNotPresentUnsupportedOperation These names are more concise and perfectly descriptive. There is no question that these are exceptions. OK, but what about the following, also from the core Java exception classes? ArithmeticExceptionArrayStoreExceptionClassCastExceptionInstantiationExceptionNullPointerExceptionSecurityException Dropping the Exception suffix results in the following: ArithmeticArrayStoreClassCastInstantiationNullPointerSecurity Hmm, not so good. But is that a prob-lem with dropping the Exception suf-fix? Or a problem revealed by dropping it? Let's try renaming these classes to the exceptions they actually rep-resent: IntegerDivisionByZeroIllegalArrayElementTypeCastToNonSubclassClassCannotBeInstantiatedNullDereferencedSecurityViolation These names are both accurate and precise, representing the actual exception condition without resorting to noise words. Is it an exception that a reference (or rather, a pointer) is null? Not at all: the exception is only thrown when a null is dereferenced, such as having a method called through it. Is security an exception? Not at all: a security violation is what is being signalled. Of particular interest is renaming ArithmeticException to IntegerDivisionByZero, which clari-fies something many Java program-mers are unaware of!

Just as you don't tag your verbs with Verb or your nouns with Noun when you write or speak, there is little rea-son — and many reasons not to — tag Exception onto the end of an exception class's name. In many cases it can be considered a code smell rather than a practice to follow, and can deprive programmers of the opportunity to choose a better name. The possible exception to this rule? The general class that indicates that its descend-ants are exceptions: Exception. But then again, that's not a suffix: that's the whole of its name and the concept that it represents, so perhaps there are no exceptions on Exception naming.

49

Kevlin is an independent consultant and trainer based in the UK. His development interests are in patterns, programming, practice and process. He has been a columnist for various magazines and web sites, including Better Software, The Register, Application Development Advisor, Java Report and the C/C++ Users Journal. Kevlin is co-author of A Pattern Language for Distributed Computing and On Patterns and Pattern Languages, two volumes in the Pattern-Oriented Software Architecture series. He is also editor of the 97 Things Every Programmer Should Know site and book.

Page 50: Ndc magazine 3 2014

50

1 DAY 28. NovemberDESIGN AND IMPLEMENTATION OF MICROSERVICES Sam NewmanMicroservices Architecture

is a concept that aims to decouple a solu-tion by decomposing functionality into dis-crete services. Microservice architectures can lead to easily changeable, maintainable systems that can be more secure, perfor-mant and stable.1 Day Workshop. Kr 4 900,-

2 DAYS 8. December F# VIA MACHINE LEARNING WORKSHOP Mathias BrandewinderMachine Learning and Functional Programming

are both very hot topics these days; they are also both rather intimidating for the be-ginner. In this workshop, we’ll take a 100% hands-on approach, and learn practical ide-as from Machine Learning, by tackling real-world problems and implementing solu-tions in F#, in a functional style.2 Day Workshop. Kr 4 900,-

Course EVOLUTIONARY DESIGN AND ARCHITECTURE FOR AGILE DEVELOPMENT Venkat Subramaniam

This is where the principles and the prac-tices we can learn and follow from evolu-tionary design and architecture comes in. This course will help us avoid the perils of upfront design, and at the same time, keep us away for the traps of inadequate or in-sufficient design. Learn how to create prac-tical design that can efficiently balance the tradeoffs we face in architecting and de-signing software.

Course PROGRAMMING IN FUNCTIONAL STYLE Venkat Subramaniam“Functional programming,” yes, everyone’s talking about it. But why? What’s this new ex-citement about something that’s been around for a very long time in some esoteric languag-es. For one thing, most mainstream languag-es now support it. C#, Java, C++,... To program in functional style you don’t have to change the language, but you have to change how you

program in that language. Change can be hard, but there are some nice rewards that go with it for those of us who are adaptive.

CourseREACTIVE PROGRAMMING WITH AKKAVenkat SubramaniamThe course has a good balance of interactive lectures and hands-on exercises. The at-tendees are expected to pair-up and work on the lab exercises. The instructor will assist the attendees as they work on the exercises.

CoursePROGRAMMING IN JAVA 8Venkat SubramaniamJava is arguably one of the most widely used languages. This popular language is going through a makeover. This will have a signifi-cant impact on how programmers will code and design applications with Java. With the introduction of lambda expressions and method references in Java 8, we can now make use of functional stye of programming.

CourseTEST-DRIVEN DEVELOPMENTVenkat SubramaniamHoning Your Test Driven Design Skills. The course has a good balance of interactive lectures and hands–on exercises. The at-tendees are expected to pair–up and work on the lab exercises. The instructor will as-sist the attendees as they work on the exer-cises. The objective of the course is for the attendees to gain an in depth practical knowledge of the concepts so they can put them to immediate use on real projects.

Course TEST-DRIVEN DEVELOPMENT & REFACTORING TECHNIQUESRobert C. Martin

Test Driven Development (TDD) is one of the most profound Agile development practic-es. It has been adopted by nearly all the Ag-ile methods and there is documented evi-dence that it has reduced defect rates by a factor of ten.

Course CORE SPRINGMårten HaglindIn this four–day boot-camp you learn how to use the Spring Framework to

create well–designed, testable business applications in an agile manner. Students build a Spring–powered JEE application that demonstrates the Spring Framework and other Spring technologies in an in-tensely productive, hands–on setting.

Course FUNDAMENTALS OF ANDROID PROGRAMMINGWei-Meng LeeThis course covers the lat-

est version of Android using Android Studio. CourseLEARNING SWIFT PROGRAMMING Wei-Meng LeeApple announced the new Swift program-ming language at the Worldwide Develop-ers Conference (WWDC) 2014.

CourseFUNDAMENTALS OF IOS PROGRAMMINGWei-Meng LeeThe workshop will begin with the basic con-cepts such as Views, View Controllers, Pro-tocols and Delegates, as well as the tools that help you develop compelling iOS appli-cations – Xcode and Interface Builder.

CourseADVANCED C++ PROGRAMMING AND INTRODUCTION TO C++11Hubert MatthewsThis course is designed to

introduce delegates to more advanced use of C++ as well as introducing the most com-mon parts of C++11.

CourseJAVASCRIPT FOR PROGRAMMERSChristian Johansen The JavaScript program-ming language is covered

in depth. Gain the necessary understanding of the language to work actively and effec-tively with the applications front–end. The course will take you through the entire

From 1-day workshop to 5-days training

Page 51: Ndc magazine 3 2014

51

JavaScript language; from basic syntax and built–in types to its object model and func-tional elements, giving you a solid under-standing of how JavaScript really works.

CourseBDD - SPECIFICATION BY EXAMPLEGojko AdzicThis two day course teaches you how to apply

emerging practices for managing require-ments, specifications and tests in agile and lean processes to bridge the communica-tion gap between stakeholders and imple-mentation teams, build quality into soft-ware from the start, design, develop and deliver systems fit for purpose.

CourseANGULARJS FUNDAMENTALSScott AllenThe AngularJS framework allows us to build testable

applications using the common web stand-ards of HTML, JavaScript, and CSS. This course comprehensively demonstrates the features of AngularJS by building an appli-cation using directives, filters, routing, con-trollers, templates, services, and views.

CourseBUILDING APPLICATIONS WITH JAVASCRIPT AND NODEJS?Scott AllenIn this course we'll see how to build fast and lightweight applications using NodeJS. We'll build the entire stack using JavaScript from end to end, from MongoDB on the back to AngularJS on the front. Along the way we'll see how to deploy anddebug applica-tions, as well as how to implement authenti-cation and authorization.

CourseARCHITECTURE WITH AGILITYKevlin HenneyEvery system has an archi-tecture, whether acciden-

tal or intentional, and regardless of whether it was put in place by a nominated architect or whether it emerged from the decisions and discussions of a team. All too often the focus of what is often described as architecture is centred around a specific set of platform

technologies, which forms only one part of the set of concerns an architecture should. And all too often architecture is seen as a separate concern from development process, whereas the two are intertwined — what you build is influenced by how you build it, and vice versa.

CourseAGILE DESIGN AND MODELING FOR ADVANCED OBJECT DESIGN WITH PATTERNSCraig Larman

This popular, high–impact, and hands–on course on mastering advanced object–ori-ented design (OOD) and design patterns (primarily the “Gang of Four” design pat-terns) with agility is aimed at architects and developers of OO systems, You will learn to design with patterns, apply visual modeling in an agile modeling approach, and a suite of related advanced design topics, includ-ing the design of packages. This course is based on acclaimed industry leader Craig Larman’s extensive experience coaching and applying OOD since the mid 1980s.

CourseNODE.JS/MEAN END-TO-END WEB DEVELOPMENT WORKSHOPDan Wahlin

Node.js is one of the most revolutionary frameworks to come out in quite a while! Its asynchronous nature and flexibility makes it relevant for building everything from Web applications to client tools and you’ll find it being used in a variety of ways. Node.js is based on JavaScript so if you’re already comfortable with the JavaScript language you can be productive with Node.js right away. In the Node.js/MEAN End-to-End Web Development Workshop you’ll learn how to build a Web application from start to finish using MongoDB, Express/Kraken, Angular-JS, and Node.js (the MEAN stack). Topics covered include building model classes , connecting to MongoDB with Mongoose, se-curing a site with Passport, building a shop-ping cart with AngularJS and Node.js REST-ful services, creating controllers and routes with Express and Kraken, binding data to views using Dust.js, and much more. If you’re looking to learn the ins-and-outs of Node.js then this 4 days course is for you!

Course 15. DecemberCERTIFIED SCRUMMASTER (CSM) Mike CohnThis two day course, taught by author and pop-

ular Scrum and agile trainer Mike Cohn, not only provides the fundamental principles of Scrum, but also gives participants hands-on experience using Scrum.

Course 17. DecemberCERTIFIED SCRUM PRODUCT OWNER (CSPO)Mike CohnCompletion of this two day course results in participants becoming certified as recog-nised Scrum Product Owners.

CourseC#.NET: DEVELOPMENT IN .NET WITH C#Arjan EinbuIn this course you will learn

how to develop different types of applica-tions in the .Net environment using the C# language. The course is intended for pro-grammers, and focuses on what is useful to you as a developer. You will learn how to de-velop both Windows (Windows Forms and WPF) and web applications, libraries (.dll) and communication solutions with WCF.

CourseWEB DEVELOPMENT IN .NET - ASP.NET MVC , HTML5, CSS3, JAVASCRIPTArjan EinbuThis course covers everything you need to know to start building applications with the latest Microsoft web development stack. We will use ASP.NET MVC on the server and see how to work with models, views, and control-lers. On the client we’ll take advantage of HTML 5, CSS 3, and the best JavaScript frame-works, including jQuery, Modernizr, and more.

Contact us for in-house training and events

programutvikling.no

Page 52: Ndc magazine 3 2014

52

Course - 2 daysAGILE INNOVATIONJessie Shternshus and Denise JacobsNew best practices for creative problem-solving, communication, collabo-ration, and project execu-tion. Most development projects rely on the as-sumption that the envi-ronment in which it is

built is stable. However, software develop-ment environments are highly complex, in constant flux, and thus are unpredictable -- not because of the software itself, but be-cause of the people creating it. A project’s success is dependent upon the team com-municating effectively to respond, adapt and collaborate. Wherein lies the rub: devel-opers are expected to communicate as seamlessly with people as they do with computers, but are rarely given the tools and methodology to do so.

Course JAVASCRIPT AND IMPORTANT JAVASCRIPT FRAMEWORKSSahil Malik

JavaScript, the only language that actually runs everywhere. From big servers in the cloud to tiny watches on your wrist. No won-der its gained such popularitly. Spend 5 days with this powerful scripting language, and get up to speed with all the newest web technologies in popular use today.

Course SHAREPOINT 2013 AND OFFICE 365: END TO END FOR DEVELOPERSSahil MalikThis course begins with an introduction of SharePoint and Office365, starting with the history, the appropriate usage of the plat-form, managing a SharePoint based project, and dives deeper into implementation and technical details subsequently. This course covers Office 365 also.

Course - 2 Days 1.-2. DecemberIDENTITY & ACCESS CONTROL FOR MODERN WEB APPLICATIONS AND APISDominick Baier

With ASP.NET MVC, Web API and SignalR

tied together using the new OWIN and Ka-tana framework, Microsoft provides a com-pelling server-side stack to write modern web applications and services. In this new world we typically want to connect client platforms like iOS, Windows or Android as well as JavaScript-based applications using frameworks like AngularJS.

Course OBJECT-ORIENTATED DEVELOPMENTEivind NordbyThrough discussions and a lot of practical training,

this course conveys the object-orientated way of thinking, rather than just a program-ming language. The main target group is de-velopers from non object-orientated lan-guages, like Cobol or C, but also developers using for instance C++ or Java mainly as a stuctured programming language.

Course C++ FOR EMBEDDED DEVELOPERSMike TarltonThis course introduces the C++ language for use

on realtime and embedded applications. The first part of the course focuses on the language itself, highlighting areas of con-cern for real–time and embedded develop-ment. The latter part covers the application of C++ to real–time systems including in-terrupt handling and concurrency issues. If a C++ course does not cover these funda-mental issues you may find you still have a lot to learn after the training.

Course AGILE SOFTWARE DEVELOPMENT WITH TEAM FOUNDATION SERVER (TFS 2010-TFS 2013)Gáspár Nagy

This two-day course prepares software de-velopers, testers and technology-oriented managers to use Microsoft Team Founda-tion Server for developing agile enterprise applications. The course covers the funda-mentals of the core components of TFS, fo-cusing on the Application Lifecycle Man-agement (ALM) aspects that can be used to become a high-performing agile develop-ment team.

Course ADVANCED DISTRIB-UTED SYSTEMS DESIGN USING SOA & DDDUdi DahanDesigning large–scale dis-tributed systems is hard.

New technologies make it easier to comply with today’s communications and security standards, but don’t auto–magically give you a robust and scalable system. Join Udi for a course packed with the wisdom of companies like SUN, Amazon, and EBay.

WorkshopKOTLIN WORKSHOPHadi HaririKotlin is gaining a lot of traction. Close to release, there are already many

companies and individuals that are ship-ping production code in Kotlin, with some having called it the Swift for Android. Kotlin is a JVM-based language that targets byte code and JavaScript. The design goals are to have a modern, safe, 100% interopera-ble, fast and concise language, which allows for reducing code bases by around 35%-40% and at the same time allowing for com-plete interoperability with existing code.

Course PROGAMMING IN DEEP COlve Maudal

Course LEAN STARTUP FOR ENTERPRISESTristian Kromer

COURSES continued

Contact us for in-house training and events

programutvikling.no

Page 53: Ndc magazine 3 2014

53

HOW TO FIND US PROGRAMUTVIKLING MAIN OFFICE, OSLO

ProgramUtvikling AS is located in the IT-Fornebu technology park at Snarøya.

ADDRESSMartin Lingesvei 17-25, 1367 Snarøya.

Our offices and course rooms are situated in the terminal building of the former Oslo airport. The photo shows the car park, bus stop and course rooms. For details of bus times, go to trafikanten.no

Entrance

Parking

Bus stop

ENROLMENT OPTIONSwww.programutvikling.no - [email protected] Tel.: +47 67 10 65 65 - Fax: +47 67 82 72 31

For complete course descriptions, time and place, visit www.programutvikling.no

BDD - Specification by Example

Surviving Legacy Code

Agile Design and Modeling for Advanced Object Design with Patterns

with Gojko Adzic

with J.B. Rainsberger

23. February 2015 in Oslo with Craig Larman

This two day workshop teaches you how to apply emerging practices for managing requirements, specifications and tests in agile and lean processes to bridge the communication gap between stakeholders and implementation teams, build quality into software from the start, design, develop and deliver systems fit for purpose.

Working with legacy code remains difficult. We feel afraid to change it, but sometimes we have no choice. You can easily learn techniques to help you manage your risk, but where do you practise them? If you apply them directly to your project's most valuable and difficult legacy code, then your risk becomes greater, not less. J. B. Rainsberger gives you a safe code base in which to experiment and guides you through the confusing risk/reward decisions involved in living with legacy code. You will learn and practise several specific, safe techniques that you can start using on your own legacy code once you return to your project.

This popular, high–impact, and hands–on course on mastering advanced object–oriented design (OOD) and design patterns (primarily the “Gang of Four” design patterns) with agility is aimed at architects and developers of OO systems, You will learn to design with patterns, apply visual modeling in an agile modeling approach, and a suite of related advanced design topics, including the design of packages. This course is based on acclaimed industry leader Craig Larman’s extensive experience coaching and applying OOD since the mid 1980s.

Page 54: Ndc magazine 3 2014

54

ndc-london.com@NDC_conferences #ndclondon

Welcome to NDC in ExCel Arena Docklands, London1-5 December

Our Inspiring Partners:

Ticket types Price

All Access Pass (all 5 days) with hotel* £ 2200 All Access Pass (all 5 days) £ 1850 3 Day Conference Pass with hotel* £ 1400 3 Day Conference Pass £ 1150 2 Day Conference Pass £ 1000 1 Day Conference Pass £ 850 2 Day Pre-Conference Workshop Pass £ 1000 1 Day Pre-Conference Workshop Pass £ 650 *Hotel packages includes the best available rates at a budget hotel near the venue. 5 nights are covered for the All Access Pass (Sun - Fri) and 3 nights are covered with the 3 day pass (Tue - Fri).

20% VAT will be added to all ticket types.

Get all access to a whole week of inspirationor mix and match as you like

Get your tickets now!SINCE 2008

Page 55: Ndc magazine 3 2014

55

ndc-london.com@NDC_conferences #ndclondon

Welcome to NDC in ExCel Arena Docklands, London1-5 December

Our Inspiring Partners:

Ticket types Price

All Access Pass (all 5 days) with hotel* £ 2200 All Access Pass (all 5 days) £ 1850 3 Day Conference Pass with hotel* £ 1400 3 Day Conference Pass £ 1150 2 Day Conference Pass £ 1000 1 Day Conference Pass £ 850 2 Day Pre-Conference Workshop Pass £ 1000 1 Day Pre-Conference Workshop Pass £ 650 *Hotel packages includes the best available rates at a budget hotel near the venue. 5 nights are covered for the All Access Pass (Sun - Fri) and 3 nights are covered with the 3 day pass (Tue - Fri).

20% VAT will be added to all ticket types.

Get all access to a whole week of inspirationor mix and match as you like

Get your tickets now!SINCE 2008

Page 56: Ndc magazine 3 2014

56

LIAM WESTLEY,APPLICATION ARCHITECT AT HUDDLE

Liam Westley is an application architect at Huddle based in London, with respon-sibilities including the mobile application architecture to sup-port their iOS and Android applications.

Liam is an active member of the UK .NET community, regularly speaking at user groups and conferences, as well as being an organiser for London .Net Users. A past working in television graphics has left him with a penchant for design and a concern for quality UX.

“Choosing sessions for NDC London 2014 was really tough, but I think we have achieved our goal of reflecting the broad range of skillsets expected from a modern software developer. That end of a single vendor eco-system is what makes application develop-ment a much more interesting discipline.”

TORBJØRN MARØ, CTO AT PSWINCOMTorbjørn Marø is the CTO of a mobile com-munications company in Norway. He is a passionate coder, and loves to learn and use new (and old) pro-gramming languages and technologies. As an active blogger he

tries to share his excitement for software with anyone who's willing to listen.

"As always I'm looking forward to meeting a host of like minded and interesting people at NDC. I think the various topics and talks we have been able to select this year is amazing, and there will be something of interest to everyone attending."

"I'm especially happy with the attention given to functional programming this time around. The industry is fi nally beginning to see the importance and opportunities of this paradigm, and it's only going to become more important as we go forward."

JAKOB BRADFORD, GENERAL MANAGER OF PROGRAMUTVIKLING AND NDC

Jakob Bradford has the main responsibil-ity for seeing that the agenda committee reach their goal and the completion of the conference.

“Both of the number and quality of the Call

For Papers have been very high this year. This year NDC London will have 7 parallel tracks. The number of speakers and abstracts shows the position NDC London has as we enter our second year.

KJERSTI SANDBERG, GENERAL MANAGER OF PROGRAMUTVIKLING

Kjersti Sandberg is the founder of Progra-mUtvikling AS and has organized NDC from the very beginning. Her daily job is with the professional areas of sale, marketing and

Once again the NDC Agenda Commit-tee has worked hard to select the very best among a mountain of suggested sessions and topics. We've tried to fi nd interesting speakers of high quality that is new to NDC, and we've used

feedback from earlier years to improve what is already a great conference. The agenda refl ects what developers are most concerned with in 2014, and while it will still be familiar you'll fi nd the conference program more ver-

satile than ever before. We hope you are as exited as we are about this, and that NDC London 2014 will give you the inspiration and knowledge to face new challenges and do interesting and great things with technology!

The inspiring conference for developers will be held at the ICC suites at the ExCel Exhibiton Centre for the sencond year in a row.

By Charlotte Lyng

THE AGENDA COMMITTEE NDC London is reaching new hights

Page 57: Ndc magazine 3 2014

57

business development. Here role within this year`s agenda committee has been to liaise with speakers and present good ideas.

“NDC London is a full week event with Pre-Conference Workshops on 1-2 Decem-ber followed by the conference days 3-5 December. This year we have added more workshops and conference ticket options, giving our delegates more fl exibility to tailor their own NDC experience”.

BRYAN HUNTER, FOUNDER OF NASHVILLE FUNCTIONAL PROGRAMMERS

Bryan Hunter is the CTO of Nashville-based Firefl y Logic, and a functional pro-grammer (Erlang, F#, and Elixir). He is a Mi-crosoft MVP in F#, and founded the poly-glot functional pro-

gramming group NashFP. Bryan volunteers much of his free time to promoting func-tional programming through community building, developer events, and business-leader education. This is the fi rst year that Bryan is part of the NDC programme com-mittee. He was brought in to organize a full three-day functional programming track within NDC London. When you see the line-up you will agree he has done very well. "NDC has a big infl uence on developers all over the world. I learned of NDC Oslo in 2007, and each year since I've taken vaca-tion days to watch the session videos. For many companies in Tennessee (my home), NDC defi nes 'best practice', and what 'nor-mal' should look like. I am so thankful and honored to be included in the mix this year for both NDC Oslo and NDC London. I believe that we as an industry are at a tipping point where functional programming becomes mainstream; becomes the norm; becomes the 'safe option'.

CALL FOR PAPERS FOR NDC OSLO 2015

Call For Papers for NDC Oslo 2015 is now open. You can submit a regular or lightning talk, or even a Pre-Conference or Conference Workshop. We look forward to re-ceiving your submissions.

Submit your talk at www.ndcoslo.com

Page 58: Ndc magazine 3 2014

Sam NewmanDesign and Implementation of MicroservicesMicroservices Architecture is a concept that aims to decouple a solution by decomposing functionality into discrete services. Microservice architectures can lead to easily changeable, maintainable systems that can be more secure, performant and stable. In this workshop, you will discover a consistent and reinforcing set of tools and practices rooted in the philosophy of small and simple; this can help you move towards a microservice architecture. Microservices are typically small systems, with single responsibilities, communicating via the web’s uniform interface, installed as well-behaved operating system services. However, with these finer-grained systems come new sources of complexity.

Jeff FrenchBuilding Cross-Platform Mobile Apps in the CloudToday mobile applications are a must for almost any business or product. Developing the same application for the major mobile platforms takes a considerable investment in time and learning new technologies. Building out a secure and scalable API for your app can be daunting task. In this workshop we will learn how to leverage existing web-based technologies and skills to develop cross-platform mobile applications backed by scalable REST APIs in a fraction of the time that it takes for native apps. This will be a hands-on workshop where you will be writing a mobile app and RESTful API from scratch.

Venkat Subramaniam Programming in Functional Style“Functional programming,” yes, everyone’s talking about it. But why? What’s this new excitement about something that’s been around for a very long time in some esoteric languages. For one thing, most mainstream languages now support it. C#, Java, C++,... To program in functional style you don’t have to change the language, but you have to change how you program in that language. Change can be hard, but there are some nice rewards that go with it for those of us who are adaptive. Come to this course to learn about the benefits of functional programming and how you can leverage that in the language you program today.

Scott AllenAngularJS workshopAngularJS brings testable architectural patterns to applications built with HTML 5. This course explains and demonstrates the many features of AngularJS, including directives, filters, routing, controllers, templates, services, views. But, the best applications need more than a single framework. We’ll also learn about responsive design, Bootstrap, and the latest HTML 5 features including local storage, the canvas, web workers, web sockets, and more.

Dominick Baier and Brock AllenIdentity & Access Control for modern Web Applications and APIsWith ASP.NET MVC, Web API and SignalR tied together using the new OWIN and Katana framework, Microsoft provides a compelling server-side stack to write modern web applications and services. In this new world we typically want to connect client platforms like iOS, Windows or Android as well as JavaScript-based applications using frameworks like AngularJS. This two day workshop is your chance to dive into all things security related to these new technologies. Learn how to securely connect native and browser-based applications to your back-ends and integrate them with enterprise identity management systems as well as social identity providers and services.

Udi DahanDesigning loosely-coupled systemsAlthough the development industry has changed technologies repeatedly over the years, countless systems end up devolving into monolithic balls of mud. Join Udi for an in-depth dive into communications patterns like publish/subscribe, correlated one-way request/response, and object-oriented state management practices for long-running workflows. If you enjoy deep architectural discussion and are involved with building a large-scale distributed systems, this is for you.

Denise Jacobs and Jessie ShternshusAgile InnovationNew best practices for creative problem-solving, communication, collaboration, and project execution Most development projects rely on the assumption that the environment in which it is built is stable. However, software development environments are highly complex, in constant flux, and thus are unpredictable -- not because of the software itself, but because of the people creating it. A project’s success is dependent upon the team communicating effectively to respond, adapt and collaborate. Wherein lies the rub: developers are expected to communicate as seamlessly with people as they do with computers, but are rarely given the tools and methodology to do so.

Mathias Brandewinder F# via Machine LearningMachine Learning and Functional Programming are both very hot topics these days; they are also both rather intimidating for the beginner. In this workshop, we’ll take a 100% hands-on approach, and learn practical ideas from Machine Learning, by tackling real-world problems and implementing solutions in F#, in a functional style.In the process, you will see that once you get beyond the jargon, F# and Machine Learning are actually not all that complicated - and fit beautifully together. So if you are interested in learning techniques to write smarter programs than learn from data, and sharpening your developer skills, come with your laptop and... let’s hack together!

2 DAYS OF WORKSHOPS CROWNE PLAZA HOTEL, DOCKLANDS

1 DAY - 1 Dec

2 DAYS - 1-2 Dec 2 DAYS - 1-2 Dec

You may attend these workshops without going to the conference.

Workshop1 DAY PASS

Workshop2 DAY PASS

20% VAT will be added to all prices.

Workshops are included in the

NDC ALL ACCESS CONFERENCE PASS £2200 £1000

£650

ndc-london.com@NDC_conferences #ndclondon

Page 59: Ndc magazine 3 2014

Sam NewmanDesign and Implementation of MicroservicesMicroservices Architecture is a concept that aims to decouple a solution by decomposing functionality into discrete services. Microservice architectures can lead to easily changeable, maintainable systems that can be more secure, performant and stable. In this workshop, you will discover a consistent and reinforcing set of tools and practices rooted in the philosophy of small and simple; this can help you move towards a microservice architecture. Microservices are typically small systems, with single responsibilities, communicating via the web’s uniform interface, installed as well-behaved operating system services. However, with these finer-grained systems come new sources of complexity.

Jeff FrenchBuilding Cross-Platform Mobile Apps in the CloudToday mobile applications are a must for almost any business or product. Developing the same application for the major mobile platforms takes a considerable investment in time and learning new technologies. Building out a secure and scalable API for your app can be daunting task. In this workshop we will learn how to leverage existing web-based technologies and skills to develop cross-platform mobile applications backed by scalable REST APIs in a fraction of the time that it takes for native apps. This will be a hands-on workshop where you will be writing a mobile app and RESTful API from scratch.

Venkat Subramaniam Programming in Functional Style“Functional programming,” yes, everyone’s talking about it. But why? What’s this new excitement about something that’s been around for a very long time in some esoteric languages. For one thing, most mainstream languages now support it. C#, Java, C++,... To program in functional style you don’t have to change the language, but you have to change how you program in that language. Change can be hard, but there are some nice rewards that go with it for those of us who are adaptive. Come to this course to learn about the benefits of functional programming and how you can leverage that in the language you program today.

Scott AllenAngularJS workshopAngularJS brings testable architectural patterns to applications built with HTML 5. This course explains and demonstrates the many features of AngularJS, including directives, filters, routing, controllers, templates, services, views. But, the best applications need more than a single framework. We’ll also learn about responsive design, Bootstrap, and the latest HTML 5 features including local storage, the canvas, web workers, web sockets, and more.

Dominick Baier and Brock AllenIdentity & Access Control for modern Web Applications and APIsWith ASP.NET MVC, Web API and SignalR tied together using the new OWIN and Katana framework, Microsoft provides a compelling server-side stack to write modern web applications and services. In this new world we typically want to connect client platforms like iOS, Windows or Android as well as JavaScript-based applications using frameworks like AngularJS. This two day workshop is your chance to dive into all things security related to these new technologies. Learn how to securely connect native and browser-based applications to your back-ends and integrate them with enterprise identity management systems as well as social identity providers and services.

Udi DahanDesigning loosely-coupled systemsAlthough the development industry has changed technologies repeatedly over the years, countless systems end up devolving into monolithic balls of mud. Join Udi for an in-depth dive into communications patterns like publish/subscribe, correlated one-way request/response, and object-oriented state management practices for long-running workflows. If you enjoy deep architectural discussion and are involved with building a large-scale distributed systems, this is for you.

Denise Jacobs and Jessie ShternshusAgile InnovationNew best practices for creative problem-solving, communication, collaboration, and project execution Most development projects rely on the assumption that the environment in which it is built is stable. However, software development environments are highly complex, in constant flux, and thus are unpredictable -- not because of the software itself, but because of the people creating it. A project’s success is dependent upon the team communicating effectively to respond, adapt and collaborate. Wherein lies the rub: developers are expected to communicate as seamlessly with people as they do with computers, but are rarely given the tools and methodology to do so.

Mathias Brandewinder F# via Machine LearningMachine Learning and Functional Programming are both very hot topics these days; they are also both rather intimidating for the beginner. In this workshop, we’ll take a 100% hands-on approach, and learn practical ideas from Machine Learning, by tackling real-world problems and implementing solutions in F#, in a functional style.In the process, you will see that once you get beyond the jargon, F# and Machine Learning are actually not all that complicated - and fit beautifully together. So if you are interested in learning techniques to write smarter programs than learn from data, and sharpening your developer skills, come with your laptop and... let’s hack together!

2 DAYS OF WORKSHOPS CROWNE PLAZA HOTEL, DOCKLANDS

1 DAY - 1 Dec

2 DAYS - 1-2 Dec 2 DAYS - 1-2 Dec

You may attend these workshops without going to the conference.

Workshop1 DAY PASS

Workshop2 DAY PASS

20% VAT will be added to all prices.

Workshops are included in the

NDC ALL ACCESS CONFERENCE PASS £2200 £1000

£650

ndc-london.com@NDC_conferences #ndclondon

Page 60: Ndc magazine 3 2014

60

By Mari Myhre

With a population of more than 8 million people, London is the most populous region, urban zone and metropolitan city in the United King-dom. The city has a diverse range of people and cultures, with more than 300 languages are spoken within its boundaries. The city is fi lled with a thrilling atmosphere and defi nitely has something to offer for everyone, whether you’re interested in arts, cul-ture, shopping food or entertainment. Here’s a little guide of London’s most famous attractions:

BUCKINGHAM PALACE & THE RIVER THAMES Buckingham Palace is by far the most popular tourist destination attract-ing more than 15 million people every year. People from all over the world come to see the famous “guard change” that takes place outside the palace every day at 11.30am. Many of the city’s other attractions are situated along the banks of the River Thames. Here you will fi nd the Tower of London where tourists can get to see the remarkable Crowns of England. The Houses of Parliament followed by the fabulous clock tower, Big Ben are also in same area. A few blocks away you will fi nd the London Eye, Europe’s tallest Ferris wheel. It’s the most popular paid tourist attrac-tion in the UK visited by more than 3,5 million people every year, where you can get to see the city from above.

THE BOROUGH MARKET London is also well known for its dif-ferent markets, such as the Borough market, - a wholesale retail and food market based in Southwark, cen-tral London. It is one of the largest and oldest food markets in the city and offers a variety of foods from all over the world. The market gives you a different taste of the city and has become a fashionable place to buy fresh food in London. Amongst the products on sale are fresh fruit, vegetables, cheese, meat and freshly baked breads. There is also a wide variety of cooked food and snacks for the many people who fl ock to the market. Borough Market has also been used as fi lm locations for sev-eral movies including the Harry Potter series and Bridget Jones.

HYDE PARK Hyde Park is one of the largest parks in the capital, most known for the Speakers Corners. The park has become a traditional location for mass demonstrations, and the venue of several concerts. Hyde Park also hosts the popular Christmas fair Winter Wonderland every year, fea-turing UK’s largest ice rink, a charming Christmas market and a huge obser-vation wheel. Winter Wonderland is defi nitely London’s most magical Christmas destination and absolutely worth a visit if you’re in town later this year.

WINE & DINE The city is also packed with exclusive restaurants, which offers you tastes from all over the world. Whether you fancy British, Indian, Italian or Scan-dinavian, London has it all. The most authentic American restaurant, Big Easy is located in the heart of Chelsea. The founder and owner, Paul Corrett was a lover for all American things and had a desire to open a place that could offer “Good Food, Served Right”. Big Easy brings you back to a simpler time. With its lovely atmosphere it’s the perfect place to sit back, relax and enjoy a home cooked meal. The restau-rant offers everything from American steaks to freshly Canadian lobster. Big Easy attracts movie stars, journalists, politicians, the British royal family and of course its regulars. Charming bars and pubs are also located around each corner in London. Princess Louise, a pub based in Holborn is the place to be for beers fanatics. However, if you’re looking for the town’s best cocktails, stop by Callooh Callay in Shoreditch.

London is unique compared to other cities and defi nitely has something new to offer no matter how many times you have visited the city. It’s the perfect destination whether you are in town for business or pleasure. And it’s probably true what the famous English author Samuel Jackson once said, “When you’re tired of London, you’re tired of life”.

London is a diverse and exciting city with some of the world’s best sights and attractions. The city attracts more than 30

million visitors from all over the world every year.

London

Page 61: Ndc magazine 3 2014

61

London

Page 62: Ndc magazine 3 2014

62

LET US ENTERTAIN YOUWith grand music multiple choices, even more parallel sessions and an intriguing expo area, NDC

London 2014 is designed to be an inspiring and entertaining experience for software developers.

THE TIDE

London is a city full of enthused developers. In an average week, you can gen-erally fi nd two or more user groups of developers meeting somewhere in the city. In order to celebrate this, NDC has invited some of the larger user groups to share their passion with the NDC crowd. The NDC community area has user groups present that will help create more action during the conference. Each user group will give quizzes, interview some of the profi led NDC speakers and conduct competitions. The next generation of conference speakers are born in the local user groups. At NDC, we complete the loop. Share your knowledge at NDC Community this year.

Find your user group at NDC London

62

London is a city full of enthused developers. In an average week, you can gen-erally fi nd two or more user groups of developers meeting somewhere in the city. In order to celebrate this, NDC has invited some of the larger user groups to share their passion with the NDC crowd. The NDC community area has user groups present that will help create more action during the conference. Each user group will give quizzes, interview some of the profi led NDC speakers and conduct competitions. The next generation of conference speakers are born in the local user groups. At NDC, we complete the loop. at NDC Community this year.

Find your user group at NDC London

Page 63: Ndc magazine 3 2014

63

Having been at NDC before, one simply does not come back just with expec-tations of great sessions and mingling with peers. You come back expecting a great total experience, with tasty food, fun entertainment and great music as well. NDC London 2014 will not disappoint with its line-up.

During NDC there's always a great

party mood. On Thursday evening

4th of December, get ready for an

incredible high-octane stage per-

formance, as music fl ows through

the expo area of NDC London by

The Tide and Skinny Lister.

The Tide, based in London's West

End, produce an “all out assault

on your musical senses with their

powerful display of pure, unadul-

terated rock n'roll”.

Skinny Lister are not your average,

modern day, gentrifi ed English folk

group. This is a stand-apart folk

band- not afraid to match sensitiv-

ity with a high kicking free for all.

Time to open the fl oodgates and

get the deck party started.

All is set for a great music perfor-

mance at NDC Oslo.

Don't just attend NDC.

Experience it!

CULINARY CELEBRATION

At NDC London a variety of culi-

nary food is served all day. Move

through the expo area and pick up

scents from a variety of cuisines

ranging from Italian, Asian, Ameri-

can, Spanish and British. In addition,

NDC London keep a barista bar open

throughout the day, for you coffee

loving developers.

A FESTIVAL FOR DEVELOPERS

SKINNY LISTER

Page 64: Ndc magazine 3 2014

6464

.NET Framework Agile Architecture Cloud DatabaseDesign Devops Front-End Framework Fun Functional ProgrammingGadgets Internet Of Things JavaScript Microsoft Misc Languages Mobile People Programming Languages Security Techniques Testing Tools UX Web

Time slots Room 1 Room 2 Room 3 Room 4 Room 5 Room 6 Room 7

09:00 - 10:00 TBA

Denise Jacobs

10:00 - 10:20 Break

10:20 - 11:20 Coding Culture Finding Service Boundaries – illustrated in healthcare

Architecting large Single Page Applications with Knockout.js

Abusing C# Crafting JavaScript Code

TDD All The Things F-Words - Functional Programming Terms With More Than Four Letters

Sven Peters Udi Dahan Steve Sanderson Jon Skeet Scott Allen Liz Keogh Calvin Bottoms

11:20 - 11:40 Break

11:40 - 12:40 Being an Excellent Software Developer

The experimenta-tion mindset

The Ultimate Logging Architecture - You KNOW You Want It

Asynchronous Programming for .NET Programmers

Chrome Developer Tools Deep Dive

Unit testing patterns for concurrent code

Elixir: a crisp, new language for the Erlang VM

Doc Norton Doc Norton Michele Leroux Bustamante

Venkat Subrama-niam

Shay Friedman Dror Helper Bryan Hunter

12:40 - 13:40 Lunch

13:40 - 14:40 Practical Considera-tions for Microservices

Capability Red: Requirements at Scale

Couchbase and ElasticSearch, Sitting in a Tree

Load Testing SignalR

How WPF lost and HTML won - the new wave of cross-platform, hybrid Desktop apps

Lightning talks Erlang Patterns Matching Business Needs

Sam Newman Liz Keogh David Ostrovsky David Fowler and Damian Edwards

Ian Pender James Cryer, Harry Cummings, Peter Mounce and Razvan Caliman

Torben Hoffman

14:40 - 15:00 Break

15:00 - 16:00 Commercial Software Development - Writing Software Is Easy, Not Going Bust Is The Hard Bit

The state of state Core Software Design Principles

Going down the rabbit hole: a case study in corner cases

Modern Style Guides for a Better Tomorrow

Tales of the unexpected (a litany of test failures)

Equivalence Classes, xUnit.net, FsCheck, Property-Based Testing

Liam Westley Rapiro, Bjørn Einar Bjartnes, Jonas Winje and Einar W. Høst

Venkat Subrama-niam

Jon Skeet Shay Howe Harry Cummings Mark Seemann

16:00 - 16:20 Break

16:20 - 17:20 My Job Is A Joke - Tales Of A Developer Advocate

Not just layers! What can pipelines and events do for you?

Rob Conery Cage Match

Building real time web applications with Node.js and Socket.IO.

Testing Economics 101

TBA

Burke Holland Ian Cooper Gary Bernhardt and Rob Conery

Peter O'Hanlon Gil Zilberfeld Scott Wlaschin

17:20 - 17:40 Break

17:40 - 18:40 The principles of microservices

Agile 1's game Lessons Learned on How to select you Cloud Computing Vendor

Learning How to Shape and Configure an OData Feed for High Performing Web Sites and Applications

Client Side MVC != Server Side MVC || Intro to Ember.js

Write Your Own Compiler in 24 Hours

Sam Newman Seb Rose Nuno Filipe Godinho Chris Woodruff Jeremy Green Phillip Trelford

PROGRAM – Wednesday

Page 65: Ndc magazine 3 2014

6565

.NET Framework Agile Architecture Cloud DatabaseDesign Devops Front-End Framework Fun Functional ProgrammingGadgets Internet Of Things JavaScript Microsoft Misc Languages Mobile People Programming Languages Security Techniques Testing Tools UX Web

Time slots Room 1 Room 2 Room 3 Room 4 Room 5 Room 6 Room 7

09:00 - 10:00 Self-documenting Code: A Mob Powered Vocabulary Lesson

Databases: the elephant in the Continuous Delivery room

Designing for Extensibility

OWIN, Katana and ASP.NET vNext: eliminating the pain of IIS

Epic Web UI Performance with ReactJS.Net

TBA The F# Way To Reconciliation

Cory House Enrico Campidoglio Miguel A Castro David Simner Mark Rendle Andy Wigley Don Syme

10:00 - 10:20 Break

10:20 - 11:20 Deliberate advice from an accidental career

Continuous Delivery - An Experience Report

Writing Compose-able JavaScript with Adaptors and Decorators

What’s New In C# 6.0?

Web Components: The Dawn of the Reusable Web

Is your mobile app as secure as you think?

Mona Lisa, F# and Azure: simple solutions to hard problems

Dan North Chris O'Dell Reginald Braithwaite Scott Allen Cory House Matt Lacey Mathias

Brandewinder

11:20 - 11:40 Break

11:40 - 12:40 How Constraints Cultivate Growth

Team Foundation Server, Second Look

Decoupling from ASP.NET - Hexago-nal Architectures in .NET

Unifying Authentication & Delegated API Access for Mobile, Web and the Desktop with OpenID Connect and OAuth2

ES6: JavaScript, grown up

Introducing NativeScript - All Of Your JavaScript Are Belong To Us

How to think like an Erlanger

Shay Howe Martin Hinshelwood Ian Cooper Dominick Baier Jack Franklin Burke Holland Torben Hoffman

12:40 - 13:40 Break

13:40 - 14:40 Agile Patterns: Estimation

Architecting .NET Applications for Docker and Container Based Deployments

Event Sourcing, Messaging and CQRS Basics

Identity management in ASP.NET, Part 1

Deception, Responsibility, and Duck Punching JavaScript

Developing Mobile Solutions with Azure Mobile Services in Windows 8.1 and Windows Phone

Biological Computing in F#

Stephen Forte Ben Hall James Nugent Brock Allen Todd H Gardner Chris Woodruff Mr Colin Gravill

14:40 - 15:00 Break

15:00 - 16:00 Hacking through time and space

Continuous Delivery Done Right!

Data Done Right: 10 Databases in an Hour

Identity management in ASP.NET, Part 2

TBA Mobile web - merg-ing responsive and adaptive techniques

Distributed Erlang

Cristiano Beta Jeff French David Simons Brock Allen Gary Bernhardt Francisco Manuel da Silva Ferreira

Christopher Meiklejohn

16:00 - 16:20 Break

16:20 - 17:20 Conventionally speaking

Embracing DevOps at JUST EAT, within a Microsoft platform

Breaking up a monolith if you don't fancy SOA

Five (or so) Essential Things to know about ASP.NET vNext

Everything you need to know about .NET memory

.NET Rocks Live! Kenneth MacKenzie: SD Erlang Release

Jimmy Bogard Peter Mounce Helen Emerson David Fowler and Damian Edwards

Ben Emmett .NET Rocks!, Carl Franklin and Richard Campbell

Kenneth Mackenzie

17:20 - 17:40 Break

17:40 - 18:40 The three questions about your career that matter

Adopting Continuous Delivery: Adjusting your Architecture

Security WTF! "Write once, run anywhere”: Can AngularJS & Cordova do it?

Lightning talks ES6 and 7, the future of JS

Simpler Data Access and Smarter Calculations

Reginald Braithwaite

Rachel Laycock Niall Merrigan Christian Weyer Ed Blackburn, Razvan Caliman, Rafał Legiędź, Michał Śliwoń and Todd H Gardner

Brendan Eich Paul Blasucci

18:40 - 00:00 The NDC Party

PROGRAM – Thursday

Page 66: Ndc magazine 3 2014

6666

PROGRAM – Friday.NET Framework Agile Architecture Cloud DatabaseDesign Devops Front-End Framework Fun Functional ProgrammingGadgets Internet Of Things JavaScript Microsoft Misc Languages Mobile People Programming Languages Security Techniques Testing Tools UX Web

Time slots Room 1 Room 2 Room 3 Room 4 Room 5 Room 6 Room 7

09:00 - 10:00 Advanced TDD: Writing Clean Tests

Hypermedia in the Wizard's Tower

How to Save the World Without Wearing Your Underpants on the Outside.

TBA Beyond Rectangles in Web Design: CSS Shapes and CSS Masking

Unpacking Technical Decisions

From C# to Haskell

Robert C. Martin Einar W. Høst Gary Short TBA Razvan Caliman Sarah Mei Louis Salin

10:00 - 10:20 Break

10:20 - 11:20 Agile How to create a Web API no one wants to use

An Introduction to Artifi cial Intelligence

Getting up to speed with redis

AngularJS for ASP.NET MVC Developers

Kicking the complexity habit

My adventure with Elm

Stephen Forte and Richard Campbell Karoline Klever Seth Juarez Marc Gravell Miguel A Castro Dan North Yan Cui

11:20 - 11:40 Break

11:40 - 12:40 Building Natural User Interface applications with Intel RealSense.

asm.js, SIMD, and JS as a compiled-language virtual machine

Principles of Modern Data Visualization

ASP.NET Web API: Beyond the Basics

It’s the top 10 of cool HTML5 features every developer should know right now

Making Steaks from Sacred Cows

TBA

Peter O'Hanlon Brendan Eich Seth Juarez Ido Flatow Gill Cleeren Kevlin Henney Scott Wlaschin

12:40 - 13:40 Lunch

13:40 - 14:40 A fragile internet of things

TBA Tracking Real World Web Performance

Resilient Architectures for the cloud

Reactive, Event Driven User Interfaces

Thinking outside the DOM

TBA

Erlend Oftedal Rob Conery Nik Molnar Mahesh Krishnan Ray Booysen Christian Johansen Andrea Magnorsky

14:40 - 15:00 Break

15:00 - 16:00 Project Orleans: building the internet of things

Gesture Recognition with Kinect for Windows

Data Science for Fun and Profi t

TBA REST easy The Architecture of Uncertainty

The Great @fsibot Caper

Richard Astbury Carl Franklin Gary Short Andy Wigley Jimmy Bogard Kevlin Henney Mathias Brandewinder

16:00 - 16:20 Break

16:20 - 17:20 The Dos and Don'ts of Multithreaded Programming

Performance is a Feature!

When the connection fails - Developing offl ine mobile applications

TBA Separating Allocation from Code: a journey of discovery

One frontend, one backend, three mobile platforms

Polyglot heaven - how to build an async, reactive application in 2014

Hubert Matthews Matt Warren Barbara Fusińska TBA Chris Parsons Richard Garside Tomas Jansson

NDC PeopleCreate better together

5. FebruaryRadisson Blu Scandinavia Oslo

Page 67: Ndc magazine 3 2014

NDC PeopleCreate better together

5. FebruaryRadisson Blu Scandinavia Oslo people.ndcevents.com

DON’T LET ANOTHER YEAR GO BY WHERE YOUR TEAM DOESN’T REACH ITS POTENTIAL!

NDC is proud to present Create Better Together, an inspirational day of talks and workshops focused on

building more effective development teams. Too often the intentions of a team are aligned but unintended actions derail everything. The culprit? Poor communication.

AT THE EVENT YOU’LL LEARN:

* What it takes both as individuals and teams to work better together

* How to unblock yourself when you hit mental walls

* Ways in which we can unintentionally impact each other through our moods and actions

* Tips and tricks on keeping the team focused and aligned

* Overcoming unique situations developers face

* A human centered approach to accomplishing goals

* Creative ways to make problem solving fun!

Don’t miss this chance to kick 2015 off right, sign up today for Create Better Together!

DENISE JACOBSThe Creative Dose Founder + Chief Creativity Evangelist

JESSIE SHTERNSHUSThe IMPROV EFFECT

CARL SMITHnGen WorksThe Advisor

MICHAEL “DOC” NORTONGroupon

HERE'S OUR AMAZING SPEAKERS

Page 68: Ndc magazine 3 2014

Donation

SMSAPI

Survey

Posisjonering

Merge

SMS

Loyalty Club

LOVESMS

Positio

nin

g

Voting

Vo

ting

Mobile

marketing

MarketingPassword

RemindersWarnings

Ordering

Confirmation

SMS

BillingHLR

VerifyingQuest SMS Loyalty Club

Pass

wo

rd

Survey

HLR Contact

update

Rabekkgata 9, Moss - Norway

[email protected] l +47 69 20 69 20

For more information:

www.vianett.com We love SMS!

The fast way to integrate

SMSinto your software

Donation

Reminders

Survey

PositioningMerge

SMSPayment

Payment

Positio

nin

g

Voting

Vo

ting

Marketing

Password

Password

Booking

Ordering

Ordering

Confirmation

SMS

Billing

MMSHLR

VerifyingGet inspired

AskSign up now for a free developer account: www.vianett.com/developer

JavaHTTP

ASP

COM

SMPP

MSSQL

YAP

SMTPFTP

Web Services

C#

“ViaNett`s API`s are simple and easy to understand, well documented and their support is excellent”

Erik Lerbæk IT-manager, Viking Redningstjeneste AS

Returadresse: ProgramUtvikling AS. Postboks 1, 1330 Fornebu