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.

Heartland Developer Conference 2016 Wrap Up

Another day, another conference - the fifth for me this year! I can't tell you how excited I am to continue my speaking career, and my latest stop was Heartland Developer Conference in Omaha, NE.

I was asked to submit to this one last-minute and was thrilled to have my Angular 2 and TypeScript talk accepted, along with a brand new talk on the Elm programming language, which is by far my new favorite frontend web framework (gasp!)

My talks

I did my Angular 2 and TypeScript talk to an audience of about 150. One challenge I faced was cutting it down from an hour to 45 minutes, but I ended up having a bit of time to spare. I spent some time beforehand improving my slide deck to cut out the excess words and rely on visuals or a key phrase.

One thing that I learned that I did early in my speaking career was using my slides as a crutch, e.g. I'd use the bullets to know what to talk about next. A friend told me that this is normal for new speakers, but I knew I wanted to do better. I really worked to eliminate this, because wordy slides aren't the ideal. After doing my Angular 2 talk for so long, I was pretty comfortable with the content and so it didn't take me much practice to deliver it without the wordy slides. Success!

The talk that I did on Elm was my proudest yet. I worked really hard to dial this one up to 11. The strategy/style for this talk was a mixture of some of my favorite speakers - Cory House (be entertaining, focus on selling the idea, and don't do live demos) and Jay Harris/Jeff Strauss (know your slides really well, transition naturally, and make your slide deck absolutely beautiful!)

Overall, I did a pretty good job, but I knew after I finished that I need a stronger closing. I also unintentionally rushed a bit, so I ended up with some extra time. One of the great benefits of being in the speaker community is the feedback you get from your peers. I was thrilled that Cory House was attending HDC, so I asked him to come to watch my Elm talk and critique it. He went so far as to take notes and was very thoughtful on things I could improve on. My friends Jon Mills and Ken Versaw also had some great suggestions. I can't wait to use their feedback to make my talks even better.

Session highlights

I wasn't able to attend any sessions this time, which really bummed me out, but hey - duty calls! However, I did catch the end of a couple of talks that were very popular. Namely:

Jon Mills' excellent talk on Habits of Highly Effective JavaScript Developers. It was the most popular session at the conference according to the conference software, which is awesome!

Heather Downing has cornered the market on unique talks in the mobile development space, including one on using beacons.

Finally, Cory did a great session on scalable JavaScript. I saw this one at KCDC and it's both entertaining and informative.

Events

The MESH party was a ton of fun and the food was great. Awesome venue, good friends, and even a HoloLens to play with!

Conclusion

This wasn't a stop I was planning on making in my speaking travels, but it was a totally worthwhile one. I had a ton of fun and the tech community in Nebraska is awesome. If I have the opportunity, I'll definitely be returning next year!

Switching from WordPress to Ghost on Microsoft Azure

A couple of weeks ago, I decided to transition my blog from WordPress to the Ghost blogging platform and I wanted to talk about that experience.

I recently went to my friend David Neal's website and found it to be simple, clean, and attractive. I found out that his blog was run on Ghost, a blogging platform that runs on top of Node. After doing some Googling, I decided that I would make a test website on Azure and see how I liked Ghost.

After setting up the website and tweaking the theme that I found, I had another couple people look at it and they thought that it was an improvement over my WordPress-based site. So I decided to go ahead and make the switch. Here are the steps that I took to do so.

  1. First thing's first: I had to find a hosting platform for Ghost. The official Ghost site offers one for $19 a month but I decided that was more than I wanted to spend, so I decided to reach into the Azure credits I get as an MSDN subscriber.
    I found a GitHub repo that allows you to set up your Ghost blog on Azure with just a few clicks. I cloned the repo so I could customize it and then set up my Azure site. I really like the Azure interface - there is a lot of power behind it - so that's what I'm going with for now. Scott Hanselman has a more detailed writeup on installing Ghost on Azure.

  2. I wanted to make sure that I exported all of the posts and pages that I had in my Wordpress site with all the links intact. This was not very difficult, but it was a bit time-consuming to tweak everything.
    First, I installed and ran a Wordpress plug-in which exported the contents of my blog to a JSON file which Ghost could use to import all of my old data.
    One thing that is different about Ghost is that it uses Markdown on top of HTML to render the posts, which I really like. The plugin exported my WordPress information and try to convert it to Markdown as best it could. It wasn't perfect and I had to go through post-by-post to tweak them and make sure that the HTML and the Markdown play nicely together.
    As anybody who's ever used a WYSIWYG editor knows, the HTML that is emitted is sometimes a little strange and this was no different. I just had to go through and edit and make sure that all of my HTML was correct.

  3. Another thing that I had to go back and redo were my posted code samples. They were originally contained inside of a WordPress plugin that would render them with proper syntax highlighting. I switched to using GitHub Gists a while ago but didn't bother going back and converting all of my old samples. So, I had to go through some of my older blog posts and create Gists from all the samples.
    It wasn't hard, but it was a little bit time consuming. I'm a firm believer that you shouldn't house what you don't have to, and Gists are just one of the many things that GitHub does really well.

  4. I tested each and every link, including all of the page links and short links that I created for my website. Thankfully, I didn't have to do much tweaking here because the Ghost to WordPress plug-in took care of that for me. It was very seamless and this didn't require a lot of effort - mostly just double checking.

  5. Finally, I had to select a theme for my site. I really liked David Neal's blog theme, so I look for a theme that was similar. I found one called Phantom and tweaked it. It was very easy to set up the Ghost software to run on my local machine. After I had done that, I was able to run and configure the Ghost blog as I went. A lot of this stuff that I tweaked was just personal preference. I ended up reducing the size of the font a bit and adding in navigation, which was not there originally.

Overall, I'm very happy with the blog. However, this does not come without some things lost. Firstly, I lost my Yoast SEO plug-in. It's kind of unfortunate because it does such a good job of analyzing your post and making sure that it's up to SEO standards. I'm still looking for alternatives here, but I'm not that worried about it.

Another thing I lose is the awesome WordPress app. I really liked the app because it would give me notifications when people left comments and when there was a spike in my traffic. It also had a decent editor that I could use to tweak blog posts on the fly, but I didn't do that that much so it wasn't that important. You could say that I miss being part of the WordPress ecosystem because there was so much to it.

However, I really like the fact that Ghost is first and foremost a blogging platform and that's all it will ever be. Plus, I find editing it to be way less intimidating than trying to make WordPress do exactly what I wanted to, which is why I rarely tweaked the look of my site before. I also really like the deployment model. When I used WordPress, I never set up a separate site to test and tweak things because it was so inconvenient to do so. It was a lot easier to set up Ghost to run on my local machine, make changes, push those to a GitHub repo, and have Azure install the new files from my Ghost repo automatically.

Some of the things I don't miss are the WYSIWYG editor, which is great until it does something that you don't intend for it to do. For example, table formatting was horrible. It would always add custom styles to the table body, rows, and cells, which meant that I had to constantly go back and either remove the styles or edit them in a separate editor. I find using Markdown to be a lot more natural, and I'm not locked into Markdown - I can just as easily add HTML to my page.

Overall, very happy with the results of this change. I ended up with a cleaner looking website up that I can be proud of. What would I recommend for you? If you want to make a change and desire a simpler blogging platform, then I would recommend giving Ghost a shot. However, you do lose a few thing, so overall if you're happy with your WordPress blog, I'd keep it.