Tonight is Dwayne's last night cause he just got fired
Linux USB Bootable Stick Netinstall That Works
Written on Thursday, August 12, 2010    

Today, I spent a lot of time fussing with bootable USB thumbsticks, trying to set one up that would boot the new backup server I just built at work. The machine has no optical drive, so I just wanted to boot a simple netinstall and have the system pull everything it needs from remote mirrors.

The supposed easy method was to use Unetbootin. Everything about it was easy, except for the part where the bootable USB sticks it created didn’t work. Every boot attempt was met with “Boot error” or “Missing operating system”.

Since I am on Ubuntu, I tried to use Ubuntu’s usb-creator. Also a nice app, except for the fact that it too failed to work. In usb-creator’s case, the failure was to even get started. I would browse to the ISO that I wanted to use as the image for my boot stick, and the app refused to load it, or any ISO. No error, the app simply didn’t respond to the input.

So, two piece-a-junk GUI apps down. After a little digging, I found the methods that created working USB sticks on the first try.

For CentOS:

1. Download diskboot.img from a CentOS mirror’s centos/(version)/os/(arch)/images folder.
(I used the kernel.org mirror and i386 arch, so my diskboot.img was located at: http://mirrors.kernel.org/centos/5.5/os/i386/images/)

2. Insert USB stick (I’ll assume it’s /dev/sdb, adjust instructions to fit your system), format to FAT32 (I used Gparted for this)

3. Run:

dd if=diskboot.img of=/dev/sdb

4. Remove USB drive, stick into machine that’s getting the CentOS install, and boot
When asked for installation media, select HTTP. Use the website and folder path of the mirror you’re using.
So, from my example:
Website name: mirrors.kernel.org
CentOS directory: centos/5.5/os/i386

Proceed through installer as normal.

For Debian:

1. Download boot.img.gz from /debian/dists/(version)/main/(installer-arch)/current/images/hd-media folder
(I did i386 stable from Debian’s US mirror, so boot.img.gz was located at: http://ftp.us.debian.org/debian/dists/stable/main/installer-i386/current/images/hd-media/)

2. Download Debian netinstall ISO (I used: http://cdimage.debian.org/debian-cd/5.0.5/i386/iso-cd/debian-505-i386-netinst.iso)

2. Insert USB drive (again I’ll assume /dev/sdb) and format to FAT32

3. Run:

zcat boot.img.gz > /dev/sdb

4. Remove and re-insert USB drive. Copy the netinstall ISO to the USB drive.

5. Stick USB into machine getting the Debian install, boot, and run through installer.

I imagine these instructions will probably stay good for a long time. You’ll just need to adjust for mirror location, arch and release numbers, but the URLs I’ve provided here should give you a good clue as to where to find the necessary files on the mirror you’re using.

Why Brightkite is Pissing Me Off
Written on Sunday, August 8, 2010    

brightkite Why Brightkite is Pissing Me Off

Brightkite is one of those location-based social net services, the ones where you “check in” at places and see where other people check in. It’s like Gowalla and Foursquare, except (IMO) not quite as good.

The one compelling feature of Brightkite, however, is group SMS. It allows users to create an SMS “party line”, which works with any SMS-capable phone. Chatters don’t even have to be part of the service – they can simply be invited by phone number.

This, however, creates weird Brightkite “garbage” accounts (my term), which creates issues when that phone number goes and becomes a full-blown Brightkite member. In my family’s little group text, for example, there’s one of these garbage accounts which corresponds to a phone number that is now a number associated with a real Brightkite account. But other than polluting our chat’s user list, this is mostly harmless.

Less harmless is the fact that the friends list appears completely broken. My wife and I, for example, just sat next to each other, on our respective MacBooks, typing in each other’s username and real names, trying to pull up each other’s profile so that we can friend each other.

Every search, zero hits.

We were finally able to figure out that we could see each other’s profile by clicking on each other’s name in the group chat userlist. However, when we attempted to friend each other, the service said that we’re already friends.

Yet, when we look at our own friends list, neither of us appear on the other’s friend list.

This is just the latest way in which Brightkite has shown itself to me to be a bit of a wreck. Unfortunately, I have found no other service that gives us the ability to do this sort of group SMS that works with any SMS user (we’ve found things that work with all iPhones, for example, but my parents aren’t on iPhones yet. If anyone knows of other services that do this, please let me know).

Brightkite: For God’s Sake, Sort Yourself Out.

Back Online
Written on Monday, August 2, 2010    

Migrated this site from Dreamhost to my VPS at prgmr.com. After running our own servers at work for the past year, I couldn’t put up with a shared host anymore. I put myself on prgmr’s waiting list and picked up a 512MB slice when they finally started selling some again (they’re out of everything again).

Eventually I’m going to get Nginx + PHP5-FPM to run this WordPress install, but for now, it’s Apache2 + mod_php. Definitely looking at using Nginx + Passenger for Rails deployments at work, need to get some practice setting that up too.

Turn an Android Handset into a Free Wifi Phone with Google Voice
Written on Friday, July 30, 2010    

screenshot sip Turn an Android Handset into a Free Wifi Phone with Google Voice

My wife and I recently abandoned our T-Mobile G1′s to become iPhone people. As much as it pained me to (temporarily, at least) abandon a nice open platform I had followed for some time, I have to confess that the new iPhones hit a sweet spot in a way that the previous three generations of iPhone simply did not (for me, at least).

But that is a post for another time. This post is about what we did with our G1′s once that service icon turned into an “X”.

The G1 is a wifi-enabled device. Even without traditional mobile phone service, it can be used with VOIP services. There are a number of paid SIP (Session Initiation Protocol)-based VOIP services which you can pair with a SIP application on the phone to create a fully-functional wifi phone.

But, that costs money. What about something you can use for free? Well, that’s where Google Voice comes in.

To understand how this works, you just need to know two things:
1. There are a number of SIP providers that give you free incoming (domestic) calls, while charging for outbound calls.
2. Google Voice traditionally works by calling your phone number, and then connecting you to the outbound number you intend to call (in other words, it turns an outbound call into an incoming one)

See where I’m going with this?

With a Google Voice account, a SIP service account, and the right Android apps to interoperate with each, you can have an Android handset that gives you free incoming calls, and free outbound calls by way of Google Voice’s method of connecting you.

The phone, obviously, must be in range of (and connected to) a wifi network to be able to make and receive calls. Well, my house’s wifi network is always on. So by setting up my wife’s old G1 this way and plugging it into its AC adapter in the wall, we’ve turned that G1 into an always-on, free “home phone line”. One with voicemail transcription and SMS, even.

The following instructions explain how I set this up with a phone that I wiped and started from scratch with. You should have no problems creating the same setup on an existing Android phone without wiping everything – I just wiped everything so that my G1 would be clean and not running any other junk that might slow the (easily slowed) phone down.

These instructions are geared primarily toward my use case of adding VOIP to an Android phone that no longer has active cell service. You can also add free VOIP calling to a phone that has service. If you have no data service, you can use VOIP entirely on wifi like I am. If you have 3G or EDGE data service, you have the option to have your VOIP service still be active when outside of wifi reach. You may have to make a couple of slight adjustments to these instructions for a phone that still has cell service, but they should mostly be obvious.

Phase 1: Getting Online with Freshly Wiped. Has-No-Service Phone
(skip if you’re just adding wifi calling to your active Android phone)

  1. Skip Google Account setup for now. With no service, it can’t connect to the Internet anyway, until we have wifi running.
  2. Set time settings (remember to set time zone – it’s not detected if you have no phone service)
  3. Settings -> Wireless Networks
    • Wi-Fi (check to enable)
    • Wi-Fi Settings -> pick your wireless network (and if you’re like me, type in painfully long, random character encryption key!)
      • Type the key in again because you did it wrong the first time
    • Mobile Network Settings
      • Data enabled (uncheck to disable)
      • Data roaming (uncheck to disable)
  4. Settings -> Accounts & Senc
    • Now that we are on wifi, we can add our Google account
    • Click “Add account”, enter Google account info as prompted

Phase 2: Download Required Apps from Market

  1. Log in to Google Talk (especially if you’re on wifi only – downloading from Market often fails if you’re not logged into Google Talk)
  2. Download Google Voice
  3. Download Google Voice Call Free
  4. Download sipdroid
  5. Download KeepWiFi

Phase 3: sipgate and Sipdroud

  1. Go to http://www.sipgate.com/one and click Sign Up Now and create an account (you will need a mobile phone with SMS to receive the confirmation text)
  2. When you have the account all set up and logged in, go to My Settings and click the “SIP Credentials” link way on the far right of the page. Keep this handy in a browser tab.
  3. Configure Sipdroid to use your new sipgate number:
    • Menu Button -> Settings -> SIP Account Settings
    • Enter the following Sipdroid settings with the information from the sipgate.com SIP Credentials
    • Authorization Username = SIP-ID
    • Password = SIP-Password
    • Server or Proxy = sipgate.com
    • Domain = (leave blank)
  4. Configure Sipdroid to use the connections you want
    • Settings -> Call Options
    • For a phone with no cell service, just have Use WLAN checked
    • If you have cell service with data, it’s up to you whether you want to Use 3G and Use EDGE as well.

Phase 4: Google Voice

  1. Go to http://voice.google.com and create a Google Voice account (you will need an invite to Google Voice if you don’t yet have an account)
  2. You will be required to input a phone number to have GV forward to. You can input your sipgate number.
  3. Have Google Voice call you to confirm, enter confirmation number
  4. Launch Google Voice app
    • Select Do not use Google Voice to make any calls. We will be using the Google Voice Call Free app to do the dialing.
      • If you’re on a phone that still has normal call service, you’ll probably want to set this to Always Ask instead.
    • If you have phone service, you can set GV to take over as the phone’s voicemail provider. If you have no service, ignore this option. Voicemail will come via the GV app.
    • After setup, go to Settings -> Sync and Notifications, and enable Synchronize Inbox (and disable Notifications via text message).
  5. Launch Google Voice Call Free app
    • Select Use GV to make all calls under Enable Callback
    • Enter your Google Voice account info
    • Enter your sipgate.com phone number for the Callback Number

Phase 5: Keep WiFi Running

Android phones (at least, the ones I’ve used) put the wifi connection to sleep when the phone screen goes off. We want to stop this from happening if we want the phone to sit on wifi ready to receive VOIP calls all day.

  1. Launch KeepWifi
  2. Enable it!

Phase 6: Enjoy Your New WiFi Phone!

Dial phone calls as normal. Google Voice Call Free will “intercept” the outgoing dial, and call your phone. Answer, and then GV will connect you to the number you dialed.

Missed calls will appear in the normal Android dialer.

Voicemails will appear in Google Voice. As long as you have Synchronize Inbox set, it will receive a push notification when a voicemail is received, and will give you the transcription and an audio file to listen to.

I’m So Pretty
Written on Tuesday, June 29, 2010    

Spam too good to ignore. Apparently, I still have a Xanga account:

xanga spam Im So Pretty

She Said It
Written on Saturday, June 26, 2010    

ME: “You’re retarded, and you’re hurting my arm.”
WIFE: “I’m not hurting your arm!”

Podcast Rename in iTunes
Written on Monday, May 31, 2010    

I hate when podcast providers title their podcast feeds with anything other than the name of their show.

Unfortunately, in iTunes, it is not possible to rename podcasts.

The dude who wrote this meta.stackoverflow post, however, has done something about it.

He made podcast-rename.appspot.com, a little web service running on Google App Engine, which takes a podcast feed URL and a title that you type in, and serves up that same podcast feed with your title inserted in place of the original title.

This is especially useful for podcasts that add a lot of junk into their title, or related podcasts which maddeningly fail to set a naming convention and follow it. The latter is the case with the podcasts for the Johnjay & Rich radio show. Half of their podcasts have “Johnjay and Rich:” at the start of the title, and the other half have the segment name only. So, in iTunes and on an iPod, the ones that don’t have Johnjay & Rich at the front are scattered away from the rest. Very dumb, but what can you expect from a Clear Channel production?

Thankfully, this dude’s little Google App Engine project takes care of the problem. Here’s to you, guy who is as anal about podcast organization as me. You’ve earned the title:

1246079 f520 300x173 Podcast Rename in iTunes

Reluctant iPad Fan
Written on Thursday, May 27, 2010    

When the iPad came out, I expressed concern and disappointment over its highly locked-down nature. Obviously, the iPhone is too, and that’s one reason why I am a big Android fan and supporter. But a locked-down smartphone is one thing. A device that can serve a family’s general home computer use (email, web, etc) being so restricted is, in my mind, another.

On top of that came the new, more restrictive iPhone OS (which is what the iPad runs too) SDK agreement, which essentially terminated the ability to write iPhone and iPad software in any language other than C, C++, or Objective-C. The languages I prefer, namely Ruby and Python, were no longer welcome.

These concerns and disappointments remain as strong as ever.

However, while my intention was to wait for a good Android tablet to come along, life threw a curveball. My boss decided to reward our little core team for a job well done on our big annual job, and she bought us each iPads.

The night before, I had taken my wife to the Apple Store to buy her a 13″ MacBook Pro, which is the same laptop I have.

Between the complaints above and Apple’s decision to sue HTC over phone touchscreen patents, I had suggested on Twitter that I might abstain from Apple products in the future. Now the view from my living room couch was two 13″ MBPs and an iPad. Clearly, I was failing.

Now, despite my recent misgivings about Apple, I did have some interest in the iPad. Specifically, I wanted something like it for an ebook reader. I have many books and whitepapers in PDF format, and I wanted a nice little tablet that would make reading them much more enjoyable (I had been reading them on my netbook, which was OK but not fabulous). While the e-ink ebook readers are tops in reading comfort, they don’t offer much more than black text.

ipad gallery 2 400x300 Reluctant iPad Fan

The iPad’s IPS LED display may not be e-ink, but it is more comfortable to read than older LCD computer screens. With a 99 cent purchase of GoodReader, the iPad has provided the PDF eBook reader I wanted. I expected it to succeed in that capacity. But the iPad has succeeded in other ways that I did not expect.

Like many observers, I saw the iPad as a strange middle ground between a smartphone and a laptop, with netbooks crowding that middle ground even further. And as the owner of an Android smartphone, a netbook (EeePC), a 13″ laptop (MacBook Pro), a 17″ laptop (Sager), and a desktop PC, it was hard to see where the iPad fit, outside of the ebook functionality.

But upon using it, I found the iPad succeeded in two unexpected spaces:
1. As a social computing device
2. Touchscreen applications impractical for smartphones

I got the first hint of the iPad as a social computing device from this Gamers With Jobs post, where the poster mentioned how nice it was to shop for apartments with his girlfriend on the device, passing it back and forth. I was reminded of that today when reading this blog post, where the author comments on how the iPad has become the kitchentop family computer that everyone simply picks up and uses, and shares.

Since getting my own iPad, I’ve observed this myself. The thing just begs to be passed around. Right down to details like the screen’s extremely high viewing angles, it’s made for casual, shared use, in the way that even a netbook isn’t.

I like the observation of that blog post:

Our iPhones, Androids, and Blackberries are our personal devices. We wear them and they are with us everywhere. Our iPad is our family computer in way that the kitchen macbook never was.

This has spilled over to work. I bring my iPad to work, as the others who received one do as well. Rather than trying to hold up a laptop to show a webpage at a meeting, someone can punch it up on their iPad and easily hold it up or pass it around.

ipad 3g shipping credit card charge Reluctant iPad Fan

This is the closest image I could find to people sharing an iPad

When people say that it’s an overgrown iPhone, I think they are only thinking of the device as a single-user machine. They’re not thinking of dropping it into the middle of a room of people. The device size, screen resolution, and screen quality (especially those viewing angles) make it a whole different beast in a group setting.

The other area where the iPad surprised me is in touchscreen applications that just aren’t viable on a small iPhone screen. One of the ones I’m using at work is iMockups. It’s a $10 app that uses drag-and-drop touch functionality to allow users to quickly make mockups of webpages and web application UIs. I can’t imagine trying to make a webpage mockup on an iPhone touchscreen (or my Android phone), but the big iPad surface and screen resolution allow the kind of precision that makes this task possible.

And, of course, that social, bring-it-to-the-meeting nature of the iPad means I draw up the mockup on the iPad, then bring it to the meeting to pass around.

I’m sure part of my satisfaction has to do with not having to justify its price tag. Having it bought for me takes the “is it worth it?” question completely out of the equation. Naturally, a lot of tech devices look good when cast in that light. But I don’t think I can put myself into that cost/benefit headspace at this point, so I won’t even try. All I can say is that the iPad has definitely talked me out of the “overgrown iPhone” mindset. Using it has made clear to me where it fits in the computing spectrum, where before it seemed to be a device without a home. When looked at not as a personal computing device, but as an ebook reader plus as a social computing device, the iPad’s home becomes clear.

Why I Can’t Stand NetBeans
Written on Monday, May 10, 2010    

NetBeans, the open source IDE, may be a very good piece of software. In fact, I’m sure it is. Unfortunately, I’ve never been able to get started using it.

Why? For one reason – bad fonts!

That may be a petty reason for not using something, but when one writes code all day, it helps to have the text look nice. Having bad text that will piss me off is just going to ruin my day a little bit, every single day.

The problem is that the Java Swing GUI toolkit, which NetBeans is written in, does not use the native font rendering like SWT (which Eclipse uses) does.

NetBeans:
netbeans sux Why I Cant Stand NetBeans

I’ve clicked a GNOME menu so you can see the difference side-by-side. Notice that the NetBeans window menu looks like scraped dog crap compared to my nice, thick, don’t-kill-my-eyes-with-paper-thin-lines native GNOME fonts.

I’ve tried plenty of /etc/netbeans.conf settings to try and fix this.

-J-Dawt.useSystemAAFontSettings=lcd (or "on") #does not do sh*t
-J-Dswing.aatext=true #does not do sh*t
--laf javax.swing.plaf.(bunch of things) #changes decorations but does not do sh*t to fix fonts

netbeans sux 2 Why I Cant Stand NetBeans

Nobody deserves this sh*t.

Now we look at Eclipse:
eclipse rules Why I Cant Stand NetBeans

eclipse rules 2 Why I Cant Stand NetBeans

Native fonts FTMFW!

Talking Databases
Written on Wednesday, April 7, 2010    

On Twitter:

legion: I get the so-called "NoSQL" databases in high-scaling apps, but do any of them make sense in tiny apps where SQL might be overkill?

CouchDB: @Legion I was designed scratch for scaling down, running on mobiles, etc.

legion: @CouchDB Yeah, but you're a TALKING database! That's creepy!

Older Posts »