15 July 2009

Posted in Arrangement, Art, Business

Beauty Beyond Belief

Three weeks after our trip up to Alaska and Victoria, BC, I am still reeling from shock at our last "tourist" stop: Butchart Gardens.

I had heard about it, and I had even seen several pictures from various people who had gone, and, I must say, I was still hopelessly unprepared for the overwhelming beauty of the whole thing.

Just look how gorgeous it is!

  • The colors, the variety, the order are unlike anything that I have ever seen.

  • It's beautiful in the day time....

  • It's beautiful at night...

    It's beautiful through a crappy can't-take-night-time-pictures camera!

  • Even the garbage cans were exquisite!

  • It was even beautiful when my finger invaded the upper right portion of the lens during a night-time photo with my can't-take-night-time-photos camera!

  • And, of course, there was a piece of time and space etched out in Butchart Gardens that perfectly complimented my wife's own striking beauty...

So, yeah, it was absolutely, unequivocally, unmistakably awesome beyond all reason.
Posted in Arrangement, Art, Business

The Cost of Conflict

There are two things that make freelancing attractive and rewarding for me:

1. Finding out what is possible
2. Showing clients what is possible

By the first, I mean that having several small projects from several different clients inevitably produces industry breadth. One month, a freelancer may be developing an online shopping cart in Java or PHP and the next month an online data feed in Google Base.

By the second, which is actually the impetus for this post, I mean that there are several people out there who have no idea what possibilities the software industry can afford them. It is wonderful to hear a person talk about a vision that they have, later to see in a prototype that their vision can often be realized in today's technology.

In this case, #2 was a biggie. Mike, owner of The Cooperation Company, told me at the beginning of our collaboration that he wasn't sure if services like mine even existed. It was a pleasure as always to help give a customer a pleasant surprise.

Many of the software requirements bore the same trend as the overall relationship as Mike often deferred to my expertise by saying "if it is possible, please to XYZ this way, otherwise...". If I'm not mistaken, I believe that we were always able to go with his primary request.

Novel Creations

One such example of an "if-it's-possible" requirement was an HTML slider. Mike's description was that one could slider an indicator horizontally across the screen. When the indicator was on the far left, a certain input would have the value of -100, and when on the far right, the value of 100.

Well, such a slider does not exist natively in the HTML tags. Further, a back-end technology was not an option nor was a rich client like Flash. Of course, never to be overcome by a challenge, a few hours of work revealed that one can use a "span" tags and a healthy amount of JavaScript to do the trick.

File formats

Of course, not everything in the web world comes up roses. I'm not sure, but I believe that Mike spent a few hours learning about creating web-ready images. While not the article to talk about it, digitial image resolution and web-friendly image formats were a mystery to Mike, but, impressively, he spent the time to figure it out in order to make sure that the image was crisp and attractive on his site.

02 July 2009

Posted in Arrangement, Art, Business

Print E-Z

This project had a very unique requirement: They wanted to dynamically serve up their products without augmenting their application with a server-side technology like PHP or Java. More specifically, they wanted their products to be pulled from a datasource instead of being statically specified in HTML.


What if we used a data source that could be hosted elsewhere and served over Javascript?

GoogleBase to the rescue!

In this project, we used GoogleBase to store their products and then javascript to read them from GoogleBase and render them on the correct pages.

It was tricky, but we were successful.


There was just one problem that we found during implementation, and that was that Google Base just wasn't prepared to have many integer values assigned to a single attribute. We needed this in order to map each product to the pages that it ought to appear on.

To make a long story short, we tried countless strategies over the course of a couple of weeks until the following thought dawned on me:

What if we assigned a prime number to each value and created composite numbers for each product's unique set of values, which we could then extract back out using modular arithmetic?

I'm sure that the thought occurred to you right away. Of course, it took me a couple of weeks to see it.

So here is what I did in the end:

Each page number would be assigned a unique prime number. So "Page 1" would be assigned the number "2", "Page 2" would be assigned "3", "Page 3" would be assigned "5", etc. The set of pages that an individual product should appear on can then be expressed as a set of those prime numbers:

Product A's 'page_numbers'-> {17, 3, 93, 41}

"But wait," you say. "Google Base won't let us specify a list of integers as a value in the data feed!" You speak well. What we will do now is multiple those prime numbers together to get a composite number, which will become the value for the "page_numbers" attribute.

17*3*93*41 = 194463

Product A's 'page_numbers' -> 194463

Now, if you stretch back to high school math, you'll remember that ever composite number is a product of primes (remember what they called "prime factorization"). This concept ensures that there is only one prime factorization per integer and thus, will not be divisible by any other primes than those that make up its prime factorization.

This is important because now I can say with confidence that if product xyz's 'page_numbers' attribute is divisible by 43, then it must belong on the page that is assigned to the prime number '43'.

Modular arithmetic is perfect for such a calculation. The question "Does x mod y equal 0?" is the same as asking "Does y divide evenly into x?"

So, the math works. Now, will Google Base support it?

It turns out that their Ranking Language does support modular arithmetic and can act as a secondary filtering mechanism after its Query Language. Yes!

Upon reading the documentation, I use the following Ranking Language code:

orderby=[x = page_number(int) : if ( x % 43 == 0 ) then x else fail()]

Drum roll.....


...It fails. Expected an 'int' for the '%' operator, but found 'page_number(int)'.

What? **Heart sinks**

Well, I won't tell you about the resulting melancholy that weighed on my stricken heart for the next 48 hours while I stewed over what had gone wrong.

Instead, I'll just tell you that I found out that since each attribute is able to have multiple values (just not necessarily through a data feed), I needed to apply an aggregating function on the value before applying the mod.

So, then I tried:

orderby=[x = page_number(int) : if ( max(x) % 43 ) then max(x) else fail()]

And it worked!

It's always fun running into problems like that because there is an interesting solution hanging right around the corner.
Posted in Arrangement, Art, Business

Cummings Studio Chocolates

This is a chocolates website that was a lot of fun to develop because I got some free chocolate out of it! It is based off of ZenCart, which is based off of osCommerce. On this site, I did all of the graphic design, most of the content definition, and all of the custom programming.

ZenCart is a PHP shopping cart application that is a huge step forward from the base osCommerce. While I have a new open source shopping cart application favorite (KonaKart), this was my favorite for a long time.

We customized the shipping options for local delivery as well as regularly shipped as well as some custom programming for a Design-Your-Own-Box section that they were very excited about.

Note: The site is currently in disrepair due to a versioning issue. You can still view quite a bit of it; however, you won't be able to get all the way through the site. I am working to fix it.
Posted in Arrangement, Art, Business

The Pi-Dye T-Shirt Shop

So, this one is my baby. I developed this site for a personal business several years ago with the help of my good friend Benji Smith. It is developed in PHP and is based on the open-source shopping cart application osCommerce. Benji did most of the look-and-feel, while I designed the t-shirts and did the custom programming.

Some of the custom programming elements were:

1) Integration with PayPal
2) Attribute-based weights
3) Hot products listing

In summary, this showcases PHP development, integration with open source, and graphic design.
Posted in Arrangement, Art, Business

The Longaberger Company

So, I picked up a little bit of freelance work this last month to pay for the Tile Surprise that I gave my wife after our Alaskan Vacation (that was an expensive June).

Anyway, at the end of one job, my client asked for my portfolio to hand it off to others.


It's been so long that I've done freelance work that I'm not sure that I have one!

So, here goes nothin'. This is the first post of several that will "showcase" my past work.

The first that comes to mind is The Longaberger Company: