I really got into technology when I bought my first computer. I had joined the US Coast Guard and saved a bunch of money during boot camp (when you can’t go shopping—you know—because of push-ups and stuff). I wanted to buy a Chevy Cavalier (sadly, that’s not a joke), but my dad encouraged me to invest in a computer instead, so I bought an HP from Office Depot that came with Windows 98. Also, you can’t buy a Cavalier with 2000 bucks.
The machine came loaded with Windows 98 and I was smitten. I had never seen anything so beautiful in my life. Everything about it was gorgeous: The curves of the buttons. The drop shadow on the windows. The icons on the desktop. THE THEMES!
I spent hours changing those themes. Remember the train one? That was my favorite. I wasn’t exactly in high social demand, so I had a great deal of time on my hands to do weird things like sitting around and stare at an operating system.
When I left the Coast Guard and returned to civilian life, I went back to college. I was a communications major because my mom had suggested that was my forte. But shortly after my return to school, I developed a crush on an individual who was an Information Systems major. Between my infatuation with user interface and the remote possibility that I could spend more time with this person, I made a decision that would drastically affect the rest of my life. I walked over to the Administration building and changed my major to Information Systems.
What I’m trying to say is that I became a developer for love.
One of the things that I think people skip over on questions like these is the fact that where you work determines what your setup is. A lot of people are developing on used, subpar hardware because they have been given no choice. To those people, I say this: I’ve been there. Someday you will have the setup that you long for.
My primary development machine is a maxed-out (i7, 16 GB) 2017 Macbook Pro (provided by Microsoft - what a time to be alive!). It’s the touch bar edition, which a lot of people don’t like and I get it. The touch bar is bad UX. It’s got no haptic feedback so it feels like tapping a sticker on a 2x4.
My monitor is one of the old Apple Cinema Displays - I don’t think they sell them anymore. I love it so much. I’m a firm believer in “Monitor Monogamy”. I don’t understand how people use multiple monitors. To me, it feels counter-productive to switch my eyes between screens. I have my laptop sitting on a little stand with the screen open, but I don’t ever put anything on it. I don’t even know why it’s there. I only have eyes for this cinema display.
My desk is an UpliftDesk, which means it a standing desk. I love it. I don’t ever use the standing part but as a desk its great. You can put stuff on it. My wife had the desktop custom made because she likes me.
OH! Can I also show you my LEGO city? This sits just to the left of my desk. I look over at it every now and again and it makes me happy. I’m a simple man.
I use VS Code because it’s proof that God loves you and wants you to be happy. I’m also one of the last people alive that uses a light editor theme. People say a dark theme is best for your eyes, but they never stop to question whether or not it’s good for your soul. Too much darkness makes me sad. I like soft colors and sticky pop music like Owl City. I’m listening to it right now. I’m going to eat Skittles for lunch.
Other tools I use “on the daily” as the kids say are…
- SIP- Color picker tool for Mac
- Sketch - I’m not a designer but that doesn’t stop me from trying
- Chrome. I gotta have my DevTools.
- SizeUp- Window manager. It’s an old one, but it’s been a loyal companion for almost a decade so I feel guilty about trading it in for a younger version.
- RunCat- A creature that lives in your menu bar and moves faster when your CPU usage goes up. It’s hard to explain. Just click the link.
Database wise, I actually have a background in SQL. My first real programming job was to write PL-SQL on an Oracle data warehouse. So I’ll query your database. I’m not scared. Usually, though I find myself working with NoSQL data stores such as Cosmos DB because they tend to just work better with user interfaces. That said, I don’t understand how anyone builds a legitimate system without a transactional database somewhere along the line.
- Prettier - I love this one so much that it’s hard to say just how much. Not quite as much as I love tacos, but it’s REALLY close. Prettier just removes all of the tedious formatting decisions from my Code. I use it with the Prettier Extension for VS Code.
- Vue SlickSort - This is a Vue mixin that turns any list into a sortable one. It works so, so well. Even on mobile. This is one of the best UI components I have ever found.
- Bulma - A phenomenal CSS framework. Beautiful components with a simple grid. It is my go-to.
- ZSH - A Z shell framework. Gives my terminal themes, shortcuts, aliases, intellisense and more.
- The Urlist- Shameless plug. This is my own project that I’ve been working on with a friend. It’s like de.licio.us, but for 2019. Create lists of links and get a URL to share them.
I work on Azure day in and day out, so most of my interest is centered around problems that we are trying to solve with cloud technologies.
I’m quite interested in Serverless Apps apps at the moment. Some people call it the “JAMstack”, but I’m not a huge fan of that term because I feel like it’s more hype than it is helpful in terms of conveying the underlying idea.
Serverless Apps are not a new concept per se, but rather the combination of two novel ideas - a static front end (also called a single-page-application) and a serverless API. The way in which the frontend is hosted is also important. It’s a static asset (meaning that there is no server framework such as PHP which needs to run to generate the page) so it should be delivered as such via some optimized storage solution and not a heavy server-side one. Being static files means they can also be behind a CDN, which just increases the speed at which the app loads onto people’s browsers because the site is cached at the edge.
My friend and I just finished a project called The Urlist that looks at how this works with things like Azure Table Storage, Azure Functions and Azure Front Door. We were trying to figure out the best way to enable this sort of a platform within Azure at the lowest possible cost. We are also interested in how we enable people to do that directly from VS Code.
The app is built with Vue, which was a thoroughly enjoyable experience. 5/5 stars, would build again. People can get all of the source code from this app from The Urlist Github repo.
I’m also interested in Artificial Intelligence (AI) and Machine Learning (ML). I meet a lot of folks who misunderstand what we can reasonably expect AI/ML to be able to do and that’s mostly because of science fiction movies. I think that as developers, we need to start looking around at what we’re doing right now and start asking ourselves where we can realistically plug in existing AI/ML services that are easy to consume. Platforms like Azure Cognitive Services give us “AI as a Service”, but the hard part is figuring out how to use it. You have to have a good understanding of what we can do with AI today before you can recognize where in your applications you can use it.
Messing around is the majority of what I do, although The Urlist project gives me an opportunity to look at a more production pipeline.
For development, I’m very interested in how I can leverage VS Code to its maximum capabilities. The vscodecandothat.com site was born out of this interest. This means that I’m always on the lookout for new extensions. Since I work with Azure so much, I lean heavily on the Functions, AppService, Storage and Cosmos DB extensions so I can work with the cloud from within my editor.
My workflow also involves a lot of collaboration, so the VS Live Share extension gets quite a bit of use.
For production, I’m not afraid to right-click/deploy straight from my editor. I know you’re supposed to have DevOps and all that, but I just can’t get excited about builds or deployment. It’s kind of like something I have to do that I would rather not think about.
I just got done learning TypeScript and Vue for The Urlist project. It was quite interesting. I like decorators quite a bit and find the tooling to be far superior in VS Code in terms of just knowing what API’s are available off of a Vue instance or a router object.
That said, TypeScript is a bit of a trade-off with Vue. If you are looking at a small, simple application, TypeScript will just get in your way. It’s most valuable when used in the content of a large application with a lot of files.
Probably vscodecandothat.com. That site has been far more popular than I ever imagined and it seems to have helped more people than any other open-source things I’ve done. And I’ve done a lot. It’s just that most of them are crap. But that one isn’t. Probably because Sarah Drasner worked on it with me.
Data is the underlying foundation of all applications. You need to understand how to get at that data and NoSQL API’s are only going to get you so far. Know how data is stored and how to get at it. If you can master both that and the frontend, you will be able to both understand and communicate better with your API’s and the people who build them.
In terms of Azure, we are working hard trying to solve some very crucial problems in terms of all points of the application.
One of the things that we want to do is to offer developers low-cost risk-free ways to build their applications. Serverless web apps are a great way to do this. But it’s not all a solved problem.
For instance, when we talk about Serverless API’s, we are talking about a platform where you only get charged for what you use. So if nobody calls your API, you don’t pay anything. To implement that, Azure Functions takes your project off of disk and loads it into memory whenever an invocation happens. It then keeps it in memory for some amount of time and each new invocation resets that clock. If after some amount of time your function project has not been invoked, we put it back on disk and wait for the next invocation to bring it back to life. This allows us to not charge you for the time the app is not running.
The trade-off is that the first invocation after a function is put back on disk, there is a delay of a few seconds while it is loaded into memory. We would like to eliminate that completely, but we can’t just keep everyone’s app hot all the time either and keep costs low. It’s very difficult to spin up a server, spin up an app and then run user code instantly on-demand.
We’re thinking hard about how to solve problems like this in a way that makes good business sense and doesn’t require developers to absorb the impact.
Have I mentioned The Urlist yet? I have? Several times?