πŸŽ‚ Birthday 2020

Photo byΒ Adi GoldsteinΒ onΒ Unsplash

I know, I know, we are supposed to be talking about server-side rendering, but it was my birthday this weekend. Though for a moment I considered writing something on GitHub Actions, on reflection, I decided I would do better to hold that for a time when I can give it, too, more focus.

Of course, you might think the lack of a new technical post (and the presence of this prosaic interlude) were down to over indulgence in alcohol. It seems like a natural conclusion to draw. It is wrong though; I have not had a drink since New Year and, October, before that. Alcohol had not helped my mood while dealing with intense emotions, so I cut it out. No, I cannot blame the lack of a technical post on the drink. In fact, there is nothing upon which blame could be placed; I just did not want to spend time writing a detailed technical blog on my birthday weekend. So, I did not. If we cannot treat ourselves to what we want on our birthdays, when can we?

Since not drinking I have really struggled to work out how I celebrate things. My life to this point has the concept of celebration deeply anchored by drinking. I drank socially and, thankfully, without addiction – my drinking problem was emotional rather than physical. Whether promotion, birthday, or some other news to commemorate or celebrate, my immediate inclination has been to have a beer or perhaps something stronger. Recently, since I don't drink, I would remind myself of that and then my brain would say, "Well, smoke then." But I do not smoke anymore either – I am an addict when it comes to nicotine. Suddenly, celebration has meant reminding myself of past joys and then having to find the willpower to deny myself those things. It does not feel like celebration.

Since my birthday was not going to wait while I figured this out, this weekend, I tried celebrating regardless. Instead of smoking and drinking as I would have twenty years ago1, I focused more on love and laughter, spending time in the company of wonderful, supportive, and funny friends, old and new. The emotional turmoil of the last few months, and its associated uncertainty has meant a lot of change. This weekend was delightfully entertaining, and on occasion, awkward, uncomfortable, and entirely, humanly reassuring. Although I am still learning exactly what celebration means to me now that I am an ex-smoker and non-drinking Englishman, I still had an absolutely lovely time.

I feel so much better having shared that with you. Please do join me next week when normal programming will resume. I really value our time together and am very grateful that I was able to take some time away to spend my birthday with friends. πŸ’™

  1. yeah, I am getting old, it seems []

πŸ›  These Software Development Tools Will Blow Your Mind

Photo by Ben White on Unsplash

For my final post of 2019, I thought I would deal with some serious FOMO1 by adding one of my own to the legions of year-end listicles adorned by clickbait headlines. You will not believe what's at number four! Nevermore shall I lament having passed up the opportunity to proffer a subjective collection of arbitrary length for your attention. Of what engrossing subject shall this list be? Life achievements? 11 places to visit before you die? Things I have discovered when looking for other things that I have lost? Nay, it shall be tools! Tools, I say. To be specific, development tools for it is tools of software development that I use often. To be even more specific, this is a list of development tools for each of which I could write an additional list of killer features, extensions, and magical whosywotsits. I present to you a list of feature packed fancies for fruitful software fabrication. How many tools? Read on to find out2.

Visual Studio Code
code.visualstudio.com

A screenshot of the Visual Studio Code environment, showing the Extensions Marketplace on the left and a JavaScript file being edited on the right, below which is shown a terminal panel indicating code has been successfully compiled. The editor is also showing an autocomplete list of possible syntax to insert. The bottom of the screen is a status bar showing additional information about the currently opened files.

This open source, cross platform, integrated development environment (IDE) backed by Microsoft really is the best I have used so far. With its built-in terminal, text editor, and task engine, it really is an integrated environment where, if it weren't for Slack and my web browser, I would spend all of my software crafting days. In fact, if I liked the extensions that integrated Slack and web browsing into Visual Studio Code, I could use it or them too; but I don't, so I don't.

Unlike IDE's of old, Visual Studio Code – often referred to as just VS Code or Code (it's command line invocation is the delightful code the-file-I-want-to-edit.js), is implemented to avoid having opinions about the code you write. Instead, it is written to support your code dictating how you write code so that you can deftly move between projects without worrying that the settings for one team will somehow traipse all over the settings for another.

If you like vim-style editors, there's a vim emulator. If you don't like the menus, use Zen Mode or go fullscreen. Want to run tests integrated in the sidebar or the test file itself? Do that. Want to run them from a terminal or via a background task? Do that instead. I could (and probably will) write a whole new list on the best extensions to use with Visual Studio Code. It is versatile enough that I believe any developer could make it the editor they need.

