<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:brad</id>
  <title>brad's life</title>
  <subtitle>bored as hell and i wanna get ill</subtitle>
  <author>
    <name>Brad Fitzpatrick</name>
  </author>
  <link rel="alternate" type="text/html" href="http://brad.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom"/>
  <updated>2009-07-03T21:02:39Z</updated>
  <lj:journal userid="2" username="brad" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://brad.livejournal.com/data/atom" title="brad's life"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2404159</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2404159.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2404159"/>
    <title>this has gone too far</title>
    <published>2009-07-03T21:01:59Z</published>
    <updated>2009-07-03T21:02:39Z</updated>
    <category term="stupid"/>
    <category term="wtf"/>
    <content type="html">wot?  San Francisco Water does social networking?!&lt;br /&gt;&lt;img src="http://bradfitz.com/temp/sfwater.jpg" /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2403841</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2403841.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2403841"/>
    <title>Google Profiles has XFN now</title>
    <published>2009-06-24T20:38:47Z</published>
    <updated>2009-06-24T20:42:02Z</updated>
    <category term="google"/>
    <category term="work"/>
    <category term="social graph"/>
    <content type="html">&lt;p&gt;Google Profiles just launched a new feature that's too dorky and
obscure to warrant an official "Google blog" blog post, so the product
manager on it said, &lt;i&gt;"Brad, you're dorky... you should post it.  You do
Social Graph API stuff.  The right people would read your blog,
right?"&lt;/i&gt; (roughly)&lt;/p&gt; 
 
&lt;p&gt;So sure, I'll blawg it here.&lt;/p&gt; 
 
&lt;p&gt;&lt;a href="http://www.google.com/profiles/"&gt;Google Profiles&lt;/a&gt; now
have &lt;a href="http://gmpg.org/xfn/"&gt;XFN&lt;/a&gt; &lt;code&gt;rel="me"&lt;/code&gt; 
attributes on links.  Again.  (It had them briefly for awhile but it
was done grossly so they were removed...)&lt;/p&gt; 
 
&lt;p&gt;&lt;b&gt;Why is this important?&lt;/b&gt;  &lt;code&gt;rel="me"&lt;/code&gt; links are the
glue of your social identity online.  They tie together all your sites
&amp; accounts, &lt;a href="http://code.google.com/apis/socialgraph/"&gt;letting
other sites know where to find you&lt;/a&gt;.  (Of course, if you don't want
to be found, or have different personas: don't make links between
them!).  But if you're reading this post you already know all this, so
I'll shut up.&lt;/p&gt; 
 
&lt;p&gt;&lt;b&gt;How does it work in Google Profiles now?&lt;/b&gt; While I don't work
directly on Profiles, I sit near them and like to voice opinions on
things.  So here's the new design, which you can blame me for parts of
if you hate it:&lt;/p&gt; 
 
&lt;ul&gt; 
 
&lt;li&gt;assume users don't care about &lt;code&gt;rel="me"&lt;/code&gt; and it's super
dorky.&lt;/li&gt; 
 
&lt;li&gt;do the best possible right thing by default, but let dorks
override it.&lt;/li&gt; 
 
&lt;li&gt;assume users will use products in ways you didn't imagine (aka
"wrong")&lt;/li&gt; 
 
&lt;li&gt;assume users will add Profiles links to their favorite websites,
bands, friends, etc., not just "their" pages on the web.&lt;/li&gt; 
 
&lt;li&gt;hide the &lt;code&gt;rel="me"&lt;/code&gt; choice by default when adding a link&lt;/li&gt; 
&lt;li&gt;show the &lt;code&gt;rel="me"&lt;/code&gt; choice if they go back and press "edit" on it&lt;/li&gt; 
&lt;li&gt;track two new bits per-link:
  &lt;ol&gt; 
   &lt;li&gt;does the user care about &lt;code&gt;rel="me"&lt;/code&gt;?  (i.e. are they dorky?)&lt;/li&gt; 
   &lt;li&gt;if so, does the user want this link to be &lt;code&gt;rel="me"&lt;/code&gt;?&lt;/li&gt; 
  &lt;/ol&gt;&lt;/li&gt; 
 
