VIDEO - Discussing React and Angular 2 with Adam Morgan

TL;DR: I've gotten really excited about React as a web framework since starting with Angular and then Angular 2. The combination of JSX + easy-to-understand component model have made React a winner to me.

I've been tweeting a lot recently about React recently. After doing a lot of Angular 2 work for the majority of 2016 including a successful workshop at a few conferences, I started learning React early this year and was instantly hooked. A friend of mine wanted me to show him what all the excitement was about, and, well:

...which caught the attention of a Twitter friend of mine, Adam Morgan. He asked to see a repo - I said, let's do one better and make a video, which you can find here:

In the video, I walk through the three things that really make React stand out to me over Angular 2, with questions and commentary from Adam. The long and the short of it:

  1. JSX is awesome. As Cory House wrote: "it’s more logical to enhance JavaScript to support markup than to enhance HTML to support logic." Plus, compile time checking of your views makes writing components a much easier process.
  2. It's just JavaScript. No need to learn any framework-specific DSLs like with Angular/Angular 2/Aurelia/etc. You only need to know JavaScript and HTML to write React apps.
  3. Low API surface and learning curve. Fewer moving parts means it's easier to understand and become productive with quickly.

Here are some of the resources I've used to get started.

Building Applications with React and Redux using ES6 - Pluralsight course by Cory House
Presentational vs Container components by Dan Abramov Getting Started with Redux - course by Dan Abramov, creator of Redux
React Slingshot - React starter kit by Cory House
ASP.NET Core SPA Generator/Starter Kits, which includes templates for React and React with Redux.

International speaker achievement unlocked + Quick note on NDC

It was a huge moment of pride in October when I received my Microsoft MVP award. It was as big a moment when I got my acceptance to NDC London to speak on RESTful APIs using ASP.NET ten days later.

I'm thrilled and grateful that another one of my talks was picked up for the 10th NDC Oslo - this time on a maintainable RESTful API architecture using ASP.NET Core. It's really the sequel to the talk I gave at NDC and several other conferences/user groups last year. I'm moving beyond the theoretical and diving into implementation of a API architecture that I think is maintainable for the life of your API.

I wanted to take a moment and thank NDC for giving me a chance to present at not only one but two conferences this year. As far as conferences go, NDC has the whole package - they have a content lineup that is unrivaled and go out of their way to make their attendees and speakers feel loved.

I'm told that NDC takes chances on newer speakers. For taking a chance on this new speaker from my little corner of the Midwest, I'm very grateful. You've created an eternally loyal speaker in me.

This is going to be an exciting year.

Cloud and web-based software consulting - announcing Aviron Software

Aviron Software logo

I'm so excited and pleased to announce the formation of my software consulting company, Aviron Software.

It sounds cliche, but this has been something I've dreamt of doing for a long time. I'm very grateful that the opportunity presented itself and I'm so proud and pleased to let this blog post be my ribbon-cutting.

Aviron is a French word meaning "rowing". The word is meaningful to us because it directly reflects Aviron's goal - to move our clients forward by providing best-in-class cloud- and web-based software solutions. Oars may or may not be involved. :)

As usual, there are many people to thank, but a couple of folks stand out. Above all, my wife Susan, who has supported this dream and is ready to step into the role of being spouse to a small business owner. And of course my good friend Jeff Strauss, who has provided critical direction and advice for the formation and maintenance of a fledgling software consultancy.

Interested? Get in touch: hello@avironsoftware.com

Road to my first Microsoft MVP Award

Today, the new Microsoft MVPs were announced. I am extremely grateful and humbled to be accepted into this prestigious group of individuals. My MVP award is for Visual Studio and Development technologies.

I started this blog on August 4th, 2014 (also my wedding anniversary) and opened with what remains my most popular post of all time - a post saying that Xamarin, then a paid product, should open up Visual Studio integration to those on its Indie subscription plan (oh how times have changed.) 10k hits on a blog's first day open is nothing to sneeze at. So I kept at it.