Why it is great for software developers?

Either natively or via an extension, Visual Studio Code supports just about every aspect of the software development lifecycle you might encounter, on every platform that likely matters (Windows, macOS, and Linux), using any workflow that suits you. Not to mention it gets feature updates monthly and is supported by a huge community of users. It takes a little DNA from editors like Atom, Sublime, and your basic text editor, and elevates them to something, well, sublimer3.

WordPress
wordpress.org

A screenshot of a web browser showing the WordPress admin screen for choosing a theme, with several themes previewed in a grid.

When concentrating on software development tools, it is really easy for me to overlook this one – probably because it is not a software development tool, at least not from first impressions. I use WordPress for this blog; I always have. There are many alternatives out there; some more technically involved than others. I know I could use markdown in a GitHub repository; I have heard of Jekyll and Gatsby and so many other ways to generate a site; I know about Medium, but for me, WordPress wins because it has the features I need, including wide support for hosting, accessibility, themes, plugins, and autonomy from the whimsy and money-grabbing aggregation platforms like Medium.

The recent updates to the core editing experience, known as Gutenberg, have been amazing and the regular updates that are auto-applied without me raising a finger keep adding polish to an already awesome experience. I can schedule posts, manage comments, and use plugins to add syntax highlighting, footnotes, multi-factor authentication, backups, and spam filtering, to name just a few. Just as with Visual Studio Code extensions, I could write another list of plugins that I love for WordPress.

35% of the web uses WordPress, from hobby blogs to the biggest news sites online.

https://wordpress.org/

WordPress is used by over a third of the web. A third! That includes this blog, almost every site that Ann Arbor Give Camp has worked on in the past few years, and rollingstone.com! If you are considering putting together any kind of website, whether a blog, or something else, I highly recommend this freely available platform that has more versatility than Meryl Streep.

Why it is great for software developers?

As I mentioned earlier, WordPress seems entirely unrelated to software development (unless you are writing themes and plugins for WordPress4). However, I have learned that writing a blog about ones technical exploits is an absolutely amazing software development tool. I never realised how much I could learn just by trying to teach someone else. I used to think a blog was about its readers and being right; I have come to learn that a blog is merely its writer, being. The act of writing a blog is where its value lies. Writing this blog identifies gaps in my knowledge, personal biases, and more. It can shine a light on my laziness, focus the my mind on a gnarly problem, and provide a scaffold from which to hang my personal growth. There are numerous times where writing posts for this blog (including some I never published) has helped me become a better software engineer. The fact that sometimes, someone reads it and finds it useful, entertaining, or infuriating is really just a bonus.

Write a blog. Hold an opinion. It is worth it.

GitHub
github.com

A screenshot of the GitHub organization's page on GitHub. The screen shows the GitHub logo (the octocat) and information including geographical location, URL, contact email, and several tabs giving more information about the organization's repositories, packages, people, and projects. The repositories tab is selected.

For some readers, this may seem a pointless entry. Using GitHub for collaborative software development is so incredibly common that suggesting folks should use it seems a bit like suggesting folks should try breathing air5. Though there are alternatives such as GitLab, GitKracken6, or BitBucket, GitHub is almost ubiquitous. I do not recall an open source project that I have interacted with recently that was not hosted on GitHub7. With the recent changes allowing private and public repositories for personal accounts, the addition of GitHub Actions for automating all kinds of workflows – free to open source, and some great improvements to code review that have been released or are in beta, GitHub is an absolutely fantastic tool for those developing software. Add to that the integrations with other tools that I use like Visual Studio Code, Slack, and third-party issue trackers such as Jira, and GitHub shines. Many feared that its acquisition by Microsoft would doom it to failure, yet the Microsoft of today is a wonderful curator of open source goodies, and it seems that we all get to reap the benefits.

Why it is great for software developers?

Free backup of your source code, code reviews, automated workflows, and more, all on a tried and tested platform with a huge community. Not only that, but if you want, you get to collaborate, build, and present work with that community8.

πŸ€·πŸ»β€β™‚οΈ That's it…

I don't know about you, but lists are exhausting. I've only written about three things and I'm already done with everything and ready for a lie down. I do stand by this list though. I really thought about what to put on it, considering the various tools I have used, not only because I have to, but because I want to. I would choose these tools from the very start of a new project unlike some others I use that, while I like them, are specific to a technology (such as React Developer Tools), are only what I use because the circumstances call for it, or are not really that standout against alternatives that I could be using.

