Older blog entries for bse (starting at number 62)

Something Completely Different

On Tuesday, I’ll be moving on from a life of graphic & web design at Creative Commons into a full-time software engineering position with Eventbrite. One passion for another, sort of.

Code and design both have well defined processes, and usually require creative problem solving. Most of the time they’re logical and structured, and often spiral out into hard to manage blobs.

For as long as I can remember I’ve had an eye for design, with strengths in layout, structure, grid arrangement, and balance. But with visual design, I don’t have quite the same enjoyment of the process, the journey to the end result, as I do when I work through a software implementation problem. Solutions in code are gratifying, but not as much as when you discover and learn new things while working toward those solutions.

At the heart of it, both of these interests stem from my desire to understand how things work and fit together. I often work on projects that aid in learning frameworks, tools, and abstract concepts. For instance, I started Gedit to learn the GTK+ framework, and fill a gap in a very immature platform; Mercury was a way to improve my knowledge of Cocoa and the iOS frameworks (and scratch an itch); my portfolio web app, Portishead, got me up to speed on Rails 3.0 and new Javascript techniques.

This inquisitiveness has also led me to tinkering with photography, video production, 3D modeling, and a mechanical understanding of cars & motorcycles. But that’s for another time.

The New Thing

For the past five years at CC, I’ve balanced coding (HTML, CSS, JS, PHP, etc) with more Creative Suite related design, coming up with print and online concepts, and often implementing them. I’ve done my best to design and build great user experiences, coming up with those concepts just isn’t really where my passion lies.

By letting go of that aspect, I’ll be able to focus on where I really excel, working with a larger team to bring visual ideas to life, creating great user experiences through code wrangling, and following my engineering passions to a greater degree.

At least, that’s the plan.

It was never my goal 10 years ago, while starting at art school, to end up in a programming role. Design was my long-term interest and passion at the time, but my engineering skills were indeed a definite influence in my hiring at Creative Commons. It only recently became clear what I’d really prefer to be doing with my time, and I definitely don’t feel like I wasted the past decade. The knowledge I’ve gained is invaluable and likely to influence everything I do in the future. If I didn’t follow my passions and lofty goals now, I would certainly be doing a disservice to everyone who relied on me.

With almost 20 years of hacking and tinkering on code, I’m fairly certain this is an excellent idea. Maybe I’ll finally have the chance to fill in the engineering knowledge I lack. After all these years of self-taught programming experience, there are holes.

