It has been nearly 4 years since my last blog post. When I started blogging 7 years ago, it was such a rewarding experience; it’s hard for me to believe I let it die. In this post I reflect back on the “life and death” of my blog, and the process of moving and “resurrecting” it.
MotivationI credit Michael C. Neel for encouraging myself and others to start blogging at one of the early CodeStock conferences. I don’t remember his exact words now but what he said on stage was enough to motivate me to action. Prior to that, starting a blog was of interest to me but I had doubts around the level of effort and time involved, imposter syndrome, content and the like. I realized I was making excuses and growth only comes when we make ourselves uncomfortable. It dawned on me that I had much more to gain and almost nothing to lose by giving it a shot.
- Writing about various programming tasks at work
- Documenting some of my work for myself, my team, and other developers
- Learning more about what I was doing by writing about it
- Hopefully receiving some feedback to improve my work
- Giving back to the community I’ve received so much from
Getting StartedOn the recommendation of Mick Ross, I decided to give Squarespace a shot. The main draw for me was that it allowed me to focus on producing content for my blog extremely quickly with a polished design without giving up flexibility / customization. Compared to WordPress, it seemed much more intuitive, low friction, less bloat, and easier to get started. I also liked the fact that it made it simple to combine multiple blogs on one site, something that can’t technically be done with WordPress per se; I thought I’d use that for separate personal and professional blogs at some point.
WorkflowIn the early years of my blog, I was fortunate that I was able to do a decent amount of blogging work at my job, within and between tasks. Simple posts I could often do entirely at work. For longer, more involved posts, I would often start them at work, “genericizing” code and other details, and finish the rest at home or perhaps at work over lunch or after hours. The key was to force myself to write while the subject was fresh; I found that if I waited until later, no matter how valid the reasons, the posts would never materialize or the content would really suffer.
You don’t know what you don’t know – until you write about it. In explaining topics in these posts, I often realized I didn’t know the material as well as I’d like. Writing forced me to go deeper in my learning in order to explain things more simply and fully. At times that was overwhelming but it proved to be one of the most rewarding parts of the process.
It’s often more work than you might think – I never fully appreciated all the work that can go into even shorter blog posts:
- Deciding what’s company confidential and what isn’t
- “Genericizing” details in the post, code, and other assets
- Cleaning up code for posting – refactoring, rewriting, simplifying
- Formatting code for posts and creating assets like images
- Creating sample projects and repositories or zip files
- Deciding discussion points, outline, approach, and tone
- What assumptions to make about the reader’s knowledge
- Researching various topics in-depth as you realize the gaps in your knowledge
- Site administrivia, configuration, themes / styling
- Proofreading, spelling and grammar, checking posts in different browsing form factors and RSS readers
- Social sharing and addressing comments, feedback, mistakes and general updates
Long-term RewardsMy blog was never highly trafficked but that was never a goal or something I worked at. Regardless, my modest blog certainly exceeded my expectations – a few examples:
- My very first post (Oracle PowerShell Cmdlet), eventually lead to me being contacted by Packt Publishing to write my first book – Instant Oracle Database and PowerShell How-to.
- I had a post featured on the ASP.NET homepage, just below “The Gu” himself.
- Justin Angel, Microsoft’s Silverlight Program Manager at the time, left some great feedback on a post of mine.
- A significant amount of invaluable feedback in comments, social media, and messages.
- Some non-programming posts, including this finances post, that resulted in referrals, free services, ad income and more.
- Writing a mobile conference app and getting free admission.
- Many new connections I’ve learned a great deal from.
- Seeing how my blog helped positively influence my career opportunities.
Time, Priorities, LazinessSubsequent jobs didn’t really allow for me doing much blogging work during the work day. Combined with a busier personal schedule, longer work days, an eclectic set of competing interests and activities, and moving cross-country, finding the time and energy to blog became more difficult.
Death of Google ReaderIt sounds silly, but when Google Reader died, it impacted my consumption of other blogs, traffic to my blog, and my own desire to blog. I moved to alternatives like Feedly, but it was never quite the same. It felt like the beginning of the end for blogging in a way.
Desire and Dread of Moving My Blog
Over time I increasingly wanted to move my blog to WordPress. I didn’t like the direction Squarespace was going; they seemed to be targeting the artistic and commerce segments almost exclusively, with less and less control over details that made it less ideal for my blog. The upgrade process between versions was confusing and plagued with issues.
For better or worse, WordPress “won” and I felt compelled to move to it if I was going to continue blogging. As a result, I didn’t want to blog more because I knew I’d have to make a lot of edits to every single blog post when moving my blog and I didn’t want to create more work for myself.
Experimenting with Other Platforms
Squarespace Upgrade – Before I could move to WordPress, I had to upgrade to Squarespace version 6 as I was on version 5 and that didn’t have WordPress export. I use the word upgrade lightly as it really makes a copy of your site for v6 and you’re actually paying for a completely separate site. I tried out v6 and later the in-place upgrade to v7 but neither convinced me not to move to WordPress. Sadly the export didn’t handle images and other media / resources but at least it gave me the content to import into WordPress.
WordPress.com – Next I tried WordPress.com and imported my blog posts from the Squarespace export. That didn’t last long as I ran into a limitation that didn’t allow me to maintain my existing URL structure of geoff.hudik.com/tech/date/title (/tech/ being the problem), and I wasn’t willing to break existing links to my site. Additionally, in looking at other limitations of WordPress.com, I decided that self-hosting better suited my needs.
Linode – I heard good things about Linode from Alan Stevens. I liked the idea of not being on shared hosting without breaking the bank, and having total control and flexibility. I was a bit worried about Linux though, as I had barely used it in the past and that was many, many years ago. I worked through a number of their guides such as Migrating from Shared Hosting to Linode, How to Install and Configure WordPress, and How to Configure nginx. I really liked their platform, site, and mobile apps, and I learned a great deal. Ultimately however, total control also meant the most work to maintain, and as a Linux noob, it was a bit too painful for me.
Self-hosted (Siteground) – I read some reviews of WordPress hosting and decided to give SiteGround a try. I liked what I saw and it seemed to be a good fit for my needs but I was still having problems with motivating myself to do all the work of moving 4 years worth of blog posts.
Motivating Factors to Complete the WordPress Move
I never finish anythi…
Wasted Money – While keeping my existing site live and experimenting with different new host platforms, at one point I was paying for 3 different copies of my site at the same time, not including things like domain name registration.
Soft Skills Book – Reading Soft Skills: The software developer’s life manual by John Sonmez really encouraged me to start blogging again. This is great book for your career and life, even if you’re not a programmer or not in IT, but especially if you are.
Great Content from Other Bloggers – Seeing great content from fellow bloggers helped motivate me to get things going. This included existing established blogs as well as seeing success from new ones like my buddy’s blog Longing to Know, a great resource for AngularJS, .NET and more.
Consulting Job – I switched jobs to work in a consultant role, and we’re expected to be diligent about continuing education, community involvement, writing, and learning new tech, so we can more easily tackle diverse projects that come our way.
Wasted Opportunities – In the 4 years I wasn’t blogging I learned a great deal about AngularJS and a host of other tech. Blogging on these topics could’ve been very helpful, and for the most part now, it’s too late.
Squarespace to WordPress Details
URL Issue: Permalink Settings – In WordPress I first needed to go to Settings -> Permalinks and set a custom URL structure as so:
URL Issue: Per Post Permalinks – Post names and links in my Squarespace export file looked okay but for some reason the post permalinks after the import had the date in the name portion which I had to remove per post like so:
URL Issue: Some Posts off by a Day – It appeared that some posts I had started on Squarespace on one day as a draft and published on the following day. In some / all of these cases, the post URL never changed to match the published date and retained the draft start date. To resolve this I ended up editing the publish date of these posts to match the existing URLs.
URL Testing – To ensure existing links to my posts didn’t break I first edited the HOSTS file on my Mac so my domain name pointed to the IP of my WordPress site that wasn’t yet live. I then fired up my Windows machine in Parallels and for every post, I copied the URL from the live site and pasted it in a web browser on my Mac to ensure no 404 Not Found results. 404s were addressed and I kept a running list of the posts I had checked.
Image woes – Images weren’t handled in the export and were pointing back to Squarespace. Reuploading all the images manually would’ve been a pain. Thankfully I found the Auto Upload Images plugin that will detect external images and upload them to your WordPress media library when you save a post. That was a real lifesaver.
Fancybox Images – Some images in my posts were scaled-down versions that linked to Fancybox popups for the full-sized image. These weren’t caught by the Auto Upload Images plugin and had to be manually uploaded. I also installed a Fancybox WordPress Plugin.
Image Relative Paths – The Auto Upload Images plugin inserted fully qualified image URLs to “http://geoffhudik.com/wp-content/…” which was a mixed content warning problem for HTTPs. Also should my domain name change in the future, well, that’s one less thing to worry about. I ended up doing find and replace per post for this though I considered a Search and replace type plugin.
Other Assets – Various other files had to be manually uploaded and linked to. This was mostly zip files of code samples or direct links to a given source file. I did stumble across the Enhanced Media Library Plugin which did come in handy. In some cases code was hosted on Codeplex and with it shutting down, I also needed to move those projects to Github; thankfully there’s an easy migration process.
SyntaxHighlighter – My Squarespace blog used an older version of SyntaxHighlighter. For WordPress I went with the Syntax Highlighter Evolved plugin and it required changes to each use. Namely replacing pre blocks with [language] markers and removing HTML escaping. I also made some plugin content changes to reduce the SyntaxHighlighter font size.
Extra Line Breaks – Early on I noticed extra line breaks showing up in WordPress output, as if whitespace was suddenly respected in HTML markup. After a bit I figured out why this was happening and how to stop it. Older posts of mine included some longer paragraphs where I inserted line breaks for text editor readability instead of relying on word wrap. While I could override the behavior, I didn’t like the unnecessary line breaks and preferred relying on word wrap so this required some reformatting of each post’s HTML.
Post Wrapper Divs – It appeared that during the upgrade process to Squarespace v6, each post of mine was altered to be wrapped with
<div data-src="v5”>. That didn’t effect the layout that much but it was enough to warrant removal.
What Happened to My Backslashes? – Somewhere in the process I realized something had removed most of the backslashes in the contents of my posts. Mostly this was filenames inside of code blocks so “C:\SomeParent\SomeChild\” became “C:SomeParentSomeChild”. I never figured out what caused this but my hunch was one of my external image uploader plugins messed it up as those were the only plugins I was aware of that modified blog contents on my behalf. I disabled those after the conversion process.
Final Steps – With separate machines on separate monitors I compared the content between both versions of the blog and once everything looked good, I updated the name servers with my domain name provider to point to the Siteground name servers. Disclaimers indicate up to a couple days or so to take effect but in my case the change was live within half an hour or so.