September 19th, 2011

One of the key factors I look at when deciding to follow someone on twitter is how often that user tweets.  If I’m not careful, it’s easy to add someone who will overwhelm my stream.  To that end I created an extension for Chrome that adds an info box (next to the other info items, such as follower count, following count, etc) with the rate at which they post new tweets.  With this add on it’s now very easy to see if someone is a “once per day” user, once per week, or “28.2 tweets per day” type.

It won’t change your life, but it only takes about 5 seconds to install and you can forget it after that.

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

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).

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.

October 25th, 2010

September 12th, 2010

Per my previous post, it may be apparent that I’m working on a just-for-fun Django project that uses the Python Image Library (PIL).  Overall, it’s pretty easy to set up, but the instructions I found on the internet were just wrong enough to make me have to dig around for 20 minutes getting it to work.

Disclaimer: The above instructions *might* work for you, so feel free to try them first.

Anyway the issue I was having: After installing PIL through the above instructions, I tried to upload an ImageField file through the Django Admin interface.  I’d get the following error:

The _imaging C module is not installed

Some quick google-fu led me to this page which explained that Python probably could not find the _imaging module, or else that module wasn’t being loaded correctly.   This was strange because I had just installed PIL, and PIL showed up in my sys.path.  However, running:

>>> import _imaging

Showed the following message:

ImportError: dlopen(/Library/Python/2.6/site-packages/PIL/_imaging.so, 2): no suitable image found.  Did find:
/Library/Python/2.6/site-packages/PIL/_imaging.so: mach-o, but wrong architecture

Ah-ha!  The original instructions indicated that it was required to change the build flags for a 64 bit architecture, but for me that was not necessary and in fact build incompatible binaries for my system.

For those following along, the correct instructions for my system were as follows:

$curl -O http://effbot.org/downloads/Imaging-1.1.6.tar.gz$ tar zxf Imaging-1.1.6.tar.gz
$sudo bash # cd Imaging-1.1.6 # python setup.py build # python setup.py install # exit  September 9th, 2010 Webfaction is a pretty decent “set it and forget it” webhost, which I’ve been using for a number of years. One thing I’ve noticed lately is that they’re not totally consistent with which software versions among servers, or at least based on some of the forum threads of theirs I’ve read. Long story short, python2.5 and lower come with PIL, but for whatever reason, python2.6 doesn’t have it. To get it going, do the following: cd /home/<your_username>/lib mkdir python2.6 easy_install-2.6 http://dist.plone.org/thirdparty/PILwoTk-1.1.6.4.tar.gz That’s pretty-much it. For some reason the python2.6 dir doesn’t exist, but you can add it back and easy_install whatever libs you need. August 17th, 2010 … since my last post. Anyway this entry won’t have a ton of substance to it, but I thought I’d post it so anyone looking me up didn’t think I’d abandoned my online presences. Summer! A huge reason it seems I’ve dropped off the face of the internet is that summer happened. These precious few months of warmth mean I’ve been out and about most weekends instead of cooped up coding. Couple that with the fact that I moved apartments this summer and I just plain haven’t had a ton of time. Bundle! Still contracting with Bundle.com, which has been the bulk of my programming effort for the last several months. It’s been a bit of a trip using C#.NET/ASP/Visual Studio/Windows Vista since I normally never use those tools, but I guess I now know ASP and can at least get around in Visual Studio. My “Comets” game referenced in an old post has stalled. It was a ton of fun making it (and I may at some point spend the necessary ~10 hours or so to get it from it’s current state to the App Store), but ultimately I found it more and more difficult to keep working on it. For one, it was my first endeavor into Cocos2D. Naturally I spent a lot of time doing things the Wrong Way, as is usually the case when one learns something for the first time. Starting a project on the wrong foot makes doing changes later much more difficult and time consuming. However, the final nail in that coffin was that it wasn’t very fun to play. I never intended it to be this really awesome shooter game since I was building it just to learn Cocos2D, but in the end I decided my effort would be better spent working on a project I cared more about. Speaking of new apps, I’m currently re-writing “Will It Rain?” for the iOS4/iPhone4/iPad. Knowing what I know now, I think I can write a much better version. I also have a few game ideas up my sleeve, along with a couple Ruby on Rails sites I want to build. If only I had more time… Well, that’s about it. These days my main contribution to the online world is posting links over at Forrst, which is more or less a twitter for developers/designers. March 15th, 2010 Upgrading OS X from Leopard to Snow Leopard – How to Make it Not Suck I realize I’m about 6 months late to the party, but I finally coughed up the$29 for OS X 10.6.  Frankly I never saw the need for it, but the newer XCode versions require it, so I went ahead and upgraded.

