MPOV

occasional posts about programming, tech, and the dreaded etcetera 

Whiteboard Icons

Comments [0]

csv2wufoo.com

csv2wufoo.com is a little side project I wrote using Sinatra, my WufooParty lib, and James Edward Gray's FasterCSV lib.

After the tenth time my wife asked me to write a one-off script to import data into her Wufoo form, I decided to generalize it a bit, slap a Sinatra app around it, and give it a domain name (well, there was a little more to it than that, but ya know...)

It hasn't quite been battle tested yet, but hopefully it will be useful to someone.

We love Wufoo at our church and use it almost daily for all sorts of things. Gathering submissions is only one small trick in its bag of 'em -- Wufoo's reporting makes it a really good platform for visualizing flattened data, among other things. Staff in our church use Wufoo in ways they should probably be using Excel, but Wufoo makes it so much easier.

With csv2wufoo, we should now have a better way of getting data into the system.

Loading mentions Retweet

Comments [0]

FacebookParty

I wanted to understand the Facebook REST API better, and decided I needed a simple wrapper for it. HTTParty to the rescue again!

FacebookParty (rdoc) is along the same lines as my other _party style api wrappers. I can't take much credit for it though, since HTTParty is what makes this stuff so easy. Slap a pretty class on an api endpoint, and the rest is cake. And cake goes good with parties.

Loading mentions Retweet

Comments [0]

Updated Tarsnap Activity Graphs (Greasemonkey Script)

I just updated my Greasemonkey userscript that generates usage graphs for Tarsnap. The graphs are now prettier:

The script lives here.

Loading mentions Retweet

Comments [0]

Flickr API for Ruby Using HTTParty

Continuing with my HTTParty, I've created a fairly simple Flickr API wrapper for Ruby: flickr_party. This one was a bit more difficult than the Campaign Monitor one, but still fun nonetheless.

Why reinvent the wheel?

  1. It's fun.
  2. I always learn something.
    • Sometimes I learn to not reinvent the wheel.
    • But sometimes I learn so much more.
  3. The libraries out there I spent 10 minutes looking at didn't seem to fully support application authentication. Yes, I'm sure I'm wrong, and they all support it just fine. Or maybe I was just looking at the wrong ones. But in any event, I took this as the opportunity to build something cool (see item #1 above).

Loading mentions Retweet

Comments [0]

CampaignMonitor API Wrapper

Update: This was renamed to campaign_monitor_party.

First of all, HTTParty is simply amazing. That is all.

Second, Ruby never ceases to amaze me regarding its power and tools for meta-programming. "method_missing" is just too cool.

Third, I created a 20-line wrapper class for the Campaign Monitor API this weekend (using HTTParty). The code and the gem is over on GitHub: http://github.com/seven1m/campaign_monitor_party.

Loading mentions Retweet

Comments [0]

CascadingRubies - Ruby DSL for generating CSS

I've been working on a little experiment lately... a Ruby domain-specific language for generating Cascading Style Sheets called CascadingRubies. It's an internal DSL, meaning it uses plain Ruby syntax, like this:

Output:
Being just Ruby, of course, you can mix in variables, arithmetic, require external code, hit the database, or whatever. The guys on the Tulsa.rb mailing list have provided some great feedback, and from that I've released the the second gem version (0.2.0). If this looks interesting to you, head over to the GitHub project and check it out. Please let me know what you think.

Loading mentions Retweet

Comments [0]

Install the Ruby gem "dnssd" on Ubuntu

sudo aptitude install libavahi-compat-libdnssd-dev
sudo gem install technomancy-dnssd -s http://gems.github.com
irb
> require 'rubygems'
> require 'dnssd'

Loading mentions Retweet

Comments [0]

ShrinkSafe with Prototype 1.6

I didn't find this information anywhere, so here it is for the Google archives... To get Prototype to run after squeezing it through ShrinkSafe, you need to put back every instance of the variable $super. ShrinkSafe replaces variable names with shortened versions, and because of some Prototype voodoo, it breaks on this one name. There are about 8 places you'll find it, and unfortunately, it takes some manual hunting once ShrinkSafe has changed a bunch of names, but there you have it. I suppose someone smarter than I could tweak ShrinkSafe to ignore this variable name, but for me, this works.

Loading mentions Retweet

Comments [0]

Ditch Pagination

I build web apps. Almost every one has a screen or two somewhere that shows a listing, and at the bottom it has pagination links, e.g. next page, page 3, etc. For a recent app I've been working on, the interface is very search-driven, i.e. the user enters some criteria the results are displayed. As an experiment, I left off the pagination links. In this app, there is no "next page." Instead, if the results are not on the first page, then the user must refine their search. If you think about it, how often do you scroll through a Google search results page and then choose to change your search query rather than click on the next page? If you're like me, a lot. Even if you do click the next page, I would bet you don't click much past page 2. For users who see the Web and web apps as a necessary evil, they might be more apt to page through thousands of results rather than think about what they're looking for and change the query. Ditching the pagination links lights up a different part of the brain I would guess (of course I have no idea considering I am only a web geek). What do you think? Am I evil? Can it work? By the way, I haven't had any complaints yet. We'll see...

Loading mentions Retweet

Comments [0]