Of course, this is all my personal opinion drawn from my personal experience; you have absolutely no obligation to agree with me. In fact, you have every right to use anything but the things I mentioned above, remaining in your state of willful ignorance, knowing you are wrong, unwilling to accept the truth as a way of life 😈. Just kidding, these are development tools, not religions – what works for you, works for you. These work for me. Perhaps you agree and want to pat me on the back from my excellent choices, maybe you care to tell me your preferred alternatives or shout at me about mine, or perhaps you read the footnotes and really have something to say about privilege, toxicity, and portfolios – feel free to engage in the comments; let's talk πŸ€—.

And with that, I bid you well until the πŸŽ†New Year and all the productive software shenanigans that await us in 2020. πŸ™‡πŸ»β€β™‚οΈ

  1. Fear Of Missing Out – a most annoying acronym, I find; why? no idea []
  2. it's three, three tools []
  3. don't you roll your eyes at me []
  4. PHP? Ew! []
  5. you really should, it is to die for []
  6. mention-worthy, if only for the pun []
  7. before GitHub, it was SourceForge, before the DevShare debacle – https://en.wikipedia.org/wiki/SourceForge []
  8. Side Note: I think it is perfectly fine not to have a portfolio; some of the best developers I know do not have any public source, or fancy stuff to show off. This weird obsession some folks have with portfolios feels like another toxic manifestation of privilege in the software development world, and I don't care for it. Let's share what we want (and are able) to share, and accept that if we don't, that doesn't mean we're shit developers. πŸ’™ []

Manning Up

I struggle every day. I know you do too. We may have similar struggles, or different ones. We may notice each others struggles, or we may not. What you may struggle with, I may find easy or not even realise is a thing. The same is true in reverse. Sometimes, I am struggling so hard, I forget you are too. I am really sorry about that. I do not mean to disregard you or your struggles, or give the impression that these things do not matter. That is one of my struggles.

Sometimes, when my heart is heavy with the anxiety of a personal revelation, a growth opportunity, I find it hard to see beyond to a point where it will all make sense again. So, I write things like this. I am not seeking pity or likes or anything like that. I only want to share how I am feeling in case you struggle with this thing too. I know it helps me to know I am not alone and sharing helps that, because if we never share our pain, how can we appreciate each other's joy?

I struggle between putting out into the world that somedays I feel broken, and "manning up", dealing with it privately like "men" do. Some folks reading this will not be able to look past the ideals they have of what it is to be strong and will see this as weak; that's one of their struggles.

And so, to close. Whatever you struggle with, it is okay to not be okay. Take some time. Sit in the sun with a cup of tea, or pet a cat, or whatever it is that helps you escape the moment and find a little pocket of peace. Maybe even share a story about it and help someone else who is finding that same struggle. You are stronger than you think and we are all stronger together than apart. You are loved. You are you, and no one else can be a better version of that than you already are. <3

#kalx15: Back to Basics

This weekend a couple of friends stopped by the house at around 5:45 on Saturday morning. Normally, this would not be welcomed, but it was time for our annual road trip out to attend the Kalamazoo X conference. This year marked my third year of attending this fantastic one-day, single-track, soft-skills conference. Though often referred to as a non-tech conference for techies, Kalamazoo X is a really accessible event and as such, this was the second year that my wife, Chrissy, also joined us.

This year's conference was held at Loft 310. I found the new venueΒ β€” with attendees sat around tables similar to how people would be seated at a wedding or party β€” to be an improvement over last year. Though fantastic, last year's academic venue, larger attendance, and expanded speaker schedule lost much of the intimacy and community that made my first year at KalX a memorable and somewhat life adjusting event. This year was a return toΒ thatΒ moreΒ intimate experience of two years ago, feeling much more like a gathering of friends and family than a conference of professionals.

The speaker schedule was also condensed this yearΒ and all the better for it. The rosterΒ included aΒ welcome return of some KalX veterans like Jeff Blankenburg (@jeffblankenburg), H. Alan Stevens (@alanstevens),Β Jim Holmes (@aJimHolmes), and Elizabeth Naramore (@ElizabethN),Β as well as some newcomers like Jay Harris (@jayharris), Cori Drew (@coridrew), and Dawn Kuczwara (@digitaldawn). Though eachΒ topic was different, they were bound by the common year-on-year KalX themes of learning, mentoring, and growing.

