October 6th, 2011

I noticed last night that gifexplode.com is no longer a real site (some domain squatter took it, it looks like), so last night / this morning I recreated the service at gif-explode.com.  It’s a simple concept, basically it takes in as input a URL to an animated gif and then spits out each frame of the animated gif.  There’s a demo on the site if you want to see it but don’t feel like finding an animated gif.

On the tech side, I decided I wanted to try out Flask, which is a micro-webframework for Python.  I’ve never used it but it’s pretty similar to a lot of other small web frameworks.  From what I’ve garnered by using it and the examples, I don’t think it’s suited for medium to large websites, but for something as small as this it’s perfect.  Using Python allowed me to use PIL for the image processing, and while PIL usually manages to piss me off, it did a decent job here.

For hosting I tried out Heroku.  I used Heroku about 2 years ago for a Ruby on Rails project back when it was kind of a novel thing, but since then they’ve added support for a few other languages and have added a lot of new “add-on” features.  Things went pretty smoothly, deployment-wise, though it didn’t like my id_rsa.pub file and I accidentally deployed to the wrong stack, but total time from signup to completion was probably less than an hour.  Their docs are pretty good.  I have mixed feelings though about Heroku in general, because it’s very expensive for things that can be free or cheap on an EC2 instance.  I understand paying for convenience which is probably why Heroku is so popular, but I have a hard time imagining using it for anything bigger than a project like this, cost-wise.

One cool thing about this app is that it doesn’t actually save images anywhere.  Each frame is base64 encoded and then embedded in an img tag.  This makes the result page larger, but prevents the need for storage altogether and reduces HTTP requests substantially.  As a side-effect it also prevents a malicious or ignorant user from using this service as an image host.

For the last step I think I’m going to make an “Animated GIF -> base64 encoded frames” API that other people can use, perhaps move my encoding code into it’s own module.  We’ll see.

In the meantime, the site is at gif-explode.com and the source it on github.

October 5th, 2011

Two posts in two days… and both about music.

October 4th, 2011

I’m digging this sound.

September 13th, 2011

Though my involvement was only writing the iOS wrapper around the actual content engine (which is by Treesaver), this is the first non-trivial iOS app I’ve help write, so I’m pretty stoked!

September 12th, 2011

Found a site with a good list of solid iOS frameworks, worth checking out before you think you’ll need one so you don’t reinvent the wheel later!

iOSframeworks.com

July 8th, 2011

I implimented MathJax on mathproblems.us today and so far I’m pretty impressed.  It’s worked beautifully so far and the documentation, while not the easiest to navigate, is very useful and complete.  It makes good use of hooks which were useful because it allowed me to hide the raw equation text until after it’s rendered (otherwise it flickers).

June 7th, 2011

I recently swapped out Impact’s native audio library for SoundManager2 in my game OMGALIENS and so far I’m quite satisified with the results.  My biggest gripe with Impact was the audio support: It either didn’t work, worked poorly, or crashed your browser.  So far with SoundManager2 it’s worked pretty much flawlessly.  The only downside is that it introduces a dependency on Flash, but if Flash is not available it will try to use HTML5′s Audio(), and if that fails, there just won’t be sound but the game will function correctly.

May 25th, 2011

The Remotophone is a fully functional TV remote that looks like a Cortelco touch tone phone.  To use it, you lift the handset and press a key.  For example, “*” is Power, 3 is Volume Up, 2 is Input, etc.

I just finished building it today, and while I won’t try to recreate every step, I’m going to list out the resources and techniques I used to get it going.  It looks identical to the image in this post.

Parts

• - Cortelco Phone
• - Arduino Board (I used an Uno, you can probably use any kind)
• - IR LED (and corresponding resistor)
• - General Maker Junk (wires, solder, tools, tape, etc)

Code

There’s no complicated instructions, you basically glue the two libraries together and have the IR Library send out TV remote codes based on the input from the Keypad.  Before you build your phone you’ll have to capture your specific remote’s control codes.  You can use the IR Library example code and wiring to do this.   One final thing is that you should use the switch inside the phone that’s turned on when you lift the headset, otherwise you’ll drain your battery.  It’s already all set up inside the phone, you just have to have to splice it into the battery wire.

