October 2009

Oct 11, 2009
200910111000.jpg

200910110922.jpg

One of the things that's been on my bucket list for a while is to start a t-shirt company. I'm surrounded by people with great artistic talents and keen senses of humor, and it seems a shame to let those ideas languish among such a small group, so what better way to spread them than by sporting them around all day on your upper body? CafePress is one of several services that let's you get started selling printed products without a serious outlay in funds. If you're designs take off, you can always take your designs to your own site. I also also ordered a shirt from Zazzle.com so I could compare and contrast. In case you're thinking about ordering some custom shirts, here's a couple of differences between the two services:

  1. CafePress is a significantly cheaper. It cost me around $20 for each shirt, and shipping was free. Zazzle cost $25 plus $4 shipping, making it a $29 shirt. I don't remember ever spending that on a t-shirt before.
  2. Zazzle has bigger printing area by 68 square inches. CafePress is 10x10, Zazzle is 12x14 and you can have it horizontal or vertical.
  3. Zazzle has a nice tool for seeing your shirt on a variety of models of different shapes and sizes. CafePress just has the shirt, no model.
  4. The process of designing the CafePress shirt went more smoothly and had a few more options.

I decided to start real simple and created a t-shirt around a misspoken phrase I heard the other day which gave me a nice laugh. It's a little obscure, but the project was designed to get me started with the creative process and test out the quality of printing over at CafePress. I also ordered a shirt to advertise one of my recent ventures at geeky events. I purposefully chose a single color, and did a light-on-dark and a dark-on-light to see the differences. Both came out pretty nice, with crisp edges and bold ink. I put them through a wash, and they didn't shrink or flake. The white ink is raised up like a typically silk screen shirt, and the black is more like a dye without any raising. The neck is a little tight, but the shirt (I ordered large, fitted American Apparel shirts) is soft and long - a feature severely lacking in a lot of men's t-shirts.

Once I get my Zazzle order I'll post a bit more contrasting the quality of the printing and shirts.

Oct 8, 2009
200910081047.jpg

Several months ago I managed to grab some tickets to Ignite Boise 2 from a friend. It was the most fun I've had watching a live performance in a while. Half of it was the fast-paced, multi-faceted topics and presenters, and the other half was a jam-packed room full of slightly inebriated, vocal participants. It felt like there was no third wall, and that it was more of a sport than a sit-on-your-hands-and-listen gig. So, as my family eagerly awaits the availability of tickets (attendance is free, but you can get tickets to get in early), I decided to go ahead and submit a talk for Ignite Boise 3 in November. I've been on this planet for a while now, and I've gathered enough interesting techniques for getting the most out of living to fill a 5-minute slot.

Life is short, we should be spending more of it doing what makes us happy!

And this talk will summarize just about everything I've learned about how to do just that. In Extreme Productivity, I hope to introduce the uninitiated into a slew of techniques for increasing enthusiasm (the very core of productive living), outline a mindset that attracts opportunity, and lay down some principles - many backed by scientific research - that will help you get more done in the limited waking hours of our life (and maybe even the non-waking ones!). Here's the one-minute bullet-pointed run down of some of the topics I'll be covering:

  • How to fit more in your head without a lobotomy
  • Increase your waking
  • How to make work suck way less
  • The myth of multi-tasking
  • Introducing multi-purposing
  • The body is a truffle - How to use your body to please your mind
  • How the people around you affect your attitude (and how you can affect their affect on you)

Oct 8, 2009

I've been on a T-shirt designing kick lately, and put together a simple design for an upcoming talk I might be doing at the next Ignite Boise on Extreme Productivity. In the process of designing the shirt, I wasn't able to find a GPL / Creative Commons licensed flow chart of a GTD-inspired process, so I downloaded OmniGraffle and put together my first flow chart ever! I've packaged up the files (black and white and color versions, both OmniGraffle and a transparent high-resolution PNGs) which you can download below, licensed as Creative Commons.

200910080939.jpg 200910080945.jpg
Oct 5, 2009

One thing that's really nice about working on your own Drupal projects is that you get to share what you're working on (no NDAs, woot!). This particular project (Build a Module.com) is a video tutorial site for newer Drupal developers. For a while, I had a single product offering, but feedback made me realize that people like options. So, I decided to to offer single video purchases as well as 'collections,' or groups of videos bundled up into a single product. I also needed to make sure that customers had the right permissions set on files depending on their purchases.

Here's a video outlining the solution I came up with. Scroll down below the video for further details.

About the flow

I have 3 node types:

  1. Videos - Contains description and video file in a file field
  2. Single Video Product - Is an Ubercart product with a node reference CCK field pointing to a single video
  3. Collection Product - Another Ubercart product, but this one has a node reference CCK field that points to a number of videos

I didn't realize that a node reference field could point to multiple nodes before a fellow Drupalista pointed it out to me. Eesh! I really could have used that info a year ago.

So here's the flow:

  1. A user adds a Single Video Product or a collection to their cart
  2. They check out and complete the purchase
  3. They visit a video page
  4. A custom function checks against their orders to see if they have access to the video. If they do, they're in.

The function used in step 4 uses several queries to determine access. The queries check for the following:

  1. Is the product free? If so, show the video.
  2. Has the user purchased a product that includes the video file that this Single Video Product type points to?
  3. Same check for a Collection Product type
  4. If there is no product for the video, then give access (some videos, like the intro video, don't have an associated product)

In the hook_file_download, the same function is called, but I first have to figure out what node the file belongs to. In Drupal 6, hook_file_download only supplies you with the name of the file. No node associations or anything, so you have to connect the dots with your own query. I think the reasoning is that a file can belong to multiple nodes, but since my workflow doesn't allow that, it's not an issue.

There are some good things about this approach, such as when files change in the nodes (i.e. you upload a video with corrections), even though there is a new file name, the node association will remain the same and access will be granted.

For a while I was using a module called File Access, which allows you to set granular permissions for each file based on user or role, but because I would have to build a connector action between a purchase and the access, and then respond when new files are uploaded, I figured I would keep it simpler and just cross-reference the orders instead. The downside is that if my products change, so will access. Also, using File Access would enable access based on field, rather than on node. So, if I have two different versions of a file on the node (iPod version and full-size) and wanted to sell them separately, I would need something more complex.

Part of the reason I'm putting this info out there is to get feedback and see if a module that handles this type of access and setup would be a welcome addition to Drupal contrib, so feel free to drop me some feedback below.