Sunday, April 22, 2018

A Recipe for Writing a Recipe Website

So, about that first recipe website I keep bringing up...

My stint in CS grad school wound up coinciding with my greater exploration of Epicurious.  Since I was working part-time at Starbucks and I didn't have classes every day, I had ample time to cook more and search for new recipes.

As I was new to programming, and it was the early 2000s, I also thought it would be a great idea to put up my own simple web page (...and that code still exists on some random hard drive in my house).

Because I was taking a class on XML transformations at the time, I decided to store all of my recipes in XML and then run them through an XSLT transformer to spit out the HTML everyone sees on a web page.  For the uninitiated, XML was a data format that was expected to encode information in an easily interchangeable format that was also human readable.  Today it's rarely if ever used for newer projects as it turned out to be too verbose and restrictive in its required structure.

So, yeah, XML recipes, but it worked.  Because I got side-tracked by other concerns - namely software engineering in a professional setting - the original website fell by the wayside.  But, it was for all intents and purposes, my first actual completed software project.

And then, much as my cooking career did, my self-directed programming career began wandering in the desert.  I always planned to spend my weekend learning something new.  My typical grand scheme was to use Ruby to write a personal finance site similar to the old installable Quicken application.  Every once in a while, I'd make headway, but would then lose motivation for the next few weeks, at least, in part, because I couldn't convince myself to put in two solid hours on Saturday and Sunday toward my goal, so why even bother putting in any time at all?

This leads me to a brief digression.  Though I'm sure it's prevalent in other professions, the expectation that developers should code in their free time is ingrained in them starting in school.  I'm not sure if it's due to the fact that there are many mythical computer scientists who started programming as hobbyists in middle school or if the industry is seen as so fast-changing that we need to spend more than a typical work cycle keeping up, but it's an expectation.

It's also a dumb expectation.  The word 'passion' is thrown around too much in the software engineering industry.  What's wrong with just being good at your job and furthering your company's business goals as a result?  Why not expand the breadth of your life experiences rather than lock yourself in a room for an additional 4-8 hours per day and slowly slide toward becoming an insufferable bore in order to satisfy some vague definition of 'passion'?  I've heard about companies that turn down potential applicants because they didn't have personal GitHub repositories.  That may lead to a very specific culture, but is that really the type of culture you want to foster?

I have no problems if people want to spend time outside of work on their professional development.  I mean, that's what I'm doing here, but why should that be an expectation?

So, anyway, I didn't get very far on the personal website.  I'd still try some sort of extra-professional learning from time to time, but I was always demotivated by learning a new language or framework simply to solve a set of contrived problems or to write yet another simple blog site.  If I was going to learn a language, I needed to do so in the context of an actual problem rather.

Technically, with the creation of this recipe site, I'm still not really solving a problem that doesn't already have an existing solution, but it scratches a few itches for me -

The problem with most recipe websites is, well, they're blogs.  That's not a problem in itself, but the fact that everyone wants to monetize their blog is.  This means the page load times are incredibly slow as the blogs retrieve external ads for display.  This also means that, in order to actually get to the recipe, I have to go through an entire blogger's backstory before arriving at the recipe, since the more text I have to scan, the more ads I have to see.

While I'm not opposed to this as a business strategy, I don't want to deal with this on every recipe site I cross.  The easiest method for me to get around this is to use existing blog templates built for recipes and write my own ad-free blog for reference.  Blogs, though, aren't designed to index information in the same way, say, a cookbook is expected to do so.  Blogs are generally date oriented.  True, we can actually get around this with some labeling and other simple steps, but this is where the programmer in me begins to bubble up.

Before proceeding, it's probably helpful to review my goals, both for your clarity and my own so I can explain why I'm writing a recipe website.  These are my goals in order:
  • Create a website that stores my compilation of recipes for easy reference.
  • Use the website as a means to maintain a small software project and keep my skills up to date.
  • Use the website as a means to practice some of my other creative endeavors, like drawing.
  • Create a section on the website that explains tools and techniques that may be able to assist new cooks to avoid the pain I faced in my culinary travels.
  • Possibly find a way to make money off the site, in a non-intrusive fashion.
If I just concentrate on the first goal, and possibly the third, fourth, and fifth, then a blog probably gets me where I want to go.  It's the second goal that throws a wrinkle in the execution.

This, though, leads to conflict with my other goals when I'm not disciplined enough to keep the focus on all of my goals.  Why? Well here's my line of thinking on writing my own recipe website starting around November 2016.  Keep in mind that this wasn't my first iteration either, but the thought process laid out here is indicative of previous iterations of this project as well as iterations of other side projects.
  • I'm going to write a simple app and store my recipes on the site in a small database.
  • I'm going to use Google AppEngine to do it.
  • I'm not going to use Google AppEngine to do it, as the framework model they use is going to be too restrictive, so let me find another way.
  • I'm going to research other software as a service sites that will let me write a small app for free or really cheap.
  • Everything is either a pain to start up, acquire access to, or too expensive to use.
  • DigitalOcean seems to be a good place to run my site on the cheap.
  • I still haven't published any recipes.
  • OK, I'm starting to write code on a site called Codeanywhere, and it seems to be a great alternative to the need to write all of my code on my own computer.
  • However, the virtual machines it uses need to be re-initialized every once in a while and installing all of the necessary software is a pain.
  • I'll learn Chef to provision machines automatically.
  • I've learned Chef.
  • I still haven't published any recipes.
  • Why am I spending all of this time writing a program from scratch?  There's probably an open source one I can fork and customize.  Maintaining other software is a valuable skill to have in the industry, so it furthers my goal.
  • There is an open source alternative!
  • It's a bit outdated.  I should upgrade the components that are there.
  • I've learned a lot about code maintenance, upgrades, and Chef.
  • I still haven't published any recipes.
  • I should just write a static site generator so I can actually publish some recipes.
  • Doing so in Javascript will make it much more extensible.
  • These Javascript frameworks are more difficult than they need to be for my needs.
  • I still haven't published any recipes.
  • I'll just write a static site.
  • I've published a recipe!
  • I've learned about Jekyll.
  • I've published several more recipes!
And here we are.

No comments:

Post a Comment