Best Practices in Development

Over the last few days I've been working on a relatively large change to my image linking logic. This change involved some reorganization on the server side, adding name-spacing, changing the url structure, and placing 301 redirects to all 1200+ of my photos. I made this update both in hopes of keeping some relative SEO content on the photos linked in my blog and because I wasn't happy with the original implementation (especially the data storage). This post isn't about the update, though. I wanted to talk a bit about some of the principles I used on this and other projects I work on.

Incremental Changes

This update was a rather large one to my engine. I needed to change more than just a few image links - I upgraded my entire image storage system to a relational setup. Eventually this will turn into a dedicated photography site (photos.jacobemerick.com, mayhaps). Trying to change everything and push it live at once would have been asking for disaster.

Instead I broke down this change into five steps. Each step could be tested ...

read more »

Popular Music Project

Over the last few months I've been working on a fun side project to display what music I've been listening to recently. I decided to break this information down by albums and number of songs played over a period of time. While the data itself is straightforward and could be displayed either as a list or table, I wanted to make something visually interesting that would show the most 'popular' albums in my library.

Note: you can view this project at Jake's popular music site.

Before I could get involved in the display I needed to find a way to grab the data. Luckily, last.fm has a solution for this. Using their 'scrobbler' media plug-in, I am able to upload my music plays from all of the different computers I use (desktop, laptop, work computer) to my profile. They also have an API that returns this information as an XML feed. I query this API with a daily cron to pull the most recent information to my database.

In order to make the display dynamic I needed to do some ...

read more »

2011 New Year's Resolutions

It's that time of year again... When people realize that they've eaten too much food, spent too much money, or just haven't been overly productive over the holidays and decided to make firm New Year's Resolutions. I'm no exception to this annual tradition and have made a few commitments of my own for 2011.

Start working out

Original, eh? I am a pretty skinny guy (been hovering around 'underweight' for as long as I could spell the word), but working all day in front of a computer is not very conducive to a fit body. A few hiking-related knee injuries deter me from a daily run, but I do plan on exercising (standard push-ups and crunches) on a regular basis.
Goal: Be able to do 50 push-ups and 80 crunches in a single setting.

Finish my side projects

I've been working to get all of my sites under my MVC over the past year and feel pretty good about the progress I've made. While there is still the waterfall and hiking map sites that still use old school PHP, there is also a lot of cool features I've added to my ...

read more »

How Many Tiers for a Clean View Layer?

An interesting possibility cropped up for my MVC a few weeks ago. I've been working with microformats on and off the last few months (you can read about one of my first adventures with them when I created a microformatted resume). I started to wonder where else my site could use this new feature. An easy place to add microformat tags are links - you can add a 'rel' attribute that describes the relationship of the link to your site. Also, if I added a layer of abstraction to my links site wide, then I could easy add behavior rules (target="_blank" and whatnot) that would affect an individual link across all of my pages and sites.

This idea would involve creating a table of all my links, internal and external, that could be mapped to meta information about the links. There would be a helper class on my site that would pull a link based on an alias, give it attributes based off of the meta data (including microformatting), and spit out a final link. No where on ...

read more »

Microformatting the Resume

