New portfolio page
24-January 2010
I decided to concentrate the things that I have made that are worth sharing into a special portfolio page.
I decided to concentrate the things that I have made that are worth sharing into a special portfolio page.
[update] Just fixed a bug that was preventing this from working in most browsers. Go ahead and give it a try now.
I made this browser-based Mandelbrot set zoomer for Yahoo’s Open Hack Day NYC 2009. It is built in HTML + JS and will use the browser of anyone that has the page loaded to construct fractal images for other users that are also viewing the page. Click on the large image to zoom deeper and deeper. It works best in Safari 4, okay in Firefox 3.
This is a proof of concept of portable browser-based distributed computing. (It even runs on iPhone.) The web server will ask your browser to render a specific square on the complex plane onto a canvas. Your browser will then submit the rendered square by turning the canvas into a data URL and posting it to the server’s cache. At the same time, your browser is requesting that the server send out render requests for all squares necessary to make up your current view of the complex plane. These requests may be rendered by your browser, or they may be rendered by another users browser that currently has the page running. Load it up on two or three computers at the same time and you’ll notice a significant increase when rendering parts of the fractal. The server caches the tiles, so browse to an obscure part of the fractal to make sure that the system is actually sending requests to the swarm. You can see the last square that your browser rendered just below the large square.
This technique can be used for a specific type of problem where the information that describes the problem is significantly lighter-weight than the computation required to solve it. Specifically, this would also work well for a web-based ray-tracer.
This idea was partially inspired by Resig’s Test Swarm service that distributes front-end toolkit testing to any user that hits the site with their browser.
After looking at traffic coming to thesellery.com, I noticed that many of the requests were for a desktop picture that I made a couple of years ago. It’s a picture of the San Francisco skyline that fades from the olden days to 1971.
The original 1971 version is available on Brad Templeton’s website.
[update] After googling around a bit, I found this page. It offers a MySpace theme ready to copy and paste. Guess what the background image is? Guess whose server is being used to host that background image? Chances are that there are quite a few MySpace pages that are linking directly to this images, which would explain the steady hit-rate for this image that I’ve noticed over the past few months. I’m seriously thinking about telling my server to redirect requests from MySpace to something that’s not quite so G-rated :)
No one can be told what the matrix is, but you have to request it by name if you want to opt out of it.
I just opted out of Bank of America’s “courtesy” overdraft protection “service”. Every time I open an account, I always ask if I can do this, but they never let me. After reading this article, I decided to give it another try. After some intentional confusion from the phone rep, I found out that the overdraft service is actually known as the “overdraft matrix“. So, call you bank and ask to opt out of the overdraft matrix. They just might be able to hook you up! Attached to this post is a partial audio recording of the last 8 minutes of the conversation as proof that it can be done.
Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.
My hipper-than-thou grandmother asked for comments on this article provoked by the 40th anniversary of the internet and the issues regarding the erosion of the openness that the internet was founded on.
So, here are four things that I’m looking forward to, or concerned about that are in the internet’s immediate future:
Web standards are becoming stronger. The latest versions of all the major web browsers support HTML 5 to some extent, and are all relatively standards compliant. The popularity of older versions of Microsoft Internet Explorer put application development into a dark age that spanned almost a decade. Internet Explorer was not standards compliant, so it made it very difficult make web applications that worked the same way on other browsers like FireFox and Safari.
The web is more standards-compliant than it ever has been, and as people and IT departments get around to upgrade their browsers, innovation on the web will flourish in ways that we have not yet seen. This is a very good thing.
The article references difficulties that some developers experience with getting applications to talk to each other across internal company networks. The inevitable coming of IP6 will make this less of an issue. IP is the addressing system used on the internet that identifies each machine on the network. All internet-connected machines use IP version 4 (IPv4), but we are approaching a point where the the number of machines connected to the internet will be greater than the number of addresses that IPv4 can uniquely identify. Wikipedia says that all IPv4 addresses will be used up some time in 2010.
The IPv4 problem is the equivalent of a neighborhood policy stating that house numbers can only have three digits, and there is demand for over 1000 houses to be in the neighborhood. This creates a supply vs. demand situation, so the price of IPv4 addresses will increase as more and more of them are needed as the internet grows.
The address space problem has been mitigated to some extent by using a technique called NAT (we use it at the Old Homestead). NAT (Network Address Translation) allows a sub-network of machines to communicate with the internet using a single public IP address. While it mitigates the IPv4 address shortage problem, NAT makes it a bit more difficult to establish point-to-point communication between two computers that are each behind a NAT gateway. So, instead of making software that works like this: (computer A) <--> (computer B), you have software that works like this: (computer A) <--> (service provider) <--> (computer B). NAT is the reason behind a significant number of providers of internet services; it allows them to act as, and in some cases, charge for, being an intermediary between you and whoever you are trying to connect to. Services like Vonage, GoToMyPC, WebEx, and Skype come to mind as I’m writing this.
To summarize, the limits of IPv4 have made it expensive to uniquely identify computers on the internet, and have fostered a genre of companies that act as an unnecessary middle-man to many online services to solve this problem.
IPv6 solves the address space problem completely; IPv6 allows for enough addresses to uniquely identify every atom in the universe. In an ideal scenario, ISPs would offer an unlimited number of IPv6 addresses to their customers, allowing them to address their machines from anywhere without the need of a third party. The middle-man companies would have to change their business model or go out of business, and a new type of peer-to-peer software would blossom and bring about all sorts of new innovative applications to the internet. There are security implications that go along with this new model of communication, so we end up with the classic toss-up of availability vs. security, but that’s a choice that I would like to have.
We may also see new hardware applications that leverage the increased network availability that IPv6 brings for things that are currently considered too trivial for network connectivity. For example, controllable light switches that can report that they are left on, and temperature sensors that can tell you if you need to start your A/C or heater before you come home.
Two more things and I’m done:
Google, Amazon, and Microsoft all offer cloud services that promise nearly unlimited scaling and reliability for hosted web applications. This is great, but it also leads to centralization of policy between only a few companies, which may end up stifling innovation if the company that owns the cloud decides to prohibit service that complete against the ones that they already offer. This has not proved to be a problem yet, but this issue parallels the net neutrality debate and controversies around Apple’s iPhone app store to some extent, and it will be interesting to see how this plays out for cloud providers decide to turn this into an issue.
Many services, big and small, eBay, Google, UPS, and FaceBook, just to name a few, are “opening up” their platform using standards like SOAP, REST, or plain XML. This means that they are releasing formal specifications that tell people like myself how to write software that interacts with their service and extend it in ways that the company hasn’t yet anticipated. In an interesting twist on this using standards to open platforms, the RSSCloud project proposes using RSS in an innovative way to replace centralized messaging services like twitter and Facebook.
Premailer is a nifty ruby script that turns the most of the css from external stylesheets and style blocks into inline css on each element. This is useful if you want to be sure that HTML e-mails will remain mostly in-tact in the viewer’s mail client.
It’s a great script, but the interface could be better… and by better, I mean invisible. … so I bought the domain inlinecss.com and made it work with premailer and your URLs. No interface required; just add .inlinecss.com after the TLD in the URL of the page that you want to inline, and the site will mirror the inlined version of your page.
For example to inline google.com, turn http://google.com/ into http://google.com.inlinecss.com/
OK Cupid took it upon themselves to compile my dating profile into some nice maps of where my most compatible matches are. I’m surprised at the results.
Also, the state that I currently live in, New York, came in a close third in the domestic line-up, which strengthens my original argument for moving here.
I designed and partially built a projector about a year ago. I found these plans in my files and thought I’d post them. Download the full plans in Google Sketchup format here.