Here’s what it looked like when I was done but before I remounted the case.  It’s pretty fragile and I’m not an engineer so please forgive the mess and lack of mounting brackets or real electrical tape :-P

May 24th, 2011

If you’re looking for the game itself, you can find it here: omgaliens.

My Thoughts on Writing my First Game in Impact

I thought it might be nice to write up a retrospective of the last month or so spent working on omgaliens with Impact (also sometimes called ImpactJS) and give my general impression of the Impact framework.  For those not familiar, Impact is a relatively new framework that’s sprouted up among other frameworks in the relatively new area of “HTML5/Javascript game engines”.  I won’t go into detail here, but basically in the last few years most modern browsers (even Internet Explorer) have implemented the canvas element, which in turn has allowed developers to create various kinds of graphical and game engines that use this feature. One major thing that sets Impact  apart from the slew of other libraries is that it costs $99 (most are free and open source), and it comes with a graphical level editor. It also runs well on mobile platforms, which often have performance issues. Before I continue, a little background on myself: I’ve been programming in some form for about 10 years now, but I’m not a game developer. The only other game framework I’ve used is cocos2d for the iPhone, and I did not complete that game though I did have a playable demo. So this review is strictly from the prospective of someone who’s a programmer but *not* a game developer. I also did not use the level editor much; nor did I use the Box2d physics, so I won’t be commenting on that. What It Is, and What It Isn’t Since it costs money and there’s no “trial” license, I figured I’d start out by noting a few things I learned about the framework that I didn’t know by reading the various descriptions on their site (though this info can be found in the documentation). First, it’s a sprite based game engine, not vector. Second, it’s designed for action type games (platformers, 2D shooters, etc) with build in methods for managing player/enemy health and interaction, including acceleration and velocity parameters for each entity. It is not just a cool physics engine wrapped in a while() loop, rather it has a lot of your basic game utilities built in as well: volume, loading screens, levels, music, pausing, etc. Basically it’s a great engine to make games similar to Pac Man or Super Mario Bros, but it would be a bad choice to make games like Scrabble or Chess. The Good So what’s good about it? Well for starters, it’s just pretty easy to use. The structure makes a lot of sense, and once you read the Getting Started docs and watch the tutorial videos you can start making a game. Whenever I wanted to add something new, like music or sound effects, I could hit the docs and have something implemented in less than an hour. When the docs failed me (while complete, they tend to be on the sparse side — some method descriptions are only one line) the forums had my answer. When I couldn’t find my answer on the forums, the source code is well documented and at the very least I could find my answer there. So overall, pretty good documentation, which is very important when you’re using someone else’s library. It works very nicely on mobile and on the iPad, which is pretty important these days, especially with the iOS platform not supporting flash. I didn’t get a chance in my first game to have the need for a level editor, but what little I played around with it, it seems quite powerful. The Not So Good HTML5 Audio browser support is flaky. so Impact has some difficulty playing sounds. The Big Question: Is it Worth$99?