When a computer script crawls across the web looking for information (like Google's search robot) they need to do a lot of thinking to figure out what information is located on a web page. After all, web pages are written by humans for humans, with the data and information contained in our complex, contextual language. Web developers can help a script understand their site with robots.txt, xml feeds, and designated syntax (like using h1 tags for headers), and more recently, microformats.

The best way a script can understand text is by tagging it. This is how some xml formats work - you wrap the title with a <title> tag, set relative priority with a <priority> tag, etc. However, xhtml and older html formats only let you wrap normal web pages with standard tags, like p (paragraph), h1 - h6 (headers), etc. Microformats uses attributes of tags (like class names) to help computers understand what the content of a page is instead of the actual tags.

I recently dove into microformats with my resume, located on my ...

read more »

Abstracting the Resume

Recoding all of my subdomains to follow a model-view-controller framework has been a really interesting process. I've had the opportunity to experiment with different design patterns and techniques, especially in the realm of data handling and content delivery. Abstracting out my resume is a great example of how I'm handling my data in a way that provides necessary functionality at the moment while staying flexible enough for future rewrites.

Until recently my resume was written inline with html tags, merely included into different web pages as needed. This was a bad solution - every time I wanted to change a piece of it I had to wade through html tags. I couldn't place any dynamic content in my resume or reuse it in non-html formats. A cleaner solution was needed.

My first step was to divide up my resume into pieces. I have five main categories: objective, job history, skills, achievements, and education. The objective is a single line of text while the other four categories are lists. Some of these lists are lines of text while ...

read more »

My Lifestream

As a web developer interested in creating a web presence I'm constantly looking for new projects to add to and inhance my websites. Some of these (like this blog) require a fair degree of committment to create new content, while others (like my about page) is a simple static page. I've always kept my eye on my social networks as a potential source of content for a new site, and the recent launch of my lifestream (lifestream site) fits my needs very nicely.

There's numerous examples of web developers using this technique on their sites. An obvious one is a display of a personal twitter feed on a page, usually on the home page or blog, as both a constant source of content and a way to collect possible followers. I've seen some more advanced uses too, including github activity.

I decided to do something a bit more ambitious with my lifestream. The concept of a 'lifestream' is a compilation of time-ordered online activity ( ...

read more »

Web Development Goals

I've always been a bit of a goal- and task- orientated person. The only thing I enjoy more than making a long to do list at the beginning of a week is crossing the items off of the list one at a time. Now that I'm a 'real adult' with a full time job and puppy, I decided to create a list of goals to aim for over the next five years. Most of these goals are under the realm of self-improvement; financial security, physical fitness, etc. I wanted to post about some of the web development related goals, both to give readers an idea of where I'm expecting my web skills (and, directly, personal web sites) to head in the future and to place additional pressure on myself to continually progress on the goals.

Learn new programming languages

Over the last couple of years I've managed to teach myself most of what I know of xHTML, CSS, SQL, PHP, and Javascript. However, there are a few languages that I want to learn that I've dabbled in the past. I use some XML, mostly in the form of KML and RSS, but I don't know much about XSL and XSLT. I'd like ...

read more »

Tips on Personal Sites

Over the last six months or so, I've found myself spending a large amount of time working on personal websites. What is a personal site? Well, as a web developer I work on three broad categories of websites: fulltime-job websites that have to work within branding and technological constraints, freelance projects with some flexibility on design and implementation, and personal projects that I don't get paid for. They can range from blogs to resources, and there are a couple of things I'd like to keep in mind while I work on them.

There's still a client involved

And it's me! The website is a representation of me as opposed to a company or project. This is nice in some regards, as I have complete control over the design and implementation of the site, but can also lead to easier procrastination and more fickle design changes. I try to treat these types of projects like a paying one, setting up deadlines and some restrictions on how long to spend tinkering with the design and layout. While it's nice to launch the perfect website, ...

read more »

Epic Hiking Adventures Plan

One of my fondest memories of my years in Houghton, MI is the waterfall project of 2008-2009. Even though it took an actual project to get me to explore the beautiful wilderness of the Upper Peninsula, I really looked forward to my hours of wandering through the woods. After the epic adventures of those months, living in Appleton, WI sometimes seems bland. Now that I have a job and regular hours, it seems like the right time to start a new project and enjoy the wild outdoors of the Upper Peninsula again.

When I started to plan out this new project I had several possibilities. I could go back to waterfalls, expanding the radius west to the Porcupine Mountains and south to Wisconsin border. Another option would be to switch to other geologic features, like mountain peaks or lakes, and create a sister site to my waterfalls one to document my visits. However, I decided that numerous hikes would end up being a hassle, especially since these types of projects involve dozens of sub-mile-long hikes and lots of driving in between. Instead, I decided to ...

read more »