Latest posts.

Via SMS on 6/15/08 @ 2:45pm

dreamt of meteorites. was awesome.

More AIM services over SMS (login, IM, away, add, delete)

Earlier today I sent an SMS post which did not go through because my AIM bot was offline. (Thank you, power outages.) What surprised me was that I actually received an error message from AIM short code 246246:

AIM
psiccbot is not avail.

1 login <sn> <pass>
2 status <msg>
3 send <sn> <msg>
h help

I didn’t recall seeing anything like this, so I decided to explore a bit. I replied with an ‘h’ to see if there were any other commands:

AIM -1/2-
Help
Send text msgs to 246246 to use AIM features. Examples:

status: status out shopping for new car
send IM: send jonny1 hi jon, I am back

AIM -2/2-
away: away at Moe's for lunch
avail: avail back at mydesk
add: add nancy123
del: del nancy123

b back to menu

It appears AIM is now allowing users to sign on and manage their accounts entirely over SMS. Niiice! I’m really starting to appreciate AIM.

IE6 window.onload, YUI, and init.js

Today I ran into the IE6 window.onload issue and subsequently came across Dean Edwards et al’s solution via Google. This solution was posted in 2006, and since then YUI and other JavaScript frameworks have gained popularity, but I still prefer the ad-hoc “non-framework” approach. YUI is a comprehensive framework and technically outstanding in terms of modularity and cross-browser compatibility. It facilitates callbacks and offers lots of configuration options in its high level components. However, it’s not perfect.

For example, I tried using the YUI AutoComplete control in a DIV element that hopped around the DOM tree depending on the state of the application. After moving from its original position, YUI failed to keep track of the control and it became unresponsive. Because the YUI codebase is such a beast, patching was not feasible. I ended up writing my own simple autocomplete control.

Additionally, even with its modular “include only what you need” approach, YUI is heavy. Getting back to the onload issue, if I wanted to use YUI’s onDOMReady method, I’d be pushing roughly 20kb of js to the end user—and that’s minified. By contrast, Edwards’ init.js amounts to around 2kb (with comments and not minified) and does not bloat the DOM with an extra namespace other than init.

However #2, in the version I downloaded, init.js provides no way to add onload events dynamically—you have to edit init.js itself. As a simple upgrade, I introduced an add method to init which allows you to push functions onto a queue which get called in succession in the main init() function. The add method has the following usage:

init.add(fn, context, param1, param2, param3, etc);

where

  • fn is a function reference
  • context is the execution context (optional)
  • paramN are function parameters (optional)

Download the upgraded version of init.js here.

Feedback appreciated!

Google has a new favorites icon (favicon.ico)

And it appears to be a lowercase serif g as opposed to the uppercase sans-ish G we’re used to. Interestingly Google claims it’s purple even though it looks blue to me.

“Hi! I’m little g, big G’s little brother. Ya know, the guy the between the yellow o and the green l?”

I wonder if we’ll see a new lowercase Google logo soon. Maybe the marketing geniuses over there thought the capital G was too intimidating, and that a lowercase g was more appropriate for the company’s purely imaginary “underdog” persona.

Via SMS on 5/20/08 @ 1:00am

how is it possible that i set an alarm to remind myself to bid on something and *still* forgot to bid?

Who remembers #prankradio on EFnet?

From 1998 to 2000 #prankradio was a channel on EFnet IRC that featured live prank phone calls. Some of the regular prankers I remember: warbux, phewl, mancow, edison, makaveli, barbi, dznutz. These guys were funny as hell, and the entire thing was uncensored of course. The channel has been dead for almost a decade now, and any efforts to revitalize it have flopped. It’s hard to believe, but it was once the largest channel on EFnet.