So the question on everyone’s mind: Is it worth 100 bucks, especially since there are so many alternatives that are free?  Well, that depends on what you’re looking for and what you expect for $99. Impact licenses are the framework authors only source of income and allow him to work on it full time, which is great because (in theory) you’re ensuring that your game will work on future browsers because he’s continuing to develop the framework. It would really suck if you spent a lot of time writing a game in a free library that turned out to be some summer project, only to watch your game slowly become unusable as browser technology moves on. So in that respect, (hopefully) Impact wins out. Unfortunately, upgrades are not free, though they are discounted. Also, as any TextMate user might tell you, spending money on the promise of future versions can be a waste [TextMate 1.0 users were promised a free upgrade to TextMate 2.0, it's been 3 or 4 years and no TextMate 2 exists yet] so it’s a bit of a tossup. Of course, just because something is free and open source, doesn’t mean it won’t be maintained, after all pretty much all the software powering the very site you’re reading is open source. However, where open source thrives are applications that are useful to a lot of people (operating systems, text editors, web servers). In contrast, game engines are very specific and I have serious doubts about whether the “HTML5 2D sprite physics based game development” ecosystem is big enough to support a solid open source project without a single project leader pushing the way forward. However that’s all just my hunch, I could be wildly wrong. For me, I think it was worth the$99, but it does have some issues (mentioned above) that are disappointing.  On the other hand, as a web development freelancer myself, I do NOT feel bad about giving another web developer freelancer some money, after all, he did do some work that saved me time (and thus money), so he deserves compensation.  Then again, taken to the logical conclusion, so do the literally thousands of open source developers that contributed to the server software… so… :-/

Well I’ll probably add to this post as time goes on (or at least post some new updates).  Whether or not the tone of this post conveys it: I am pretty stoked about Impact and consider myself fairly satisfied thus far.

April 19th, 2011

Just launched BirthdayBlob.com, a silly little app.

URL: BirthdayBlob.com

From idea to minimum viable product in about 5 hours.  Have a few more ideas for it (better charts, more stats).

March 29th, 2011

As of last night, bitniblet is live!  Check it out, or add the app on facebook: http://apps.facebook.com/bitniblet

It’s been a challenging 6 months but we hope you like the product!. We have ambitions plans including expand on to mobile and new games / game types.

For my friends reading this: unexpected traveling this week will be keeping me away from playing games so when you don’t get a game invite from me, don’t read into it. :)  [Co-founder Drew Cummins will of course be manning the automated bug tracker and smoothing out launch day issues.]

Feedback is always welcome, there’s a widget once you’re logged in on every page.

February 20th, 2011

I’ve wrote up a script that might be useful for other people: a Boxee Box command line “remote control”. Right now you can use it to change the volume, skip tracks, play, pause and skip ahead in video/audio. It has two modes: regular and interactive. Regular takes in a command and exits upon completion. Interactive puts you in a shell where you can type commands.

Regular mode, set volume to 50%:

$boxee vol 50 Interactive mode:$ boxee

Get it on github.

January 22nd, 2011

I feel foolish.

While traveling yesterday I decided I wanted to get some work done, so I plopped my laptop (a Unibody Macbook) on to my lap and started typing away. 15 seconds later, laptop goes to sleep. I wake it up, and 15 seconds or so later, again, laptop goes to sleep. Repeat. Sometimes it would go to sleep while waking up, sometimes it would last 30 seconds, but without fail it would fall back asleep.

Long story short, I eventually figured out it was only falling asleep while in my lap, never while sitting on a desk or table and eventually I found the culprit: My new wallet, which holds money together with a magnet. This, combined with the fact that I keep my wallet in my front pocket, the fact that the Macbook determines if the lid is closed via a magnet in the lid, the fact that the Macbook goes to sleep when the lid is closed, and finally the proximity of my wallet-magnet to the lid-closed-magnet sensor, meant every time the Macbook was in my lap it thought the lid was closed, causing the Macbook to go to sleep.

On the plus side, I can use my wallet to annoy anyone with a Macbook.

January 20th, 2011

December 13th, 2010

From Indeed.com

Nice to see Groovy make an appearance on dzone’s Programming Langauges to Watch in 2011.  I’m not much of a fan of vanilla Java/JSP for web development but Groovy adds a lot of Ruby-esque features that made it bearable to use Java.

It’s interesting to see Actionscript hasn’t suffered from the Apple v. Adobe fiasco, though there doesn’t seem to be much upward growth in the past couple years.

December 7th, 2010

If you’re getting that error, it means your git user is not allowed to write to the /objects dir in your project.git/ directory.

There’s a few reasons this can happen depending on how the repo was set up, but here’s a quick checklist I’ve come up with:

1. Make sure sharedRepository is true in your git config file.  This allows group write access.  If it is false, only the owner of the repo may write.

2. Make sure your user belongs to the group that owns the ./objects dir.

3. Make sure to chmod your existing ./objects dir to allow group writes

October 29th, 2010

Nearing completion now, just have to program cool patterns.

October 28th, 2010

Not quite done yet, still needs glow sticks and cooler patterns.

And yes, I’m aware the form factor doesn’t match either real helmet, but for my purposes it’s enough.

October 25th, 2010

October 7th, 2010