I hereby decree

by David LeMieux

 

I sometimes get to work while I ride in to The City on BART and I am always a little disappointed that my coding/terminal skills don't seem more hackeresque, especially when someone is looking over my shoulder. Though I certainly don't want to have my computer taken away for looking suspicious I decided to make my onlooker's experience more fun.

Today while on BART I put together this little number:

Phone Gen Screen
I'm in your phones, hacking your numbers

What this really shows is a bash_profile alias that points to a Java thread I made that spits out a random quantity of random, not even valid, phone numbers at interchanging intervals with either a success or failed message. It then tallies the successes and outputs the success/total ratio at the end. What it looks like it is doing, though, is hacking all the nearby phones.

Why make this? So that the people sitting next to me get mildly freaked out. I mean, to start this baby up I have to type "hack_nearby_phones". Everything Hollywood teaches us about computers allows this to make sense, so it will surely fool everyone.

 

Comments (View)

 

 

I hereby decree that the links section shall be restored. Just visit http://iherebydecree.com/links and see for yourself. I started this links section a long while ago and then stopped as I found that I was user Twitter and Facebook more for sharing. Time has passed and again I find myself wanting to consolidate.

For the three people that read this blog, I hope you enjoy.

 

Comments (View)

 

 

Bow chicka bow wow

Err... wait, Inception. I really enjoyed the film. It was a great action movie; intelligent and original enough to be worth watching multiple times.

One aspect of the movie I really enjoyed was the musical score. In fact, I find myself keen on many of the movie soundtracks composed by Hans Zimmer (Batman Begins/Dark Knight, Pirates of the Caribbean, Sherlock Holmes, and more).

Anyway, if you've seen Inception you know that the protagonists do much of their deeds in a dream state. In fact, they induce dreams within dreams. For every level deeper they go in the dream worlds, time slows down. In other words, you have more perceived time in a second layer dream than you do in a first layer dream, even though the same real time is passing. Confused? Watch the movie.

Whenever they want to be awoken from their dream state, someone has to initiate a "kick" - or some kind of semi-violent wake up call, like the feeling of falling or being hit. To signal that said "kick" is coming, they use an audible hint: The song Non, Je Ne Regrette Rien by Edith Piaf. (Seriously, if you are totally not following me go watch the movie then come back.) So that is why when I found this YouTube clip:


Same music, just slowed down.

I was amazed. "What a clever trick," I thought to myself, "I wonder if it is on purpose. It has to be." It turns it was. In fact, Hans Zimmer has admitted that much of the soundtrack is based on that one song.

So, a clever movie with a subtly clever soundtrack. If you haven't seen it already, go see it. Now.

 

Comments (View)

 

 

You have my sword. And my axe. And my bro.
We got your back, Frodo.

 

Comments (View)

 

 

At work I've begun to use JS Test Driver to run JavaScript Unit and Functional tests. It was very easy to get up and running and it is more-or-less straight forward to use.

Specifically, I have been using the IntelliJ plug-in. It was easy to install and get started, but it does seem pretty finicky and there doesn't seem to be any reliable way to determine what version of JSTestDriver the plug-in uses, only the version of the plug-in itself.

I have never been big on test-driven development but I am starting to be converted to its ways. Of course I would test and validate that my code worked as expected, sometimes even putting it through peer review and a light layer of function stress testing. The idea of thinking about test in a more prominent way, however, is mostly new to me. So far I've found that it can be quite helpful.

My first positive experience came this week when I was writing a test for an already-in-production piece of code and the test failed. It failed on a strange edge case, but it failed nonetheless. This enabled me to fix the issue before anyone else could find in the "real world."

"Of course," you say, "this is what testing is supposed to do." But I feel like it takes "ah-ha" moments such as that to reinforce a concept and I had never had one with testing before.

If you are looking for a way to test your JavaScript code, give JS Test Driver a try. QUnit and JsUnit are also available though I have limited experience with the former and none with the later.

 

Comments (View)

 

 

So, it took a while (sorry Ben) but Steep.it - the tea timing cousin of E.ggTimer - now has mobile support.

Steep.it mobile
Screen shot from early test version on Palm Pre

Features

I decided to go a step beyond the mobile implementation I did for E.ggtimer. Mostly because Steep.it has a much more compelling multi-use case. Here is what you get:


  • Offline support: Yep, if your device/browser supports HTML5 manifest files you should be able to bookmark your favorite tea timer and come back to it later, even if you aren't connected to the internet.

  • iOS Home Screen Icon: Add the timer to your iOS home screen and you will have an always-ready timer.

  • Core upgrades: This is less noticeable (hopefully) than the others, but I updated the core E.ggTimer mobile code to be more flexible and more efficient.


Of all the features, the Offline support was probably the hardest to test.

A Rant
(I apologize up front for being such a whiner.)

Unfortunately a recent update of iOS broke some of the functionality. I suppose what I was doing before was a workaround, but now you can't invoke sound or media to play through JavaScript in HTML5 on certain mobile browsers (iOS 4.2, some android) unless through user interaction.