The turning point was a post I made about DevUp (then St. Louis Days of .NET) with some suggestions about how they could make their conference better. It caught the attention of the organizers and led to a lunch with Jeff Strauss and Scott Spradlin, two of the three on the board of DevUp, in early 2015.

I asked how I could help them and get involved. Scott said, well, we're always looking for speakers.

And so it began. I signed up to speak at a few small things around town - the Microsoft store (for an audience of 5 people!) and the user group. A couple months later, I was accepted to ThatConference 2015 speaking about Xamarin and SignalR. (I was told later to be an unknown and get into ThatConference is an accomplishment, so I have to thank my title and abstract for being so compelling. :) I was pleased to do the same talk at DevUp 2015 and spent the rest of the winter blogging here and there and doing some very minor open source work.

With the help and encouragement of my wife Susan, Jeff Strauss, and my company, I've kept submitting and getting accepted to different conferences, starting with Chicago Code Camp in April. This year, I've spoken to over 1,500 people around the country in various sessions, including three full-day workshops. By November, I'll have spoken at seven conferences and three user group meetings this year alone.

And now here we are - my very first Microsoft MVP award. I have a few individuals to thank for this award – they helped me tremendously in some way throughout this process.

My wife, Susan – none of this would be possible without your love, support, and encouragement. When I started this journey, I knew I was asking for a lot from you and you stepped up in a big way so that I could travel, speak, and blog. I can’t thank you enough for helping me achieve this. And of course thank you to my children Nick and Lucy for being great kids and tolerating my semi-frequent absences while going to conferences and user group meetings.

Jeff Strauss – you’ve been an incredible friend and mentor during my process to becoming a speaker and getting involved with the community. I can’t thank you enough for your advice, insights, and encouragement. No one has done more to make me feel welcome and help me grow as a speaker, community member, and software developer.

Tom Stemm, Nick Smarrelli and Joe Gadell – I told these guys when I was hired two years ago that I wanted to get involved with the community. They were right behind me, supporting me by sending me to conferences on Ryvit/GadellNet’s behalf. I couldn’t ask for three better guys to run our awesome companies and support their employees in achieving their goals.

Jonathan Mills – you’re a great friend and advisor who allowed me to speak at KCDC and connected me with other conferences around the country. Thanks for mentoring me throughout my speaking career.

Scott Spradlin – thanks for letting me speak and help with your awesome conference and user group. I hope I can help you continue to make an impact on the St. Louis .NET community.

Cory House – you’re the first speaker I saw at a conference where I thought, wow, that guy really knows what he’s doing. After ThatConference/DevUp 2015, I helped jump-start my speaking career via your speaker starter kit and haven’t looked back. You’ve given me great advice on how to be a better speaker and it’s been great to get to know you this year.

Adam Barney & Ken Versaw – even when I was still somewhat unknown, you took a chance on me for my first multi-day conference of 2016, Nebraska.Code(), even allowing me to do an 8-hour workshop that I had never done before. That was something special. I can’t wait to be part of more Amegala conferences in the future.

Gaines & Mary Kergosien – I'm so thankful to have been a part of Music City Code. Thanks for welcoming me in and being so hospitable. You really go out of your way to make the community feel like they’re part of something special.

Lisa Anderson - my MVP lead - thank you for selecting me for the MVP award. I'm looking forward to making even more contributions in 2017 and beyond!

Scott Hanselman – you were part of my inspiration to become a bigger part of the community. Your blog is a staple stop on my daily reading list. Your tools list has saved me hours of time. Thanks for everything you do.

Taiseer Joudeh - I read your blog post about becoming an MVP in 2015 and remember wanting to get more involved after reading it. Your posts on ASP.NET and Angular are top notch and I've learned a ton from you.

My Essential .NET and Web Tools and Frameworks - 2016