(Section title borrowed from Nathan Yergler, who I'll be joining at Eventbrite after our respective stints at CC)

Syndicated 2011-05-23 02:34:26 from Soylent.us


There’s room for another nail in Flash’s coffin, right?

I’m sure this app will inspire a lot of the cutesy and unnecessary animated hijinks, the likes of which we haven’t seen since the early 90s. At least my CPU will be happier this time around.


Syndicated 2011-05-20 22:51:11 from Soylent.us

Weather Apps

Ben Brooks wrote about iPhone weather apps a couple weeks ago, including some nice words about the app I wrote.

In response to his implicit cons: I’d definitely like to add doppler maps, and figure out ways to present more information on the main screen, while keeping the UI concise and clean. More forecast data certainly wouldn’t hurt.


Syndicated 2011-05-10 21:29:22 from Soylent.us


A number of memcached solutions exist for Sinatra, but I couldn’t get any of them to work quite right with the current — 1.2 — version. So put together a very simple implementation, loosly based on gioext/sinatra-memcache, using the memcached gem.


Syndicated 2011-05-05 05:46:10 from Soylent.us

jQuery 1.6 Released

jQuery’s new, faster release schedule brings a nice update today, with notable changes to attribute and property handling; relative CSS updating; deferred handling for animation completion; and obligatory speed improvements, with graphs to prove it!


Syndicated 2011-05-03 21:00:50 from Soylent.us

Back to Front

Well, well, well, here we are again. Another year, another blog, another attempt to write in something approaching a consistent manner. This year, things are different. I’ve started, well and truly, from scratch.

Another Blog

It seems as though every year I try to write online (or, really, anywhere), and while the intentions are great, it never really works out. Like a poor carpenter, I could blame my tools, and while they’re a part of the problem (see below), the main problem is me. Partially not having the confidence the words I write are written well, partially having trouble having anything to write about, and a whole heaping of laziness. This is probably true for a lot of people trying to write.

I can’t say I’ve figured out those problems, but I’m willing to try again. Try, try again. I’ll generally try to write about things I know about, or learning about. And link to nifty things. It’s really about just getting down to it and making that clackity noise (to awfully paraphrase Merlin Mann).

From Scratch

For this attempt at consistent writing, I decided to build a blogging platform from the ground up, and with it including the bare essential features necessary to publish. I’m often picky about the tools I use, and there are lots of platforms for writing on the web today. The most popular being Tumblr or WordPress. But for me, Tumblr is unstable and ugly; Wordpress is a huge mess and ugly. I understand my needs when it comes to a tool like this. I wanted something lightweight and fast; something I could update from anywhere; and quite selfishly, something using technologies I’ve been learning lately. So I wrote my own, on top of Sinatra and MongoDB.

I’m not exactly advocating everyone should rush out, ditch well tested blogging tools, and write new solutions. I do recommend, however, the evaluation of tools — Maybe try something else if your current tools frustrate you.

It’s not my first time at this rodeo

Like many web developers, I’ve hacked together my own blogging tools many times, and I’ve used various pre-built systems. But after some time dabbling with Sinatra and MongoDB, I made the decision to actually build the software I needed with them.

At some point in the near future I’ll make the Github repository public, after a little refactoring and adding all-important testing code (shame on me for not doing that already). I will almost certainly write some articles documenting parts of the project, problems that came up, and the things I’ve learned from developing it. As such, a few things first…

Tools of the trade

  • Sinatra — I knew I wanted to keep the code light and fast. While I’m most comfortable in Rails these days, I know full well how much overhead it has. I just didn’t need all the bells and whistles, and the ones I did need (partials, content_for), were easily replaced.

  • MongoDB - I’m a big fan of it’s performance, and query interface. A blogging system seemed like a nice use case for storing arbitrary data consisting mostly of text. I also exploited map/reduce to precache the archive listing.

    On the ORM side of things I went with MongoMapper with its friendly, ActiveRecord-like API.

  • Memcached — The secret sauce for high-performance websites everywhere, or at least this one. An extremely simple Sinatra extension using a fast Ruby gem, allows this blog to be faster, and as light on the server as plain HTML files.

    I also tried using various other caching methods including Sinatra::Cache and Rack::Cache, with varying degrees of success. But support and incompatibility with Sinatra’s sessions forced me away. So much so, I almost gave up with this project entirely for a Jekyll implementation.

    Jekyll is really nice and all, but flat files aren’t my thing. I felt having to update files too constraining, without the ability to easily update things on the fly without lots of tinkering and hacking. I personally really like database backed systems and remote APIs.

  • Dropbox — I would be remiss if I didn’t mention this essential tool. I’ve been using it for years with my personal documents, and as anyone who uses it with multiple computes knows, it’s a great way to quickly and easily transfer files between systems. It’s definitely easier than building a complex file attachment system.

    I followed these handy instructions to have multiple instances of Dropbox on my Mac, without forcing me to publish the contents of my personal account and keeping things nicely siloed.

There it is

With that out of the way, the page is blank and fresh for all manner of words.

Syndicated 2011-05-02 04:36:19 from Soylent.us

FotoTable at 10K Apart

FotoTable at 10K Apart:

Remember when you would dump all your photos onto the table and sort through them? Maybe putting them in sorted piles… Well now you can do it again! This time in your web browser, using Flickr searches, without spilling water on those precious memories.


FotoTable, my entry for 10K Apart — The challenge to build a fully functional web app in less than 10K. Reminiscent of the 5K Awards, some 10 years ago.

Supporting Safari 5, Chrome 5, FireFox 3.6, and IE 9, FotoTable exploits some fun drag and drop effects; various CSS3 features; and even a hint of LocalStorage. As strange as it may sound, to some, making it work in IE9 didn’t take much effort. A real testament to the developers at Microsoft, after the years of hassle with IE6.

And while the contest was limited 10K, I have a few more ideas left for this app, and intend to develop it further with more search features; multitouch for your iPhones and Androids; and perhaps even more. Maybe with a limit of 20K instead.

Vote FotoTable, and tell your friends, colleagues, and pets.

Syndicated 2010-08-27 05:11:00 from RedProcess Blog

ProGuard Pro Tips

With my launch of Proton, I decided to incorporate the recently released License Verification Library (LVL), which is meant to improve security of Android apps by adding a licensing layer to help ensure you’re running an app legally.

Google’s own documentation for the LVL notes code obfuscation is strongly recommended. What they don’t mention are the specific ProGuard settings (or any other Java obfuscator, for that matter) to use when LVL is in place. The default ProGuard configuration example will cause your app to force quit with an enumeration related exception.

The only documentation online that deals with the LVL/ProGuard combination is a lot of people complaining about their apps crashing after obfuscation. Not very helpful.

After much time spent tweaking settings, and searching for solutions, I found a combination that works without causing any force quits or license verification errors.

Add the following to your ProGuard configuration:

-keep class com.android.vending.licensing.ILicensingService

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);

The main problem lay with allowing ProGuard touch enumerations (as noted in documentation I can’t easily link to). A secondary issue was a missing entry point to the LVL service.

The enumeration fix may also be of use if you’re experiencing problems with ProGuard and not using the License Verification Library. Your mileage may vary. Document any further related problems or fixes in the comments.

With all of the above said, I’m still not sure LVL is quite mature enough to rely on yet. Unless I’m just doing it wrong.

Syndicated 2010-08-21 02:41:02 from RedProcess Blog

Introducing Proton for Android

It’s by no means the first, but it should be the last speedometer app you’ll ever need.

Unlike most speedometer apps, there’s no kitschy dial, Proton just gives you the facts. Current, top, and average speeds, presented in large, bold, numbers. Customizable with different colors and measurement types, from MPH to knots.

But wait, there’s more! With the premium version, Proton will show you a graph of your speed over time, and allow you to export all the logged speed and mileage data in a convenient CSV format.

I’m really pleased with this one, and hope you enjoy it too.

Visit the Proton site for more info and screenshots.

Download From The Android Market

Proton Lite

Syndicated 2010-08-19 15:55:32 from RedProcess Blog

QR-Code Generator

QR-Code Generator:

Particularly useful for Android developers. Remember to set the URL to ­market://details?id= if you intend to link to the Android Market.

Syndicated 2010-08-15 02:00:00 from RedProcess Blog

53 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!