&lt;li&gt;when rendering the Profiles page HTML, consider those two bits:
  &lt;ul&gt; 
    &lt;li&gt;if the dork bit is on, use the value of the second bit (whether
    they chose &lt;code&gt;rel="me"&lt;/code&gt; on this link)&lt;/li&gt; 
 
    &lt;li&gt;if the bit is off, just guess.  But guess somewhat
        conservatively.  We can adjust these heuristics over time (a lot of which are based on &lt;a href="http://code.google.com/p/google-sgnodemapper"&gt;sgnodemapper&lt;/a&gt;), as
        most the links will be in do-not-care mode.&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
&lt;/ul&gt; 
 
&lt;p&gt;So, my dorky friends, you can now fix the &lt;code&gt;rel="me"&lt;/code&gt; 
state on your links by going
to &lt;a href="http://www.google.com/profiles/me/editprofile"&gt;the
editor&lt;/a&gt; and pressing "Edit" on the links and checking their state.
Be sure to hit "Save" at the bottom.&lt;/p&gt; 
 
&lt;p&gt;Enjoy.&lt;/p&gt; 
 
&lt;p&gt;(And keep in mind that the real utility of all this comes later.
Consider yourself a dorky earlier adopter.)&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2403626</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2403626.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2403626"/>
    <title>Birthday Card</title>
    <published>2009-06-09T20:12:46Z</published>
    <updated>2009-06-09T20:14:55Z</updated>
    <category term="funny"/>
    <content type="html">Sierra's brother sent her a birthday "card":&lt;blockquote&gt;

&lt;img src="http://lh6.ggpht.com/_GkCPI_nbT5o/Si7BozwsoPI/AAAAAAAAFo8/CDq-TAoCAWs/s640/ian-holiday-card.png" /&gt;