This is routinely the post that brings the most traffic to this blog, so I thought I’d update it for 2016. All new items are bolded.

Here is my (mostly) comprehensive list of tools I use for development, either at home or work.  It’s like Scott Hanselman’s, but focused almost purely on development, with a couple of extras.  While you’re at it, go check his out.  All opinions are my own and are not bought or sold.

The Main Stuff

Visual Studio – king of IDEs and the essential tool for .NET devs everywhere. Not much else to say except that it has a great starting toolset for any developer and amazing plugin support.  The Community edition gives the masses the power of the Professional SKU, for free.  Simply amazing and getting better with every release.

Visual Studio Code – Microsoft's cross-platform IDE has taken the lightweight-yet-extensible text editor world by storm. I use this on my Mac for developing ASP.NET Core apps, writing Markdown files, and just editing plain text files. Has almost totally replaced my use of Notepad++. The plugin system and rapid development turnaround is going to threaten the paid alternatives in a big way (Sublime, I'm looking at you).

Node Package Manager - best tool for installing your command-line dev tools and front-end frameworks. I use it in conjunction with Visual Studio and Visual Studio Code to do development across several stacks, including WebForms apps that I support.

SQL Server Management Studio – it ranges from a useful IDE for SQL to a huge time saver for things like table creation and script generation.  The DROP and CREATE tools are awesome for generating scripts for tables, stored procs and more.

LINQPad – the best .NET code scratchpad on the market. It's not just for writing LINQ queries - it's   It’s not a complete replacement for SQL Management Studio, but for complex queries with lots of data, it’s my first choice.  The Premium edition is a steal and makes this essential tool 5 times more useful with C# autocomplete, NuGet, cross-database query support, and debugging.

NimbleText – thanks to Scott Hanselman, I have found this program – and my new favorite way to write repetitive code or handle small or large data transformation tasks.  I’ve used it from everything from writing HTML to generating SQL insert scripts.  Its time-saving power cannot be overstated.  And, it’s FREE!

Fiddler – the essential tool for viewing and diagnosing HTTP requests that are happening on your machine.  Turn on SSL decryption and see previously-unknown HTTPS requests decrypted before your eyes.  Use it to view incoming and outgoing HTTP requests in real time.  Turn it into a proxy and send a device’s HTTP requests through it to test devices within your network.  Replay captured HTTP requests with its Composer system.  Fiddler’s amazing abilities cannot be overstated.  It’s helped me diagnose and fix more problems with HTTP services than any other tool.

dotPeek – my favorite way to decompile .NET code, free from JetBrains.  It even has the ability to break a .NET DLL/EXE down into a fully-structured Visual Studio project!

Postman (Chrome extension) – my second-favorite way to test HTTP services is Postman.  Postman has an easy-to-use interface and provides a straightforward way to make HTTP requests.

Google Chrome – I used to use Firefox exclusively, but stopped after it started feeling bloated, buggy, and crash-happy.  Chrome’s dev tools are better than Firebug, which I also found to be frustrating and slow.  Plus, it has much better plugin and app support.

PowerShell - easily the best scripting language on the Windows platform. Great scripting plus the power of the .NET Framework at your disposal when you need those extra awesome features. Also, recently made cross-platform!

Visual Studio add-ins

ReSharper – perhaps the most essential tool for .NET devs around the world.  Amazing refactoring that puts Visual Studio’s default refactoring capabilities to shame.  Code generation that makes writing constructors, methods, or pretty much anything a snap.  Search tools that makes navigation through code effortless.  A built-in test runner that makes running and viewing tests a breeze.  A code analysis tool to help you find mistakes and potential pitfalls in your code.  Built-in added support and intellisense for common frameworks such as ASP.NET MVC.  It is truly the god of all Visual Studio plugins.  Go download it and tell your friends.

