<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>I Hereby Decree</title>
<link>http://www.iherebydecree.com</link>
<description>A blog of short thoughts</description>
<atom:link href="http://www.iherebydecree.com/rss/index.php" rel="self" type="application/rss+xml" /><item>
<title>QR Bookmarklet</title>
<link>http://www.iherebydecree.com/archive/id/922</link>
<description><![CDATA[I have been doing a lot of mobile testing lately (have you tried <a href="http://labs.adobe.com/technologies/shadow/">Adobe Shadow</a>? It is handy) and I find myself wishing there were a super simple way to get whatever text or url I am looking at to my phone. I haven't taken the time to look for apps or other solutions, so I made a bookmarklet that turns selected text in to a QR code for easy mobile scanning. <br />
<br />
<a href="javascript:(function(window, document, undefined) {try {var selectedText = document.getSelection().toString(); if (selectedText === ''){selectedText = window.location.href;} if(selectedText !== ''){var baseQRUrl = 'http://chart.apis.google.com/chart?cht=qr&chs=300x300&chl=' + encodeURIComponent(selectedText); window.open(baseQRUrl, '_blank', 'width=400,height=400');}} catch (e) {}})(window, document);" title="Make QR" >Make QR</a><br />
<br />
I have only tested it in Chrome, so forgive me if it doesn't work otherwise. <br />
<br />
Update: Here is the <a href="https://gist.github.com/2579060">Gist</a><br />
<br />
]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/922</guid>
<pubDate>Mon, 30 Apr 2012 18:43:48 -0400</pubDate></item>
<item>
<title>Beeping Noise</title>
<link>http://www.iherebydecree.com/archive/id/920</link>
<description><![CDATA[<a href="http://e.ggtimer.com">E.ggTimer</a> has a new options menu, safely guarded by the word "beta". It allows you to <em>CHANGE THE SOUND</em>, which has always been the number one request. Feel free to check it out, if you can find it. ]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/920</guid>
<pubDate>Mon, 27 Feb 2012 00:02:15 -0500</pubDate></item>
<item>
<title>Please</title>
<link>http://www.iherebydecree.com/archive/id/919</link>
<description><![CDATA[A long while ago I decided to get my toes wet with <a href="http://www.ruby-lang.org">Ruby</a>, feel the waters and ease myself in to an ocean of new code. To do so I made a simple command line utility to help manage repeated tasks through <a href="http://en.wikipedia.org/wiki/Alias_(command)">aliases</a>. I called it "please" because that way when you use the command it looks like you are asking the computer to do something for you and you are being polite. Technology and decency all wrapped up in one. <br />
<br />
<a href="https://github.com/lemieuxster/please">Please</a> is available on github and works on Mac OS X. It is also available as a ruby gem: <br />
<br />
$ gem install please-command-alias-manager<br />
<br />
although there really isn't much reusable code and therefor breaks <em>some</em> of the gem mentality/pattern. Oops. <br />
<br />
Lets say you have some long command you have to run regularly, like tail a specific log file. With please<br />
<br />
$ tail -f /Users/username/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt<br />
<br />
becomes<br />
<br />
$ please tail flash log<br />
<br />
Since you can define the aliases in natural language, you don't have to worry about remembering the one-word or oft-hyphenated command from ~/.bash_profile. Here is another example. <br />
<br />
$ networksetup -setairportpower airport {on/off}<br />
<br />
becomes<br />
<br />
$ please toggle wifi<br />
on/off _<br />
<br />
This one demonstrates that aside from simple aliasing you can also use a replacement/template like syntax to natural language prompts for command line arguments. Here is one last example: <br />
<br />
 please --add "save clipboard as audio" "pbpaste | say -v {voice} -o ~/Desktop/{filename}"<br />
<br />
This creates the command "please save clipboard as audio" and then prompts you for the voice and file name. <br />
<br />
I've been using it regularly for over half a year now and I recently gem-ified it as well as added some nice new features. I figured I would let others have access to it if they wanted. Don't go looking in to it too deeply though, it is far from perfect. As always, feedback is welcome. ]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/919</guid>
<pubDate>Wed, 08 Feb 2012 23:04:52 -0500</pubDate></item>
<item>
<title>From HTML to Poster</title>
<link>http://www.iherebydecree.com/archive/id/918</link>
<description><![CDATA[<img src="http://media.iherebydecree.com/postimages/launchPoster/launchProcess.jpg" width="530" height="353" alt="Process" /><br />
<em>NASA Image -> HTML/JS -> Poster</em><br />
<br />
Recently I used one of my <a href="http://iherebydecree.com/archive/id/912">JS/Canvas Experiments</a> to make a real poster print (through <a href="http://zazzle.com">Zazzle</a>). I started with a <a href="http://en.wikipedia.org/wiki/Public_domain">public domain image from NASA</a> of the <a href="http://en.wikipedia.org/wiki/File:STS-130_exhaust_cloud_engulfs_Launch_Pad_39A.jpg">STS-130 lifting off from the launch pad</a>.<br />
<br />
<img src="http://media.iherebydecree.com/postimages/launchPoster/launchOriginal.jpg" width="530" height="353" alt="Original" /><br />
<em>The Original</em><br />
<br />
Next I ran it through my Qaudrant algorithm with a few tweaked settings, making the output five times as large as the original image. I did this because I wanted the print to be at least 350 ppi and the output is normally 72 ppi. 72 x 5 = 360. I also added extra width to the borders to make them more apparent in the print. <br />
<br />
Normally the output looks like this:<br />
<br />
<img src="http://media.iherebydecree.com/postimages/launchPoster/launchNoLines.jpg" width="530" height="353" alt="Regular Output" /><br />
<em>Regular Output</em><br />
<br />
But I changed the settings and removed the fills and got this:<br />
<br />
<img src="http://media.iherebydecree.com/postimages/launchPoster/launchLines.jpg" width="530" height="353" alt="Configured Output with Lines" /><br />
<em>Configured Output with Lines</em><br />
<br />
The image processing recursively divides the image in to quadrants and if a given quadrant meets a certain color-similarity threshold it will make that quadrant the average or most common color within. The effect is that areas with more detail (defined by more color) get smaller, more details boxes. It is really effective at tracing clouds. You can watch it <a href="http://www.lemieuxster.com/dev/js/blockmaker/indexQuad.html">work in real time</a> (modern browser recommended)<br />
<br />
It turns out that Google Chrome has a hard time managing large image data url strings (the output from the manipulated canvas image) and so the 5x increase would often times crash my browser. To make it work I would output the data url string to the console (this, too, would tax the system, a 4.5Mb string is a beast to manage it would seem) and then I copied it in to a separate file. I then used the file contents and ran it through a PHP script which then rendered the final image as output. <br />
<br />
A little cropping in photoshop and I uploaded the file, sent it to the printer, and got this:<br />
<br />
<img src="http://media.iherebydecree.com/postimages/launchPoster/launchPoster.jpg" width="530" height="353" alt="Poster" /><br />
<em>Poster</em><br />
<br />
Aside from cropping I did no re-touching in photoshop. When I do it again I might adjust the brightness/contrast for a better print. I might also try to calibrate my monitor so I get a better feel for it. I might also use glossy poster paper instead of matte. <br />
<br />
Overall I am satisfied. There is something nice about having a physical object. I plan on trying more, perhaps with different printers or options and sizes. <br />
<br />
UPDATE: Here is the <a href="http://dl.dropbox.com/u/20694969/Images/launchQuadLinesBig.png">final output  (3.4Mb)</a><br />
]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/918</guid>
<pubDate>Tue, 07 Feb 2012 14:29:26 -0500</pubDate></item>
<item>
<title>HTML5 Holiday Card</title>
<link>http://www.iherebydecree.com/archive/id/917</link>
<description><![CDATA[<a href="http://www.lemieuxster.com/family/2011/card/"><img src="http://media.iherebydecree.com/postimages/familyCard2011.png" width="530" alt="Merry Christmas!" border="0"/></a><br />
<em>Merry Christmas!</em><br />
<br />
Valerie and I don't often remember to send out holiday cards. You know the type, the ones with a picture of the family and sometimes a note recapping the year's activities. We always <em>talk</em> about doing it, but never do it. <br />
<br />
This year on Christmas Eve I had an idea to make a digital card. The original idea was something like an 8-bit snow-globe but I knew the first thing Val would say would be "but our picture doesn't look very clear" (or something along those lines) so I came up with a little trick. The picture starts out clear, but then as the 8-bit carol plays and the holiday greeting appears from the bottom, the picture is blocked in to a more 8-bit-like image (not true 8-bit, of course). <a href="http://www.lemieuxster.com/family/2011/card/">You can check it out here, make sure to have your speakers on.</a><br />
<br />
I have been doing a lot of Flash programming at work so for this card I decided to use just HTML, Javascript and CSS. I took advantage of some of the code libraries I made this year, like <a href="http://iherebydecree.com/archive/id/910">Cigar</a> and my previous <a href="http://iherebydecree.com/archive/id/912">canvas experiments</a> as well as some third-party code libraries, mostly from <a href="http://www.easeljs.com">Grant Skinner</a>. I tested the card in Chrome, Safari, and Firefox (all the latest version) and I took a glance at it in IE. The only major difference was that I still haven't gotten the font-face to work in IE. <br />
<br />
In theory it should work on mobile safari or any html5 compliant mobile browser but it doesn't because of restrictions in place by those browsers (e.g. no sound loading unless dictated by user action). I could have added more support for those devices, but I put this together in about three hours late Christmas Eve and any more time spent would have meant it wouldn't have been ready for Christmas Day. It almost wasn't as it is. <br />
<br />
My favorite part is the snow, and my lovely family of course. <br />
<br />
UPDATE: I added support for iOS devices now, too. ]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/917</guid>
<pubDate>Mon, 26 Dec 2011 11:19:15 -0500</pubDate></item>
<item>
<title>My Imaginary Site</title>
<link>http://www.iherebydecree.com/archive/id/916</link>
<description><![CDATA[Sometimes you need an invalid feed or some random artifact crucial to helping you debug and test your web application. I hope to turn <a href="http://myimaginarysite.com">My Imaginary Site</a> a resource for just that.<br />
<br />
I've owned the domain for long enough now. I purchased it as a kind of personal inside joke. Now I want to make something useful of it. I have been ever-so-slowly filling it in, and it is still really sparse. <br />
<br />
Please send any suggestions my way. <br />
<br />
Keep in mind that this isn't meant to be some amazing end-all be-all resource. I just want a quick index of all those things you find yourself needing in application development. "Man, I really wish I had a way to load a feed url that timed out after 'n' number of seconds." - I will soon have a link for that up on the site. So that kind of thing. <br />
<br />
]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/916</guid>
<pubDate>Wed, 14 Dec 2011 21:58:56 -0500</pubDate></item>
<item>
<title>An off year</title>
<link>http://www.iherebydecree.com/archive/id/915</link>
<description><![CDATA[It is with a little sadness that I admit that I did not participate in this years <a href="http://www.iherebydecree.com/archive/id/903">Trunk or Treat.</a><br />
<br />
Sigh. <br />
<br />
I had an awesome idea and about a month ago I got started on the beginning work for it. Somewhere along the way, though, it became apparent that I wouldn't be able to complete it and unfortunately after that I never switched to another, perhaps easier, idea. <br />
<br />
The creative process is interesting. Not every idea takes off and of the ones that do not many are ever completed. I am not upset that I wasn't able to participate this year and protect my reign as <a href="http://www.iherebydecree.com/archive/id/886">King of the Trunk or Treat.</a> In fact, it was relaxing to just take my kids and enjoy the evening. But when I am not making things I feel like I am just sitting around twiddling my thumbs. It isn't a feeling I like. <br />
<br />
That is why I am such a proponent of just doing things. Have an idea? Work on it in some small way. A sketch. A list. Initial research. <br />
<br />
This has been an off year. I have gotten a lot done, but not in the areas I expected. <br />
<br />
]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/915</guid>
<pubDate>Sun, 30 Oct 2011 15:43:25 -0400</pubDate></item>
<item>
<title>Node Knockout 2011</title>
<link>http://www.iherebydecree.com/archive/id/914</link>
<description><![CDATA[A few weekends ago I got to participate in <a href="http://nodeknockout.com">Node Knockout</a> with some friends. It was a 48 hour contest to see who could come up with something great using <a href="http://nodejs.org/">Node.js</a>. My team, myself and some coworkers, decided to try and make something like a multi-user game platform where you could use your computer screen as the output screen and a second device (mobile phone, for example) as the game controller. What we came up with was <a href="http://flite-labs.no.de/">Fly By Wire</a> <a href="http://nodeknockout.com/teams/flite-labs">(more info)</a>. <br />
<br />
It was a lot of fun but there are some pretty bad bugs. We didn't win either. But I learned a lot about Node.js, CoffeeScript, and web sockets. I hope to do it again next year. ]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/914</guid>
<pubDate>Thu, 08 Sep 2011 02:33:51 -0400</pubDate></item>
<item>
<title>JS/Canvas Experiments</title>
<link>http://www.iherebydecree.com/archive/id/912</link>
<description><![CDATA[I've been doing some experiments with JavaScript and the Canvas tag. Here are some results:<br />
<br />
<a href="http://www.flickr.com/photos/lemieuxster/5734307578/" title="Starry Blocks by lemieuxster, on Flickr"><img src="http://farm3.static.flickr.com/2352/5734307578_ab8f6b4751.jpg" width="500" height="313" alt="Starry Blocks"></a><br />
<em>Starry Blocks</em><br />
<br />
<a href="http://www.flickr.com/photos/lemieuxster/5733759261/" title="Launch Pad Quads by lemieuxster, on Flickr"><img src="http://farm4.static.flickr.com/3153/5733759261_696a991445.jpg" width="500" height="333" alt="Launch Pad Quads"></a><br />
<em>Launch Pad Quads</em><br />
<br />
The first just traverses an image and chunks it in to blocks of a configurable size and displays the average color for the block. The second recursively subdivides the image based on color threshold and size and then, again, displays the average color if the rules are met. <br />
<br />
You can see them compute live <a href="http://www.lemieuxster.com/dev/js/blockmaker/">here</a> and <a href="http://www.lemieuxster.com/dev/js/blockmaker/indexQuad.html">here</a>. (Google Chrome or a very modern browser recommended) <br />
<br />
The code isn't completely optimized, and I have found some interesting irregularities while working with the Canvas Context object, but in all it seems like a straightforward piece of technology. <br />
<br />
For more Canvas fun, check out <a href="http://easeljs.com/">EasleJS</a> by Grant Skinner (not used here). He has essentially taken a lot of the vocabulary and paradigms from Flash and ported them over in to a performant Canvas render engine. ]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/912</guid>
<pubDate>Wed, 18 May 2011 18:10:03 -0400</pubDate></item>
<item>
<title>Is Flash Dead? Part 2</title>
<link>http://www.iherebydecree.com/archive/id/911</link>
<description><![CDATA[<em><a href="http://iherebydecree.com/archive/id/895">Part 1</a></em><br />
<br />
So, its been a year and I would like to re-comment on the state of Flash. Flex/Flash consultant Jesse Warden put up <a href="http://jessewarden.com/2011/05/adobes-wowza-litigation-insecurity-prevention.html">a nice post</a> today about some current Adobe news. One thing Warden mentions is the fact that the passion behind Flash is dying, not the technology itself. I would add my voice to that same sentiment. <br />
<br />
In my own professional life (I am not a consultant) I have been using Flash less and less as time progresses. This has nothing to do with the platform or its capabilities. It has a lot to do with how <a href="http://www.flite.com">my company</a> values Flash and the time we decide to put behind it. Flash continues to be an important part of what we do, but many of our new projects are striving to be Flash-less. The reasons for this vary, but the biggest are these: 1) We are trying to be cross-device compatible, inclusing iOS. 2) We are a group of young, "hip" developers that often get caught up in the new coolness. <br />
<br />
Lets talk about reason #2 for a moment. Things like Node.js and Ruby as well as the many GitHub projects are the cool thing at the moment and are proving to be fun to play with. In an effort to say ahead of the curve and also be a part of the "bleeding edge" we sometimes pick new technologies over old ones (it is also very educational). Bottom line, we never say "lets use Flash to implement this cool new idea." <br />
<br />
So, it doesn't matter that in many cases Flash would be a great solution. <br />
<br />
There are allegedly some cool technologies coming in newer versions of Flash, but I haven't felt the need to look in to them. If I am any indication (and I don't know that I am) I would say that the trend is similar elsewhere. (Also, I've seen demos of WebOS running Flash and yet it is still nowhere to be seen.) <br />
<br />
There are a lot of cool new toys to play with, and whether because of marketing or timing or any other reason the new Flash toys just aren't as stand-out and amazing any more. It used to be that if a developer made a cool Flash library they could get some traction and some attention. Now the new hotness is putting up a new JavaScript or Ruby project on GitHub. <br />
<br />
So Flash as a technology is still not going anywhere, but it may start to disappear if the community stops caring. ]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/911</guid>
<pubDate>Thu, 12 May 2011 16:49:15 -0400</pubDate></item>
<item>
<title>Cigar</title>
<link>http://www.iherebydecree.com/archive/id/910</link>
<description><![CDATA[I've been working on a side project of sorts. What makes this one different is that I don't know where it will take me. I would like to introduce <a href="https://github.com/lemieuxster/cigar" title="on github, like all the cool kids">Cigar.js</a> - a JavaScript dependency importer. Basically, it acts kind of like <em>import</em> does in Java, but it works client side and it is for adding JavaScript files to your runtime environment. <br />
<br />
It works like this: After loading the Cigar.js file you can call <em>_import</em> and load javascript files from your own domain (for now, though I do hope to add the ability to do external files as well). You can chain the imports together, essentially creating a queue of files to load. At the end you can specify a callback that will be initialized once all the files have been loaded. <br />
<br />
I've had this idea in the my head for a while now, but it wasn't until I saw a <a href="http://twitter.com/jeffremer/status/55041500828016640">tweet from Jeff Remer</a> that I thought "well, Groucho always has a cigar, so I should make a js library called 'cigar'."<br />
<br />
<img src="http://media.iherebydecree.com/postimages/JeffsGrouchoTweet.png" width="530" height="259" alt="Jeff's Groucho Tweet" /><br />
<em>Yeah, it was all based on a bad pun</em><br />
<br />
What is emerging from this wandering idea of mine is that you could use this to structure your JavaScript files more like Java classes. This could be handing for creating reusable code snippets and have dependencies, but help remove all the circular references. <br />
<br />
You could have a utility "class" called "AwesomeUtility" that is used in "Object1" and "Object2". Cigar would allow you to save those in separate js files and test them independently, then you can use Cigar to import them in to your main script file and the dependency will only be loaded once. <br />
<br />
As it is, Cigar is no-where near production ready. There is still a lot to test out and play with. Also, I have know idea where this is going. ]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/910</guid>
<pubDate>Tue, 12 Apr 2011 00:49:04 -0400</pubDate></item>
<item>
<title>For Nosy Commuters</title>
<link>http://www.iherebydecree.com/archive/id/909</link>
<description><![CDATA[I sometimes get to work while I ride in to The City on <a href="http://bart.gov">BART</a> 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 <a href="http://www.techdirt.com/articles/20090414/1837144515.shtml">taken away for looking suspicious</a> I decided to make my onlooker's experience more fun. <br />
<br />
Today while on BART I put together this little number:<br />
<br />
<img src="http://media.iherebydecree.com/postimages/phoneGen.png" width="530" height="560" alt="Phone Gen Screen" /><br />
<em>I'm in your phones, hacking your numbers</em><br />
<br />
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 <em>looks</em> like it is doing, though, is hacking all the nearby phones. <br />
<br />
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. ]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/909</guid>
<pubDate>Mon, 21 Mar 2011 23:56:07 -0400</pubDate></item>
<item>
<title>Links</title>
<link>http://www.iherebydecree.com/archive/id/908</link>
<description><![CDATA[I hereby decree that the <a href="http://iherebydecree.com/links">links</a> section shall be restored.  Just visit <a href="http://iherebydecree.com/links ">http://iherebydecree.com/links</a> 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. <br />
<br />
For the three people that read this blog, I hope you enjoy. <br />
<br />
]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/908</guid>
<pubDate>Wed, 09 Mar 2011 12:52:26 -0500</pubDate></item>
<item>
<title>Inception Music</title>
<link>http://www.iherebydecree.com/archive/id/907</link>
<description><![CDATA[<em>Bow chicka bow wow</em><br />
<br />
Err... wait, <a href="http://en.wikipedia.org/wiki/Inception_(film)">Inception</a>. I really enjoyed the film. It was a great action movie; intelligent and original enough to be worth watching multiple times. <br />
<br />
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 <a href="http://en.wikipedia.org/wiki/Hans_Zimmer">Hans Zimmer</a> (Batman Begins/Dark Knight, Pirates of the Caribbean, Sherlock Holmes, and more).<br />
<br />
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. <br />
<br />
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 <a href="http://www.youtube.com/watch?v=Q3Kvu6Kgp88">Non, Je Ne Regrette Rien</a> 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:<br />
<br />
<br />
<em>Same music, just slowed down.</em><br />
<br />
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 <a href="http://www.guardian.co.uk/music/2010/jul/29/inception-soundtrack-edith-piaf">much of the soundtrack is based on that one song.</a><br />
<br />
So, a clever movie with a subtly clever soundtrack. If you haven't seen it already, go see it. Now. ]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/907</guid>
<pubDate>Mon, 31 Jan 2011 23:45:15 -0500</pubDate></item>
<item>
<title>And My Bro</title>
<link>http://www.iherebydecree.com/archive/id/906</link>
<description><![CDATA[<img src="http://media.iherebydecree.com/postimages/AndMyBro.jpg" height="930" width="310" alt="You have my sword. And my axe. And my bro." /><br />
<em>We got your back, Frodo.</em>]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/906</guid>
<pubDate>Sun, 30 Jan 2011 14:27:13 -0500</pubDate></item>
<item>
<title>JS Test Driver</title>
<link>http://www.iherebydecree.com/archive/id/905</link>
<description><![CDATA[At work I've begun to use <a href="http://code.google.com/p/js-test-driver/">JS Test Driver</a> 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. <br />
<br />
Specifically, I have been using the <a href="http://code.google.com/p/js-test-driver/wiki/IntelliJPlugin">IntelliJ plug-in</a>. 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. <br />
<br />
I have never been big on <a href="http://en.wikipedia.org/wiki/Test-driven_development">test-driven development</a> 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. <br />
<br />
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." <br />
<br />
"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. <br />
<br />
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. ]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/905</guid>
<pubDate>Sat, 29 Jan 2011 16:47:14 -0500</pubDate></item>
<item>
<title>Steep.it Mobile (Beta)</title>
<link>http://www.iherebydecree.com/archive/id/904</link>
<description><![CDATA[So, it took a while (sorry <a href="http://www.benlew.com">Ben</a>) but <a href="http://steep.it">Steep.it</a> - the tea timing cousin of <a href="http://e.ggtimer.com">E.ggTimer</a> - now has mobile support. <br />
<br />
<img src="http://media.iherebydecree.com/postimages/steepit/steepitmobile.jpg" width="320" height="480" alt="Steep.it mobile" /><br />
<em>Screen shot from early test version on Palm Pre</em><br />
<br />
<strong>Features</strong><br />
<br />
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:<br />
<ul><br />
<li><em>Offline support:</em> 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. </li><br />
<li><em>iOS Home Screen Icon:</em> Add the timer to your iOS home screen and you will have an always-ready timer. </li><br />
<li><em>Core upgrades:</em> This is less noticeable (hopefully) than the others, but I updated the core E.ggTimer mobile code to be more flexible and more efficient.</li><br />
</ul><br />
Of all the features, the Offline support was probably the hardest to test. <br />
<br />
<strong>A Rant</strong><br />
<em>(I apologize up front for being such a whiner.)</em><br />
<br />
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. <br />
<br />
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.<br />
<br />
Obviously web applications developers like myself need to remember things like <a href="http://en.wikipedia.org/wiki/Progressive_enhancement">progressive enhancement</a>, 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). <br />
<br />
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. <br />
<br />
But enough complaining. As the mobile and web worlds continue to merge and collide new solutions and opportunities will present themselves. <br />
<br />
<strong>Try it out</strong><br />
Just go to <a href="http://steep.it/">Steep.it</a> 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. ]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/904</guid>
<pubDate>Sat, 04 Dec 2010 17:45:30 -0500</pubDate></item>
<item>
<title>Car Mouth</title>
<link>http://www.iherebydecree.com/archive/id/903</link>
<description><![CDATA[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. <br />
<br />
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 <a href="http://iherebydecree.com/archive/id/838">Pumpkin Car</a>. Last year I had a lot of ambition and free time and I made a <a href="http://iherebydecree.com/archive/id/886">Working Photo Booth</a>. This year I didn't have quite as much time and I made a <strong>Car Mouth</strong>. I have not hidden the fact that I have been trying to win <em>Most Extremely Awesome Car of All Time</em> but I don't know what the categories are and if that is even an option. <br />
<br />
<img src="http://media.iherebydecree.com/postimages/carmouth/CarMouth.jpg" alt="Car Mouth" width="580" height="400" /><br />
<em>Car Mouth about to devour my daughter.</em><br />
<br />
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. <br />
<br />
<strong>Parts</strong><br />
<img src="http://media.iherebydecree.com/postimages/carmouth/CarMouthParts.jpg" alt="Car Mouth Parts" width="580" height="400" /><br />
<em>Not pictured, the red pillow tongue and the gray mouth lining.</em><br />
<br />
The mouth was made up of these basic parts:<br />
<ul><br />
<li>Teeth: Cut from thick presentation board</li><br />
<li>Tongue: Made of a plain red shirt over a pillow</li><br />
<li><a href="http://en.wikipedia.org/wiki/Palatine_uvula">Uvula</a>: Cut out of construction paper</li><br />
<li>Mouth lining: A large grey piece of fabric. (The backdrop from last years photo booth)</li><br />
</ul><br />
It was all held together with packaging tape and <a href="http://en.wikipedia.org/wiki/Duct_tape">duct tape</a>. <br />
<br />
<strong>Award</strong><br />
<img src="http://media.iherebydecree.com/postimages/carmouth/CarMouthAward.jpg" alt="Car Mouth Award: Funniest Car" width="580" height="400" /><br />
<em>Funniest is not cutest. It's a start.</em><br />
<br />
This year we were awarded Funniest Car. We got this cool certificate (pictured above) and some chocolate ghosts from <a href="http://www.sees.com/">See's Candies</a>. They were most delicious.<br />
<br />
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.  <br />
<br />
]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/903</guid>
<pubDate>Mon, 29 Nov 2010 23:21:02 -0500</pubDate></item>
<item>
<title>I {Code} QR</title>
<link>http://www.iherebydecree.com/archive/id/902</link>
<description><![CDATA[<img src="http://media.iherebydecree.com/postimages/icodeqrsmall.jpg" width="580" height="700" alt="I (CODE) QR" /><br />
<em>Perhaps not an original idea</em><br />
<br />
Just threw this together. Scan it with your phone or other QR reader and visit the site it points you to. Enjoy. ]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/902</guid>
<pubDate>Thu, 28 Oct 2010 12:08:20 -0400</pubDate></item>
<item>
<title>J.otDown Data Recovery</title>
<link>http://www.iherebydecree.com/archive/id/901</link>
<description><![CDATA[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. <br />
<br />
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 <em>should</em> be in tact but I make no promises. I apologize for the inconvenience. <br />
<br />
Also, going forward I would like to recommend <a href="http://notepad.cc">Notepad.cc</a> as a simple replacement for your jotting needs. ]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/901</guid>
<pubDate>Thu, 14 Oct 2010 01:44:25 -0400</pubDate></item>
<item>
<title>Reset</title>
<link>http://www.iherebydecree.com/archive/id/900</link>
<description><![CDATA[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. <br />
<br />
<strong>PictureNest</strong><br />
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. <br />
<br />
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. <br />
<br />
<br />
<strong>J.otDown</strong><br />
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. <br />
<br />
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. <br />
<br />
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. <br />
<br />
I may bring these services back. They will most likely be back in a different form. <br />
<br />
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. <br />
<br />
]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/900</guid>
<pubDate>Tue, 05 Oct 2010 23:33:19 -0400</pubDate></item>
<item>
<title>Twitter &amp; Facebook</title>
<link>http://www.iherebydecree.com/archive/id/899</link>
<description><![CDATA[I think I finally figured it out. Based on the way I manage my friends/followers I have this weird dichotomy going on with Twitter and Facebook. Twitter is all the people I like to keep tabs on but we never say anything useful. Facebook is all the people I feel obligated to connect with but am mostly uninterested in. <br />
<br />
Now, if I could get all my Twitter friends to be my Facebook friends and then have real, meaningful social conversations we would be on to something. <br />
]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/899</guid>
<pubDate>Wed, 04 Aug 2010 17:34:33 -0400</pubDate></item>
<item>
<title>New Rules</title>
<link>http://www.iherebydecree.com/archive/id/898</link>
<description><![CDATA[I hereby decree that the following rules shall be in effect immediately. <br />
<ul><br />
<li>If you want to be a tough guy with a questionable past you have to carry a worn picture of your family or offspring.</li><br />
<li>"Hot" girls will no longer carry their lunches in Victoria Secret bags. (inspired by <a href="http://twitter.com/gpenston/status/20268348624">Penston</a>)</li><br />
<li><a href="http://www.youtube.com/watch?v=TG1lq_Hvfmg">Or get your degree</a> shall be the last item on every bulleted list.</li><br />
</ul>]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/898</guid>
<pubDate>Tue, 03 Aug 2010 22:17:36 -0400</pubDate></item>
<item>
<title>E.ggTimer and HTML5</title>
<link>http://www.iherebydecree.com/archive/id/897</link>
<description><![CDATA[<img src="http://media.iherebydecree.com/postimages/eggPalmPre.png" width="320" height="480" alt="E.ggTimer in the Palm Pre Browser"/><br />
<em>The WebOS Browser is surprisingly compliant.</em><br />
<br />
Over the weekend I made a port of the basic functionality of <a href="http://e.ggtimer.com">E.ggTimer</a> from Flash to <a href="http://en.wikipedia.org/wiki/HTML5">HTML5</a>. By basic I mean that things like titles and sequences are still missing, though I intend to add those soon, for full parity. And when I say HTML5 I really mean that I used the HTML5 doctype and new, proposed tags. Specifically, I used the <a href="https://developer.mozilla.org/en/canvas_tutorial">canvas tag</a> and the <a href="http://www.w3schools.com/html5/tag_audio.asp">audio tag</a>. I also used some new CSS and JavaScript features. <br />
<br />
<strong>The End Result</strong><br />
In the end, it works pretty well on desktop browsers as well as on the iPhone, iPad, Android, and WebOS browsers with some interesting differences. As far as I can tell, the beep sound at the end only really works on the Pre, so props to Palm for supporting audio. You can try it out here: <a href="http://e.ggtimer.com/m/3min">http://e.ggtimer.com/m/3min</a>. <br />
<br />
Next, while Safari supports <a href="http://ejohn.org/blog/web-workers/">Workers</a>,  you can currently only post messages as <a href="http://en.wikipedia.org/wiki/String_(computer_science)">Strings</a>. When I first implemented the Worker to do the date calculation I was passing objects. Since I got lazy and didn't want to refactor my code I just disabled the Workers for Safari. <br />
<br />
As I tried the new code out on various devices I came to realize that the ability to leave the timer running in the background (WebOS, Android) really made it a nice feature. It works on the "i" devices, but you have to leave it open. A native app would take care of that, but I am hoping that in some future update the browser will be able to run in the background (and have sound). <br />
<br />
For now, if you hit E.ggTimer (or the new domain, <a href="http://c.ountdown.com">C.ountDown.com</a>, and start a timer you will be redirected to the HTML5 code if you are using a mobile device. If for some reason you just hate <a href="http://www.adobe.com/products/flash">Flash</a> you can use the "/m" site and be Flash Free(tm). On the desktop it works best in <a href="http://www.google.com/chrome">Google Chrome</a>.<br />
<br />
<strong>Conclusion</strong><br />
The transition from Flash to HTML5 was pretty straight forward and I believe that those Flash developers that can stop worrying and actually play around with the new stuff will quickly find it suites them well. It isn't an end-all, be-all solution and it has a long way to go before we have full cross-browser interoperability, but it is pretty slick. I come away less stressed about the whole ordeal. <br />
<br />
I also removed the affiliate banner stuff since it was performing poorly. I replaced it with a nice update section and a small donate button. Cheers. ]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/897</guid>
<pubDate>Wed, 09 Jun 2010 01:09:02 -0400</pubDate></item>
<item>
<title>Section 3.3.1</title>
<link>http://www.iherebydecree.com/archive/id/896</link>
<description><![CDATA[<img src="http://media.iherebydecree.com/postimages/order3.3.1.jpg" width="580" height="299" alt="Exectute Section 3.3.1" /><br />
<em>The Emperor is not pleased.</em><br />
<br />
Inspired by <a href="http://twitter.com/gpenston">@gpenston's</a> <a href="http://twitter.com/gpenston/status/12059996866">tweet.</a>]]></description>
<guid isPermaLink="true">http://www.iherebydecree.com/archive/id/896</guid>
<pubDate>Tue, 27 Apr 2010 17:21:22 -0400</pubDate></item>
</channel>
</rss>