This makes sense from a bandwidth point of view, but it is frustrating that companies like Google and Apple tout HTML5 as a solution for building mobile web applications but then remove some of the abilities. It is, of course, their prerogative to do so and it probably makes sense, but having to special case how the app runs depending on what device it is on seems like the very thing we were trying to get away from.

Obviously web applications developers like myself need to remember things like progressive enhancement, but because of native apps any "downgraded" (or not enhanced) performance from a mobile web app appears even more dramatic. For example, why can't the timer play a simple noise at its expiration? (Answer: because javascript can't invoke the sound in the device browser without direct user action).

I have already thought of ways to work around this issue, like require that the user "unmutes" the sound - which would put it in to a playable state. Or that instead of auto-starting the timer the user has to start it manually. Both of these options, though, break from the most basic user experience of E.ggTimer and Steep.it - that you start the timer via URL and don't have to do anything else.

But enough complaining. As the mobile and web worlds continue to merge and collide new solutions and opportunities will present themselves.

Try it out
Just go to Steep.it on your mobile device and give it a whirl. You will be redirected to steep.it/m and all your wildest tea timing dreams will come true.

 

Comments (View)

 

 

Every year my local church congregation holds a Halloween event called "Trunk or Treat." Children dress up in costumes and go Trick-or-Treating from car trunk to car trunk in a closed off parking lot. People decorate their cars and it is a lot of fun.

Since moving to California we have participated every year and each year we have won "Cutest Car." Two years ago I quickly put together a Pumpkin Car. Last year I had a lot of ambition and free time and I made a Working Photo Booth. This year I didn't have quite as much time and I made a Car Mouth. I have not hidden the fact that I have been trying to win Most Extremely Awesome Car of All Time but I don't know what the categories are and if that is even an option.

Car Mouth
Car Mouth about to devour my daughter.

Unfortunately on the day of the event our camera batteries were dead and by the time we realized it, it was too late to do anything. Therefore I don't have any "at the Trunk-or-Treat" photos. Or any photos of the final product, for that matter. Oh well.

Parts
Car Mouth Parts
Not pictured, the red pillow tongue and the gray mouth lining.

The mouth was made up of these basic parts:


  • Teeth: Cut from thick presentation board

  • Tongue: Made of a plain red shirt over a pillow

  • Uvula: Cut out of construction paper

  • Mouth lining: A large grey piece of fabric. (The backdrop from last years photo booth)


It was all held together with packaging tape and duct tape.

Award
Car Mouth Award: Funniest Car
Funniest is not cutest. It's a start.

This year we were awarded Funniest Car. We got this cool certificate (pictured above) and some chocolate ghosts from See's Candies. They were most delicious.

While I am somewhat relieved to break free of the "cutest" category, I can't help but wonder what made my ferocious, flesh-eating, murderous car so funny to the judges. My guess is the uvula.

 

Comments (View)

 

 

I (CODE) QR
Perhaps not an original idea

Just threw this together. Scan it with your phone or other QR reader and visit the site it points you to. Enjoy.

 

Comments (View)

 

 

I have a backup of many, but not all, of the Jots made in J.otDown. If you would like to take a stab at data recovery, please send me the url to your Jot and I will send you back the file.

Please note, not all Jots were saved. The reason I had to shut J.otDown off was due to database memory. This means that some of the data was lost. Recently updated Jots should be in tact but I make no promises. I apologize for the inconvenience.

Also, going forward I would like to recommend Notepad.cc as a simple replacement for your jotting needs.

 

Comments (View)

 

 

Today I made some tough decisions. I turned off PictureNest and I decided to shut down J.otDown. The driving factors for these decisions are varied, but ultimately the same result comes of them; I no longer have to worry.

PictureNest
PictureNest, to be brief, was a fun project that allowed people to take photo-booth-like photo strips using their webcams. The images were hosted on Amazon S3 and I created a uniquely database-free environment that made scalability a non-issue; nearly 30,000 strips (or 120,000 pictures) were taken in a time-span of almost a year. It was awesome. Recently, however, people have been using PictureNest to create obscene and inappropriate images. Ultimately I wanted the site to be G-rate (or PG), and I didn't want to have to manually moderate all the images every day. Neither did I want to face any trouble that may have come of it.

It was not an easy decision, and the problem wasn't unmanageable yet, but it was a preemptive strike against future problems. It is sad it had to be so.


J.otDown
J.otDown has been more or less useless for the past few weeks. My database account maxed out on file size and I didn't find a suitable replacement. I did make some headway on creating an S3/SimpleDB version, but ultimately decided that I really don't have the time. My life has gotten a lot busier, in good ways, and instead of trying to maintain a site that would eventually need more updating I again decided to plug the leak.

I hate to turn off things I make. It makes me sick, almost physically. I feel like I am letting people down. I feel like I am losing a part of me. That said, I now feel like a burden has been lifted.

Am I running away from the problems? Maybe. But I honestly don't feel like I have time to face them. The problems were not insurmountable, but there is a tipping point when something turns from a hobby in to a full-time gig. Sometimes that can be a great thing. This time, however, I contemplated that path and decided against it.

I may bring these services back. They will most likely be back in a different form.

For now they are over. I hit the reset button on my personal projects. The only real survivor is E.ggTimer and even that needs some attention. I will get to it soon, I hope.

 

Comments (View)