OzCode – if you’re a C# developer, you need OzCode.  It turns debugging from a necessary chore to a borderline delight.  Break down code expressions, highlight the most needed data in an object, compare data between two objects, find all objects of a given type in memory, and exceptional exception handling make OzCode a star – and that’s just the tip of the iceberg.

Web Essentials – a great tool by Mads Kristensen of Microsoft – it’s his personal testbed for new web-based Visual Studio features.  Features things like quick HTML typing using ZenCoding, a link between the browser and Visual Studio for seeing immediate changes to your changed HTML/CSS, better Intellisense for CSS/HTML/JavaScript/Angular, and so much more.  Install it and watch your productivity in web development go to 10.

GhostDoc - best way to quickly write your XML code comments. Makes it so easy to annotate your code with comments about the code you're writing.

Source control

Git - the favorite source control solution for tons of developers. So prevalent that all recent Microsoft open source code is published to GitHub instead of their own internal SCM, Team Foundation Server. Most powerful learned with the command line or using tools such as...

SourceTree – a great visual tool for Git users.  Not perfect, but very helpful.

Languages

C# - my preferred backend language since the start of my career. So much power and ease in the language and in the .NET Framework. Made even more relevant with the recent introduction of .NET Core.

JavaScript - famously called the machine language of the web, it's the most critical language for any software engineer of all disciples and skill levels to master.

TypeScript - my preferred language for all JavaScript development I do. Embraces the weirdness of JavaScript while adding awesome features like a better type system, interfaces, and all of the features of any flavor of ECMAScript.

F# - simply the best .NET language in existence, F# is one of the best functional languages for any programmer to learn. Learning this will make you a better programmer no matter if you stick with object-oriented for the rest of your career.

Elm - Elm is both a functional language and a web framework. More functionally pure than F#, Elm boasts a lack of null, total immutability, and a promise of NO RUNTIME ERRORS, EVER. What other web/desktop/mobile framework/anything have you heard promise something like that?

Hosting

Microsoft Azure - the no-brainer hosting solution for .NET developers and, well, any developers for that matter. Runs Windows as well as it runs Linux, Unix, you name it. Amazing interface and tons of power - even has a RESTful API that you can use to spin up and maintain servers.

Frameworks

Web

ASP.NET Web API – built on top of MVC, Web API makes spinning up an RESTful API a breeze.  Host it in IIS or self-host on top of OWIN (this works great with Topshelf.)  Use it to power everything from your mobile app to your single-page application, powered by your favorite JavaScript frontend framework.  Versatile and fun to use.

Angular 2 – my SPA framework of choice. Simpler and faster than Angular 1. Very batteries included compared to React. Get started quickly and create awesome web apps around components using an easy-to-learn templating system. Combine with TypeScript for an awesome development experience.

React - amazing view library which has gotten a ton of love in the last couple of years. Combine it with your tooling of choice to create awesome web apps that scale well from a codebase perspective. Write your views in JavaScript using JSX and put the power of your HTML into your JS, as opposed to the other way around with Angular.

Redux - the Redux state container has emerged as the pattern/framework of choice for creating web apps using React. Extremely simple to understand and with a low API surface area, which means you can get started really quickly. Combine with Angular 2 using ngrx, a framework designed around the Redux pattern.

SignalR – the easiest and most powerful way to create an excellent realtime experience for the web or anything that can connect over HTTP.  I personally used it to power realtime text message communications between a Xamarin-powered mobile app as well as a desktop app.

Elm - Elm is both a functional language and a web framework. More functionally pure than F#, Elm boasts a lack of null, total immutability, and a promise of NO RUNTIME ERRORS, EVER. What other web/desktop/mobile framework/anything have you heard promise something like that?

Mobile

Xamarin – I don't do mobile anymore, but this was my personal favorite way to create an awesome mobile experience using the C# dev stack.  Completely free from Microsoft.  Use Xamarin.Forms to create mobile views for all major mobile platforms and share a 90% common codebase.

Data access

