by David LeMieux
Widgetbox, my current employer (full disclosure), recently introduced a slick mobile site builder. It works much like our popular Blidget product. You take Internet feeds and other content sources and include them in to a mobile-compatible web site. It literally takes minutes to get a basic site up and running and it works really well. My hats off to the team at Widgetbox that put it all together. I got to help a little, but I have been working on another project.
One really nice feature of the mobile site is that Widgetbox gives you a JavaScript snippet to put on your normal site that will redirect mobile users to your new mobile site. I put a mobile site together for myself and now whenever you visit this site or my portfolio from a mobile phone (iPhone, Android 2.0, or webOS) you will see my mobile site. For those of you on a non-mobile computer, it looks a lot like this:
This Is Huge!
You can also go take a look at http://m.wbx.me/lemieux if you use Safari or Chrome.
As I stated before, in a parenthetical, the mobile sites currently work best on the iPhone and Android 2.0+ phones. The sites work decently on webOS phones, but the webOS browser isn't as feature rich. webOS 1.4 did improve things quite a bit, however.
For those interested in the technology we are using, it is mostly based on JQTouch though I know the team made some enhancements and other changes.
I encourage anyone interested to give it a try. Especially since having a mobile presence is becoming increasingly important.
Let X equal the amount of time since an event, E, has occurred. Let Op equal the predicted occurrences of E over the lifespan of the event's perpetrator measured in time, L, and let Ok equal the known occurrences of E.
The probability of E increases as X increases according to:
P(E) = (X(Op - Ok))/L
*thanks to Steve Astle for the inspiration.
I added a not-so-subtle Amazon affiliate link to E.ggTimer. Why? Ever since closing up shop at WidgetNest my web projects have been a drain on resources instead of self sustaining. Also, I really want a new bicycle (my old bike was stolen).
The last time I tried something like this I got about $20 over a two year span. We'll see how well it works out this time.
I had intended to use Google AdSense but they didn't think my site was cool enough. Actually, at first my account was stuck in some never-ending black hole of not being able to sign up because I already had an account, but not being able to use my account because I hadn't actually signed up. When that was finally resolved I applied and got denied. The official reason is because E.ggTimer "looks like it is under construction." I took that as meaning they couldn't find any content that would be relevant to advertise against. I don't blame them. It really is just a utility site, so there isn't much there in the way of content.
As far as making my sites self-sustaining goes, I at least have the luxury of being able to afford decent web hosting. That said, why not strive to have a product that can keep itself afloat? If I can break even I'll consider it a success.
If you have any interest at all in the current "Is Flash Dead?" debate (http://isflashdead.com) then you might want to read the following:
My own kids were afraid of me!
Or How I used candy to get children to sit on my lap and tell me their deepest desires.
Due to a last-minute schedule conflict, the designated Santa was unable to make it to the Christmas party. I was asked to fill in. I resisted at first, but then I had fun. The beard made me gag.
Huzzah!
Oops, you are so two thousand and late.
J.otDown got a small update this weekend. As I work to improve J.otDown and enable multi-user collaboration and editing (which is going to take while, I am busy!) I have been trying to take small steps. The first finished step is alerting the user that changes have been made. Now when you try and save the Jot, if it is out of date you will be alerted. You can then get the latest (and lose your changes) or save the file and overwrite whatever was there. It isn't perfect. In fact it may even be confusing, but it is a step in the right direction, I feel.
Or How I lured children to my car with candy then took their pictures.
Every year my church congregation holds a Halloween activity called "Trunk or Treat." The premise is simple, it is like Trick-or-Treating except it is done in a parking lot from car trunk to car trunk. It is a fun activity with games, candy, and some friendly competition.
Last year I totally spaced the event and with less than half an hour before starting I whipped up an "award winning" design. We won the "Cutest Car" prize. This was satisfying, but part of me wondered if I could win "Most Awesome Car" or "Super Deluxe Ninja Car of Extreme Skill and Coolness" (I don't even know if that is a real category, but it should be). Anyway, I more or less forgot about it until this last September, 2009. That is when I came up with a plan.
Look at all that technology!
I was working on PictureNest at the time as a fun side project when it struck me that it would be super awesome to make a real photo booth. Around that same time people at church began to talk about the upcoming Trunk or Treat activity. Genius struck. I would make a real photo booth in the back of my car and crush the competition. No more "Cutest Car" for me. I was going to make a trunk so awesome that the Super Ninja category would be invented for my sake.
The Parts:
The Photo Application: This came easily. Mostly because I took what I had already made for PictureNest and turned it in to an AIR application. I added a few new features and tested it thoroughly for memory leaks and performance.
The Print Service: I wanted the user experience to be that when someone got their photos taken at the end the photos would print immediately and without having to confirm printing. AIR, unfortunately (and for good reason) does not allow this. My solution was to save the photos in a known directory then asynchronously read that folder and print whatever was inside of it. Not 100% fool-proof, but since I would be running it myself I could be sure that things were set up properly. I turned to Java for my printing needs. I wrote a handy Java print service (which only worked on Windows, more on that later) that would scan a given directory for images then print them to a chosen printer. It worked wonderfully. Again, I tested this service for memory leaks and performance over time and with high capacity.
The Computer: I had originally planned on using my work laptop to run everything. It is small, and would travel well. It would not, however, print. Apparently, and obviously I suppose, the print services aren't the same on Windows and OS X. I was developing on Windows but I figured that because I was using AIR and Java that moving to a new operating system would be cinch. I was mistaken. The AIR app worked perfectly, so props to Adobe. I didn't take the time to try and figure things out, and so I suppose the Java printing issues could have been worked out.
The Printer: My trusty nine-year-old Ink Jet worked like a charm. I used HP Photo Paper, cut to 3 by 8 inch strips.
The Booth aka Car: The back of my car, a hatchback, was big and roomy and perfect for a photo booth. I used a Gorilla Torch to light the backdrop. The backdrop itself was made of some bargain fabric from the local fabric store and a hat rack I rigged to hold the fabric like a projector screen. I used a folding camping chair for people to sit upon.
The Set Up
With all the parts planned out I had one major obstacle to overcome. If I was going to run a computer, monitor, web cam, and printer in the back of my car with lighting I was going to need power. I researched every conceivable battery/generator/car-adapter method I could think of. When it came down to it, though, unless I wanted to spend a ton of money on a probably noisy power generator I was going to have to plug my car in. But where? I searched the entire perimeter of the parking lot we were going to be in and eventually found one outlet. Just one power outlet! Luckily it was fairly close to a parking spot but it meant two things. First, I had to get to the spot early to make sure I could get it. Second, since I didn't have anything to test it with, I was going to put a whole lot of work in to something that might not even be able to turn on.
Claire helped me do the signage.
The day of the Trunk or Treat went so smoothly that I thought nothing could go wrong. I got home in time, I took the car to the church and got the perfect parking spot and I double and triple checked my supplies. I was ready. When it was party time, we walked over to the church building and had a generally fun time. Our kids were pretty cute (Tinker Bell and Peter Pan, in case you were wondering). Then I went out to the car to set things up.
I got to the car, opened up the trunk and got out the extension cord. I plugged it in to the equipment in the back and then rolled it out to the wall. I was three feet short. I almost started to cry. I had estimated that a 50 foot cord would do but apparently I needed 53 feet. Did I let three feet stop me? No. I was prepared to drive my car up on the curb if need be. That said, I had a bit of serendipity as I saw some other people taking down the haunted house portion of the party and I got to borrow another extension cord. I ended up with 47 feet too much.
Disaster averted, at least until I started to set up the backdrop and a crucial piece of hardware went missing. I wasn't going to be able to put up the backdrop but then I spotted the hardware underneath a neighboring car. After that I got everything set up and turned on the computer and started the program. Then I unplugged the keyboard and mouse and plugged in an external keypad I had bought to use as the starting mechanism. All you had to do was hit "ENTER" and away it went!
The Crowds
My proximity to the outlet was important for functionality, but one thing I hadn't counted on was that everyone with cool trunks would conspire against me and park on the opposite side of the parking lot. In theory, anywhere in the parking lot was game, but by some weird coincidence (or unspoken rule) everyone parked in one area. So no-one came by for a while until a group of more adventurous older kids came over. They were impressed. The first group left and then soon returned with even more of their friends. Then, as time went on and the word got out there was a line. Lots of people, and groups, wanted to get their pictures taken. Unfortunately my printer, stalwart as it is, was not very fast. So towards the end people were waiting as long as 10 minutes for their prints. This fact drove people away, I think. I ended up having 50 people use the booth though more might have done pictures if not for the long wait time. I tried to be upfront with people as best I could. I even encouraged leaving and coming back later to pick up your photo, but not very many people listened. A good crowd of people surrounded my car the rest of the night.
What the pictures looked like, mostly.
The Award
So, as I had hoped I was given an award. "Cutest Trunk" - can you believe it? The judges said they loved my trunk but didn't know what category to put it under and "most awesome" wasn't a category. (I don't know what the categories were, but I am imagining something like "spookiest" and "best candy")
Cutest Car? Again? COME ON!
The Code
I want to make the code for this available, but I am currently in the process of moving from Windows Vista to Windows 7 and have not yet reinstalled my development tools. Once I do that I will make the code available, but as you can see it has taken over a month to write this blog post about it, so lets see how long it will take me to get the code up.
What's Missing
I didn't get many pictures of the actual event, ironically. Nor of the final setup.
PictureNest: http://www.picturenest.net
First off...
Awesome!
So I made an online photo booth and put it up at PictureNest.net. I already owned the domain so I decided to go ahead and use it. It isn't as complete as I want it to be, and there are still some other "phases" but this is the end of phase 1 and so I am letting people know about it.
That is the last of my "new" ideas I plan to work on for a while. My more immediate plans include finishing the aforementioned phases of PictureNest and then some sweet updates to e.ggtimer and j.otdown that I hope to have done by the end of the year.
You don't know it yet, but it is all coming together. Believe me. It is going to be awesome.
I hereby decree that it is weird that people make "boy" and "girl" robots. Do we want them to be able to reproduce? I am pretty sure we are creating our own robotic uprising, they won't even have to become self aware.
Seriously though, why do we try and make humanoid robots that have male or female characteristics? First of all, aren't robots supposed to be more efficient than us? Then why give them the same range of motion and physical obstacles that we ourselves face? Adding some kind of gender makes even less sense. What would differentiate a male robot from a female one? Would they have different skills? Why should they? I will come out right now and say that I think that it is in our nature to have different roles as men and women in society (roles NOT being defined as rights). But robots? Come one.
I suppose robots are designed and build for different tasks, but if we are making humanoid robots why not just build one that can do the whole range of tasks. Why would we ever need to build different "gender" types? (I put gender in quotes because robots wouldn't have a biological sex).
/random thought.
I turned off WidgetNest this morning. Now it is time to turn my attention to other things.
WidgetNest, 2007 - 2009
I hereby decree that WidgetNest will always hold a soft spot in my heart. WidgetNest was formed by my friends Jared, Interaction Designer Chris Hall, and me in early 2007 with basically one idea in mind. We would make we widgets and see if we could get people to pay us for them.
I am a little sad to say that for all intents and purposes WidgetNest is now dead, but I take comfort in knowing that while it may not be what it once was it was definitely a success. The experience, knowledge, and inspiration that came from that project got me where I am today. Within a month of inception we had people calling us from Google, Netscape, Brides.com, and other high-traffic websites wanting to talk to us about widgets. We were able to do lots of fun work and learn a lot about business and software development along the way.
WidgetNest widgets are still viewed millions of times a week (if not per day!). We aren't doing any more client work so we don't have the inflow of money we need to keep the servers alive for too much longer, so the end is coming soon. I will try and keep things running for as long as I can. Our most popular widgets have already been transferred to more reliable hosting, so no worries there, but as it is we have already had to cut back on what is available.
I would like to thank Jared, Chris, my wife Val, and all the people we talked with and worked with along the way. WidgetNest was one of the best decisions I ever made.
A few weekends ago my brother needed some help with a homework assignment. He was supposed to have made a magazine of sorts with articles and advertisements focused on a certain topic for an English class. He hadn't finished it and needed some help. I volunteered to help make the ads.
The topic of his magazine was Mixed Martial Arts. He decided that he wanted at least one of the ads to promote a made up MMA supply company called "Endure." Here are the ads I came up with.
I try to be a time-conscience, eco-friendly, on-time kind of a guy, but I can't seem to avoid taking longer-than-needed showers. I realize that no-one but me needs to know this, but I don't care. It is time for another segment of things you didn't need to know.
This is a conversation I have with myself almost every morning:
Me: I am going to just take a quick shower.
(turns on shower, feels how nice it is, takes too long)
Me: Oh no! I took too long again!
Somewhere between having that thought and turning the water handle (about 0.5 seconds) I get so distracted that I forget my goal. Maybe I should write it on the shower wall with a dry erase marker.
-And this concludes another segment of things you didn't need to know.
I would suggest starting here: The Problem With Local Connection
At the end of the above-linked post I said "In the mean time we are working on a solution using SharedObject and timed polling [to replace LocalConnection]." So it should be no surprise to announce that we have successfully done so.
We replaced LocalConnection with SharedObject
How is it done?
The premise is a simple one, instead of directly calling a method on another swf file as you would with LocalConnection, we have created a polling system that uses SharedObject to relay messages from one swf to another. SharedObject is like a cookie that Flash Player can use on a users machine. Taking that in to consideration we built a controller that uses SharedObject to save and retrieve data at timed intervals and in that way shares commands between different swf files.
Here is a basic rundown of what happens:
SWF One - writes an instruction to the SharedObject using the controller.
SWF Two - is set up to listen for changes of the SharedObject and then parse new values for instructions.
There are some "gotchas"
First, if you have lots of SWFs on the page you don't want them to accidentally overwrite any previously set but unread value. Because the sending isn't instantaneous it is very possible that multiple instructions could be send before the receiver had a chance to poll for more of them. To overcome this we implemented a basic multi-thread like system of mutexes and semaphores. Essentially, different actions (reading and writing, depending on the circumstance) block others and the controller knows how to queue up commands. The controller also knows how to interpret queued commands.
Second, there are people who don't allow memory for SharedObject on their machines. In this case we had to build in a LocalConnection backup. This is ironic because we build the SharedObject controller to replace LocalConnection, but it is more of a Plan B than a surefire backup.
Third, related to the first, there can be some lag between when a command is sent and when it is received. Fractions of a second (in our case) but still lag nonetheless.
Fourth, because of the way we implemented queuing sometimes there can be a high increase in CPU usage. We are working on tweaking this.
How can you do it yourself?
That is a very excellent question. We are currently stress testing our solution and are about to launch it on an even larger scale. We now have a very scalable solution for sending messages to multiple swfs on a page. We have tested hundreds of swfs on a page communicating with one another with a 100% success rate. Comparing that to the small range (5-12 or so) of LocalConnection successes and I feel like we have a real winner on our hands.
I cannot say if we will ever release the code and we wouldn't currently because of how new and untested it is (and undocumented and still needing refinement and a million other reasons). I do wish to say we have found a solution, however, and that If you familiarize yourself with SharedObject and think about it for a while you will be able to come up with your own solution. Our controller is literally around 50-100 lines of code; not very big.
If you come up with something you would like to share please do. I am also willing to answer questions if they arise.
Best of luck.
I hereby decree that you should all stayed tuned for the next exciting installment of "The Problem With Local Connection." Will David ever find a way to fix the shortcomings of LocalConnection? Can Flash Player meet the challenge? Is Deborah dead? Find out all this and more, soon!
... and I am back from an unintentional blog/link hiatus. Huzzah!
Here is a blog post and video from Widgetbox that outlines what I have been working on lately: A simple Flash image cropper for use with our Blidget Pro product.
A month ago our second child, Isaac, was born. We are now in the middle of creating and sending out baby announcements. My wife wants to do this for some reason. Anyway, just as I offered my excellent and unmatched skill to my brother (check out all 10 parts), I will be helping out my wife by designing the baby announcement. Here is a first pass.
Welcome, Isaac, to this planet we call home!
To make a long story short I flipped out a while ago and decided to make my internet life a lot more private. I closed up some errant, unused accounts on different services. I increased my profile security settings on others. One account that was in the later category was my twitter account. I decided to switch to protected updates. Now, about maybe a month later, I have turned them back to public.
This is what I learned along the way:
Pros
With protected updates I didn't have to worry about divulging someone more personal information. I could talk more about my location, current goings-on, and personal life without feeling like some anonymous stalker could be reading my public feed. I also received a lot less twitter spam and bot followers. Even when I did, I was quickly and easily able to shut off those accounts that seemed suspect. That kind of extra control was nice. A pleasant side effect of more control turned out to be that as I people requested to follow me I actually found some pretty interesting people to follow back.
Cons
Protecting my updates meant they would no longer appear on the public timeline. That also shuts you off from being found in twitter search results. Suddenly I was shut off from any public conversation whatsoever. I could not participate in any fun memes or discourse based on a tag or key word. Perhaps the most powerful feature on twitter is the search. It is a real-time glimpse in to what people are talking about. Not being able to contribute was frustrating. Protecting updates also brings on more awkward situations. At one point my own mother started following me and I was given the option to allow or deny her access to my status updates. It was an odd moment.
Feature Request
I want to have my cake and eat it to. I think that a nice feature would be to allow those with protected updates to make certain ones public. Twitter already uses the "d username message" convention for sending direct messages. Why not allow something like "p mesage" to create explicitly public messages. That way people who are privacy aware such as myself can have protected updates but then consciously choose to make certain updates public.
Protecting your updates certainly does make things a lot smoother on Twitter. Unfortunately it also completely removes you from the public conversation.
... and that fulfills my Twitter blog post quota for the year. Next subject, please!
UPDATE: I've turned private mode back on. I have decided that not having weird random followers and spam is more important to me that being part of the public conversation. I'm a flip-flopper I know.
Recently, I came upon an interesting problem regarding Flash components. It wasn't the first time something like this had happened. In brief, I was moving a design created in a Flash 10 environment in to a Flash 9 coding environment. Perhaps my situation was unique (or I had some kind of bad setting) but I thought that the Flash IDE would be smart enough to know what I was trying to accomplish.
Here is what I saw:
I had a design done with Flash 10 selected as the publish type. I began copying assets from the stage and library in to another movie clip that I had set up to publish with Flash 9. I was moving all those things because the designer had comped the design with timeline animations and the like in order to illustrate how it should work. This is how we roll at work. Our process usually works well. The business team gets a good feel for how things will look and feel, then I take the animated prototype and start putting in all the wiring. This usually means retooling some of the layout (nesting clips differently, movie things in to the Library for later export, etc.).
Part of the design had a component button. Not a SimpleButton, but a button component from the component library. Everything copied just fine. In the preview it all looked great. The trouble came when I compiled. I was given no errors, but the button lost its label. In fact, when I traced the value of the label instead of "Browse," the value set in the component inspector, it came back as "Label." Somehow it was being reset and then taking on some kind of default behavior.
Here is what I tried:
I tried myriad things to solve this problem. I removed the button and all the assets from the library and tried importing a new one. I tried taking it off the stage and adding it dynamically (addChild) in the code. I even tried leaving it on the state, duplicating it with the code, removing the original and adding the duplicate. Each time the same thing.
Then, in a kind of "ah ha!" moment, I turned the publish setting to Flash 10 and all my troubles went away. Why? I have no idea. I can only assume that something in the setting or some part of the component library knew it had been originally set in Flash 10 and was therefor using resources not available to Flash 9. Eventually we made a new SimpleButton and used that instead.
Here is what I conclude:
This button issue is just one in a long list of complaints I have against Flash Components. Don't get me wrong, components are great. When they work they work well. They are very customizable. They are robust. They do the job and make development time faster... unless they don't work which is, for me, often the case.
Another downside to components is the massive amount of file size they add to your Flash files. At work we have one particular file that is served a large number of times each day. It used to have a Loader component as well as a in-house-developed component. The file size was around (when all is said in done) about 120Kb. We removed all the components and replaced them with classes (MovieClipLoader, XML, and a component-to-class conversion of the in-house one) and now the same product can do much, much more and weighs in at about 60Kb, half the original size because we removed components.
Actually, we did implement a bunch of new features, so really removing the components got the size down to about 25Kb, or about one fifth the size. We just removed two components. Over millions of downloads that saves use quite a bit of bandwidth. (example: If the file had been accessed 1,000,000 times in a day, with components that is 14GB of data transfer. Without components that is 3GB of data transfer)
I wish I could have some kind of solution for this problem. Some clever hack to make components work. I do not. I welcome any suggestions, though. I want to contribute to the Flash community, no just whine all the time.
Components should be easy to work with but aren't. When they work they are great and really help speed up development time. Unfortunately they are bulky as far as file size is concerned, and if you are dealing with any high amount of traffic their benefit is quickly outweighed by the extra expense they will bring to your bandwidth bill. Bandwidth aside, the built in Flash components are often buggy or don't seem to work they way they should. Maybe I am "doing it wrong," but with nearly ten years of Flash experience under my belt I would hope that by now I would know what I was doing.
If you are having trouble with a Flash component stop blaming yourself, it probably isn't you. It's them.
If you know me or frequent this blog often you know that from time to time I get a silly idea in my head and then bring it to life. In fact, if you are my friend you can't escape knowing this because following a project completion I do nothing but talk about the recently completed project for the next two weeks. I apologize. Anyway, it is time again for me to introduce another silly side project and talk about it like a jabbering fool. Like a child on Christmas morning I am only excited about a new toy for a brief period of time, then I start to unwrap the next. E.gg Timer is sooo two weeks ago.
Without further ado, I would like to introduce J.ot Down - a cousin of sorts to e.ggtimer. In a word, J.ot Down is a notepad. There is, as always, more to the story.
J.ot Down's idea came from an observation I made that people are spending more time in their Internet browsers. Many modern browsers allow the user to have multiple tabs of web pages open at once. People use browsers (or web pages loaded in the browser) to communicate, to research, to read, to write, edit photos, watch video; for just about everything.
It has long been my thought that the Internet is creating a shift in how we think about computing. In many ways a traditional operating system (Windows, OS X, Linux) is just the backing behind the web browser. This isn't true always, nor is it true in niche situations, but the things I did outside the browser eight years ago, write text documents, edit photos, send email, watch video, etc., were all done in the OS in different applications. Now I do all of those things in Firefox.
With a few understandable exceptions the browser is where I spend my time; however, I did notice one thing that I was not yet doing in-browser. Jotting down notes. I often use the OS default text editor (Notepad, Text Edit, Nano, Emacs, whatever) to write down quick lists of things to do or to help keep my thoughts straight as I work throughout the day. These text documents I create I hardly ever save or return to. They are disposable. Like a pad of notebook paper. Though occasionally I keep them because they contain valuable information. I realized the other day that there did not seem to be a way to do the same on the web.
Sure, I could have used something Google docs, but then my documents would be cluttered with files I no longer needed.
That is why I made J.ot Down - so there would be a simple way to write down throw-away thoughts in the browser but optionally save them and share them when needed.
J.ot Down is pretty simple. You open j.otdown.com and start typing. When you pause or hit save you are forwarded to a secret URL which serves as a permalink to your recently created note. The note then continues to auto-save as you edit. You can then keep it open in your browers as a tab and return to it as needed. Because it creates an unique URL for you, if the browser crashes or you close it accidentally you can always restore it or go back to it through your browser history. (more info here)
Simple? Yes!
Pointless? Maybe. But so are many of my other projects so this is totally on par with my other work.
Now, I will point out that there are some missing features.
1) You can't currently add a title. You just get a date-based URL.
2) No way to secure a note. While it would be hard to guess at the unique URLS, it is not impossible. Securing them is a high-priority iteration task.
3) Since "releasing" it in to the wild, I have caught my self wishing that it had some kind of collaborative editing feature. I am trying to figure out the best way to solve that issue. Do I even need to add that as a feature?
4) There isn't a way to keep track of past notes other than your browser history (or emailing yourself the links all the time). This one is hard. Not technically, mind you, but I don't want to bother users with creating an account. I really want this service to be as simple as: show up, type, and you're done! Also, the idea behind this site was to enable users to create disposable, one-time notes that would auto-save just in case something extreme happened. Any suggestions would be great.
I plan to iterate and make improvements. I do this with all my projects. The E.gg Timer of today is not the same from three months ago. I am excited to see where J.ot Down goes. It may go nowhere. I think it has some potential, but doesn't everyone that creates anything think their creating has potential? Most the time, I think.
I welcome J.ot Down to my side project family.
E.ggTimer.com Home Page - Refreshed!
I would like to tell the tale of E.ggTimer.com and how a simple (and silly) side project of mine took on a life of its own thanks to Twitter.
I made e.ggtimer.com back in December of 2008. I made it, as I make many things, because it was something that I wanted and couldn't find anywhere else. I have made many silly things for no other reason than I found myself saying "I should make that" on more than one occasion. Sometimes there are pre-existing solutions to my problems, but there is something about making things that is satisfying and fills a void. I suppose you could call it my hobby.
Anyway, up until a few days ago maybe five people had ever used, or even knew about, E.gg Timer. Then something amazing happened. Tim Ferriss, author of The 4-hour Workweek asked this question via Twitter.
Tim Ferriss asks a question.
"Can anyone suggest a good countdown timer for Mac or both Mac/PC like Compact Timer? http://ping.fm/z0f0S" 2:22 PM Feb 24th
Ben Lew, a friend of mine and web designer extraordinaire, happens to follow Mr. Ferriss on twitter. He saw the question, thought of my simple site, and responded.
Tim Ferriss gets some answers.
"@tferriss correction: http://e.ggtimer.com/ via @lemieuxster" 2:36 PM Feb 24th
Apparently Mr. Ferriss clicked the link and liked what he saw.
E.ggTimer, I choose you!
"Per 19.5K ppl, best Mac timers, descending order: 3-2-1 Timer, Minuteur, and Apimac Timer. My fave: http://e.ggtimer.com/ (via @n0s0ap)" 2:49 PM Feb 24th
After than, and surely due to the popularity of Mr. Ferriss and his position as opinion/thought leader mentions of e.ggtimer started to surge on twitter. People from all over discovered the site and decided they liked it. For whatever reason, a simple Flash countdown timer was really appealing.
The next day, no doubt due to the activity on twitter and the referral from Tim Ferriss, Lifehacker.com put up a story about E.ggTimer and the flood gates opened wide. Lifehacker suffers from the plight of most major blogs, that is copycats and page scraping. Anyway, E.ggTimer got noticed.
I am a bit of an egoist when it comes to things I make online. I like to keep track of who is using and talking about my stuff. I think all Internet developers do this. Maybe I shouldn't admit to it, but I just did. Looking at the comments reveals a fairly normal cross section of Internet users. The overall consensus seemed to be that it was a neat utility. That is more or less what I would expect to hear about a project that took my two hours to complete some random weekend. Unfortunately, some people were taking E.ggTimer was way to seriously. The Internet did not disappoint when it came to people finding ways to put down or defend the existence of the site. There were mentions of how useless the site was, how useful the site was, and one person even went so far as to create their own version and then try to get equal blog coverage.
thetinytimer.com
thetinytimer.com seems very well put together though their page design does seem somewhat familiar...
tinyask.com
I will give the benefit of the doubt on this one. The developer has probably never heard of tinyask.com. But maybe something about "tiny" being in the name makes us want to use that kind of gradient.
The flattery of imitation aside, the response was still more than expected. I received a whole lot of email about my site: People requesting features, telling me "good job", and other advice and communication. Since my contact information isn't really readily available on E.ggTimer itself that means that people were willing to search it out. That is pretty cool.
Perhaps I am reading in to this a bit much. I most likely am. But because of one question on Twitter a site that got 0-2 visitors a day is now getting 4,000+ visitors a day. When Lifehacker posted their story 12,000 people came to the site. I do not expect the traffic to stay up that high for very long. That said, I have been on the front page of Digg a handful of times, even back in the "just tech news" days, and while the traffic from Digg was large, it wasn't nearly as large or as high in quality as the traffic from a well-known blog or from those people coming from Twitter.
(For the record, I have never really actively sought any of this traffic though I can't suppose I would be telling the truth if I didn't think it was the coolest thing ever!)
E.ggTimer is just a simple web-based countdown timer with a fairly hackable URL structure. It isn't part of the next wave in Internet development or anything spectacular. What is spectacular is that Twitter has real-time capacity to drive eyeballs and traffic. People talking, asking questions, and getting answers almost instantly is powerful indeed.
6lbs. 10oz.
Welcome home, Isaac. I love you!
I hereby decree that the best 20 minutes of television ever created are quite possible contained within the episode entitled "Fire Ant" of the series "Space Ghost Coast to Coast".
I have embedded those minutes below. Be sure to watch THE WHOLE THING. WATCH ALL THREE OF THE MOVIES ON THE BELOW PLAYLIST. For a more pure viewing experience, watch them at around midnight. If you don't laugh your head off you are not truly human.
---
If you actually watched the whole thing and you are still here, please sign your name in the comments because you are truly awesome.
That's right! Today while on BART on my way to work I got the best Brain Age possible: 20. Awesome! I am not as lazy-brained as I thought I was becoming. Now I just need to read more.
I don't know what this is called other than "delicious"
I do not drink alcohol. Never have. Never will. I am not alone in this. That said, there are certain times when I find myself wanting to sit back and relax and drink something and soda or ice water just won't cut it. I am definitely an advocate of juice, but that, too, can be uninviting. So, in my quest to find a good relaxation beverage I stumbled across what I can only call "personal punch."
I am sure there is a name for this already and that I am not the first person to discover this combination, but a half-and-half mix of OJ and Ginger Ale on ice is amazingly delicious and fun to drink slowly. A perfect relaxation beverage! What I enjoy about it most, though, is that it seems the longer you take to drink it, the better it gets. Maybe it is the ice slowly melting and mixing in. Maybe it is the Ginger Ale flattening in the OJ. I couldn't really say. All I know is that it had fast become my home-from-a-long-day-of-work beverage of choice.
Here is a handy, illustrated guide on preparing your own.
What you'll need
The separate, but equal, parts
Today I had the opportunity to work on a small personal project and so I took it (the opportunity). I have been a long time fan of sites that aggregate links for others, especially those that are done by one or maybe two people who share interests similar to my own. One such site is Waxy Links. Another is Coudal Partner's Fresh Signals. Today I am happy to say that I completed the code for my own such service.
I Hereby Decree - Links has a terrible name but you know what it is. I am going to do my best to link to things on the internet I find interesting and noteworthy. If for nothing else, this serves as my own personal bookmarking service. I usually make things that suite my own needs and hope that others will enjoy them as well. The same is true for this project. I wanted to add to the "declaration engine" (unofficial name of the software that runs this blog) and enable link curating.
If you happen to follow the site and find any bugs or weirdness, please do let me know. Thanks.
If my feed shows up funny in your feed reader I apologize. I made some updates to how the feed shows the timestamp and I think that may cause some feed reader chaos. The feed time should now be correct, however.
Thanks for your patience.
I hereby decree that you should all check out First Videos of the GlaDos Speakers and Companion Cube Subwoofer on Daniel's blog. He is trying to do updates weekly. Awesome.
Here is a sneak peak.
This is a triumph!
Hooray!