Music City Code 2016 Wrap Up

Music City Code in Nashville, TN was amazing.  This was its second year – it started as a one-day code camp and is now four (!) days – an agile conference, a day of workshops, and two days of regular sessions.  This was my first time there and I can’t tell you how awesome it was. I originally didn’t think that I would send in a talk, but decided to try on the very last day.  Lo and behold – two sessions and a workshop were selected!  And let me tell you, I’m glad I submitted.  Gaines and Mary Kergosien are incredibly gracious hosts who put on an amazing conference.  It’s clear that those two care deeply about the community.

My talks

First day was a day of workshops.  I gave my Angular 2, TypeScript and ASP.NET Core talk to the biggest group yet – just over 100 people.  The workshop was for the latest version of Angular 2 at the time (RC5) and everything went off (mostly) without a hitch.  Overall, the feedback for the workshop was great and I was very happy with it. The next day, I gave the firehose version of my Angular 2 workshop that introduces Angular 2 and TypeScript at a very high level.  Not much to say here other than it seemed well-received. My RESTful APIs talk had about 30 people in it which I was happy with since it was in the last session slot of the day on the last day of the conference.  This talk is always very popular and I was happy to close the day out with it because it’s by far my favorite talk to give.

Session Highlights

I went and saw Jay Harris’ talk on Designers for Non-Designers and it was awesome.  I learned a lot of stuff that I did not previously know about color and typeface.  (Also, his slides are amazing.)