Entity Framework – my favorite way to access a database, period.  Use LINQ to communicate with your database, create your data views using attributed POCOs and easily update your model with Migrations.  It’s not for everyone, but it’s fast enough for most use cases and getting better every day.

Dapper – when I want a way to quickly access a database using SQL, Dapper has my back.  Deceptively simple API for what turns out to be a very fast way to access data.  Powers the data access layer behind StackExchange, one of the highest traffic websites on the planet.

General

Newtonsoft.JSON – the standard for JSON serializing and deserializing in .NET.  Used everywhere.  Go and buy him a beer – James Newton-King has made all of our lives easier.

TopShelf – when spinning up a Windows service using .NET, nothing is faster and easier than TopShelf.  Utilize its Fluent API to quickly and painlessly create a Window service, fast, in a manner that’s self-documenting.

RabbitMQ – when you need a reliable messaging queue for your suite of applications, RabbitMQ is a strong choice.  If using .NET,EasyNetQ makes the experience that much easier – it abstracts the most difficult parts away into message passing via POCOs.

Underscore.JS – my favorite JavaScript framework for object manipulation and collection traversing/ transformation.  It’s not as nice as LINQ, but it has a decent chaining syntax and is very feature-complete.  Lodash is another alternative that is drop-in compatible with some extra functions.

Moment.js – Dates in JavaScript are harder than they need to be.  Moment.js makes it that much less difficult by providing a simple and powerful date API.  Usually my second web project add-in (first being Underscore, of course.)

Little stuff

F.lux – changes the color temperature of your monitors at night.  A small thing but makes night programming much easier on the eyes.

Paint.NET – a fast, free paint tool written using .NET.

WinRAR – my choice for compression.  Yeah, I know Scott Hanselman recommends 7Zip, but 7Zip’s context menu requires two clicks – WinRAR’s only requires one I'm codger-y and like WinRAR. (Thanks for all those who pointed out that, in fact, you can configure 7Zip's context menu to require one click.)

Treesize Free – a great cleanup tool for those who have constrained hard drive space.

LastPass – a wonderful password manager that makes managing logins a much easier endeavor.  When you’re in IT, you know how crucial it is to keep track of passwords and LastPass makes that much much easier. 

Reddit– I subscribe to r/programming, r/dotnet and a handful of other useful programming-related subreddits.  Useful for a quick mid-day browse when you need to look away from Visual Studio for 5 minutes.

Hacker News – not necessarily programming focused, but it has some interesting tech-related topics.  I just started reading this recently.  Clearly, I’ve missed the party for a long time.

StackExchange– if StackExchange doesn’t have an answer to your programming question or problem, then you’re probably on your own.  Learn from the wisdom of others’ mistakes and find quick, elegant solutions to your programming problems.  Chase down those obscure exceptions.  If you haven’t used it, then you’ve never used Google to solve a problem.

Scott Hanselman’s Blog – Scott Hanselman is my main man.  His blog posts are always interesting and valuable and his contributions to the Microsoft dev world cannot be overstated.

Dew Drop – my favorite link aggregation site.  It’s my daily morning check.  (Morning Brew isn’t as comprehensive, but is still a decent resource.)

Communication/speaking/branding tools

Twitter - the best way to communicate with other professionals in your industry in a meaningful way.

Ghost (blogging platform) - recently replaced WordPress in my life. Ghost focuses on one thing and one thing well - creating a great blogging experience. I love the use of Markdown over a WYSIWIG editor. I love its pure speed over Wordpress.

Keynote/PowerPoint - two great tools for creating presentations. Avoid going overboard on the text though - I find that slides with a single thought/image/code snippet works best.

Trello - helps me keep track of all of my speaker submissions, my current talks, and any conferences I want to submit to. Useful for so much more.

Camtasia Studio - my favorite tool for recording screencasts and demonstrations. Expensive, but worth it if you do this kind of thing a lot. Open Broadcaster Software (OBS) is a free alternative.