Codemash 18.104.22.168: My Exhaustive Week
Codemash 2016 was one of the best conferences this year. Today, I cover the sessions and workshops I attended from last week.
Codemash last year was quite enjoyable and thankfully, I was able to go back again this year.
If you ever get the chance to go, I would highly recommend going.
Codemash is broken down into two sessions over the week: The PreCompiler and Regular Sessions.
The PreCompiler (Tues-Wed) is meant for developers who want to learn more about a certain topic through hands-on training. You absolutely need a laptop for these workshops. These workshops last for 4 hours (sometimes 8 if there's a part two in the afternoon).
The Regular Sessions (Thur-Fri) are hour-long sessions all day. For those, you just need a pen and paper for note-taking, but tablet/laptop doesn't hurt either if your battery can take it.
Let's get started with this week's sessions and workshops.
8:00a-12:00p - Let's Build a Hybrid Mobile App! By Kyle McKee (@mckee_kyle)
1:00p-5:00p - AngularJs? Ember.js? What if you could learn both at once? By Nathan Kellermeier (@nkellermeier) and Dustin Hoffman (@dw_hoffman)
This was considered a double workshop in my opinion.
The workshop was structured with each person covering their slides and explaining what they would cover along with a tutorial.
For the first half of the workshop, one would go over the slides for the Angular app and then provide the developers with an Angular tutorial to create a Notes application.
The second half of the workshop covered the Ember slides. Following the slides, they instructed the developers to follow the Ember tutorial to build the exact same Notes application in an Ember fashion.
While they didn't cover the similarities between Angular and Ember, this was one of those workshops that was prepared way ahead of time (of course!) and provided a lot of feedback based on the developers building it themselves which was a great idea. If there was a problem, grab one of the experts to come over and ask them for assistance or "what did I do wrong?"
Definitely a great workshop for comparing the two frameworks.
8:00a-12:00p & 1:00p-5:00p - Tune SQL Server Like A Guru! Part 1 & 2 By Kevin Boles (@TheSqlGuru)
One thing about this workshop was the amount of information given to us in such a short period of time (and yes, it was eight hours long).
When the majority of users sat down and took out their laptops, we were immediately bombarded with a flurry of SQL Server statistics, server data, techniques, and advice.
After typing as fast as I could, I decided to check the time.
It was only 9:10a.
My brain was already full and only an hour went by.
This workshop was extremely intense with the amount of information was like taking a sip from the firehose.
At my last job, we brought in one of Brent Ozar's associates to assist with our SQL Server administration and we had a week of extreme tutelage on how to optimize SQL Server and write SQL queries.
This workshop with Kevin Boles reminded me of that day, but I forgot how much I forgot.
Overall, this was one of the best workshops at Codemash this year. By the time it was over, I talked to a number of people afterwards and they said that their brains were fried from information overload. Even Kevin posted a tweet about him overhearing some people when he finished the workshop.
INCREDIBLY positive feedback from my #CodeMash2016 sessions! Fav: I'm enjoying this firehose of information disguised as a CodeMash session— Kevin Boles (@TheSQLGuru) January 9, 2016
As you can see, quite impressive!
8:00a-9:00a - Is Your API Leaking? Breaking API's to Increase Security By Joe Kuemerle (@jkuemerle)
Joe started out by mentioning that no web application is secure.
This was mentioned to me as well in a past life: Place as many obstacles or deterrents as you can in the path of a hacker.
He also discussed the steps to become a little more secure.
- Get a legitimate certificate for your site
- Use Qualys SSL Labs - they present a report card for your website letting you know how secure your certificate is.
- Use a pentester (penetration tester) to hit your website.
- Tools to use
- Fiddler by Telerik
- OWASP Zed Interceptor
- Tools to use
He also gave us a demonstration on how to use fiddler to intercept a Web API call using a proxy.
Definitely a good session.
9:15a-10:00a - Building Angular 2 Apps with TypeScript By Bill Wagner (@billwagner)
In this session, Bill demonstrated how to create an Angular application with TypeScript. Since he loved the Grateful Dead, he decided to make an app to show all of the concerts they performed.
This was a great session to see how everything worked together and when he finished with a particular piece of the app, he would explain what it was doing and move on to show additional features and implement those as well.
A couple notes I jotted down was:
- Why TypeScript?
- More Productivity
- Static Type Analysis
- Language Tool Support
- Manage Large Code Bases Better
- Why Angular AND TypeScript?
- Angular 2.0 was built using TypeScript
- TypeScript uses ECMAScript 6
- ECMAScript is the latest standard
- However, all are moving targets so standardize on a grouping of versions that actually work together instead of against one another.
The code he used is located at https://github.com/billwagner/typescriptangular2
10:15a-11:15a - Microservices: Beyond the Hype - Eric Kepes (@ekepes)
The discussion of web services is quite a buzz nowadays, but not as much as microservices. Eric provided a great overview of what microservices are and how they are used in today's industry.
His definition was:
A system broken into smaller parts, which
- Encapsulate a well-defined business context
- Are deployed independently
- Communicate loosely over known channels using well-defined interface specifications.
Another thing he mentioned was that microservices "cut both ways":
- In Microservices, the team members need to understand distributed systems.
- In Monolith applications, the team members need discipline to keep things apart.
There were various architectures for microservices as well. A couple mentioned were the Actor Model (http://blog.scottlogic.com/2014/08/15/using-akka-and-scala-to-render-a-mandelbrot-set.html), Lambda Architecture (https://commons.wikimedia.org/wiki/File:Diagram_of_Lambda_Architecture_(generic).png), and the Kappa Architecture (http://radar.oreilly.com/2014/07/questioning-the-lambda-architecture.html).
He finished off the session explaining that you can have a monolith of crap and/or you can have smaller microservice versions of crap.
11:45a-12:30p - Going Responsive - Robert Cochran (@cochrarj)
If you haven't moved to Responsive Design by now, you need to get into responsive design now.
In this session, Robert reviews with the audience how to fix a site to become more responsive with a website example he made.
Some of the signs of a non-responsive site include:
- Overlapping text/elements
- Hard-to-click controls (my thumb is waayyyy too big to push that button)
- Having to zoom in to read something
- Modal popups that can't be removed (the 'X' is off the device's screen)
Of course, he covered all of these topics on his fake website and demonstrated how to tackle the easy, medium, and hard jobs to make the site more responsive.
The session was definitely a great overview if you were new to responsive design.
1:00p-2:00p - Introducing the New ASP.NET Authorization and Data Protection Stacks - Barry Dorrans (@blowdart)
At first, I went to a different session besides this one and 15 minutes into that session, I left and proceeded right to this one.
From what I witnessed in this session, I wish I went to this one first.
This was an awesome session with tons of content to digest. Barry conducted a great session about what the new version of Identity/ASP.NET Authorization gives developers.
His GitHub account is probably the best place to send you in regards to his presentation. Focus on the ASPNETAuthorization-Samples and ASPNETAuthorizationWorkshop repositories. If you are interested in his Codemash 2016 slide deck, check out his site on idunno.org
2:15p-3:15p - (Vendor Session) Intelligently Extracting Data from PDFs - Matt Kuznicki, CTO
This vendor session intrigued me because of the amount of PDFs we have at our site.
Matt went over briefly how to identify the data inside the PDF and how to extract it using their DataLogics software called PDF Alchemist.
This was mostly a curiosity of mine. Of course, you need to buy their software to extract data from the PDFs.
It's not like he would teach us the secret sauce on how to do it ourselves.
3:30p-4:30p - Load testing your whole web application in VS: A case study - James Bender (@JamesBender)
James Bender gave another great presentation this year on how his team successfully performed load testing in Visual Studio 2015.
His presentation last year about AngularJS for .NET Developers was exceptional, so I expected no less from him this year.
He reviewed how load testing should occur at the very beginning of development instead of near the end.
Why, you ask?
Of course, your code will be really fast in the beginning and nothing will go wrong, but what happens when on one day, you come in and the system comes to a complete crawl. You can always go back that one day and ask what code did someone check in to make this process slow?
If you are doing load testing at the last minute, what do you compare to your last performance? You need a baseline to compare your current performance with what happened yesterday...or the day before.
He also recommended that instead of having 2500 users hitting a server all at once, break the groups into a lower number (like 500 with 5 different machines). It'll provide a better estimate of what your site can handle with a more realistic approach.
He did a fantastic job with his session and did not disappoint.
8:30a-9:30a - ASP.NET 5: How to get your cheese back - Tugberk Ugurlu (@tourismgeek)
Tugberk gave everyone a great introduction to ASP.NET 5 with Visual Studio Code. He explained the new project structure to everyone with the JSON format as opposed to the XML we are all accustomed to in the web.config.
He also told everyone the advantages of the new JSON project structure:
- No more conflicts on .csproj
- Your sanity is preserved
- It's more aligned with other development ecosystems instead of a proprietary MS way of doing things
- Easy to work with client-side assets like images, scripts, and CSS. You can drag them into a directory and they are automatically included by default instead of excluded by default and you have to add them.
- The webroot concept makes it easier to for a separation of concerns.
For the new folks in the crowd, he also mentioned the different types of utilities available for ASP.NET 5.
- DNVM = .NET Version Manager
- DNX = .NET Execution Environment
- DNU = DNX Utility
So if you wanted to get a list of .NET versions on your machine, you could type:
And then, if you wanted to use a particular .NET version, you would type:
DNVM use <version>
I like how he broke everything down of what to expect with the new ASP.NET 5.
9:45a-10:45a - Designing with C.R.A.P. - Caitlin Steinert (@csteinert)
Caitlin's presentation was geared towards designers and how to use C.R.A.P. to design your pages.
- C - Contrast
- Use Sparingly
- Don't Be Shy
- R - Repitition
- Builds Trust
- Enhances Comprehension
- Don't insult your Audience
- A - Alignment
- Guides the user's eyes
- Has varying degrees of strength
- Compelling when broken
- P - Proximity
- Implies relationship
- Will be inferred regardless
This acronym was taken from the book from Robin Williams (no, not that one) called The Non-Designer's Design Book (Aff. link).
She also mentioned a great quote.
"Design is the Rendering of Intent" - Jared M. Spool
A great quote and excellent presentation, Caitlin!
11:00a-12:00a - Planning Web Services for the Enterprise - Gaines Kergosien (@gainesk)
Gaines gave a good presentation on how he implemented web services for a company.
This session seemed to be more like a case study and general good practices for using web services. His presentation was a little short, but it seemed the audience wasn't participating enough to warrant a longer session.
Overall, it was pretty good.
This was another one of my favorite presentations. Jared is a great and entertaining presenter and provides truly valuable material.
He discussed the Let and Const statements and also covered scope, the fat arrow (=>) syntax, easier promises, default parameters, and prototypical inheritance.
Jared had a number of great examples for everyone to get a taste of what's to come with ES2015.
Loved the session, Jared!
1:30p-2:30p - How to Apply the Open-Closed Principle - Dustin Williams (from Manifest Solutions)
For those who were interested in learning the 'O' in SOLID, this vendor session was definitely a great hour of refactoring code into reusable components.
Each piece of code was a different language, so no one language was picked on.
Basically, if you see a if..then statement or switch statement, that is a great candidate for refactoring into a maintainable piece of code.
I've mentioned this before as well with some of my Real-World Refactoring articles I've posted.
I also mentioned if anyone was interested in continuing their refactoring journey even further, they could pick up the book called Refactoring To Patterns. It's one of my top ten books for .NET developers.
2:45p-3:30p - Concentrate on Coding: Automating Everything Else - Timothy Corey (@IamTimCorey)
Tim gave a great presentation on Jenkins, the open source extensible automation server.
While I have a Jenkins server setup in my basement, I didn't take it to this level of automation. There are a ton of plugins you can add to Jenkins.
He explained a number of automation plugins to make your work so much easier when you check code in, it can trigger IFTTT actions, create release notes based on your version control commit messages, run your unit tests, and even email interested parties based on whether the build process succeeded or failed.
If you want the slides from his presentation, you can text message DEPLOY to 44222 and he'll send you the slides.
I will definitely be implementing these techniques on my server in the coming weeks.
4:00p-5:00p - Cross-Platform Desktop Apps with Electron - David Neal (@revenentgeek)
It never occurred to me, but I started Codemash with the ability to create cross-platform hybrid apps and ended on cross-platform desktop apps. Scary, huh?
This session was definitely eye-opening because of David's experiences with creating cross-platform desktop apps.
First, he tried .NET with Mono and Xamarin.
The only pro to using it was a Shared .NET code base.
The cons were:
- Xamarin Mac !== Xamarin iOS/Android (they were too different)
- The native UI is way too hard
- Deployment was a pain
- Licensing for Xamarin was extremely expensive
Then he tried Electron
- HTML, CSS, and JS
- NodeJS and Chrome
- No Deployment Dependencies
- HTML, CSS, and JS
- Native modules in C/C++
Some of the features of Electron includes:
- Rapid Development
- Shared Code/UI
- Deployment and "Silent" updates
- Native UX
He continued to mention that Electron apps are becoming VERY popular. He rattled off a few and I was amazed.
- Visual Studio Code
- Wagon (SQL Edition)
- Nylas N1
I was absolutely floored when he mentioned these applications. The desktop app of Slack and Visual Studio Code is mind-numbing itself. Both were built using Electron. How cool is that?!
While this is an awesome solution, I don't have a problem to solve with it yet.
This was a great session as well. Thanks a lot, David. This was great stuff!
After all of the sessions and workshops, I could not pin down a specific trend for this year.
That is saying a lot. Of course, there was a number of Angular and React sessions, but again, there were so many great sessions during so many great sessions, it was hard to pick just one. I even missed lunch on Friday because of two sessions. :-|
As I left on Saturday, I had my customary last taste of the Kalahari and was absolutely exhausted and headed home.
With everything I learned, I quote the president of Codemash, Brian Prince: "My brain is full."
While not all of the sessions and slide decks are there, there is a github repository located at https://github.com/TechConf/CodeMash2016 for those looking to see what they missed.
This Codemash was great and definitely tiring. There was so much to do during and after hours.
It was great to see all of my old friends and meeting some new ones as well.
Here's hoping I can make it to next year's Codemash!