Well there’s not much to say, other than it’s about the least impressive upgrade possible.  Even with the downplayed feature list (even the box just says it’s just “the Mac you know and love”) and low price point I’m kinda mad that Apple even charged for this.

Oh yeah, and don’t bother doing an upgrade.  Do a fresh install.  You’ll end up having to reinstall everything anyway.  So far every app has mostly worked, but everything is slow.  Even Flash tripled the time it takes to load.  Here’s the kicker though: If you reinstall the exact same version again but on 10.6, it’s way faster.  Faster even than 10.5.  I don’t understand the reason, but a lot software you installed under 10.5 that is now slow under 10.6 will work much better if you just re-install it on 10.6.

Funny Spam

I get a ton of spam comments on this blog, which I diligently clear out.  However lately I’ve noticed the domains take a funny twist.  Here’s a sample from today’s comment queue:

- hellzyea.com
- makemeasammich.com
-  yourbabyisanasshole.com

Anyway I’m sure there’s some reason for it; maybe spammers figure people are less likely to flag “funny” domains as spam or something.

New Job

I don’t normally post too much about my regular work here, due to various NDAs and the fact that it’s often not of general interest, but today I started my career as a contractor.   Here’s my site: thomasgraft.com. I pulled out / fleshed out content from tomgraft.com and then re-designed tomgraft.com as well.

February 3rd, 2010

I wrote an article for the new Cocoaism blog.

January 31st, 2010

Today I was going through some of my old Subversion repositories and came across a slew of projects I forgot I made.  One of them was an javascript google chart generator and I’ve put it up at tomgraft.com/gchart.  It’s one of the least impressive projects I found, but it was the easiest to put back up on the web.  Over the next few days (weeks? months?) I plan on uploading more of the re-found code on github.  Stay tuned.

December 6th, 2009

I’m a redditor and one thing that I’ve always wanted to do is have a way for the submitter’s posts to be more prominent.  So I whipped up a quick GM script to do just that.  This is the result:

Submitter's posts are now in a light blue box.

Certainly nothing spectacular but it’s pretty trivial to change the CSS to your liking or extent this script to do other things to the submitter’s posts.

gm_reddit_submitter_css @ github

December 4th, 2009
December 2nd, 2009
November 16th, 2009

Just wanted to put up some useful methods for fine-tuning Rails performance.  I’ve never tried all the methods in this list at once, but if you find your app bottlenecking in a particular area, here’s some fixes.

Caching

Bandwidth

• AssetPacker [synthesis.sbecker.net] – Dynamically pack JS/CSS files
• Better Output Compression [agilewebdevelopment.com] - Use GZIP to compress data being sent to browsers that can handle gzip’d data.  This is not necessary if you’re behind Apache or another webserver that has this feature.

CPU & Memory

• Tips @ Joyent [wiki.joyent.com] - There aren’t too many generic ways to reduce memory usage, but this page has some tips.
• Optimize and cache.  This is very specific to an individual app, but anytime you’re doing a large read-only query against data that doesn’t change much, cache it.

And finally a page similar to this post:

September 3rd, 2009

A common problem for me while coding is having more than one unrelated, on-going task that I’m working on simultaneously inside a large (500+ file) project.

So for example, lets say I’m working on Bug #1 (or Feature, or Task, whatever you want to call it).  Bug #1 involves editing 5 files: A, B, C, D, and E.  This is fine, I’ll just open files A-E and get to work.  There also exists Bug #2.  Bug #2 uses files B, D, F, G, H … L, and M.  To switch between working on Bug #1 and #2 (and vice versa) involves closing a number of files, then searching through to find the files used by the other Bug and opening those.

Now imagine for a moment, that I also have Bugs #3 through #24, with new bugs introduced or resolved daily.  In addition to the pain-in-the-ass-ery of manually closing and opening these files, I also have to remember which files are associated with each Bug.

This leads to a common problem:  When switching between Bugs/Tasks, I usually open a handful of files I know are involved, then extrapolating from there what the rest are.  Long story short, this causes a great deal of overhead and un-necessary duplication of work (revisiting a bug from a week ago can seem like I’m completely retracing my way through files).

Enter Mylyn.  Provided out of the box with the latest Eclipse installs, it provides a way to associate resources (usually files) with particular Tasks that you define.  While this is pretty great on it’s own, Mylyn goes one step further: Complete integration with your Bug Tracker of choice (my company happens to use JIRA).  So now when someone assigns a bug to me, it pops up in Eclipse where I can then easily switch to it, add files, and get to work.  I can even comment, update, close, re-assign (etc, etc) from within Eclipse.

It only took me about 20 minutes from hearing that it existed to having it up and working on my development machine.  If you find yourself annoyed when switching contexts, I highly recommend trying it out.