The first few months of 2016 are so incredibly busy that I didn’t find time to blog about my conference talks and provide additional resources, as I usually do. So here’s a quick summary of my speaking engagements so far, and the plan for the next two months. Thanks for your patience!
Chilly Montreal: ConFoo
My first conference for 2016 was ConFoo in Montreal. This is a great community-driven non-profit conference, organized by the indefatigable Anna Filina and Yann Larrivee. One highlight from my visit this year is that, in three days, I spent exactly 2 minutes outside. And most of that time was frantically trying to catch an Uber car that couldn’t find me on the way back to the airport. Oh yeah, and the heated outdoor pool in -8C.
My first talk was an updated review of the Swift programming language for iOS and OS X. I had a good crowd, some new to iOS and some more seasoned developers. As always, I showed some Objective-C pain points and then turned to a quick tour of Swift language features, with a focus on type safety, optional types, pattern matching, and a big demo app. [Slides]
Next, I gave a talk on improving the performance of .NET applications. This is my alma mater, and I keep updating this talk slightly to cover new advances in .NET technologies (such as .NET Native) and reflect some new stories and experiences that I can share from my work. We discussed .NET collections, improving startup time, and reducing memory pressure. [Slides] [Demos]
Finally, I gave a talk on low-level CPU optimizations. This is a talk I love, and it really highlights how developers building CPU-bound applications can achieve amazing performance gains by deeply understanding the way the hardware works. Starting from cache organization and pipelining, and going all the way to vector instructions. [Slides] [Demos] [Pluralsight course]
Windy New York: O’Reilly Software Architecture Conference
After a few calm weeks at home, I flew to New York for just over 48 hours to speak at the O’Reilly Software Architecture Conference. I love O’Reilly events because they are impeccably organized — there’s amazing attention to detail and they take wonderful care of the speakers. Full-size cardboard cutouts of O’Reilly animals scattered across the halls, a big plus.
My talk covered modern backend services for mobile application development. Many mobile developers don’t really like building backends, and the investment can be overwhelming if you’re just building a proof of concept or trying to put your product in the hands of the first users. Mobile backend services such as Azure Mobile and Parse provide a comprehensive solution for data storage, authentication, push notifications, and many other concerns. Unfortunately, I got the news of the Parse shutdown just a few weeks before my talk, so I had to switch focus to Azure Mobile as pretty much the only remaining holistic offering in this space. I also built a last-minute iOS demo, and I think it resonated well how easy it is to reuse the same backend across Android, iOS, and other platforms. [Slides] [Demos]
Sunny London: DevWeek
DevWeek is truly the highlight of any conference season. First, sunny London — yes you heard me right, it was sunny the whole time and we had a delightful time at the London Zoo and just randomly strolling across the city’s beautiful streets. Second, a conference that offers an amazing variety of talks and speakers, spread across more than 10 tracks, with a bunch of pre- and post-conference workshops to pick from. Third, a great organization team that puts their speakers at The Stafford. I don’t think you could ask for more.
As usual at DevWeek, I had a bunch of talks and two workshops (a pre-conference workshop on Apache Spark, and a post-conference workshop on reverse engineering and constructing exploits), so it was an incredibly busy but very satisfying week. And of course, the highlight of it all was that my wife Dina was also accepted to speak, so we spent the week in London together speaking at the same conference!
My first talk was on building cross-platform mobile applications in C++, using Visual Studio. I know C++ is not really associated with elegance or ease of use, but it’s really a good choice if you are building an application core that must be shared across multiple mobile platforms. Visual Studio has very nice support for building, deploying, and even debugging C++ mobile apps on iOS and Android, and a bunch of nice project templates to get started. In fact, I spent quite a bit of time explaining and playing around with the auto-generated OpenGL ES app template. [Slides]
Next, I gave a talk that’s one of my current favourites — a walkthrough of the C++ and CLR memory models. Instead of just being a formal story, I wanted to focus on a bunch of examples that show how easy it is to fall into pit of success on x86, and how dangerous it can be to blindly assume you don’t have any races when porting your code to other processors. Specifically, I showed how a spin lock implementation works brilliantly when tested on the iOS Simulator (x86) and fails spectacularly when deployed to a real iOS device (ARM). I also showed an example of code that seems correct but is broken due to a store-load reordering, even on Intel processors. Finally, we discussed the three axes of multithreaded correctness: atomicity, exclusivity, and ordering. [Slides]
My third talk discussed using SIMD (vector instructions) from .NET applications. I showed a bunch of simple examples of how you can speed up trivial algorithms that operate on vectors and matrices by a factor or 4 or 8, and then moved on to more sophisticated cases when you need to refactor the algorithm to enable vectorization. Thanks to the 90-minute talk format, I even had time to show some C++ code, and demonstrated how we can beat the C++ auto-vectoriser by using clever instruction sequences. [Slides] [Demos]
Next, I had a very fun morning talk on penetration testing, introducing some of the techniques and tools that attackers use to a crowd of security-minded developers. The killer demo in this talk is, no doubt, the Wifi Pineapple, which doesn’t fail to disappoint even after almost 3 years of use. Here’s just a tiny excerpt showing some wireless networks the Pineapple spoofed back in 2014 at another conference:
KARMA: Probe Request from c4:43:8f:f4:3e:8a for SSID 'homesauce.5ghz' KARMA: Probe Request from b8:e8:56:39:8d:78 for SSID 'OMNI-GUEST' KARMA: Probe Request from b8:e8:56:39:8d:78 for SSID 'Philips_Fidelio_AirPlay' KARMA: Probe Request from b8:e8:56:39:8d:78 for SSID 'SFA Rooms' KARMA: Probe Request from b8:e8:56:39:8d:78 for SSID 'SFO-WiFi' KARMA: Probe Request from c8:6f:1d:c1:1f:b0 for SSID 'atreyu' KARMA: Probe Request from 60:c5:47:98:e8:62 for SSID 'Crowd Favorite Guest' KARMA: Probe Request from 60:c5:47:98:e8:62 for SSID 'Galvanize 1.0' KARMA: Probe Request from 60:c5:47:98:e8:62 for SSID 'RAMBO' KARMA: Probe Request from 60:c5:47:98:e8:62 for SSID 'WholeFoodsMarket' KARMA: Probe Request from 60:c5:47:98:e8:62 for SSID 'Rooster & Moon 2' KARMA: Probe Request from cc:78:5f:3c:d6:9b for SSID 'datawifi' KARMA: Probe Request from 08:d4:2b:1a:58:e6 for SSID 'UCH-Visitor' KARMA: Probe Request from 08:d4:2b:1a:58:e6 for SSID 'VailCascadeResort' KARMA: Probe Request from 08:d4:2b:1a:58:e6 for SSID 'Marriott-Guest' KARMA: Probe Request from 08:d4:2b:1a:58:e6 for SSID 'myqwest4428' KARMA: Probe Request from 10:bf:48:d1:2b:31 for SSID 'HOME-35D8' KARMA: Probe Request from dc:2b:61:65:cf:76 for SSID 'danyuki' KARMA: Probe Request from b8:e8:56:0a:f9:2e for SSID 'DEVZONE' KARMA: Probe Request from 54:26:96:d0:8a:9b for SSID 'RadioZero' KARMA: Probe Request from 54:26:96:d0:8a:9b for SSID 'SistersCoffee-Wireless' KARMA: Probe Request from 54:26:96:d0:8a:9b for SSID 'Bridgeport Brew Pub' KARMA: Probe Request from 54:26:96:d0:8a:9b for SSID 'McMenamins' KARMA: Probe Request from 54:26:96:d0:8a:9b for SSID 'JupiterCity' KARMA: Probe Request from 54:26:96:d0:8a:9b for SSID 'Engineering_Ops' KARMA: Probe Request from 54:26:96:d0:8a:9b for SSID 'Studio3-Guest' KARMA: Probe Request from 54:26:96:d0:8a:9b for SSID 'Maggie' KARMA: Probe Request from 54:26:96:d0:8a:9b for SSID 'CS 1st floor' KARMA: Probe Request from 54:26:96:d0:8a:9b for SSID 'ALBERTA STREET PUB' KARMA: Probe Request from 54:26:96:d0:8a:9b for SSID 'JupiterHotel' KARMA: Probe Request from 54:26:96:d0:8a:9b for SSID 'DOUG FIR RESTAURANT' KARMA: Probe Request from 54:26:96:d0:8a:9b for SSID 'CollectiveAgency' KARMA: Probe Request from 10:68:3f:40:f9:e8 for SSID 'mdev' KARMA: Probe Request from 00:24:d7:ce:22:40 for SSID 'Fluent' KARMA: Probe Request from 78:31:c1:c1:6b:24 for SSID 'Fireswamp' KARMA: Probe Request from 78:31:c1:c1:6b:24 for SSID 'Marriott-Guest' KARMA: Probe Request from cc:fa:00:e9:66:f3 for SSID '5XT18' KARMA: Probe Request from cc:fa:00:e9:66:f3 for SSID 'CantinaMobile'
The first time you see how easy it is to spoof wireless networks, trick your device into connecting to them, and then harvest anything that’s sent in clear text and mount man-in-the-middle attacks — it really drives the point home that attackers don’t need state-level funding to try their luck against your systems and your organization. [Slides]
My fifth talk was on the diagnostics experience in Visual Studio 2015 Update 2. There’s so much good traction in the Visual Studio performance and debugging tools, and new features keep popping up with every update. Some of my demos focused on “older” features like the Visual Studio Profiler and IntelliTrace, and some covered the newer stuff — did you know that since Update 2, you can start a CPU profiler while debugging and quickly review CPU hot-spots in between breakpoints? [Slides]
My sixth and final talk was a status update on .NET Core and CoreCLR. Frankly, I was hoping to be able to share more news — but as .NET Core hasn’t reached the final release yet, I had to reuse some of the material from last year’s talk. Still, I think it was fun: I ran my own version of CoreCLR and debugged it with a custom SOS, used the new dotnet CLI on OS X, and totally forgot to demo the new C# REPL (csi). [Slides]
Next Up: SDD (16-20 May)
In 10 days, I’ll be on the plane to London again to speak at SDD. I have two workshops on .NET diagnostics, production debugging, performance optimization, and performance monitoring — which I am very excited about. These workshops distill into a one-day format the most actionable, up-to-date material from the training courses I’ve been teaching for the last 10 years. I also have two talks that I’m looking forward to, one covering Swift and the other on automatic dump triage and live process analysis.
The Jet Lag Trip: Twilio Signal (24-25 May)
After 24 hours at home, I’ll be on the plane to San Francisco for Twilio Signal. It’s been a few months since my last West Coast trip, and I’m certainly not looking forward to getting up at 3am. Well actually, the fitness room is always empty at this hour, so maybe it’s not so bad after all. Anyway, I have just one talk on the agenda: building cross-platform mobile apps with Visual C++.
Visiting the Homeland: DotNext St Petersburg (3 June)
My next trip is to DotNext St Petersburg, an awesome .NET conference that takes place in Russia twice a year. My last visit was in December when I spoke at DotNext Moscow; this time, it’s in gorgeous St Petersburg, where my wife was born. One thing I love about DotNext is it’s a no-fluff conference. There are no 100-level talks, no vendors pitching their products, no long-winded spiels on abstract architecture — just hardcore, 300- and 400-level demos of bleeding edge .NET technologies and tools. I’m giving a talk on the C++ and CLR memory models, and a talk on PerfView — the Swiss Army knife tool for .NET performance investigations.
Cruising Some Shrimp: NDC Oslo (8-10 June)
And finally, I’m scheduled to speak at NDC Oslo just a couple of days after I’m back from St Petersburg. I’m taking part in the C++ track, with legendary speakers like Andrei Alexandrescu and Anthony Williams. My two C++ talks are an introduction to C++ template metaprogramming (which I originally delivered as a workshop — labs freely available) and a discussion of the C++ memory model through examples. I also have a talk on using SIMD (vector instructions) from .NET. All in all, a pretty hardcore talk selection in a great conference, and a bonus shrimp cruise for speakers!