The functional panel was really fun and informative.  On the panel was Bryan Hunter, a well-known functional programming expert.  He probably had the quote of the day.  (Fun fact – any time I tweet about F# or functional programming, it seems to get a lot of likes and retweets – this one was no different.)

Another talk I went to was Jeff Strauss’ excellent talk on modern development workflows backed by .NET, including using tools like NPM, Gulp, Kudu, WebStorm, and others.

The opening keynote by David Neal and Jeremy Clark was awesome and emphasized the importance of building relationships during conferences.  Jeremy gave a good piece of advice – Meet Someone New – which was kind of funny because Jeremy was the first person I met at Music City Code.

And of course:

I spent some time working and prepping for my talks, so I wasn’t able to make it to any other sessions.  Overall, it was a high-quality speaker roster and I know attendees got a lot of value out of the sessions.

Events

The speaker dinner was very nice – drinks, appetizers, and good conversation.  I got to meet several awesome new people and the venue was great.  The conference ended with a very nice attendee party.  The drinks were flowing and the food was great!  Not much else to say here except that it was awesome.

Some nice things

I can’t talk enough about how great Gaines and Mary are.  They really care about the community, but they take care of their speakers too.  Things such as:

Are all nice touches that make you feel appreciated.

Conclusion

Overall, I had an awesome time.  I consider it to be a must-see Midwest conference.  I got to meet a lot of great people and get to know some I’ve met throughout the year.  It’s truly been an amazing and humbling experience to get to go to so many of these conferences!  As always, thank you to my employer Ryvit for sponsoring me.

I'll just leave this here

Jeremy told me I should put this here. I guess I have quite an entourage.

RESTful API design - how to best represent child entities? - Ask Schneids

I recently got an email from a friend of a friend asking me to advise them on a REST API they were designing.  I’ll happily give you advice, I reply.  Would you mind if I posted it for others to benefit?  He replied, yes, go ahead!

I think I’m going to make this a regular thing and call it Ask Schneids.  Feel free to email me your questions (or contact me any way you like – just make sure to include Ask Schneids somewhere in the body or subject so I know it’s okay to post) and I’ll respond to them and post the answers to this blog.  I’ll make sure to remove any identifying information from the question before I post it.

Anyways, without further ado, here’s my very first Ask Schneids question regarding RESTful API design.  Comments and follow up questions are always welcome – if you disagree, leave a comment below so we can all learn together! 🙂


How do you best return related entities?

I’m starting on a major refactoring, you could call it a rewrite, and one of my goals is to create an “API first” application using ASP.NET Web API and Entity Framework.

Our data is highly relational and I’m curious how to best return those complex objects/relations in JSON.  For example “inventory” is made from entities: “items”, “locations” and “unit of measure”, along with other properties like quantity, last change date, user, and other attributes to identify that specific instance of inventory.  “items” and ‘locations”  both have additional properties and related entities, the usual: name, description, etc, but can also include a list of images, a list of item aliases, among other things.

Basically my question is: how much of the related entity should be included when “inventory” is requested?  Just an Id, include the “core” info from the entity, or include the complete entity?  Of course it depends. 🙂

Of course it depends!  It always depends. 🙂  Typically it’s going to depend on your consumer.  Sounds like the API is going to consumed by both internal and external users.  Consider returning only a subset (or the “core”) of the most important data in a call with a related entity and expose an API that allows them to get more data if they request it.  For example, your inventory object might return the Item name and description, but allow you to get the additional data from the Item API if they need it.

I always recommend passing data from domain objects (e.g. objects specifically tied to a database, such as Entity Framework entities) to dumb DTOs (like view models, but for API’s) that are simple property bags.  You can use AutoMapper to do this quite easily.  Check out the Model Factory pattern here for an example (but don’t create the ModelFactory class and write all that repetitive, boring code – just use AutoMapper!)


Should you get individual records with the database ID or some other kind of unique identifier?

This is a multi-tenant app, and with that I’m struggling with whether or not to expose and use the system Id to the end user (PK of the entity in the database).  A user creates an item: Widget101, of course it gets and Id from the database, say 2345. Do you get the item like:

api/v1/items/2345
or
api/v1/items/Widget101

Best practice is to allow them to get the object via the database ID – it’s meaningful to your system and simpler for API construction.  If you need to expose a way to get the Item using another identifier (e.g. Widget101), consider using OData practices ($filter parameter would be a good place to start.)  You can find more information on implementing OData in ASP.NET Web API here.


For more REST implementation best practices, I really like Microsoft’s REST API guidelines found here.  They’re very comprehensive and are a good starting point for any REST API developer (ASP.NET or otherwise.)

Follow schneidenbach

Emerging Speaker series: Bring the right equipment and don't be afraid to say "I don't know."

This is the second post in the series I call the Emerging Speaker series, where I continue to talk about my journey to becoming the best public speaker I can be.  Read the first post for context – this story continues where the first post left off.

After being accepted at ThatConference 2015, I set out to prepare the talk that had been accepted, Real-Time, Cross-Platform Mobile Apps using Xamarin and SignalR.  It was so exciting for me, but still extremely nerve wracking.  I had built an app using Xamarin and SignalR for my previous company and had a lot of fun doing so, so I thought that others might think it was interesting as well.  I wrote my code and slides and released the whole thing on GitHub.  (It’s terribly out of date now, but might be worth a look to someone.)

Spencer Schneidenbach at ThatConference 2015 I took this pic the night before my talk. It was a big moment for me!

August quickly came.  I arrived, got to my hotel, and started rehearsing my demo, when I realized that I didn’t have the right video connector for my laptop.  It was 9 PM when I realized this and my talk was at 10:30 AM the next morning.  I didn’t know anyone in the community at this point, so naturally panic came on fast and furious.

I Googled a few local stores, but most of them were closed at that point and wouldn’t be open in time the next morning.  The only place that might be remotely related was Wal-Mart, so I went there to look for a video connector (Mini-DisplayPort to VGA specifically).  Nope, they didn’t have any either.  I started to pace the isles, panic setting in more, when I looked at the computers and had an idea.

I’m not proud of it, but I ended up buying a laptop from Wal-Mart with the right video connector and returning it the next day after my talk.  I simply used the laptop as a dumb terminal by remoting into my Mac.

That was lessons four and five for me.  Lesson four, know what the venue provides and what hardware you need to bring.  The video cable was a big oversight for me and I should have known better.

Lesson five, *know someone to contact in an emergency speaking situation.  *I didn’t know anyone there and didn’t know who I could talk to.  I realized later that the conference organizer’s cell phone number was on the website the whole time – chances are he probably could have helped me.

Anyways, I setup both laptops and did my talk.  I was still really nervous beforehand – still breathing shakily, still sweating.  I did a power pose beforehand, which does seem to help me.  It went over well and was pretty popular by my standards – I didn’t pack the room, but about 150 people showed up.

However, I gotta say I wasn’t prepared for some of the questions – questions about stuff I’d never used before.  Which brings me to lesson six, and it’s a big one so I’m making it really big.

It’s ok to say “I don’t know” to a room full of people.

It was hard for me to tell people that I didn’t know something, especially since I was presenting!  I felt like I was supposed to have all of the answers.  I got some pretty complicated question about a server setup with a backplane for SignalR that I stumbled through with some wild guess.  It would have been much better if I has just told the guy I didn’t know what he was talking about.

The power in being able to say “I don’t know” without any angst cannot be understated.  I was talking to someone the other day who told me, the difference between a mid-level and a senior-level software engineer is being able to say “I don’t know” without hesitation.

Anyways, my session was in the very first group of sessions.  Since it was the only one I was doing, I was happy that I had the remainder of the conference to relax and see other sessions.

After ThatConference, I wasn’t sure what I wanted to do next, except I knew I wanted to be speaking at more conferences. So, I reached out to Scott Spradlin again and told him I’d be submitting to DODN.  He told me he’d look for my submissions.  I submitted the same things that I had previously submitted to ThatConference and what do you know – the same session was selected!  I felt pretty accomplished at this point.

Follow schneidenbach

Kansas City Developer Conference 2016 Wrap Up

I thought it would be fun to write a post on my time at KCDC 2016.  I was inspired by Lee Brandt’s blog post on Nebraska.Code(), which I also spoke at.

This was my first time going to KCDC and I was blown away.  Far and above the best conference I’ve ever been to, and the speaker lineup was amazing.  I had met a ton of great people in Nebraska.Code() the month before and was happy to see many of them here as well.

Venue

The venue was the Kansas City Convention Center.  It was absolutely beautiful and really nicely laid out.  During the lunch and keynotes, we had one of the large rooms upstairs, which was good since there were 1,600 people at the conference.  Not bad at all!

My talks

I got into town late Tuesday and finished prepping my workshop on Angular 2, TypeScript and ASP.NET Core.  I had about 80 people show up – 50 more than in Nebraska.  There were a few setup issues to iron out, but almost everyone had no trouble prepping their workstations before arrival.  The code examples were well received and, overall, I thought I did a good job.  Two of my demos failed, which has never happened before – both times because I forgot to save files that I had edited.  (Auto-saving feature is now permanently on.)  Now that the Angular 2 is close to RTM, I’m going to add routing and forms to the next time I give it at Music City Code.

My talk on RESTful APIs in ASP.NET Web API was the next morning.  I was shocked and delighted that I filled the room – about 300 chairs, standing room only.  The talk went really well and the questions from the audience were really good.  The talk is evolving still and I’m looking forward to improving it, since I think there’s plenty I can do to make it even better.  (If you saw it or any of my other talks and have any feedback, please drop me a line!)

Finally, my Getting Started with Angular 2 and TypeScript talk went really well.  I think the room held about 150 and all the seats were full, standing room only again.  The talk is a lightning version of my workshop, so naturally I can’t go into too much depth, but I saw a lot of nodding heads and most people seemed engaged.  The two short demos I gave went off without a hitch and helped me drive the point home that Angular 2 is awesome!

On a side note, I was happy to see that Cory House attended my talk since he’s a well known React proponent.  His talk on React vs Angular vs Ember was in the same room the next hour.  A lot of people came up to me after and told me it was really interesting to hear me talk about why I love Angular and then to have Cory turn around and talk about why he loves React.  Cory also gave me some good feedback on my talk.  He thought my slides could be prettier, and I agree – too wordy.  Looking to improve all of my slide decks for Music City and DevUp.

Events

The speaker dinner was awesome.  I got to meet some new folks and get to know some others better.  It was here that I found out about Prairie.Code() which is being put on by Adam Barney and Ken Versaw, same guys who put on Nebraska.Code().  (If you love a good tech conference and live in or around Iowa, I would highly recommend going.  Ken and Adam are great guys and Nebraska.Code() was a blast – this event promises to be just as awesome.)

I came as someone’s guest to the Pluralsight dinner, which took place before the attendee party.  The restaurant was awesome and I was happy again to get to know some folks better.  Thanks Pluralsight!

Finally, the attendee party was a blast.  The food was great and everyone loved the games that were everywhere.  Again, got to talk to some awesome folks – people who attended my talks, other speakers, and just people wanting to say hi.

Overall

What an amazing experience.  I can’t wait to go back next year.  Thanks to Jon Mills, Lee Brandt, and Boon Lee for allowing me to speak at their conference, the sponsors for helping make it happen, and for the attendees for coming and learning something new.

Emerging Speaker series: The first three lessons I learned when I started speaking

This is the first post in a series I’m calling the Emerging Speaker series, where I will chronicle my experiences as I journey to become a speaker in the tech community.

I’ve decided to write about how I got started speaking.  It’s a bit uncomfortable for me, but I think it might be useful to others who might want to start speaking.  I’m going to talk about my experiences and highlight what I’ve learned along the way.

I didn’t think much about speaking until I received an invite to lunch from Jeff Strauss, one of the .NET community organizers in St. Louis and a board member for the DevUp conference (formerly known as St. Louis Days of .NET.)  I had written a blog post about STLDODN 2014 and what I thought they could do differently.  I was somewhat critical about what I think now are relatively trivial things, so I felt a little nervous.

That lunch was February 2015.  It was the day I met Scott Spradlin (another community organizer and DevUp board member) and Jeff.  I can’t tell you how gracious they were about the whole thing – they approached me, a nobody, for advice on how to make the conference better and to talk about why they made some of the choices they did.  (Keep in mind I had barely been a software engineer for five years, and these guys are super experienced and well known in the community.)

I told them that I’d love to be more involved.  That’s when they told me that they could always use speakers.  I told them sure, I’d love to speak sometime, not really knowing what I was getting myself into.  (Except that I knew I had a fear of public speaking – but as Alton Brown says, that’s another show.)

That was lesson number one for me (though I didn’t realize it at the time.) * If you’re interested in speaking, reach out to community leaders in your locality.  *Talk to them, ask for advice, and ask for opportunities.  Every community leader I’ve met wants nothing more than to help get new people out there and speaking.

My first foray in speaking was a small session on ASP.NET 5 (now ASP.NET Core) at the Microsoft Store in St. Louis in April 2015.  It was a pretty painless process to get the gig – I reached out to a local Microsoft guy to see if I could talk there and he was like, sure, no problem!  It was an audience of maybe 5 people.  I was extremely nervous – shaky breathing, sweaty palms, the whole bit – but fairly well rehearsed.  My demos went without fail – those were pretty well rehearsed as well.

That was lesson number two – when you do speak, be as prepared as you need to be.  Only you can know how prepared you have to be to do at least a decent job.  In my case, I rehearsed the speaking parts a few times, but I definitely felt after that I needed more practice talking.

As far as the demos go, in my experience they are a bad idea UNLESS they are tightly rehearsed.  *If you do a demo, chances are something will go wrong – and it might not be in your control.  *I’d seen enough failed demos at other conferences to know how to avoid some pitfalls.  For example, since I was demoing in Visual Studio, I had a couple instances warmed up already so that we didn’t have to wait in silence while they loaded.  I also had every single thing I needed to do printed out, step-by-step, down to when to switch to other windows and what lines of code to type.

After that, I reached back out to Scott and ended up doing the same ASP.NET 5 talk at the .NET User Group meeting a couple months later, June 2015.  Not many people attended there, but there was definitely more than at the Microsoft Store – about thirty if I recall.  I was still extremely nervous.  A lot of pacing, a lot of shaky breathing, and very sweaty palms.

I knew I wanted to keep speaking, even though it was so uncomfortable for me.  So, I set out to develop abstracts to submit.  I wrote one on ASP.NET 5, one on combining Xamarin and SignalR, and one on Angular, and submitted them to ThatConference 2015.  I chose to submit to ThatConference because it is a locale my company (GadellNet) does business in.

I was thrilled to find out that my Xamarin/SignalR talk had been accepted.  And that was lesson number three – *speak about things people want to hear about.  *It seems so obvious, but I knew that if I was speaking about stuff that was interesting to people, I would have a higher chance of getting accepted.  The title of my abstract was “Building Real-Time Mobile Apps using Xamarin and SignalR,” which I knew packed quite a punch.

I was later told that it is difficult to get into conferences the size of ThatConference as an unknown speaker, which further reiterated to me the need to go with a subject that interests the conference’s attendees.

Anyways, stay tuned – next blog post will be about more lessons learned at ThatConference and DevUp 2015.

P.S. I think that lessons two and three might sometimes make more sense if they’re reversed, but my advice is to start small.  Typically, the bigger the event, the more that lesson three applies.  I think most community leaders would gladly give you a chance if you show them interest in talking about something even tangentially related.

There have been several folks who have helped me on my journey so far, but two people specifically deserve thanks – my wife, Susan, who has supported my journey from the start (as a listener and adviser), and Jeff Strauss, who has been a great mentor, adviser and friend during my “speaker emergence.”

Follow schneidenbach