Archive for uncategorized

Failed Coleman Model 5312 Battery

27 July 2010

Failed Fifutec SW1245 battery from Coleman Model 5312 lantern.

Posted with WordPress for BlackBerry.

Delete Empty Folders

17 September 2009

I recently found that I had a lot of empty folders in my MP3 folder after a wayward ripping session. So I whipped up this quick DOS one-liner to remove all empty folders.

From a command prompt, just change to the folder containing all the empty folders and enter the following:

FOR /f "tokens=*" %G IN ('dir /ad /b /s') DO rd /q "%G"

The command "rd /q" will be executed on every folder, but "rd" only deletes empty folders -- "rd" does not delete non-empty folders.

XMPP vCard Python Script

3 June 2009

Couldn't find a script to update my Jabber/XMPP vCard photo (a/k/a avatar), so I wrote one. It requires xmpppy (a/k/a python-xmpp). It should work with gTalk, but I have not tested it.

Credit to pastebin for some code snippets.

Hope this saves someone some time and effort.

#!/usr/bin/python
'''vcard.py - Update your XMPP vcard photo with the image you provide

Usage: vcard.py image_file jid password
'''

from xmpp import JID, Client, Iq, Presence, NS_VERSION, NS_VCARD
import sys
import os
import time
from base64 import encode, decode
from hashlib import sha1

try:
    file=os.path.expanduser(sys.argv[1])
    jid=sys.argv[2]
    password=sys.argv[3]
    resource='vcard'
except:
    print >>sys.stderr, __doc__
    sys.exit(2)

NS_VCARD_UPDATE = 'vcard-temp:x:update'
NS_NICK = 'http://jabber.org/protocol/nick'

def hash_img(img):
    return sha1(img).hexdigest()

def base64_img(img):
    return img.encode('base64')

def get_img(file):
    try:
        os.stat(file)[6]
        fh = open(file, 'rb')
        img = fh.read()
        return img
    except Exception, e:
        print >>sys.stderr, e
        sys.exit(2)

def get_mime_type(file):
    try:
        ext = file[-4:]
        if ext == '.png':
            mime_type = 'image/png'
        elif ext == '.gif':
            mime_type = 'image/gif'
        elif ext == '.jpg' or ext == '.jpeg':
            mime_type = 'image/jpeg'
        else:
            raise ValueError, "Wrong mime-type detected. Check file suffix."
    except ValueError, e:
        print >>sys.stderr, e
        sys.exit(2)
    return mime_type

def send_vcard(conn, base64_img, mime_type, nick):
    iq_vcard = Iq(typ='set')
    vcard = iq_vcard.addChild(name='vCard', namespace=NS_VCARD)
    vcard.addChild(name='NICKNAME', payload=[nick])
    photo = vcard.addChild(name='PHOTO')
    photo.setTagData(tag='TYPE', val=mime_type)
    photo.setTagData(tag='BINVAL', val=base64_img)
    conn.send(iq_vcard)

def send_presence(conn, status, hash1, nick):
    presence = Presence(status = status, show = 'xa', priority = '-1')
    presence.setTag(name='x',namespace=NS_VCARD_UPDATE).setTag(name='photo',namespace=NS_VCARD_UPDATE).setData(hash1)
    presence.setTag(name='nick',namespace=NS_NICK).setData(nick)
    conn.send(presence)

if __name__ == '__main__':
    img = get_img(file)
    j=JID(jid)
    cl=Client(j.getDomain(),debug=[])
    conn=cl.connect()
    if not conn:
        raise Exception, 'failed to start connection'
    auth=cl.auth(j.getNode(),password,resource,sasl=1)
    if not auth:
        raise Exception, 'could not authenticate'
    send_vcard(cl, base64_img(img), get_mime_type(file), j.getNode())
    send_presence(cl, 'Updated vCard Image', hash_img(img), j.getNode())
    time.sleep(1)
    cl.disconnect()

On Bootstrapping

13 April 2009

On Friday, Dave Winer released a terrific thought-piece-of-a-podcast on how journalists need to learn about bootstraps. In his most recent podcast with NYU's Jay Rosen, he and Jay discussed the topic, as well, but I want to focus on bootstrapping, the metaphor.

bootstrapDave offered the well-worn phrase "haul yourself up by your bootstraps" as the mental image we should have when we use the bootstrapping metaphor. Imagine that you're wearing your boots, you grab your bootstraps and pull on them. Well, the best outcome I can imagine is that you'd fail to accomplish anything. If you could accomplish anything, I think all you'd do is pull your feet out from under yourself. But the phrase is supposed to connote (I think) strength by self-determination and self-motivation. That's why MBA-types say they're going to "bootstrap" their start-ups when what they really mean is that their start-ups will be self-funded at the outset.

But I recall learning that before bootstraps became merely decorative, they actually served a useful purpose: namely, to strap your boots to the top of heavy items so you could carry them. Maybe it's apocryphal, but here's MY mental image of bootstrapping: a person on a horse, laden with a pack on its rump, and a heavy wooden storage box strapped to each of the rider's boots.

And that more closely matches what bootstrapping means to me: taking advantage of what's already up-and-running and using that existing momentum to get something else moving.

BlackBerry Browser Bug with Mailto: Links

5 April 2009

Mailto links give error dialog in browser when email address is missing .

I live in a great neighborhood

1 January 2009
From my neighborhood mailing list:

A beautiful start to the New Year on Ireland Drive Carriage Trail!

An anonymous good neighbor placed this sign on a stick with a rake on the trail about 2 weeks ago. It began on the county part of the trail from Jones Mill Rd. Volunteers each raked a section. Today all the leaves are raked from the foot bridge over Rock Creek all the way to the top of the trail near Linden Lane.

Bravo for a great idea and to all of us who participated.

Let's do this every year.

Itch Scratched

30 December 2008

Ah... feels so good to scratch that itch. Python, nntp, twitter, xmpp.

Soda is Baby Food

30 December 2008

[via Criggo]

IQ Test Results

23 December 2008

If I got 10 out of 10 correct, then I guess 146 is the upper limit on IQs? Don't I get extra credit for getting my "IQ" without forking over my cell number?

Twitter-Speak at BearHugCamp

12 September 2008

After a fairly testy exchange at BearHugCamp this morning among Steve Gillmor, Dustin Sallings (twitterspy and IdentiSpy bot creator), a few audience members and the guys at Twitter, Alex Payne actually gave a very clear statement about the lengths to which Twitter was willing to go to aide developers in building upon and extending Twitter.

If you need to poll the API more frequently that the API limits allow, email Alex and chances are very good that you can be accommodated. Ditto regarding something Alex referred to as a "research project" involving a data-mining feed -- presumably, this is like a customized (or perhaps random) fraction of the full public timeline firehose.

As for the full public timeline firehose via XMPP: "That would require a business discussion."

My Twitter bot works just fine for me, but Dustin is actually trying to provide a service to people other than himself, so he needs more cooperation from Twitter. Based on what Alex said, it seems that Dustin and others who are working on various bots to bring back the "track" feature via IM should be able to do so.

As for the "official" return of "track" and IM -- don't hold your breath.