blog

[ 12:12 AM on July 01, 2009 ]

Normally this author talks about a little programming problem that popped up between getting coffee and going running, something to do with potatoes, bowel movements (yeah, sorry about that), and whatever. Rarely do we turn this into a craft article; but after returning home after getting a late night coffee, I craved some cereal, but since I'm utterly against bowls and don't own any, this posed a problem1.

I wanted a solution that was both quick, practical, and good for the environment; so I came up with this -- a cereal bowl made from a paper towel and half a Starbucks straw, and here are the steps:
  1. Start out with a whole paper towel and half a starbucks straw (this way you can have two bowls!)
  2. Then, fold the towel along the center axes, making creases, like so
  3. Fold the four corners to the center making a diamond
  4. Cut the half straw into four roughly-same shaped pieces
  5. Grasping one corner, pinch along that center crease about 1/3 of the way to the center with your fingers
  6. Then, fold that pinched section fso that the top edges are lined up
  7. Cut all four star pieces down the center about 80% of the way; leaving only a little uncut section at the top
  8. Fasten the pinched section from before like so
  9. Repeat steps 5 through 8 three more times
  10. Fill with your favoriate cereal
Next week; Native American weaponry your children can make out of clay.

1The astute reader will notice that it's quite ironic that the author loves cereal so dearly, yet owns no bowls.

[ 06:57 PM on June 29, 2009 ]

mouseremote is a little java to have a laptop+mouse mimic an iphone's headphones so that single clicking will play or pause PandoraBoy or ITunes (depending on what is running), and double clicking will move that running program to the next track. Why did I do this? Because the laptop that has lots of old music (though that's about all) is connected to only to a mouse; and since I'm a lazy fuck, I'd like to do as little to control it, and this appears to be just that.

[ 10:54 AM on June 29, 2009 ]

While, after exchanging my crapbook, I lost the time lapse sunrise pictures, I do still have the software I made to take and show them. It's here. Basically one class will take photos periodically, and the other will show them using your mac's AMS system by tilting your laptop left and right.

[ 05:44 PM on June 27, 2009 ]

So, I caught the sunrise from the brooklyn bridge the other day...impressed? No. tired? Yes. Anyway, I had taken what was to become a time lapse of it -- and no one took my computer -- but, I had to return that laptop, for another, never to be seen. What was impressive was last nights sky?
sky-faded.png
I know about as much about nephology (and, yes, I had to look that up) as I do about Uruguay, I just haven't had the chance to learn about either. So, I'll call these clouds, poooofy.

[ 10:54 PM on June 25, 2009 ]

We had a scare when I thought that our beloved 12" powerbook, darthtater, had passed, but for whatever reason, he's alive!
darthtater-lives.jpg
This is good. This is very good.

[ 04:26 PM on June 25, 2009 ]

I could think of a top hit for this search...
searchingForIPhone.png
This is showing after about a minute, after another search iPhoto was the first hit right away. Maybe my walls are bugged, and someone heard me talking? Who knows? Why is the only restaurant Los Angeles that has Rooster Sauce on every single table, Hawaiian?