I’m moving on June 8th. My new address will be:
Thomas Hallock
471 Malcolm X Blvd
Apartment 2N
New York, NY 10037
I’l depart Austin at 1:05PM CT on 8-June and arrive at JFK Airport at 5:57PM ET – JetBlue flight 1062
Don’t worry, I’m not disappearing from Austin completely; I plan to be in Austin every three months for maintenance / inspection of The Sellery, which will continue to operate despite my physical absence.
Here are my unused glowsticks and accessories, and some old pads I used to use for caving. All are still fully functional, clean, and in pretty good condition.
The glowsticks are super-bright and last for about 15 minutes. Great for putting on a good lightshow. I never honed my glowsticking skills to the point where I thought that I deserved to light them up.


My lease is up on 8-June. By this time, I plan to have whittled down my immediate possessions to only include what is on the list at the bottom of this post.
In preparation for the move-out date, I will be getting rid of one significant thing per day. Today, I cleaned out my kitchen shelves and will be getting rid of most of my cookware and serving dishes. Make me an offer because they are going to goodwill by the end of Friday.
So blog, I am making a commitment to you right now that each day, I will make a post about at least one of my significant possessions (over $50 in value) that I am going to get rid of by the end of the day. If I don’t get any offers, I’m going to take it to Goodwill, or to consign on eBay through The Sellery, depending on how much I think it’s worth.
To keep score, this is what I plan to keep after I get rid of everything else:
I was charged with making an advertisement for my eBay consignment shop for the 2009 O.Henry Pun-off. Half as an experiment, and half out of necessity, I decided to see what I could come up using HTML + CSS to make halfway decent-looking advertisement for print.
The result uses SVG, so the only browser that renders it properly right now is Safari, but since it was being printed, all that mattered was that I could get a PDF from it at the end of the day.
The only real problem was Safari’s lack of honesty when interperiting units in millimeters for printing to PDF; 1mm in Safari v.3.2.1 actually means 1.125mm when printed.
.
I find it a bit ironic that this green-themed marketing campaign instructs people print a sheet of paper for personal amusement. It’s still pretty cool. See my solution to the paper problem below.

eBay radio interviewed me about The Sellery and our tips and tools on last Tuesday. You can listen at either of these sites:
http://podcast.thesellery.com/
http://www.wsradio.com/player/wsradio-player2.cfm/type/windows/show/eBay-Radio/segment/24363.html
It’s about 12 minutes long.
After playing with this code and this demo of a javascript mouseover zoom effect, I decided to take the magnifying glass effect one step further and add come refraction:
It uses concentric images placed on top of each other to achieve the illusion. Paste in a URL to any image you want and you can play with it. It’s in an iframe, so you’ll have to dig a little if you want the source; it’s pretty ugly right now.
I was setting up a GMail filter today and noticed something unique about the way the filters are designed: it’s impossible to create one filter that conflicts with another. This allows the user to not have to worry about the order of application of the filters. Beautiful!
This is mostly thanks to GMail’s use of labels instead of folders. Every other e-mail client that I’ve used: Mail.app, Eudora, Outlook, Zimbra, and Thunderbird, all (or need to have) a way to assign a priority to filters to specify which filter has the last say with your messages. For example, one filter might move a message to folder A, but if the message is also matched by a filter that moves messages to folder B, then the first filter’s action is undone. When filters move messages to folders, it becomes important which filter was applied last. Using labels instead of folders, each filter just adds to the message’s list of labels, so it does not matter which order they were applied in.
The rest of the actions, like “Forward it to:”, “Never send it to Spam”, “Mark as read”, “Archive it”, and “Star it” all have this same property; they can all be done without undoing the effects of the previously applied filter. The only action that kind of breaks this rule is “Delete it”, which gives some insight into GMail’s initial hesitation to allow users to delete messages when GMail first rolled out.