&lt;p&gt;&lt;i&gt;I do not support the holiday card industry.  Happy b-day.  Love, Ian M-S.&lt;/i&gt;&lt;/blockquote&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2403519</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2403519.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2403519"/>
    <title>Hiking</title>
    <published>2009-05-31T20:20:47Z</published>
    <updated>2009-05-31T20:20:47Z</updated>
    <category term="travel"/>
    <category term="life"/>
    <content type="html">Went to Seattle with &lt;a rel="date" href="http://whatever-art.livejournal.com/"&gt;Sierra&lt;/a&gt; this weekend.  Hung out with her parents and brother and went hiking with her dad and recorded it with the "My Tracks" Android app, which let me upload it to Google Maps:  &lt;a href="http://maps.google.com/maps/ms?ie=UTF8&amp;amp;hl=en&amp;amp;msa=0&amp;amp;msid=105844179616633553359.00046b398ad5f7b920538&amp;amp;ll=47.905526,-122.545452&amp;amp;spn=0.060644,0.100594&amp;amp;t=p&amp;amp;z=13"&gt;the 7.6 mile Hansville hike&lt;/a&gt;.  Good hike &amp; good app.&lt;br /&gt;&lt;br /&gt;Back to SF tonight.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2403284</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2403284.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2403284"/>
    <title>Facebook Phonebook Exporter updated</title>
    <published>2009-05-09T22:39:52Z</published>
    <updated>2009-05-09T22:39:52Z</updated>
    <category term="hack"/>
    <content type="html">Updated my old &lt;a href="http://brad.livejournal.com/2398409.html"&gt;Facebook Phonebook Exporter&lt;/a&gt; / sync tool to work with Facebook's new layout.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2403002</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2403002.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2403002"/>
    <title>Found on my desk... awww?</title>
    <published>2009-04-29T04:32:35Z</published>
    <updated>2009-04-29T04:33:43Z</updated>
    <category term="life"/>
    <category term="funny"/>
    <content type="html">&lt;a href="http://picasaweb.google.com/bradley.j.fitzpatrick/Misc?feat=embedwebsite#5329965166273091666"&gt;&lt;img title="swine flu reminds me of flying pigs which makes me think of things that look funny which makes me think about you" border="1" width="600" src="http://lh5.ggpht.com/_GkCPI_nbT5o/SffXFFDp2FI/AAAAAAAAEuM/Dnqbk9Jt13A/s720/swine-flu-woo.jpg" alt="" /&gt;&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2402580</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2402580.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2402580"/>
    <title>PubSubHubbub</title>
    <published>2009-04-27T05:09:32Z</published>
    <updated>2009-04-27T13:31:05Z</updated>
    <category term="pubsubhubbub"/>
    <category term="hack"/>
    <content type="html">&lt;a href="http://www.google.com/profiles/bslatkin"&gt;Brett&lt;/a&gt; and I made a bunch of progress on &lt;a href="http://code.google.com/p/pubsubhubbub/"&gt;PubSubHubbub&lt;/a&gt; today.  Bunch of new docs, two Perl modules, protocol clarifications &amp; spec cleanup, hub server updates, etc.&lt;br /&gt;&lt;br /&gt;If you haven't read about it, or it's been awhile, I encourage you to go check it out.&lt;br /&gt;&lt;br /&gt;We're looking for help with client libraries and general involvement if you have any time!  Join the list and claim a language / CMS.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2402144</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2402144.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2402144"/>
    <title>Newspaper Death</title>
    <published>2009-04-20T15:26:01Z</published>
    <updated>2009-04-20T16:30:46Z</updated>
    <content type="html">When I read blogs, I'm more tolerant to grammatical mistakes.  But the AP?  C'mon:&lt;blockquote&gt;&lt;a href="http://www.huffingtonpost.com/2009/04/19/ap-obama-gores-foreign-po_n_188770.html"&gt;http://www.huffingtonpost.com/2009/04/19/ap-obama-gores-foreign-po_n_188770.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;....&lt;br /&gt;&lt;br /&gt;At his news conference Obama said he didn't think he did much damage to U.S. security or interests by shaking the hand of Chavez, whose country has a defense budget about one-six hundredth the size of the United States, and depends upon &lt;b&gt;it's oil reserves&lt;/b&gt; for solvency.&lt;br /&gt;&lt;br /&gt;....&lt;br /&gt;&lt;/blockquote&gt;&lt;i&gt;(emphasis&lt;s&gt;ze&lt;/s&gt; mine)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Seriously, AP editors?  Seriously, Steven R. Hurst?&lt;br /&gt;&lt;br /&gt;Maybe the newspapers &lt;i&gt;should&lt;/i&gt; die.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2401862</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2401862.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2401862"/>
    <title>Happy 10 years!</title>
    <published>2009-04-16T04:44:30Z</published>
    <updated>2009-04-16T04:44:30Z</updated>
    <category term="livejournal"/>
    <content type="html">Happy 10 year birthday, LiveJournal!</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2401628</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2401628.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2401628"/>
    <title>Google Profiles gets pretty URLs</title>
    <published>2009-04-14T18:01:54Z</published>
    <updated>2009-04-14T18:01:54Z</updated>
    <category term="google"/>
    <content type="html">Ugly URL:&lt;br /&gt;&lt;a href="http://www.google.com/s2/profiles/115863474911002159675"&gt;http://www.google.com/s2/profiles/115863474911002159675&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pretty URL:&lt;br /&gt;&lt;a href="http://www.google.com/profiles/bradfitz"&gt;http://www.google.com/profiles/bradfitz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(I don't work on this, but am excited about pretty URLs....)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2401444</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2401444.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2401444"/>
    <title>Ireland</title>
    <published>2009-03-21T09:10:27Z</published>
    <updated>2009-03-21T09:26:04Z</updated>
    <category term="ireland"/>
    <category term="travel"/>
    <category term="life"/>
    <content type="html">Still in Ireland. Dublin, Galway, Limerick, Dingle, Killarney, Cork, ....&lt;br /&gt;&lt;br /&gt;So pretty.&lt;br /&gt;&lt;br /&gt;Bunch of photos on &lt;a href="http://picasaweb.google.com/bradley.j.fitzpatrick/"&gt;my picasaweb&lt;/a&gt; and &lt;a href="http://www.youtube.com/watch?v=poyv3jsLiOY"&gt;a video on youtube&lt;/a&gt; (that was over picasa's wtf 100MB limit).</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2401065</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2401065.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2401065"/>
    <title>Travel</title>
    <published>2009-02-13T14:52:24Z</published>
    <updated>2009-02-13T14:54:42Z</updated>
    <category term="travel"/>
    <content type="html">After 5 nights in lovely Barcelona and a night in Casablanca, Sierra and I are currently in &lt;a href="http://en.wikipedia.org/wiki/Marrakech"&gt;Marrakesh&lt;/a&gt; at the most ridiculous hotel I've ever seen.&lt;br /&gt;&lt;br /&gt;Marrakesh is ridiculous(ly awesome) from what I've seen.  Time to go see more.  And get foods.  Foooood.&lt;br /&gt;&lt;br /&gt;P.S.  Everything is in Arabic and French.  I speak neither of these languages, but I understand the French letters and a lot of the words.  I know like 5 French phrases.  They don't get me very far.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2401020</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2401020.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2401020"/>
    <title>Pictiondrunkery</title>
    <published>2009-02-05T23:59:48Z</published>
    <updated>2009-02-05T23:59:48Z</updated>
    <content type="html">&lt;a href="http://www.tessasaurus.com/"&gt;Tessa&lt;/a&gt; liked my proposal for birthday bar hopping beginning by meeting at my house with some drunken Pictionary, which she calls "Pictiondrunkery".&lt;br /&gt;&lt;br /&gt;But yeah --- if I know you and/or you've ever been over to my house, come by tonight.  We'll be drinking and playing board games while people arrive between 7 and 9 or so, and then head out after that.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2400656</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2400656.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2400656"/>
    <title>age++</title>
    <published>2009-02-05T15:02:04Z</published>
    <updated>2009-02-05T15:02:04Z</updated>
    <category term="life"/>
    <content type="html">29.&lt;br /&gt;&lt;br /&gt;Tonight's plan is/was to go out and get drinks with friends, but I've got a fever+sore throat that may interfere.  Seems to be getting better, but we'll see.&lt;br /&gt;&lt;br /&gt;Hmm, I kinda forgot to post anything all throughout January, including a 2008-in-review post.  I should do that still.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2400314</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2400314.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2400314"/>
    <title>Seattle in a nutshell</title>
    <published>2008-12-20T21:13:00Z</published>
    <updated>2008-12-20T21:13:00Z</updated>
    <category term="travel"/>
    <content type="html">Brrr.  Love it.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh6.ggpht.com/_GkCPI_nbT5o/SU1fTWFDnuI/AAAAAAAACbI/xIuDDreXRlk/s512/photo.jpg" /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2400054</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2400054.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2400054"/>
    <title>Android, Debian, Linux, remote keyboard to G1, ...</title>
    <published>2008-12-15T07:15:18Z</published>
    <updated>2008-12-15T07:17:11Z</updated>
    <category term="tech"/>
    <category term="hack"/>
    <category term="android"/>
    <content type="html">I'm loving Android more and more.  I keep finding (and filing) bugs, but they're all fixable, and this is only going to keep getting better.&lt;br /&gt;&lt;br /&gt;Today I installed &lt;a href="http://www.saurik.com/id/10"&gt;Debian on my G1&lt;/a&gt;.  I followed those instructions up until the unionfs part, where I opted to use bind mounts instead, letting me have a /android/data and /android/system inside my Debian chroot.&lt;br /&gt;&lt;br /&gt;Anyway, I now have openssh, perl, python, sqlite3, emacs, git, svn, gcc, screen, nmap, tcpdump, iftop, etc... all running on my phone in a little 2GB filesystem.  (I have a 16GB SD card).  Then using &lt;a href="http://code.google.com/p/connectbot/"&gt;ConnectBot&lt;/a&gt;, I just keep an ssh connection from the phone to localhost all the time, so Debian is accessible when I'm out and about.&lt;br /&gt;&lt;br /&gt;But when I'm at home and want to ssh in, I have a bash alias which forwards a port over USB:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;alias droid='$ANDSDK/tools/adb forward tcp:1622 tcp:22 &amp;&amp; ssh -p 1622 root@localhost'&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;... so then my openssh server only needs to listen on localhost.&lt;br /&gt;&lt;br /&gt;Now that I can just ssh into my phone to work on stuff, I was getting annoyed having to reply to SMSes by using the little phone keyboard when I was sitting in front of a real keyboard.&lt;br /&gt;&lt;br /&gt;So I wrote this:&lt;br /&gt;&lt;a href="http://github.com/bradfitz/android-misc/tree/master/type.pl"&gt;http://github.com/bradfitz/android-misc/tree/master/type.pl&lt;/a&gt; [&lt;a href="http://bradfitz.com/android/type.pl.txt"&gt;mirror&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;That's an app which captures my keystrokes in my ssh session (I have it running in a screen window), and then injects them into the Linux input layer, so Android thinks I'm typing them on the keyboard.&lt;br /&gt;&lt;br /&gt;Even cooler:  I wrote that all ssh'd into my phone, over ssh in Emacs in screen, including git-push'ing it to github.com.&lt;br /&gt;&lt;br /&gt;Fun stuff.&lt;br /&gt;&lt;br /&gt;(Don't worry --- I'm not just working on useless stuff.  &lt;span class='ljuser' lj:user='dan_erat' style='white-space: nowrap;'&gt;&lt;a href='http://dan-erat.livejournal.com/profile'&gt;&lt;img src='http://l-stat.livejournal.com/img/userinfo.gif' alt='[info]' width='17' height='17' style='vertical-align: bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='http://dan-erat.livejournal.com/'&gt;&lt;b&gt;dan_erat&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; and I were hacking on an Android app today which everybody can use....)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2399905</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2399905.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2399905"/>
    <title>K-9 SMS: v2</title>
    <published>2008-12-09T07:58:54Z</published>
    <updated>2008-12-09T07:58:54Z</updated>
    <category term="tech"/>
    <category term="hack"/>
    <category term="android"/>
    <content type="html">Updated &lt;a href="http://brad.livejournal.com/2399403.html"&gt;K-9 SMS&lt;/a&gt;.  Same download URL:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bradfitz.com/android/K9Sms.apk"&gt;http://bradfitz.com/android/K9Sms.apk&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Changes:&lt;br /&gt;*) fix duplication issues with system SMS service/notifications also running.&lt;br /&gt;*) enter key now inserts a literal newline instead of sending the SMS.  (by request, and because I accidentally send too many SMSes too that way)&lt;br /&gt;*) little about menu with version number</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2399739</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2399739.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2399739"/>
    <title>Android Developer Phones</title>
    <published>2008-12-08T19:50:50Z</published>
    <updated>2008-12-08T19:50:50Z</updated>
    <category term="android"/>
    <content type="html">Get an SIM-unlocked, bootloader-unlocked, kernel-unlocked, fully flashable Android phone for $399, with free shipping in the US:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/android/dev-devices.html"&gt;http://code.google.com/android/dev-devices.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(plus $25 if you're not already registered as an Android developer, which is probably the case.)&lt;br /&gt;&lt;br /&gt;Awesome.  This removes one of my ever-dwindling list of Android complaints, that no open phone has been available that matches the openness of the software.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2399403</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2399403.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2399403"/>
    <title>K-9 SMS:  faster SMS for Android</title>
    <published>2008-12-08T06:12:40Z</published>
    <updated>2008-12-08T06:12:40Z</updated>
    <category term="tech"/>
    <category term="hack"/>
    <category term="android"/>
    <content type="html">I pulled the &lt;a href="http://android.git.kernel.org/"&gt;latest Android git code&lt;/a&gt; and fixed some performance bugs in the SMS app.  Here's the improved SMS app:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bradfitz.com/android/K9Sms.apk"&gt;http://bradfitz.com/android/K9Sms.apk&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's a &lt;i&gt;lot&lt;/i&gt; faster to scroll around and stuff now.  No more repetitive, uncached, blocking SQL queries in the UI thread when each list items comes in/out of view.&lt;br /&gt;&lt;br /&gt;With permission from Jesse Vincent, I named it after &lt;a href="http://code.google.com/p/k9mail/"&gt;k9mail&lt;/a&gt;, as it's in a similar spirit.  We'll probably put it in k9mail's svn repo until all the changes get merged into mainline.  Consider this a &lt;b&gt;temporary, experimental&lt;/b&gt; fork.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2399101</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2399101.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2399101"/>
    <title>This Just In:  Forbes Clueless!</title>
    <published>2008-12-07T07:29:00Z</published>
    <updated>2008-12-07T07:29:00Z</updated>
    <category term="news"/>
    <category term="stupid"/>
    <category term="tech"/>
    <content type="html">Oh man.  &lt;a href="http://www.forbes.com/2008/12/05/google-operating-system-tech-enter-cx_ew_1205google.html"&gt;Worst article ever&lt;/a&gt;.  Count the inaccuracies and stupidities within.&lt;br /&gt;&lt;br /&gt;Some of the highlights:&lt;ul&gt;&lt;li&gt;they reference my Android garage door opener app but confuse it and say that Android was ported to run on a garage door opener.  I mean, almost the same, right?  :P&lt;/li&gt;&lt;li&gt;they call X11 an old version of Unix:&lt;blockquote&gt;&lt;i&gt; Google employees not using the secret OS are employing various versions of Unix, such as Linux or Ubuntu, and some older operating systems, like X11, he says.&lt;/i&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;Love it.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2398951</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2398951.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2398951"/>
    <title>JavaFX Fail</title>
    <published>2008-12-05T07:24:10Z</published>
    <updated>2008-12-05T07:24:49Z</updated>
    <category term="stupid"/>
    <category term="tech"/>
    <content type="html">I go to look at the JavaFX demos.  I'm redirected by javafx.com to a URL that contains /mac-player.jsp.  Write-once-run-anywhere, my ass.  Sun's own URL is calling an end to that lie.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pics.livejournal.com/brad/pic/000803ht"&gt;&lt;img src="http://pics.livejournal.com/brad/pic/000803ht/s320x240" width="238" height="240" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then, after a long hang, my browser goes white and all the other windows and tabs hang and start spinning rainbow beachballs and I get a trust dialog:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pics.livejournal.com/brad/pic/00081kqs"&gt;&lt;img src="http://pics.livejournal.com/brad/pic/00081kqs/s320x240" width="242" height="240" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After that Safari hung so hard I hand to force kill it a few times.&lt;br /&gt;&lt;br /&gt;Good job.&lt;br /&gt;&lt;br /&gt;I still don't know what JavaFX is.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2398478</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2398478.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2398478"/>
    <title>Uh</title>
    <published>2008-12-03T07:05:09Z</published>
    <updated>2008-12-03T07:05:09Z</updated>
    <category term="stupid"/>
    <content type="html">Sun bundles Yahoo's toolbar with Java.  Without commenting on the levels of awesomeness in that, I will comment on their installer text.  From &lt;a href="http://www.java.com/en/download/faq/yahoo_toolbar.xml"&gt;their own website&lt;/a&gt;,&lt;br /&gt;&lt;br /&gt;&lt;img src="http://pics.livejournal.com/brad/pic/0007z4df" /&gt;&lt;br /&gt;&lt;br /&gt;Note:
&lt;ul&gt;
&lt;li&gt;"Install a free program with the Java&amp;trade;"&lt;/li&gt;
&lt;li&gt;"Mail Alerts let's &lt;i&gt;[sic]&lt;/i&gt; you know when you've got mail."&lt;/li&gt;
&lt;/ul&gt;The Java?  Let's?&lt;br /&gt;&lt;br /&gt;*sigh*</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2398409</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2398409.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2398409"/>
    <title>AddressBooker &amp; exporting my Facebook Phonebook</title>
    <published>2008-12-01T05:34:02Z</published>
    <updated>2009-05-09T22:33:13Z</updated>
    <category term="hacks"/>
    <category term="tech"/>
    <category term="perlbal"/>
    <category term="android"/>
    <content type="html">This 4-day weekend was awesome for catching up on personal hacking projects.  In addition to adding IPv6 support to Perlbal and hacking on my interactive shadow/art wall more, I also worked on a little address book management tool, &lt;a href="http://addressbooker.appspot.com"&gt;&lt;b&gt;AddressBooker&lt;/b&gt;&lt;/a&gt; [&lt;a href="http://github.com/bradfitz/addressbooker/tree/master"&gt;source here&lt;/a&gt;].&lt;br /&gt;&lt;br /&gt;Basically AddressBooker takes a POST of contacts data in JSON form, and does stuff with it, where "stuff" is currently limited to merging it into your Google Contacts.  (GMail, Android, etc)  This was my experiment in learning GData, AuthSub, and App Engine a bit more.&lt;br /&gt;&lt;br /&gt;Anyway, I then wanted to get my Facebook Phonebook exported to my Google Contacts, so it'd sync to my Android phone.  I didn't see an export option in Facebook (maybe I missed it?), so I wrote a little GreaseMonkey script instead to automate the whole process:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bradfitz.com/greasemonkey/facebook_phonebook_export.user.js"&gt;http://bradfitz.com/greasemonkey/facebook_phonebook_export.user.js&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you have Firefox and &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/748"&gt;GreaseMonkey&lt;/a&gt;, then click the above link and it'll ask if you want to install it.  Install it, then go to your &lt;a href="http://www.facebook.com/mobile/?phonebook"&gt;Facebook Phonebook&lt;/a&gt; &lt;s&gt;(sorry, no permalink to it)&lt;/s&gt;, then go into &lt;b&gt;Tools &amp;gt; GreaseMonkey &amp;gt; User Script Commands... &amp;gt; &lt;/b&gt; and you'll see &lt;b&gt;Export Facebook Phonebook&lt;/b&gt;.  That'll then page through your phone book (you should probably start on page 1: it's kinda flaky) and extract the data, and then POST it to &lt;a href="http://addressbooker.appspot.com"&gt;AddressBooker&lt;/a&gt; for you, which will then guide you through merging it into your Google Contacts.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;&lt;br /&gt;(And keep in mind I barely know browser stuff or Greasemonkey or Python or App Engine or GData, so &lt;b&gt;patches welcome!&lt;/b&gt;... brad@danga.com, or Github)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update 2009-05-09:&lt;/b&gt;  Updated the JavaScript to work with Facebook's new layout.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2397953</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2397953.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2397953"/>
    <title>2008 &amp;lt;canvas&amp;gt; plays catch-up to 1992</title>
    <published>2008-11-29T21:30:56Z</published>
    <updated>2008-11-29T21:30:56Z</updated>
    <category term="tech"/>
    <content type="html">Um,&lt;br /&gt;&lt;a href="http://devfiles.myopera.com/articles/580/3d_texture.htm"&gt;http://devfiles.myopera.com/articles/580/3d_texture.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;THE WEB IS THE PLATFORM.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:brad:2397781</id>
    <link rel="alternate" type="text/html" href="http://brad.livejournal.com/2397781.html"/>
    <link rel="self" type="text/xml" href="http://brad.livejournal.com/data/atom/?itemid=2397781"/>
    <title>A shout-out to good products</title>
    <published>2008-11-27T22:26:44Z</published>
    <updated>2008-11-27T22:26:44Z</updated>
    <category term="hack"/>
    <content type="html">I bitch about stuff a lot (in a loving way?), so I think it's important for balance's sake to take a second occasionally to recognize companies and products that kick ass.&lt;br /&gt;&lt;br /&gt;Today I'm giving a shout-out to my A/V Receiver, the &lt;a href="http://www.usa.denon.com/productdetails/237.asp"&gt;Denon AVR-4806&lt;/a&gt;.  Yes, it's a little old by now, but not really, and the one feature it's missing (1080p HDMI upscaling and routing) is available as a firmware upgrade.&lt;br /&gt;&lt;br /&gt;What else do I love about it?  &lt;b&gt;&lt;a href="http://www.usa.denon.com/ArchivedAVReceivers.asp?archivedModelSearch=true&amp;amp;clearCurrent=true&amp;amp;archivedCategory=AV&amp;amp;archivedModel=AVR-4806&amp;amp;imageField.x=17&amp;amp;imageField.y=9"&gt;Its documentation&lt;/a&gt;!&lt;/b&gt;  Holy shit, would you look at that?  IR codes, its serial/ethernet wire protocol for controlling it, and its HDMI specs.&lt;br /&gt;&lt;br /&gt;Wait, Ethernet?  How have I not taken advantage of this before today?  Must remedy.&lt;br /&gt;&lt;br /&gt;After doing the three button incantation on the receiver to enable "Network Settings" in the menu (must hide it by default to not confuse people!?), I selected DHCP and it got on the network.  I then read the aforelinked protocol docs and whipped up &lt;a href="http://github.com/bradfitz/perl-denon-avr-4806/tree/master"&gt;a stupid little interactive AVR-4806 controller&lt;/a&gt; in Perl.  I love how the protocol is two way:  you can tell it to do stuff, but it also notifies you of all changes to its state.  I go twist the physical volume knob and I get immediate status packets back from it.&lt;br /&gt;&lt;br /&gt;I'm thinking of giving my neighbors a webserver interface to the volume knob, so they can turn down the music if (when) my Wednesday night parties get too loud.</content>
  </entry>
</feed>