Lastly, and I mean that today, my mail was spotty today from around 2:30am until 11am or so. So send to my gmail account instead, I can still retrieve mail sent to jeffpalm.com, but I can't now read it in gmail, so don't get the spam filtering for free; so finding a legit message on the screen is like searching for a virgin from Chalmette (if you're not from New Orleans, esp. if you're from Chalmette, you probably won't get that).

[ 12:39 PM on June 25, 2009 ]

I've actually been working all day, and have gotten tons. But I did take a break to walk to the river and play the little man, but when it's out of the case, I get pummeled with the same question repeatedly, "what kind of instrument is that?". So I decided to just put it right on the body.
this-is-just-a-guitar.jpg
And on floto

[ 05:46 AM on June 25, 2009 ]

As I promised I'd report on having to move your laptop while there were still active downloads from Amazon, and it appears to work fine...the first time, I remembered, paused the downloads with the button at the top then shut my machine and went where ever. The second time I wasn't so attentive to the downloads and just shut my laptop -- I'm sure used the bathroom -- and then left the establishment from which I was borrowing wifi. I did mean to start it back up last night, so I could have a chance of having the rest of the tracks downloaded by the morning, but I overlooked it; but it does seem to have started downloading the remaining tracks.

I spent a good part of the evening playing my little guitar and watching rats the size of small wildebeest make the street on which apartment lies their play ground; that was actually pretty gross. I love this thing, always have (and that says something given that its main competition is a Taylor 800 series), as do most people who I pass doing with it what makes it so great, just walking and playing. Why not? Lots of people listen to music while walking, and I'd bet you have a much greater chance of running into a sign or tree or person or have something run into you listening to music as opposed to playing it. Of course, your chances are raised in either case when the you is me.

Anyway, I don't think I had actually recorded anything with it, though I already loved it's twangy, banjo-like sound. But, this comes through so much more going through a crappy laptop microphone outside to Garage Band. Have a listen (the part and track were chosen for optimum twanginess, not optimum goodness). I had started playing the banjo a while back, but it as too twangy, and no matter how much I tried not to, I played it like a guitar; I also left it by accident in California when I was interning there one Summer. So, it's nice to have something that at least kind of sounds like a little like one.

OK, checking up on the downloader, and I take back what I said easlier about is appearing to work when I didn't correctly pause the downloads before disconnecting...By not pausing the downloads, you end up losing them, and the downloader thinks that they've already been downloaded...Boooo, I don't like this.

[ 04:00 PM on June 24, 2009 ]

OK, I'm not going to wet my pants over this, but here is an actually useful bookmarklet for downloading all the tracks on an Amazon Your Media album page.
amazon downloads
Drag that link to your toolbar and when you're on such a page, click it, and you'll start downloading the tracks available for download via the installer. Here is the normal javascript.

First, why? Well, my laptop was stolen and I had bought (because I'm honest) lots of amazon tracks, and they were nice enough to let me download them again. The problem being, many were single tracks, and the way you download them is to navigate to your Your Media section of your account; if there's a download from an album (even just one), to download the track, you select the album page, and then click the link. For multiple tracks, there are that many links -- hence, that many clicks; hence that many times you're forced to scream "FUCK" in a crowded coffee house. So, this takes the pain out, and opens them all with one click. Also, in the event you have only one or a few, you don't have to search for them, because (and I don't have an example, because they are al being downloaded as we speak) the link to click is either Download or Track Name, and they can tend to be hidden

OK, a few more notes.
  • It has to open a new window to start the download, so you'll be asked to alow popups from amazon.com -- so, do it.
  • This script waits 2 seconds between initiating the download, because if done one right after another, amazon thinks it has already been downloaded...don't aske me why?
  • After started the Download link turns bold and italic, like this: Download.
The downside is that I have many hundred downloads (and I'm just realizing this, seriously), and I'm not sure that, if they don't complete, or the internet craps out, I'll get another shot. I'll keep you in the loop.

[ 02:55 AM on June 23, 2009 ]

So, I had to pleasure of getting my 4th IPhone is about 1/4 the number of days this evening, because of a bizarre software bug. Anytime you tried to use any text input from the message list -- e.g. searching, replying to emails, composing emails -- you wouldn't get the keyboard. I was commenting to someone it's a shame Apple doesn't dump a crash report so they (and I) can look at it. As it turns out they do, it's in ~/Library/Logs/CrashReporter. Anyway, I have no clue where my first two phones went; on Saturday we tested durability in a very controlled environment. Beginning to see how many strikes in would take to make a whole in different areas -- e.g. the top, middle, bottom. These numbers varied from around 15 to 25. So, quite durable. We then proceeded to to see how many times (granted, with a few holes in them) it would take to basically be turned into rubbish after being hurled against a brick wall. That number was close to 1.
Back to the matter at hand, I've put together a little history of my life with this device. So, at first I was thinking I'd show the boxes for the first three, because I must've thrown away the first two (and, yes, they were completely unsalvageable before their demise) and the third was taken by Apple tonight, but, no; these are their coffins...yeah, that's much better. And each is accompanied by a spokes model (or two).
At the beginning there was Number 1, as she is seen with the Nuns, which was a gift from South America.
iphone-number1.png
A good phone, it slipped from Ben's hands as rushed to catch the A after a great show by The National at BAM in Brooklyn. Even though battered, she still worked at would make an appearance later on.
So, I stood two days from the release of the 3Gs -- no, I didn't get the normal 3G -- so I went phoneless until that Sunday and picked up Number 3, claimed by R2potatoo.. Not a chance I was going on the release day, Friday, not exactly sure I didn't go on Saturday, then Sunday got it. And, like Number 1 didn't -- and as far as I know, hasn't -- died, but she did suffer from a very serious malady; you could compose or reply to emails, or search the email. So, she's in rehab at the 5th Ave store, probably heading to Cupertino soon.
iphone-number2.png

Then came Number 2, being levitated by M-Vader, which proved to dislike the water, and ended up going by a death of water damage; don't know when, don't know how, but she's gone. After going is when Number 1 came back in the picture, and kept going until last Wednesday when, while exposed to about 5 seconds of a downpour while in my pocket, she underwent the same death.
iphone-number3.png

Finally, today, as Trick or Tater holds her, is Number 4. So far so good, we'll see. . .
iphone-number4.png

[ 08:34 AM on June 22, 2009 ]

roles are some bookmarklets that you can use to generalize some normal things you do on most websites -- e.g. I like the idea of doing the same thing for virtually the same action over various sites, and what they do is pretty simple, each try to find a link whose name has some semblance to that particular role, then take the appropriate action; whether it's executing some javascript, going to another page, etc. Some sites work better than others, for example, hulu's log in link just uses a little javascript to show the inputs at the top of the screen, where as youtube's, will go to another screen, so is more useful. Give it a try of youtube...

[ 08:04 AM on June 21, 2009 ]

sendposition periodically sends your machine information and location to a page designated by you, so it's private. Why? Well, my laptop was stolen the other (thanks, btw, to whoever you are), and it made me tink of who's the person oyu want to catch: the one who stole it, or the one who ends up with it. I'd the latter so really I want to know when they logon, some system info, and especially their location and IP address. So, this is a little (mainly) Ruby system that is run as a cron job that periodically gathers this information and then sends it toe a desired URL. The README has a fuller description. To use it download, and unapackt his tar ball:
send_position.tar.gz
What you'll do (and it's all explained in the README) is create some confiruation variables in PHP and Ruby telling the name of the data file, where to send the results, etc. The data is simply stored as tab-delimited, name-value pairs separated by a token oyu choose.

I didn't including any other code for analyzing or presenting the data; but the data (and mainly IP and location) is what you want. So, it's very rough on the edges, but could help and serve a purpose.

[ 06:02 PM on June 18, 2009 ]

The main one used to r3potatoo:
macbook_pro_black.jpg

Then some asshole walked off with it; have fun guessing the password. Now there is Trick or Tater and his buddy House of Cheese:
TrickOrTater.png
It's funny how an Apple Store sales person can convince you to buy something after arguing with him why they should replace your cracked-screen, water-damaged iPhone for free.

[ 10:12 AM on June 15, 2009 ]

So, to get around the 'hassle' with AT&T's site I mentioned I now use this:
att.user.js
which is a greasemonkey script to just choose to ask later. This, of course, assumes you don't want to enroll in AT&T's paperless billing. It is somewhat untested, as I guess AT&T doesn't *really* show you the sign up option every time; so it runs on two pages So, use at your own -- not risk, because nothing is going to hurt you, but I can't think of a good word for at what you should use this, "schnucks and giggles", to quote Jon Stewart -- but it may not work...I guess we'll see when I get this question screen again.

[ 10:04 AM on June 15, 2009 ]

AT&T is really adamant about helping the environment or (mostly likely) really into saving money, so when prompted about using paperless billing, you are given the following options:

at-t1.png
Tired of being asked this anytime I access my account, I clicked just Next, thinking maybe that meant "I never want to be asked again", and was given this message

at-t2-small.png
`Perhaps they could have the option, Dont' ever, ever, EVER again me again, please.

[ 04:54 AM on June 14, 2009 ]

I'm pretty sure this is my first phone blog other than to Floto and I wish I were to say I got to Clinton Hill and there was something going on, but I can't...ben went to bed -- which is understandable, it's 5:00am -- but for the record he said all night and it's not light. All I have to say is hat this wouldn't fly ( no pun intended to the aero folks) on High St! All night is until wendys stops serving breakfast, check wikipedia!

[ 09:30 AM on June 13, 2009 ]

I wanted to see the rate at which people registered usernames for nice facebook links, which started at midnight last night, as I was told by Zach last night at about 1am. The numbers gathered would have been better had I started at 12am, and had my internet not crapped out in the middle. Nevertheless, here are some numbers from 1:11am until 1:44am.

usernames2_html_1d8ecf72-small.jpg

The line shows the accumulated number of registrations using names taken from the 1000 (really about 1200) most common American first names taken from here; and since the Integer never lies, I'm taking this to be a hard fact. The bars show the number of usernames registered on or around that minute -- i.e. for a position xx, that is showing data for minute 1:xx AM. Hence, for a name name, the URL used would be http://facebook.com/name...luckily no one took mine: mine. There were a bunch I was tempted for, such as sony, nbc, etc..., but I'm partial to potatos.

In other news, I spent about an hour last night giving away donuts on the lower east side, which sparked an idea to come later.

[ 08:12 AM on June 13, 2009 ]

I put an alternate ending to the fox cartoon, and Jason seems to have gotten a little sassy in his age...

[ 04:19 PM on June 12, 2009 ]

So, I won a free coffee from the coffee commies at starbucks, but is it worth taking the five (so they say) minutes to fill it out? I say no, so I made this, which is by far the most useful piece of 'software' I've made to date; it's a bookmarklet to plow through the survey that will get you that free coffee. Copy this link to your toolbar:
mystarbucksvisit
and use it if you 'win' a free beverage from the coffee tyranny after filling out the survey by clicking it on every page. It'll make sure every radio input row is pressed, at least, one checkbox is clicked, every select has a chosen option, and then submit then Next form. So instead of wasting at least five minutes -- which isn't worth it -- you can do it in about 7 seconds -- which depending on your occupation may not be worth it, but it could be.

[ 09:39 AM on June 12, 2009 ]

Here's my wish for today...context-sensitive delimiters in emacs. That is, instead of typing the actual literal character, have emacs adapt it to the language you're using, and even the construct you're creating. Here's a concrete example:

Suppose, in Ruby, I'm going over an array, lst = [1,2,3,4], printing every item, I would do something like:
lst.each { |x| puts x }
But, say, now that I want to do something before I print it. So, without this emacs wet-dream, I would move the puts x to a new line, put the } below that, and since I think brackets are ugly I'd change the { to a do and the { to an end, like so:
  1. lst.each { |x| puts x }
    
  2. lst.each { |x| 
      puts x }
    
  3. lst.each { |x| 
      puts x 
    }
    
  4. lst.each do |x| 
      puts x 
    }
    
  5. lst.each do |x| 
      puts x 
    end
    
  6. Then insert whatever else
So, what I'm saying is that I'd like this in one step. I'd also like to be taller.

[ 03:27 PM on June 11, 2009 ]

Until I make the number of addresses you can store general (i.e. variable), at the request of a few people, namely some guy named Rig, GDirections 3.1.5 beta2 now has six addresses -- his call, not mine, like so:

[ 03:10 PM on June 11, 2009 ]

I've added a couple more options to the tinyurl bookmarklet/page so that you can directly IM, send via yahoo messenger, or mail the link you want to tinyurl. So, when used normally you'll now see something like this:
tinyurl-new.png
There are also a couple more direct bookmarklets for sending this way:
tinyIM
tinyYahoo
tinyMail
The first two will ask for a recipient and them send via that instant messenging service and the last one will automatically load up whatever your default mail client is with a message to send.

I've also added this to the notes system, so you can send your annotated web pages via instant messenger or directly email them without going to the tinyurl screen and then choosing the delivery method. See the notes page for these separate bookmarklets.

[ 09:41 AM on June 11, 2009 ]

I finally put the multi-language thingy that reads in a specification of a schema describing a bunch of types and generates an API for a few languages: java, php, perl, python, and ruby. It lives here now:
http://code.google.com/p/multilangapi
This is pretty old, and I did it with Ben a while ago, but the idea is that you read in a file, such as spec.txt and get out an implementation for a API for this data like this:
http://jeffpalm.com/db/
for various languages. Just a proof of concept, really.

Hmmmmmmmmm...the weather is pretty crappy outside, but I'll take a little run -- I mean little, yesterday's was not that. More over, my shorts really stink, I should probably think about washing them. And speaking of stink, if the dry cleaners don't have my last shirt today that they claimed to have not lost, I'm raising one.

[ 12:52 AM on June 11, 2009 ]

longestwalk is a google map thingy that will show an ordered list of the longest walks between intersections on Manhattan in New York; more information is on the about page. As it turns out, the longest walk is (or appears to be) in Midtown between 5th and 6th Avenues on 53rd St and is around 0.195557 miles long. There's a menu on the left so you can them all, but here is that one.
So, what is the point of this? Well, I was just wondering it the other day, as I walked around between never-ending avenues, then today I was in a building in Chelsea where I was told that it was on the longest avenue (which could very well be true) and that is has the largest square footage of any building in Manhattan. Anyway, so I wanted to see where they all stacked up (and it was fun to write).

The source is here.

[ 06:42 AM on June 10, 2009 ]

sourcelines is some ruby to count the source code lines of various languages. That's all. Time to run in the rain.

[ 06:15 AM on June 10, 2009 ]

This would be useful, if it doesn't already exist: demarcations on the subway platform saying where to stand in order to board the train somewhere that will leave you close to your destination. You example, I take the 6 downtown and transfer at 59th to the N,R,W a lot. So, I'd like some sort of sign on the ground saying (visually) to "stand here to transfer to the N,R,W at 59th" at the stop from which I leave on the 6. A lot of people know this already -- I don't -- and any true New Yorker, which I am not at all claiming, would never admit to anything short of nobel laureate knowledge of the subway system, but it could still be helpful.

[ 12:22 AM on June 10, 2009 ]

GDirections 3.1.5 (beta) now allows you to choose from a vast assortment of locomotion types

[ 03:50 PM on June 09, 2009 ]

Here is a daily view of my twitter friends' (yeah, not that many) activity over that last few months.


and here is a stacked, accumulated version.


Both created using this
twittergraphs.tar.gz
To create one
  1. Download and untar/unzip twittergraphs.tar.gz.
  2. Create a file creds.php as explained by running the file ./friends.php with no arguments.
  3. Type make, and the results will be in results.csv and results-accum.csv. This will just do this:
    ./friends.php > friends.csv
    ./collect friends.csv > results.csv
    ./collect -accum friends.csv > results-accum.csv
    

[ 05:03 PM on June 08, 2009 ]

OK, on a slightly less-technical note, this I do not understand. Blimpie, the sub shop, has a name involving a dirigible, or at least implying one, but they make sandwiches named after an underwater vessel. Other places seem to have it together, like Subway, those aren't under water but they are underground, which is pretty close. More over, I don't even think they own a blimp. Goodyear does, they make tires! So does Saturn and Met life, why doesn't Blimpie? Plus, if you go to their Fun zone you see a racing car.

Why don't they have a fucking BLIMP!

[ 10:03 AM on June 08, 2009 ]

I was reducing the size of some cereal box images and wanted to find the quotient 210 / 275, and immediately (and stupidly) tried expr, and of course it didn't work, because it was using integers. Not wanting to use a browser I made fexpr, which is a floating point version of expr; I'm sure it exists somewhere (in many places), but oh well. It's a little recursive decent parser and, I think, conforms to most of expr. There's a test suite of about 60 tests you can run by ./fexpr -test, you can see the help with ./fexpr -help, and you can turn on tracing for the parsing-curious by ./fexpr -trace .... A couple examples:
$./fexpr 1 + 3 "*" 4 / 7
2.71428571428571
$ ./fexpr -trace 1
1.0
1.0
$ ./fexpr -trace 1 + 2
+
. 1.0
. 2.0
3.0
$ ./fexpr -trace 1 + 2 "*" 3
+
. 1.0
. *
. . 2.0
. . 3.0
7.0
$ ./fexpr -trace 3 "*" 1 + 2
+
. *
. . 3.0
. . 1.0
. 2.0
5.0
$ ./fexpr -trace 3 / 2
/
. 3.0
. 2.0
1.5
$ ./fexpr -trace 2 / 4
/
. 2.0
. 4.0
0.5

[ 10:20 PM on June 07, 2009 ]

According to this, on a mac, C.java is an illegal program, giving this error:
error while writing C0.C1.C2.C3.C4.C5.C6.C7.C8.C9. C10.C11.C12.C13.C14.C15.C16.C17.C18.C19.C20.C21.C22. C23.C24.C25.C26.C27.C28.C29.C30.C31.C32.C33.C34.C35. C36.C37.C38.C39.C40.C41.C42.C43.C44.C45.C46.C47.C48. C49.C50.C51.C52.C53.C54.C55.C56.C57.C58.C59.C60.C61. C62.C63.C64.C65: C0$C1$C2$C3$C4$C5$C6$C7$C8$C9$C10$ C11$C12$C13$C14$C15$C16$C17$C18$C19$C20$C21$C22$C23$ C24$C25$C26$C27$C28$C29$C30$C31$C32$C33$C34$C35$C36$ C37$C38$C39$C40$C41$C42$C43$C44$C45$C46$C47$C48$C49$ C50$C51$C52$C53$C54$C55$C56$C57$C58$C59$C60$C61$C62$ C63$C64$C65.class (File name too long) class C65{ ^ 1 error

[ 04:19 PM on June 07, 2009 ]

Being both crass and a browser-hater, I was wondering if there were any definitions in urbandictionary.com even reasonably clean -- there're not -- but here is a ruby one-liner for finding definitions:
urbandictionary
For some reason, before heading out, listening to a certain song made me think of this? Just include the term as arguments i.e.
urbandictionary word1 word2 ... wordN
I'm personally partial to the animal definitions

[ 09:09 AM on June 07, 2009 ]

igdirections is a GDirections bookmarklet that will attempt to find the addresses on a site and let you map them with google maps. After installing it and clicking the link in your bookmarks you'll be presented with all the street addresses on the page and see something like this, asking you to map an address


If you click OK you'll be sent a google map of that address like this:


[ 02:53 AM on June 07, 2009 ]

insertcopyright is a little Ruby system to insert copyrights into your source files based on a set copyright contained somewhere on your hard drive. The source and 60 test files are here, though the main file is insert-copyright.rb:
insert_copyright.tar.gz
To use it you first create your copyright file in ~/.copyright; you can also pass in onto the command line with the -f switch, such as:
insert_copyright -r copyright.txt...
Then pass it any of the following files, determined by file extension or interpreter declaration at the top fo the file, and the copyright contained in you copyright will be inserted, if it doesn't already exist there.
Ruby / ruby,rb / ruby
PHP / php,inc / php
Shellscript / bash,sh,tcsh,ash / bash,sh,tcsh,ash
Perl / perl,pl / perl
Python / py,jython,python / python,jython
ML / ml,sml / ml
Java / java / 
Javascript / js / 
C / c,cc,cpp,cs / 
HTML / html,htm / 
Scheme / ss,scm / scheme,mzc
Lisp / lsp,lisp / lisp

[ 06:22 PM on June 06, 2009 ]

One night in Colorado, while awaiting the Leonids, I was put in charge of a pumpkin, which came to be known as Pumpkin Duty. I decided to blow up the pumkpin; I also never was asked to hold that position again.

[ 08:10 AM on June 06, 2009 ]

I've added a new link to notes for creating a tinyurl more easily. So, instead of visiting the new location via the new page link, then either copying/pasting or using this to create a tiny url, you can simply use the tinyurl link found here. When using this we construct the new link as before, but instead of setting the document.location to this value, we pass it to tinyurl to (1) create a new tinyurl for this link then (2) give you the option to view or mail this link; so you'll see something like this:
notes+tinyurl-example.png

[ 01:54 AM on June 06, 2009 ]

notes is a system of bookmarklets for making notes on web pages and then creating a link to send other people that will display those notes and resume your scroll position. The looks are similar to those found on the greasemonkey script annotate, but this doesn't require the viewer of the link have that script installed or greasemonkey installed at all. So, a noted page looks like this.
The entire system is controlled by two bookmarklets found on this page, new note and new page. You create annotations with new note and then you generate the final link with new page.

Here are a couple examples: So, how it works...everything here is really pretty uncomplicated. When you add a box, you are adding a <div> tag with some style to the DOM. Unlike with annotate where I could store information on the location and text of boxes as binding in the javascript environment, I had to reference them directly from the DOM for this, because on each invocation of the script, new values were taking on -- hence, each call is stateless other than the state in the DOM.

To construct the final URL, I go and grab all the relevant <div>s with class name _mbox, grab the x and y coordinates in the style, and the text in a <div> contained within and create another url. That url (target URL) and the rest of these values are passed to load.php, which is responsible for inserting the common.js and client.js scripts either in the HEAD element of the target URL or creating a new HEAD element and putting it in there; and insterting a script tag that makes a call to clientMain(), contained in client.js that will actually do all the work to reconstruct the message boxes and scroll position from the location of the created URL.

[ 12:01 PM on June 05, 2009 ]

explain is a Java system to allow you to inspect various media files on the command line, regardless of the type of file (to some degree. To use it you pass in media files (e.g. images, mp3s), and it will spit out relevant information for that kind of file. For example, for an mp3 you may want to see the artist, for an image you may wan to see the size. If it can't determine the type of file (by extension), it will treat it as text.

Source + Release

Here is the source to browse:
AbstractHandler.java
Explain.java
Handler.java
ImageHandler.java
MP3Handler.java
Makefile
Test.java
TextHandler.java
Util.java
Version.java
along with a tar ball and the built jar:
explain.tar.gz
explain.jar
Examples of using could be viewing the information about an image:
java -jar explain.jar testfiles/darth.jpg

Name                 : darth.jpg
Size                 : 0.17 KB
Modified             : Fri Jun 05 07:44:43 EDT 2009
Width                : 400
Height               : 400
ColorSpaceType       : YCbCr
NumChannels          : 3
CompressionTypeName  : JPEG
Lossless             : false
NumProgressiveScans  : 1
PixelAspectRatio     : 1.0
ImageOrientation     : normal
or an mp3:
% java -jar explain.jar testfiles/test.mp3

Name                 : test.mp3
Size                 : 1.53 MB
Modified             : Fri Jun 05 07:44:44 EDT 2009
Bitrate              : 247 KB/s
# channels           : 2
Encoding type        : MPEG Version 1 (ISO/IEC 11172-3)
Length               : 494.1061 s
Sampling rate        : 44100 Hz
Title                : The Highest Journey
Artist               : M83
Album                : Digital Shades
Genre                : Alternative Rock
Year                 : 2007
Comment              : Amazon.com Song ID: 202558238
Track #1             : 10/11
or text file:
java -jar explain.jar testfiles/test.txt

Name                 : test.txt
Size                 : 55 bytes
Modified             : Fri Jun 05 09:50:55 EDT 2009
# lines              : 6
# words              : 8
If you include no files, you get something like this
java -jar explain.jar
I support the following formats:
 - [png, jpg, gif, bmp, tiff]: Images files
 - [mp3]: MP3 audio files
Everything else is handled as text

[ 11:13 PM on June 04, 2009 ]

A friend has a wife clearly named after a networking UNIX command, and I was wondering if there are other parents with that sort of creative minds out there...because it's only a matter of time until Emacs Palm makes his or her way into this world -- and hopefully that matter of time is significant.

Anyway, here are some people named after UNIX commands found in /usr/bin, /bin, and /sbin. After the site from where I'm getting the names UNbans me, I'll finish it, I just noticed that.

/bin

/sbin

[ 11:09 AM on June 04, 2009 ]

OK, I don't 200.jpg normally prosthelatize bathroom products (don't go away!), but about about three weeks ago I ran out of shaving cream so I decided to use Ivory Hand Soap, and oh my god. This stuff works magic. It gives you the cleanest, smoothest, quickest shave of anything I've ever used before. Granted, I haven't delved into shaving cream experiments all that much, but I've gotten relatively creative. But, nothing can touch this stuff. I only shave my face, but I'd imagine the smooth, close, comfortable shave translates to any part of the body. If they had an address or email on the bottle I'd write them, but they only have an 800 number; and I'm not about to spill my guts about sanitary goods to some stranger over the phone. If anything I'll call them to solicit stray for use in my magic shows.

[ 08:56 AM on June 04, 2009 ]

More fun with starbucks locations...Here is a map showing the most isolated starbucks location and location furthest away from any starbucks (both crucial to everyone's existence); here is an image the map:

starbucks-loneliest2.png

in the city, where is an interior position, is a location on the convex null (i.e. the set of ordered points constructing a barrier around the rest of the points), is the most isolated starbucks location (all the way to the bottom left), and is the location furthest away from any location (to the left of the blue one) -- found with find_furthest. As it turns out, in order to escape the evil empire you need to swim out into the middle of Jamaica Bay.

[ 02:08 AM on June 04, 2009 ]

multitimer is a timer with up to five intermediate alarms that vibrate but don't stop the timer (it's also not at all finished, but it's functional); it looks like this when running:


The idea is there are 6 alarms -- one Main and 5 intermediate alarms. The main alarm is the total count down time; think of this as the regular time you'd set on a timer. At the end of this time period the phone gives off a small beep and vibrates twice. The intermediate alarms specify times when you want a notification, but don't want the timer to stop. For example, in a talk where the speaker is notified of having 15 minutes left, 10 minutes left, etc. The person timing wouldn't want to stare at the clock, but does want to promoptly notify the speaker of the remaining time. And of course wants to know when the entire time is up.

The source is hosted by google here:
http://code.google.com/p/multitimer/
And here is quite possibly the most boring youtube video ever showing this thing 'in action'.

[ 08:04 AM on June 03, 2009 ]

Here is a little map of all the starbucks in New York, showing the loneliest one:

starbucks-loneliest.png


I thought at first I only grabbed the ones in Manhattan, but apparently not, which is main reason that the outcome is idiotic. Anyway, I'd also like to find the location furthest from all starbucks -- i.e. the most isolated place, but I'll have to do that later, not quite sure how, though. I can easily calculate the convex hull of all the points, because I would obviously want a point inside that. Then I'll just have to find a point inside that is furthest from the rest...anyway, time to run in the rain.

Here is the source: starbucks.tar.gz, or browse (though, don't get your hopes up):

[ 10:51 AM on June 02, 2009 ]

You could also view these in this rss viewer, for example.

[ 09:24 AM on June 02, 2009 ]

Chase Bank has a 'very interesting' way of stating what you owe on your credit card. First, they didn't send me a statement in the mail. Secondly, this was my online statement (some of it, obivously removed):

chase-fers.png

For reasons I won't go into, my bill was above normal, so seeing that I didn't owe a minimum payment, I figured I would wait until next month. So, I contacted them to make sure that I wouldn't accrue interest or finance charges, and they stated that I was given a "wait-a-month" pass due to the bad economy, but that normal finance charges would apply. I usually always just pay my card so I have never run into this, but it seems a little ambiguous to have a line on the the front of your account page saying you owe no minimum payment, but you'll still be penalized?

They're now on my list.

[ 07:09 AM on June 02, 2009 ]

twitterrss is an RSS feed for any twitter account (I don't know if one exists for any account of friends?). The motivation is to use the mac RSS visualizer with this to create an easy screen saver. So, to use it you can do one of two things:
  1. You can use this URL and pass your username and password on the command line, such as
    http://jeffpalm.com/twitterrss/?u=username&p=password
    This would be the brave approach; not because of me, but because of someone else that could steal your password, being sent in plain text. Especially, as I'm on someone else's wifi right now as I type this.
  2. Or you can copy this file and put in on your own server, and simply pass the eg parameter to the url, rather than sending your password in plain text. In order to do this you need to create a file called creds.php and put it next to the index file, that looks like this:
    <?php
    define('USERNAME',your-username);
    define('PASSWORD',your-password);
    define('EMAIL',your-email);
    ?>
    
    This will be included when you have a url, such as:
    http://jeffpalm.com/twitterrss/?eg
And, no, I don't really care if people see the postings to my account, there's nothing private there; and if for some, strange, out of this world reason there is, I'll take it down.

[ 11:55 PM on June 01, 2009 ]

New (crucial) blog:
http://cerealoftheday.tumblr.com/

[ 11:49 PM on June 01, 2009 ]

Uh, not very intuitive, tumblr...
tumblr.png

[ 11:18 AM on June 01, 2009 ]

OK, a correction for last post...I needed to click that my location was updated automatically. As shown here
google-latitude2.png

I am, in fact, now in midtown, and the goog got it right. On this subject, I tried recruiting a friend, and his first response was "why?", as mine was. I'm now revisiting that, because there is probably very little need for google to be able to display where I am. Though, there could definitely be some applications for employers, etc, as well as long as you're keeping the location private and to yourself. Who knows, maybe tracking the ice cream man?

[ 09:45 AM on June 01, 2009 ]

Google latitude seems really cool (and a little scary for some reason), but also seems to need a little work, because I'm on the upper east side right now, and the spudtrooper, as shown, definitely is not:
google-latitude.png

[ 04:10 PM on May 31, 2009 ]

For a little afternoon fun before it rains twitterfriends will give you a break down of the twitter friends you have in common with all the rest of your friends or between any two screen names. If you enter one twitter screen name you'll get a chart like this (for example):

If you enter two screen names you'll see the intersected friends as images like this:

I've protected the innocent.

[ 02:59 PM on May 29, 2009 ]

Someone is held up in the bathroom at the starbucks on the northwest corner of Union Square, it's great, and I have a great spot. Supposedly they're calling the cops, and let's hope they do. Also, let's hope he/she doesn't have a gun, though I'm not altogether opposed to seeing some sort of scuffle.

The downside of course being that I found this out because I badly need to take a pee, but this situation has clearly overshadowed that. If need be, I can always run uptown and change my pants.

[ 08:40 AM on May 29, 2009 ]

redditpreview is a greasemonkey script to show image previews under reddit image entries, like so:

without, it would look like this:


In bigger news, my neighbor decided to start playing his music very early this morning; but also turned out to be really cool and turned it down. Good thing I didn't take a poop on his door step as I first thought.

[ 01:49 AM on May 29, 2009 ]

A bit more on the iPhone alarm...it plays a siren (though, this isn't working on my device, maybe on others, and it does in the simulator) and actually flashes the word ALARM now. Here's a short clip of it:

[ 04:58 PM on May 28, 2009 ]

Here is an iphone alarm that will vibrate and flash ALARM after set and someone moves it, like so:
iphone-alarm.png

I guess you could always hold onto it, but if you don't have pockets or decide to leave it around, this could be useful...Not done, will finish later.

[ 02:42 PM on May 28, 2009 ]

Mozilla has OK'ed GDirections 3.1.4. Again, the only change is that showing your search plugins in the context menu can now be disabled, to appease a user. Sweeping changes.

[ 11:09 AM on May 28, 2009 ]

Here's a bare bones framework for sending accelerometer data to a little HTTP server running on a local machine. The server is Java and oh so strangely similar to to one in iwebapp, and the little iphone app is obviously cocoa. It doesn't do much, there's a simple echo program, and then one to move a darth tater around the screen, but the latter is kind of screwy right now. But, I have to run so can't fix it now. Oh no, the world may crumble in the meantime.

[ 01:27 AM on May 28, 2009 ]

I finally got my qualitative tip calculator on my iphone, though it's been written for some time, and it's really not that complicated at all. Can't release it unless I take the people's faces and names off, though. The plan is to use it tomorrow (maybe, who knows?). Anyway, I also took probably my second ride on a New York City bus today. And, in doing so managed to try all three incorrect (there are four choices) orientations of my Metro Card while entering before getting the right one. That picture is horrible -- or maybe I was spacing out and acting idiodically, both are perfectly likely. Well, can't sleep. I stopped playing guitar because it was getting late and I didn't want to disturb my neighbors, but as this post on 1000awfulthings.com notes -- that's apparently not a concern for them. Ugh.

And now my macbook has been making a low, periodic clicking noise at a frequency of probably 3 Hz. Clicking is never good.

[ 09:12 AM on May 27, 2009 ]

tweet is a command line twitter client, adding to the browser resistance-- I'm sure it already exists. In any case, you need to install twitter4r. Then, put your credentials in ~/.twitter, similar to a .netrc file, like:
username:username
password:password
and then just type a message on the command line, like
% ./tweet I'm typing a message
If Sent. is printed to STDOUT, it was sent, or something went wrong but I couldn't tell.

[ 12:13 AM on May 27, 2009 ]

This is a Ruby script to use the profile images from your facebook account to fill in the images of the contacts in your address book without images -- hence your contacts' images on your iphone -- you know, in case you forget what your friends look like:
facebookcontacts
Example usage:
% ./facebookcontacts
After this you'll be prompted to sign in and then OK the app Contacts to access your profile (this is needed to get your friends). Then it will
  1. Access your facebook account to get a list of your friends
  2. Access your address book to find those contacts that are both in your address book without an image and a friend in your facebook account
  3. Using these friends, download the profile image and import it into your address book
Some prerequisites:
  • facebooker: Needed to access your facebook account; to install it:
    % sudo gem install facebooker
  • RMagick: Needed to resize and crop the profile image; to install it:
    % sudo gem install rmagick
  • sqlite3: Needed to access your address book; to install it:
    % sudo gem install sqlite3
Some final notes:

I couldn't find a library that abstracted away a Mac AddressBook, so I had to make a minimal one. It turns out, the AddressBook is stored as a sqlite3 database and the images are stored in a directory Images relative to this database. So the class AddressBook simply maps full names to lists of images that should be there. We need a list because you may have duplicate entries

That brings up point 2, which is, that I couldn't get at the email address of people, so I'm using full names -- hence if you have two entries in your address book with the same name, but different peolple, expect screwy results.

I also couldn't get at the profile image of the users, so I'm using facebooker to get the ids, creating a profile url, and then parsing out the profile image from this page. This image turns out to be a php file whose content is a jpeg.

Oh yeah, and obviously, you can only use it for macs. And apparently doesn't work for some non-public profiles :(, but for some it does?

[ 01:12 AM on May 26, 2009 ]

I added a sort of working nintendo controller for iphones to iwebapp that looks like this:

But, again, it doesn't totally work. To do so, I'll probably have to make it an app. Anyway, to use it, you create an instance of Nintendo and pass in an instance of NintendoReceiver; the latter responds to up, down, etc... and does all the work. The Nintendo class has an example one that just prints out the commands. Finally point your phone (or browser to) here, run the Nintendo class ,set the host on the web page to whatever pops up in the dialog, such as
yourhost.png And start controlling.

[ 10:11 AM on May 25, 2009 ]

Well shit. I passed this walking to the gym, but I didn't know it blew out the windows of the starbucks...that's the starbucks at which I get my coffee, since my neighborhood it desperately coffee-deprived. Anyway, at least, for the sake of the 100s of cops out there it was near a starbucks.

[ 12:00 AM on May 25, 2009 ]

Per request of a user named Paul, GDirections 3.1.4 allows you to enable or disable showing the search plugins in the context menu in the preferences dialog, like so:
gdirections-search-plugins-option.png
With this enabled, you would see a context menu something like this
searchplugins1.png
With it disabled, it would look more like this
searchplugins2.png
The update is on the site above or should show up here soon. Either way, there seems to be something screwy with the mozilla preferences-service getBoolPref, so this is a hacky way of doing booleans in strings. It's documented as a method -- along with setBoolPref, but both seem to throw errors whenever called?

[ 04:32 PM on May 24, 2009 ]

For a little afternoon fun, diggmenu is a bookmarklet that creates a menu at the top of digg, so you don't have to scroll and can save you down arrow (or scroll bar). To use it:
  1. Copy the following link to your toolbar
    diggmenu
  2. When you're on digg, click it, and you'll get a menu similar to this at the top of the page:
This will easily save you 7, maybe 8, seconds a day.

[ 03:19 PM on May 23, 2009 ]

Here's a new way of viewing the floto images -- hint: you click on them to show; and then click again to hide the image. And, yes, it's very stupidly-written.

[ 08:08 AM on May 23, 2009 ]

weather is some very quick and dirty ruby to view the weather forecast on the command line. e.g.
$ ./weather -v 10019
*** Using zipcode 10019

Today    : Partly Cloudy High 72 F
Tonight  : T-Showers Low 64 F
Tomorrow : Scattered T-Storms High 80 F
I wanted to know the weather but wanted to neither open a window (a real one) or a browser.

[ 08:33 AM on May 22, 2009 ]

It's a miracle! For some reason my trackpad works again! Or at least it doesn't make horrible clicking sounds when I click the button...that's good.

[ 01:24 AM on May 22, 2009 ]

redditlet is some helper javascript for writing bookmarklets for reddit along with two tests.
reddit.js
test/names.js
test/points.js

The idea is that most of the time, you are simply loop over all the entries. So, reddit.js provides the function entries(func,before,after), which will call before()
, then loop over all the entries, calling func(r) on all the entries r, then call after(). The value r is defined in reddit.js and contains an object of type Reddit, with the following signature:

Link
 String href
 String text

Reddit
 Link title
 Link site
 String time
 Link user
 Link subreddit
 String points
 Link comments
Here is a bookmarklet created using reddit.js that just alerts the name of all the entries
alert names
It's created from this code
/* Appends all the names of the entries to the top of the body */
var msg;
function  before() {msg = '';}
function after() {alert(msg);}
function func(r) {msg += r.title.text + "\n";}
entries(func,before,after);

[ 10:27 AM on May 20, 2009 ]

Do you need a great bottle of Tide?
tide.jpg
Then get it here on craigslist.

[ 08:39 PM on May 19, 2009 ]

There are two things that are certain to make you crap your pants:
  1. A big bottle of laxative
  2. Coming home to find a letter from the IRS in your mailbox

[ 10:51 AM on May 19, 2009 ]

Got this email...
RE:THE ABANDONED AGRIC PROJECT(US$18.5M)

PLEASE DOWNLOAD/OPEN ATTACHMENTN FOR THE ABANDONED AGRIC PROJECT READ DETAILS AND GET BACK TO ME
YOURS,FAITHFULLY TREVOR NKHOMO
Could this be spam?

[ 11:57 AM on May 05, 2009 ]

Penguins and Jonah on the same day.

[ 12:39 PM on May 02, 2009 ]

Google, wtf, are you expecting someone to reproduce this? This is the diarrhea of captchas...
google-captcha.png

[ 05:43 AM on May 01, 2009 ]

Ooooooooopps...
twitter-iphone.png

[ 07:04 AM on April 30, 2009 ]

rubydoc is a ruby script to query core-class methods on the command line (I'm sure something like it exists, but couldn't find it right away.) e.g.
% rubydoc IO foreach
produces
========== IO.foreach ==========

IO.foreach(name, sep_string=$/) {|line| block }   => nil

Executes the block for every line in the named I/O port,
where lines are separated by sep_string.
	
	IO.foreach("testfile") {|x| print "GOT ", x }

produces:
	
	GOT This is line one
	GOT This is line two
	GOT This is line three
	GOT And so on...
This is a part of my ongoing series to get rid of the browser. In general usage is
rubydoc class method-name

[ 06:17 AM on April 30, 2009 ]

Oh man, I wish I just had my camera to witness on film (OK, on silicon) a BERESPONSIBLE!.jpg man taking a shit under a Clean up after you dog sign. To his defense, I've yet to see a Clean up after yourself sign in all of Manhattan -- or any of the other four buros, for that matter.

[ 11:55 AM on April 29, 2009 ]

I'm currently borrowing my neighbor's WIFI, but it's weak and keeps crapping out. I didn't know the correct etiquette for asking him to boost his signal, but I did notice he was sharing iTunes, so I tried this...

[ 09:07 AM on April 29, 2009 ]

facebookfriends is a page to show a chart of the number and percentage of friends you have in common with all of your facebook friends. When running it incrementally updates, and you get output like this...


        ...

The way it works is that you have to first click Show friends in common, and you'll be asked to log into your facebook account then redirected back to this page. You again click the button, and then some Javascript will pull all the user ids of your friends. But, since the facebook API doesn't give access to the friends of a friend, we have to redirect to results.php, putting the the user ids in the hash (i.e. #) part of the document location, so javascript can get it, and then process all the uids in a greasemonkey script. We need to do the latter, because it allows for psuedo-cross-site scripting, and (since logged into your facebook account), we can make an AJAX call via GM_xmlhttpRequest in the facebookfriends.user.js user script and parse out the number of friends in common. Then, incrementally, we show the number of friends they have, number we both have in common and then the percentage of their's and yours that you have in common with each.

[ 05:03 PM on April 27, 2009 ]

As the picture to the right will attest, I'm nearly moved out, unless the super throws another hissy fit about how I'm not moving out correctly -- i.e. trying to get paid off. I'll pay him off in goulash or a member's only jacket. Anyway, I also had my first iphone app released and it's had about 20 downloads/installs in about two days. It's free, so that means nothing to my caprine bank account, but oh well, it's cool to have it out. In the meantime I'm violently procrastinating and writing in this stupid thing; and getting a refill on my coffee.

OK, I'm back, and when getting up for my refill I put my alarm on, and for the first time it was set off by someone other than myself. He wasn't trying to steal my crapbook, but he sat down pretty heavily. Anyway, delaying over. This was completely f'ing pointless.

[ 11:16 AM on April 27, 2009 ]

Why does my bank insist on showing me this goat every time I do some banking online?
site-key.png
And, I'm so happy that my new neighbor likes Sublime -- they're cool, maybe we'll get along -- but I hope he'd realize they have more than one song.

[ 07:44 AM on April 27, 2009 ]



Copyright BWH Ventures, LLC

[ 09:40 PM on April 25, 2009 ]

OK, this was weird...very weird; and true. I was sitting at my living room table this morning, reducing a maximum pairing problem from a longest path problem (that's NP-complete) into a shortest path via Bellman-Ford when a girl walks into my apartment with a comforter wrapped around her (she had something underneath, also). I guess I left my door open after going downstairs to get some coffee. I asked if I could help her, and she just asked to use the bathroom. I was completely confused (as was she!), and mentioned that after taking a mega-dump that morning I was out of toilet paper -- she didn't care -- so I said OK. So, she went in the bathroom, without closing the door, did the deed, and then tried to leave my apartment. I had anticipated there being some difficulty in this, so kept my front door propped open. So, leaving my bathroom she walked into my bedroom and tried to exit through my closet, which didn't end in an exit. Next, she tried my front room closet; again, to no avail. Then finally I asked if she was OK with no answer that seemed to resemble English. Then, asked whether she knew where she was; this time an answer, but is was "NO." Finally, I asked whether she knew where she was going with the same response. So, I helped her to my neighbor's apartment, where the door was open. Needless to say, I think this young woman is going to be in for a surprise if she has a drug-test to take anytime in the near future.

And, I thought yesterday was strange after a pigeon flew into me, making it the first time I'd actually made physical contact with such a bird. But, I'd say this tops it.

And, again, YES, this is the honest-to-god truth. I'm looking forward to tomorrow, only to see what kind of f'ed up situation I'll find myself in then...

[ 06:12 AM on April 25, 2009 ]

Vale has come out with a couple new things this week...
 
icon50x50.png First, they have an iPhone app for browsing their collection online. You can search for Vale Jewelry on your devil phone or download it to iTunes directly and then sync with your iPhone. It still needs some tweeking, but this is just the first release and perhaps it will pull a google and stay in beta for 7 years?
 
rssicon50x50.png Next they have an RSS feed so you can subscribe to be notified of their latest and greatest. I still would like to see more integration with the Mr. Potatohead crew -- especially now that there is a legit Princess Potato (her real name is Mr. Potato Head Princess Tater, Leia, though I'll pretend I didn't see that.

[ 07:27 AM on April 24, 2009 ]

Hasbro has done it again, one for the boy
41eDacd0G4L._SL500_AA280_.jpg
... and one for the girl
41BKufKjyjL._SL500_AA280_.jpg
YES!

[ 08:13 AM on April 23, 2009 ]

facebookstats is a little (and very incomplete) portal to view histograms on some aspects of your facebook contacts, such as birthdays, locations, sex, etc. here is an example.



Yeah, I don't have a lot of contacts!

[ 08:02 AM on April 22, 2009 ]

fullimage is a greasemonkey script to provide direct links to the full images in google image searches, such as

[ 06:34 AM on April 22, 2009 ]

Last tab is a pretty cool firefox add on that allows you to click on a tab and go to the last tab used -- similar to recall on a remote control. It also affects the semantics of closing a tab; instead of giving focus to the next left tab, it goes to the last tab. This is convenient most of the time, but not when you want to open a bunch of tabs and then plow through doing the same to all of them -- for example batch automating signing up for something where there's a captcha, so you can't do it completely automatically. So, make_frames is a little ruby that takes as arguments either links or files containing lists of links and outputs to stdout a file such as this containing a menu of the links and main frame, created by executing

make_frames links.txt jeffpalm.com/spudtrooper > make_frames_eg.html

I also find myself writing that real_main wrapper quite a bit, so new_main takes output files as arguments (such as make_frames and creates files with the real_main boilerplate code with classes, such as MakeFrames.

[ 08:29 AM on April 20, 2009 ]

alpha allows you to construct an anonymous message using letters pulled from Leo Reynold's Flickr account (they are all licensed CC) and then extracted using AlphaMaker.java. This could be useful to secret valentines, signs about lost puppies, ransom letters, etc. I don't endorse any of these, though.
alpha-example.png

[ 03:26 PM on April 19, 2009 ]

Here's a little mashup of Java, Perl, Shell, Applescript, and Flickr to bring you a mosaic of everyone's favorite potato made from flickr images (click on this image to see the full one, but beware it's about 20 MB).
darthtater-collage-small.png Not quite sure why his belly is pink?

[ 06:30 AM on April 17, 2009 ]

webster are some ruby scripts to access merriam-webster.com from the command line in order to eliminate browsers altogether.

[ 07:22 PM on April 16, 2009 ]

Lettuce on Wheels will revolutionize the way you get your lettuce.

[ 03:49 PM on April 16, 2009 ]

Starbucks starbucks-att.png gives free wifi for a couple hours at a time for a month if you use a starbucks gift card; but what if you use the card to buy another card. Granted, it's close to the ultimate show of cheapness, but wouldn't that give you basically unlimited free wifi there without buying their overpriced coffee? Of course, with the exception of the initial $5 or $10 to buy the first card. Better yet, I could set up a little business inside the coffee shops undercutting their normal prices -- I doubt they would really dig that?

[ 06:57 AM on April 16, 2009 ]

Here, Mallory Anthony... nodiggbar removes the digg bar from web pages so that on pages with digg bars, you go from this

to this.
I even included images.

[ 07:39 AM on April 14, 2009 ]

select is a (very trivial) greasemonkey script to allow users to
  • Select all
  • Select none
  • Toggle all
for all the checkboxes on a page.

[ 08:59 AM on April 11, 2009 ]

Here's another little look at some reddit stats, though they aren't as informative as I wanted. They are all histograms from buckets of the hour of the day to
  • scores
  • # comments
  • # entries
The first group shows the top posts.





This group shows the normal posts -- i.e. from the root of the site.





The top group is obviously very biased, so is the second, and that's the main problem. But, you do see a little spike before around lunch time, so maybe there's something here. Probably not. Made with these. This was a f'ing waste of time.

[ 03:32 PM on April 09, 2009 ]

It's an f'ing miracle!
gmail-empty-inbox.png

[ 02:12 PM on April 09, 2009 ]

There needs to be an addition to RFC 2821, RFC 2822, or some standard X-headers to enforce that replies should go to multiple people. I don't think it's enough to request you reply to all; and I, for one, frequently neglect to see people CCed on the message. Someone also needs to come out with a peanut butter flavored soy chip.

[ 08:05 AM on April 08, 2009 ]

I was interested for some reason this morning in seeing if the score, num of comments, and time of new reddit posts was correlated to the rank; but didn't want to do anything fancy, so I just did some graphs. Obviously the score is
score-v-rank.jpg The comments appare to be, too
comments-v-rank.jpg The time seems to be NOT!
time-v-rank.jpg
Here is what I used to make it. Time for a little run.

[ 07:22 AM on April 08, 2009 ]

GMail seriously needs message c o l o r i n g.

[ 11:58 PM on April 06, 2009 ]

searchlinks is a Greasemonkey script to highlight all links matching a given regular expression. For example, if you input the string jeffpalm on this page, which contains this link

then the browser would search for the regular expression .*jeffpalm.* then scroll to and highlight that link, like

[ 07:46 AM on April 06, 2009 ]

Three things:
  1. It was nice to write a little latex_1.gif just now. The reasons were a little drab (well, very drab), but the act was nice.
  2. I finally signed up for Skype (yeah, I'm slow), and someone had spudtrooper taken. The nerve.
  3. Either my crapbook or Firefox is screwed up so I have to do all downloads in Safari; and I really wish it wouldn't try to spellcheck email addresses. It's really obnoxious -- and seriously -- how many are going to be valid English words?

[ 01:01 PM on April 05, 2009 ]

Eeeeek...It was pointed out to me that I had a bad link to a python script in a post from February...anyway, here's the right link: query. If I screw this one up I really suck. And why am I doing this now with such a gorgeous day outside? (And why am I asking rhetorical questions to myself?) Because I have no underwear and am forced to do laundry. Luckily that will end in about 45 minutes -- the laundry.

[ 08:14 AM on April 05, 2009 ]

craigtrack is a greasemonkey script to highlight postings to which you've already mailed. For example:

[ 03:27 PM on April 04, 2009 ]

After buying a big thing of Drano Max from the drug store; "have a nice afternoon" probably isn't the right salutation.
big-drano.jpg

[ 10:27 PM on April 01, 2009 ]

This is pretty cool...
new-ipod.png
It talks.

[ 06:31 PM on March 28, 2009 ]

The world of penguins. Best show ever.
penguins.png

[ 10:47 PM on March 27, 2009 ]

Scuba jesus Thanks mike!

[ 07:21 AM on February 27, 2009 ]

As floto will attest, I feel like utter crap. But, facebooklogin does handle redirects from login.php to index.php correctly now.

[ 02:39 PM on February 25, 2009 ]

I was just installing PSpice on my windows machine, and this is the first thing that the installer brings up:

PSpiceInstall.png


Hmmmm?

[ 10:19 AM on February 25, 2009 ]

query is a little python to open webpages where you'd like input something into the a text input of the first form on the page -- e.g. google.com. It takes a url and a query, and will fill in the first text input of the first form with that query on that url. For example to search for penguins on google type this:
query google.com penguins
and it would take you here. There is a small 'test suite' by running
query -test
that mainly tests the url construction, because I wasn't sure if os.path.join would work on windows with something like os.path.join('google.com', '/search'), though the almightly Felix now says it will.

[ 05:34 AM on February 25, 2009 ]

Google code search is very cool.
codesearch_logo_sm.gif
But, it makes finding daily WTF's a little too easy... (the last one doesn't surprise me)

[ 08:44 AM on February 24, 2009 ]

vale-iphone-app.png And, I had my first iphone app accepted for the Vale girls ... nothing big, but the first one, so, oh well.

It's chilly here, but sunny, so have to get outside.

[ 08:26 AM on February 24, 2009 ]

Happy National Pancake Day (and Mardi Gras)
nationalPancakeDay.png
Foxmarks needs to come out with a way to manage .bashrc and .emacs files the way they do bookmarks.

[ 10:49 PM on February 23, 2009 ]

We're taking votes for the best company name, and I think PPStream has taken this category. They're a Chinese P2P company...or a little piece of humor taking you right back to 2nd grade.

[ 06:35 AM on February 23, 2009 ]

I didn't watch the oscars last night, mainly because I saw maybe one movie last year and they usually suck; but I did look at how wikipedia morphed during the show. First, here is an animated version of the three-hour show (it's about 5.8MB), showing how the entry changed during this time (it didn't come out how I'd like.
file_localhost_Users_jeff_Sites_oscars_img2_1_202559.html.png.gif

Also here are two graphs, showing (1) how the amount of entropy (i.e. wc -l of the diffs) changed, and (2) how the overall size of the entry changed. In the former, the bars are the change at one moment, and the line is the accumulated change.



Hmmm...also, coincidentally, I was listening to NPR "All songs considered" this morning, and after I browsed over the reddit and the first article was about whether one's favorite radio station was NPR -- mine is -- how funny. Another article towards the top was about scrabble -- again, what a coincidence. But, yet another was about having your credit card number stolen, hopefully these are all just happenstance; though I'd be happy to let someone steal my card if they'd pay off my debt.

[ 02:45 PM on February 22, 2009 ]

I just noticed this ruby-amazon-firefox-bookmarks.png and I'm not sure whether it's Firefox or Foxmarks, but when you bookmark a page now with 3.0.6 it suggests tags...very cool. Not huge, no cancer-curing, but cool. Granted, I don't think that I've ever actuallyused bookmark tags, but, if there is a time in the future that I do, then this will come in quite handy.

Anyway, since hearing vampire weekend at the tiber tribute at Carnegie Hall, I've been digging them. Luckily, they've put a pretty cool tune, M79, online so I don't have to pay a buck to get it. I would, but don't have to.

[ 05:33 AM on February 22, 2009 ]

Here is a crucial account of Ben's move.

[ 04:35 AM on February 22, 2009 ]

This is trivial but useful sometimes to find all the classes in a directory of possible class files containing main methods:
#!/bin/sh
#
# Find all the classes with main methods for a 
# given directory.  If no directory is given, '.' 
# is assumed. e.g.
#
# % find_mains
# % find_mains .
# % find_mains com/jeffpalm
#

# Get the base dir, if we've specified one
dir=$1
shift
if [ x$dir = 'x' ]; then
    dir="."
fi

# Remove leading and trailing crap
dir=`echo $dir | sed 's/\.\///g'`
dir=`echo $dir | sed 's/\/$//g'`

# Find all the classes with main methods in all 
# the recursively nested class files
all=`find $dir -name "*.class" | grep -v '.*\$.*' | \
    sed 's/.class//g' | sed 's/\//\./g' | xargs`
for f in $all; do
    n=`javap $f | grep -c \
        "public static void main(java.lang.String\[\])"`;
    if [ $n = '1' ]; then
        echo $f
    fi
done
At least for the last five minutes it was useful to me.

[ 10:07 AM on February 19, 2009 ]

Here's a bookmarklet to have fun filling out your facebook profile info. Drag this link to your toolbar
facebook
and then go to to the Basic Information portion of your Info section and click. You'll get some more interesting options, e.g.
facebook-info.png

[ 06:48 AM on February 19, 2009 ]

And some one-liners1 for the previous post. . .

Ruby


Perl


PHP


SH


1If you discard require and use.

[ 06:15 AM on February 19, 2009 ]

Some random facts.

[ 03:39 PM on February 18, 2009 ]

Thanks for showing me the light, Christian. Good luck with the piss test!
christian-conversation.png

[ 09:50 AM on February 17, 2009 ]

I'm a complete dork for being so excited about this, and an even bigger one for only now installing it, but Teleport is such a great little addition for a mac. It basically lets you use one keyboard for multiple machines -- machines, not just displays... From their website
teleport lets you use a single mouse and keyboard to control several Macs.
Simply reach an edge of your screen, and your mouse teleports to your nearby Mac, which also becomes controlled by your keyboard. The pasteboard can be synchronized, and you can even drag & drop files between your Macs.
As I told Anthony, it rubs my ______ just the right way. I'll keep this clean.

[ 07:45 AM on February 17, 2009 ]

GDirections thunderbird-logo.png finally supports Thunderbird, again, in the latest release code named Chuck. It also fixes the map extensions for a few countries, but the Thunderbird fix is the main one. If you're wondering why the name, this is why
gdirections-chuck.png

[ 05:37 PM on February 16, 2009 ]

At least I covered his name

im-with-wayne.png

[ 05:56 AM on February 16, 2009 ]

There definitely seems to be lots of bugs in the iphone simulator, as well as inconsistent execution compared to the actual device. But what are you gonna do? Anyway, here are the remainder screens from the analytical tip generator. For some reason, the images weren't showing up yesterday -- a bug? a feature? I don't know?

tippstr3.png
tippstr4.png
tippstr5.png
Again, the premise behind this thing is to create or use a scheme to determine tips, perhaps with some humor, perhaps not, rather than directly specifying a number. It's fully working right now, so if you'd like a copy send me over your UDID (on the back of your devil phone) and I'll send you an ad-hoc dist. And obviously none of these people have a thing to do with this; I'm pretty sure the only one that would give me the time of day is Lightning.

[ 11:37 PM on February 15, 2009 ]

accesses is a first stab at some ruby to show access patterns for individual IP addresses read from apache log files. Addresses are on the Y-axis; times (i.e. an hour for a certain date) are on the X-axis; the point (x,y) shows that a machine with IP x accessed this site (and it's not this one) during the hour of y. Here is an example (not from this site), you can click it to see a full sized version.

[ 05:16 PM on February 15, 2009 ]

Not too much time today to work on the analytical tip generator, but here are a few shots of the process a patron would go through, rating the service in various aspects. These, of course, will be customizable, uploadable, and sharable.
tip1.pngtip2.pngtip3.png

[ 06:48 AM on February 15, 2009 ]

In celebration of setting up a friend's photo blog and fixing his rss feed, I updated the source tree of floto with geo information plus some other changes. Still need to integrate these into the version I use, but that can wait. Hopefully I'll have a new little iphone app written in not too long, in the meantime I've made the first commit, URL to come later, though if you go to the former URL, you'll find the latter.

[ 08:11 AM on February 14, 2009 ]

Uh, Amazon?
amazon-again.png

[ 10:32 AM on February 13, 2009 ]

gdirections has been updated to work on Firefox 3.1 beta2 -- that is the install.rdf has been modified, that's all. You can also get it at the official Mozilla page. I've hit an absolute blank in trying to add anything else, and I'm not in bug fixing mode (as I've obviously not been in since about June of last year, when the last bug was fixed). So, if you have any ideas, mail me.

[ 06:46 AM on February 13, 2009 ]

facebooklogin is a greasemonkey script to automatically log you into facebook if you have saved your username and password in the input fields like so.

This will save you a whole mouse click and aims to cut down on the senseless carpal tunnel syndrome and RSI cases that are crippling America and the rest of the world.

[ 10:22 AM on February 12, 2009 ]

Felix just IMed me some thoughts on how to improve the LW code base, and this led me to think about sharing non-traditional things -- like flickr headgear.pngimages and contact info, etc...and that led me to think about sharing even more non-traditional things, like resentments, dirty thoughts, meatloaf recipes, etc. These could easily be shared by strapping on some type of head apparatus that would go through the USB port onto gnutella. Then the end user would download these thoughts or ideas or recipes directly to their head using a similar piece of head gear coming out of their USB port. Of course, down the road we'd want to support fire wire, also, but it would just be plain silly to be thinking about that now.

[ 07:29 AM on February 12, 2009 ]

Wow. What are the chances of two satellites colliding?

[ 08:41 AM on February 11, 2009 ]

Here's a little look at the business apps in the itunes app store. The big surprise to me was that there was one for $899.99, iRa Pro (whatever that is?) !
MAX   : 899.99
MIN   : 0.99
MEAN  : 10.56
MODE  : 0.99
STDEV : 61.29
NUM   : 289


   0.99 (103) : ****************************************************
   1.99 ( 45) : ***********************
   2.99 ( 29) : ***************
   3.99 ( 18) : **********
   4.99 ( 32) : *****************
   5.99 (  8) : *****
   6.99 (  3) : **
   7.99 (  3) : **
   8.99 (  3) : **
   9.99 ( 21) : ***********
  11.99 (  2) : **
  12.99 (  1) : *
  14.99 (  6) : ****
  15.99 (  1) : *
  24.99 (  1) : *
  29.99 (  4) : ***
  49.99 (  1) : *
  59.99 (  2) : **
  64.99 (  1) : *
  69.99 (  1) : *
  99.99 (  1) : *
 119.99 (  1) : *
 499.99 (  1) : *
 899.99 (  1) : *
As expected, most are $0.99, though there is a little spike at about 10 bucks.

[ 03:56 PM on February 10, 2009 ]

Here's a quick comparison of three website valuation sites: stimator.com, websitevaluecalculator.com, and yourwebsitevalue.com, and how they value six of the largest sites.
website-valuations.png

[ 10:28 AM on February 10, 2009 ]

This is an interesting access pattern coming from 89-149-202-28.internetserviceteam.com (not me)...
10/Feb/2009:04:21:07 -0800 : /
10/Feb/2009:04:21:08 -0800 : /blog/
10/Feb/2009:04:21:09 -0800 : /wp-login.php
10/Feb/2009:04:21:11 -0800 : /blog/
10/Feb/2009:04:21:11 -0800 : /blog/wp-login.php
10/Feb/2009:04:21:12 -0800 : /blog/archives/
10/Feb/2009:04:21:12 -0800 : /blog/archives/wp-login.php
10/Feb/2009:04:21:13 -0800 : /blog/archives/001755.html/
10/Feb/2009:04:21:13 -0800 : /blog/archives/001755.html/wp-login.php
Hint: I use Movable Type.

[ 07:51 AM on February 10, 2009 ]

freenyc maps freenyc.net events on a google map. For some reason it's not showing the images, but I'm not wetting my pants over that. This is what it looks like.

Though, if I drink anymore coffee there is a good chance I'll wet my pants over that.

[ 01:09 AM on February 10, 2009 ]

bubble up is a bookmarklet to group all the friends of a friend with public profiles together at the end of the list of friends. The motivation is that if you want to see the friends of a friend, it's more interesting to see the ones with public profiles; but it's annoying drudging through a long list.

Before a friend list could look something like this.

Then after clicking the bookmarklet on the friend list page, you end up on the last page of this person's friends, and you'll see all this person's friends with public profiles at the end of the list. I've anonymized the names, but note the names are links.


Yeah, this is sort of stawkerish, but fun to write. I'm sure I'll never use it.

[ 11:42 AM on February 09, 2009 ]

Here are a few very superficially-personified programming languages:
Java
Java

Scheme
Scheme

Objective C
Objective C

Python
Python

Ruby
Ruby

[ 08:20 PM on February 08, 2009 ]

I'm eating some beans and watching Cops, and I'd love it for once (just once) for them to pull over someone for a broken tail light, and not find a duffle bag full of blow in the trunk. Perhaps, they could pull the driver over, and just write a ticket for, say, a broken tail light. Icing on the cake would be if the guy were white.

[ 12:13 AM on February 07, 2009 ]

This is my first cereal made at meandgoji.com (i.e. me & goji), and it contains samurai wheat, spelt flakes, cranberries, lots of soy, and strawberries. I probably won't try it, as I'm perfectly happy eating Puffins, but it looks interesting. I ran across this because I was thinking for some reason that there's a need for a site like this; then, da da, there is one. But what it lacks is a feature for people to share ther cereals with other users, and include them in search results. For example, "a certain amount of protein", "at most this most sodium", etc. Maybe that will come later, I'm not sure how long this site has been around? Either way, it's promising, I definitely support creating food online; it's even better when you can make a custom box -- perhaps in the future?
my-cereal.png
cereal-box.png

[ 07:20 AM on February 06, 2009 ]

Uh, this is not rocket science, but for a reason I won't go into I needed a programmatic unit-conversion thingy, so here is one. Usage:
Usage: gonvert <amount> <from-units> <to-units>
where the following values hold
  amount          the number amount from which to convert
  from-units      the units from which to convert
  to-units        the units to which to convert
example:
  gonvert 10 gallons liters
Example:
r3potatoo:ruby jeff$ ./gonvert 12.23 liters cups
51.6931872

[ 05:32 AM on February 06, 2009 ]

Happy belated World Nutella Day!
big2009.jpg
. . .and happy US Nutella Day today.

[ 07:49 AM on February 05, 2009 ]

Just getting this mail certainly helps suppress a semi-mid-life crisis.
amazon-mail.png

[ 07:31 AM on February 04, 2009 ]

Eek, new gmail buttons...
new-gmail-buttons.png

[ 12:38 AM on February 04, 2009 ]

Went to see The National tonight at Carnegie Hall, although it turned out to be a benefit for Tibet House. But really it turned out to be a rally for Obama and Paul Simon impersonation contest? There were songs, commentary, jokes, etc about him, I may be stupid, but I didn't get the connection. Anyway, despite The National playing only two songs, it was a good show, and the seat where very, very soft on my ass. So, no complaints.

[ 07:26 AM on February 03, 2009 ]

I'm not saying anything
obama.pngche.png

[ 10:50 AM on February 02, 2009 ]

OK, stupid-shortcuts.png I get shit from mac people for the convoluted shortcuts in heavenly emacs, now I'm giving shit to mac people on behalf of all emacs people for the horrid symbols used for their shortcuts. What are these hieroglyphics? Beyond that are the keyboard shortcuts, which are just as bad if not worse than emacs. OK, opening new windows in emacs, CTRL-X-5-2, is sort of bad; but it's no worse than taking a screen shot of a single window on a mac (and I'll use the English, not the ancient Egyptian version), Command-Shift-4-Space and then find the window. I'm not criticizing, just saying those in glass houses in Cupertino...

[ 01:29 AM on February 02, 2009 ]

Yeah, I had to delete that last one, it came out waaaaaaaaaaaay too wrong. 51B02LZlXGL._SL500_AA280_.jpg We're going to talk about happy things. Like how the new IPhone SDK is 4.9 GB. WTF is in there? Or a friend's cattle cam. Look at those cows. Mooooooooooo. Lastly, I'll mention the latest (I think) member of the potato family. I speak, of course, of Luke FryWalker. But looking again, that may not be the latest one. There are too many of em now. There was a time when it was Darth Tater and only Darth Tater, now there is Spudtrooper (which, of course, if OK), but all the baseball ones and basketball ones...And the fact that all of the non-sport, non-holiday potatoes have to do with Star Wars, I think, gives people the wrong idea. I don't like Star Wars; I like Mr Potato Heads. The distinction may be fine, but it's important.