Upon reflection, the talks that I remember most vividly were those where the speaker opened up, let down barriers, and gave honestly to the audience. Alan Stevens was, as always, a joyous speaker to experienceΒ β€”Β his command of space and time when delivering a talk is really exemplary, yet it was his candidness in discussingΒ his struggle with depression with whichΒ I connected. While Cory House (@housecor) spokeΒ on breaking the monotony in life and stepping outside of our comfort zones, it was whenΒ he opened up about his social anxieties and personal journey to overcome them that I took notice. And though Jay Harris delivered as polished a presentation as he ever has, it was his willingness to shareΒ his broken dreams of baseball and airplanes, open up about personal challenges, and be as raw with the attendees as he is with his friends that took his talk from good to great.

Though I enjoyed all the talks, it was Jay's talk, #conviction, that stood out most for me. Jay's message felt like the third part to a trilogy that started withΒ Jeff Blankenburg's talk, "Be A Beginner", and wasΒ fleshed out by Alan Stevens' talk on "Values Driven Development".Β Jay judiciously spent every second of his time with a well thought out rebuttal to the too often repeated adagesΒ "follow your passion" and "hard work pays off".Β It is easy to ignore the privileges we have that we more commonly refer to as "talents", to let humility lessen their importance, but it is talent coupled with conviction that leads to success1.

Of course, it was not justΒ about the guys. There was not only a more diverse audience than one might expect, but three of the eight speakers were women2. AΒ favourite talk of the day for me was "Give Up!" from KalX newcomer, DawnΒ Kuczwara. Through personal anecdotes and a wonderful, personableΒ delivery, Dawn explained the importance of letting go of control, of allowing people the opportunityΒ to fail and learn, and of making sure not to stifleΒ the growth of yourself or your team by micromanaging and "helping". To me, this talk was the second part toΒ another trilogy that was started byΒ Cori Drew and herΒ impassioned (though perhaps a tad too long) talk that related herΒ experiences mentoring her daughter from curious kid to seasoned speaker (at age 11), and closed with Elizabeth Naramore explaining why it is always OK to follow your passions in your leisure time, regardless of talent.

Though it was a long, tiring day (I drove, drank far too much caffeine, and stayed up way too late), Kalamazoo X was aΒ day well spent. I am grateful to Michael Eaton (@mjeaton), Matt Davis (@mattsonlyattack), and all their minions, speakers, and tolerant friends and family for the time and patience spent in organising and delivering a terrificΒ conference. Once more, after CodeMash hadΒ refreshedΒ my curiosity, Kalamazoo X reset myΒ spirit.

 

  1. having a passion for singing does not mean you can sing and no amount of hard work will change that []
  2. This shouldn't be a point of note, but in an industry traditionally dominated by men, it is []

Kalamazoo X 2014

Last year, I experienced the Kalamazoo X Conference for the very first time. It was an extremely emotional experience and one of two events that catalysed some ongoing personal change (the other was changing jobs after 12 years).

This year, I returned to Kalamazoo X, curious as to what the experience would hold. It was daunting; itΒ feltΒ different.

It wasn't worse different or better different. It wasn't different because the talks were new or the venue had changed to accommodate more attendees. I initially thought it was different because last year's talks were focused on the self and "accepting who you are", whereas this year's centered around others and how we can benefit those around us. Β But then I realised that view is coloured byΒ who I am (or was). It was different because I was different.

My life changed after attending Kalamazoo X last year. After the conference (perhaps even during), I started to reflect on who I was, faced old and painfully familiar demons, and began focusing on my well-being in a way I had not allowed myself to before. I began to recognise that I was broken and as the weight of one of the worst winters in history crushed my spirit, I finally soughtΒ professional help.

It was a long time coming. Friends had urged me to try counselingΒ for years and perhaps once or twice, I had conceded they had a point, but that was just to shut them up; I knew I wasn't weak like that, I was strong enough to weather my problemsΒ alone, to be a "man", to cope. But coping isn't enough. It isn't enough for me or those around me and coming to that realisation is crushing, at least at first.

I am still working through that personal change, the cliched "journey of self-discovery", and I am all the better for it. Kalamazoo X 2013 started something, something that affected how I experienced Kalamazoo X 2014 and life in general. I am certain Kalamazoo X 2014 has started something too.

For me, Kalamazoo X isn't about learning something new or retweeting a pithy statement (though I certainly enjoyed that part). ItΒ is about perceptionΒ andΒ coming to terms with the things I have to let go. It's about growing and perceiving that growth.

I hope to return to Kalamazoo and the X conference year upon year, not only to measure my own growth, but also to see the growth ofΒ others. The software development community is incredibly nurturing and nowhere exemplifies that more than Kalamazoo X.