Anyway—reason why I’m posting this—yesterday I was looking through some old media and I came across a CDR entitled “PRANKRADIO”. On it, I found about 600 pranks in mp3 format. I think my friend (who was also into #prankradio at the time) gave it to me just before the channel died. There are 40 something “Herb Tanner” pranks alone!

If you’re interested drop me a line and I’ll send it over.

UPDATE 7/7/08: I created a torrent of the archive. There are 2 seeders presently. If it doesn’t start immediately, leave your client open for a few hours or email me and I’ll seed again.

http://pub.psi.cc/prankradio.mp3.torrent

Via SMS on 5/16/08 @ 9:45am

never use crest cinnamon toothpaste with an oral-b triumph

How to independently ‘moblog’ / ‘blog’ via SMS

Mobile computing has always appealed to me because it’s a step away from the ‘guy-in-front-of-a-machine’ paradigm and a step towards cyborgism. Although I wouldn’t consider mobile web logging anything earthshaking, it is still a step in the right direction in my opinion. There are a few 3rd party services that facilitate ‘moblogging’ (e.g., LetMeParty.com, blogger.com) but homebrewing is more fun, more customizable, and less commercially branded. The diagram bellow illustrates how I post from my phone.

Homebrew mobile web log

(I apologize for the distortion. Please click on the image to view it in full size.)

The idea is to let Wordpress poll for emails forwarded via an AIM bot which listens for SMS messages from my cell phone. If my phone had the capability to send emails, I could have skipped the whole AIM bot thing. If I had a shell account on my web host that allowed for a persistent AIM connection, I could have modded Wordpress and skipped the email part. In the end, I wound up writing an AIM bot to get around the lack of email support on my phone as well as modding Wordpress to work with an SSL IMAP inbox.

  1. I send SMS to AIM bot.

    Have you ever received an AIM message on your cell phone? If so you’ve probably noticed that AIM actually has several short codes reserved for SMS communication between AIM clients and cell phones. (I use 265-010.) If you’re an AIM user, you can send an IM to +15556661234 which will be received as an SMS by the cell user. The cell user can then reply to that message via SMS, and AIM will forward it as an IM to the AIM user. Naturally, not every AIM SN has its own short code, so AIM servers keep track of which SNs are talking to which cell phone numbers for a few minutes. This is great, but how do you initiate an IM to an AIM user via SMS? A lesser known feature (that I found in some pdf I probably wasn’t supposed to be reading) is that you can explicitly address any AIM sn by sending a text message in the following format to one of the AIM short codes:

    AIMsnHere: message goes here

    This allows to me to communicate with my AIM bot.

  2. AIM bot sends email to Gmail account.

    The AIM bot’s job is easy. It makes sure that the incoming text message is from my cell phone number, and then copies the contents of the message in an email to a Gmail inbox. I also insert a secret string into the body of the email as a layer of security. To actually send the email from Perl, I used the Net::SMTP::SSL package. See here for a sample script.

  3. Wordpress polls Gmail account for new emails and posts them.

    To make this happen, I had to edit wp-mail.php in my Wordpress codebase. As it stands, the ‘Post via e-mail’ feature is only compatible with insecure POP3 inboxes. Gmail offers both POP3 and IMAP access but only over SSL. The wp-mail.php script was relying on some custom POP3 class, so I stripped all that out and replaced it with calls to the PHP IMAP module (imap_*). For this to work, PHP has to be compiled with both IMAP and SSL support. Fortunately, Arvixe had it covered. The important line in wp-mail.php is the invocation of the wp_insert_post() function which actually creates the post. The function is documented here. Finally, I set up up a cron job on my web host to execute wp-mail.php every 15 minutes.

It’s not the most elegant solution, but it was fun stringing all these technologies together.

P.S., Those of you who know me understand why I sometimes put ‘blogging’ in quotes. On the one hand, ‘blog’ and its derivative words are universally understood and therefore convenient (if not essential) when communicating about hypertext logs. On the other hand, the word is shifting from its origins as a portmanteau of ‘web’ and ‘log’ towards a symbol of commerce and anti-human marketing, much like the word ‘podcast’. It’s bizarre. Imagine if instead of cell phone we had ‘SuperVerizonComm2000′. Imagine if instead of television we had ‘ComcastVision123′. Well, instead of internet radio we really do have ‘podcast’. I keep it real by wrapping these words in quotes.

Via SMS on 5/13/08 @ 6:15pm

hello from my cell phone

How to disable Verizon DNS Assistance (websearch.verizon.net)

If you’re a Verizon FiOS subscriber (or a Verizon DSL subscriber, presumably), you’ve probably noticed that if you try to visit a URL with a bogus domain (e.g., http://www.tgbuiewafna4wifwe.com) your browser will end up at a Verizon-branded, advertisement-riddled, annoying search page at wwwz.websearch.verizon.net: “Sorry, ‘www.tgbuiewafna4wifwe.com’ does not exist or is not available. But here are some completely irrelevant ads that you should click on!” No thanks, Verizon!

I was really surprised to learn that there is actually an opt-out tutorial on verizon.net here, but unfortunately the directions aren’t completely accurate. The important information is there, but the steps to configure the router are off (at least in my case).

So, below are the steps I took to get it working on my Actiontec MI424-WR router, firmware version 4.0.16.1.56.0.10.7, hardware version A. You can check out your router specs on the ‘System Monitoring | Router Status’ page. I can’t guarantee these steps will work or even make sense on all FiOS configurations, so let that be my disclaimer. If you’re afraid of messing up your router, make a backup of your configuration file under the ‘Advanced | Configuration File’ page.

  1. Log in to your FiOS router.
  2. Click on the ‘System Monitoring’ tab and then ‘Advanced Status’ on the left menu.
  3. Confirm that you are an advanced user by clicking ‘Yes’ and then go to ‘Full Status/System wide Monitoring of Connections’.
  4. Under the ‘Broadband Connection (Coax)’ column, take note of the IP addresses in the ‘DNS Server’ row.
  5. Now click on the ‘Broadband Connection (Coax)’ column header which should bring you to the ‘Broadband Connection (Coax) Properties’ page. Click the ‘Settings’ button.
  6. Towards the bottom of this page, look for the ‘DNS Server’ field. Change the drop down to ‘Use the Following DNS Server Addresses’. The page will now reload with two extra fields: ‘Primary DNS Server’ and ‘Secondary DNS Server’.
  7. Recall the IP addresses from step 4. According to Verizon, the last octet will always be 12. Change the last octet to 14. (The *.14 DNS servers don’t provide DNS Assistance. My DNS servers were 71.250.0.12 and 68.237.161.12 which I changed to 71.250.0.14 and 68.237.161.14. I pinged these addresses to make sure they existed. They did.)
  8. Enter the *.14 addresses respectively in the ‘Primary DNS Server’ and ‘Secondary DNS Server’ fields. Click the ‘Apply’ button.

After this, wait a minute or so, and then try a google test to make sure you can access the internet.

If the internet works, try visiting our bogus domain again: http://www.tgbuiewafna4wifwe.com. After a few seconds you should see your browser’s error page. No more Verizon web search b.s.! Hooray! Meaningless geek victory!

If you can’t access the internet, try rebooting your router. If you still can’t access the internet, then I’m sorry. Back out the router config edits and realize that the presence of Verizon DNS Assistance probably won’t affect your life either way. Go outside and take a walk in your local park, admire the foliage, et c.