<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-7818018</id><updated>2008-05-16T09:49:03.255-07:00</updated><title type='text'>shinyblog</title><link rel='alternate' type='text/html' href='http://sbshine.net/blog/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default?start-index=26&amp;max-results=25'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>231</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7818018.post-2824379421856285011</id><published>2008-05-06T10:59:00.001-07:00</published><updated>2008-05-06T11:34:09.548-07:00</updated><title type='text'>gowebtop calendar: my current project</title><content type='html'>&lt;a href="http://www.gowebtop.com"&gt;gowebtop.com&lt;/a&gt; (free registration required) is now live with a preview of my current project, a calendar application within the gowebtop framework. For the highlights, see &lt;a href="http://gowebtop.com/blog/2008/05/05/introducing-laszlo-calendar/"&gt;the gowebtop blog&lt;/a&gt;. I worked on this project as a freelancer through &lt;a href="http://www.elasticprocess.com"&gt;Elastic Process&lt;/a&gt;, a San Francisco software consultancy, for our client, &lt;a href="http://www.laszlosystems.com"&gt;Laszlo Systems&lt;/a&gt;.</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2008/05/gowebtop-calendar-my-current-project.html' title='gowebtop calendar: my current project'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=2824379421856285011' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/2824379421856285011'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/2824379421856285011'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-7957412110615111655</id><published>2008-02-17T11:38:00.000-08:00</published><updated>2008-02-17T12:00:44.550-08:00</updated><title type='text'>give them what they (say they) want</title><content type='html'>I feel guilty about walking past a hungry person and not helping them get some food, but I find it hard to believe that everyone claiming to be hungry in downtown San Francisco is only craving nutritional sustenance. An easy solution: when approached by a "hungry" person, I hand them some &lt;em&gt;actual food!&lt;/em&gt; I usually carry a snack with a long shelf life in my backpack: a baggie of nuts, a chocolate bar, some dried fruit. So when I'm approached by someone who says they're hungry, I offer them an actual treat looking just as yummy and nutritious as it was on the shelves of Whole Foods. &lt;br /&gt;The reaction I get to such offers is illuminating. An aggressive beggar in the big Westfield mall downtown literally recoiled at the offer of a bag of grape &lt;a href="http://www.clifbar.com/food/products_shot_bloks/"&gt;Clif Blox.&lt;/a&gt;. Sorry, buddy, but you need detox, not glucose. And yeah: the homeless community knows &lt;a href="http://www.svdp-sf.org/ozanam.htm"&gt;exactly where to go for free detox services&lt;/a&gt;, and they talk about it with more respect and dread than prison. (How do I know? Because I've talked to people who got sober for good after their 15th or 20th time through Ozanam.) &lt;br /&gt;I'm not saying that I can cure poverty or drug addiction or homelessness with a 300 calorie snack. I'm just saying, here's an ethical way to cope with pleas from which our society should not ignore. &lt;em&gt;Give them what they say they want.&lt;/em&gt;</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2008/02/give-them-what-they-say-they-want.html' title='give them what they (say they) want'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=7957412110615111655' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/7957412110615111655'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/7957412110615111655'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-6049092246911012289</id><published>2008-02-01T12:01:00.000-08:00</published><updated>2008-02-01T12:10:24.451-08:00</updated><title type='text'>"unsubscribe"</title><content type='html'>One of the best developments in the web this year: one-click unsubscribe links in promotional emails I must have signed up for at some point. Here's the scenario: I get some email from Random Business. I gave Random Business my email two years ago when I was interested in their random thing; I am no longer interested. I want to unsubscribe. &lt;br /&gt;&lt;b&gt;The old way:&lt;/b&gt; I'd follow a link in their email to a login screen. If I didn't remember my username and password, which I probably don't since it's been a while, I have to go through the forgot-my-password link, wait for email to arrive, then at least log in again, go to my preferences, edit my preferences, then click save and verify that I &lt;i&gt;really&lt;/i&gt; want to unsubscribe. &lt;br /&gt;&lt;b&gt;The new way:&lt;/b&gt; At the bottom of the promotional email, there's a link that says "Click here to unsubscribe." In the very best implementation, I click on that link and get a page which says, "myemail@mysite.com has been unsubscribed from all Random Business mailings." &lt;br /&gt;This was a very simple technology to put together, and could have been done a decade ago. &lt;b&gt;By focusing on an everyday annoyance felt by most email users, someone was able to vastly improve the user experience.&lt;/b&gt; I won't quite say this builds brand loyalty (I am, after all, unsubscribing) but it does decrease lingering annoyance. &lt;br /&gt;Companies with one-click unsubscribe, I salute you!</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2008/02/unsubscribe.html' title='&quot;unsubscribe&quot;'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=6049092246911012289' title='1 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/6049092246911012289'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/6049092246911012289'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-4379353094566217054</id><published>2008-01-31T13:27:00.000-08:00</published><updated>2008-01-31T13:48:54.982-08:00</updated><title type='text'>linear time sorting, or, why remedial courses are not just for dullards</title><content type='html'>I've been listening to &lt;a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/CourseHome/index.htm"&gt;an introductory course on algorithms&lt;/a&gt; from &lt;a href="http://ocw.mit.edu/OcwWeb/web/about/about/index.htm"&gt;MIT OpenCourseware&lt;/a&gt;. Today I learned that &lt;b&gt;it is possible to sort integers in linear time!&lt;/b&gt;! The technique I learned this morning, counting sort, only works for a particular kind of input: a list of &lt;span style="font-style:italic;"&gt;n&lt;/span&gt; integers in the range &lt;span style="font-style:italic;"&gt;0..k&lt;/span&gt;. (Or any known range; map it to &lt;span style="font-style:italic;"&gt;0..k&lt;/span&gt; for convenience.) If &lt;span style="font-style:italic;"&gt;k&lt;/span&gt; is much smaller than &lt;span style="font-style:italic;"&gt;n&lt;/span&gt;, you can sort in &lt;span style="font-style:italic;"&gt;Θ(n + k)&lt;/span&gt;. That's linear time, people! &lt;br /&gt;I'm 33, an Ivy League graduate, and I just discovered it's possible to sort in linear time! Where was I in (ahem) 1998 when &lt;a href="http://www.cs.brown.edu/~rt/"&gt;Roberto Tamassia&lt;/a&gt; was teaching this? Well, it looks like this year's equivalent class at Brown (now cs0160, then cs21) doesn't counting sort in the lecture notes. Or maybe I slept through it; I was a &lt;i&gt;sophomore&lt;/i&gt;. &lt;br /&gt;My point: reviewing a subject you used to know, from a different perspective and with more experience than you had at 18, can blow your mind with mind-blowing information that you might have missed the first time through. &lt;br /&gt;&lt;b&gt;WE CAN SORT INTEGERS IN LINEAR TIME!&lt;/b&gt; (for sets of integers meeting the requirement above.)</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2008/01/linear-time-sorting-or-why-remedial.html' title='linear time sorting, or, why remedial courses are not just for dullards'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=4379353094566217054' title='2 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/4379353094566217054'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/4379353094566217054'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-7804822114188156456</id><published>2008-01-08T12:06:00.001-08:00</published><updated>2008-01-08T12:06:52.635-08:00</updated><title type='text'>in praise of display calibration</title><content type='html'>I've been watching tv shows and dvd's on my giant LCD monitor, and wondering why it's so dark and moody and why everyone looks feverish. Somehow I convinced myself that I just shouldn't worry about it -- absolutely ridiculous when the whole point of a giant LCD display is fantastic picture quality. So here's what finally hit me, while I'm snuggled up with the sniffles: maybe calibrating my display would help. Boom! It just so happens that Mac OS X (Leopard baby!) has an expert-mode display calibration that crafts a custom gamma profile from about a dozen data points provided by the most advanced optics on the planet: my eyes. &lt;br /&gt;Now people on Studio 60 have normal skin tone and it doesn't look moody so much as, well, ebullient. Which is exactly what Aaron Sorkin and Thomas Schlamme were going for, I'm pretty sure.</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2008/01/in-praise-of-display-calibration.html' title='in praise of display calibration'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=7804822114188156456' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/7804822114188156456'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/7804822114188156456'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-2559900080597467455</id><published>2008-01-04T10:11:00.000-08:00</published><updated>2008-01-04T10:33:53.204-08:00</updated><title type='text'>naive users suffer</title><content type='html'>Yesterday I wrote about discovering that my mac became distressingly slow when paired with some peripherals I hadn't used with that particular machine before. I investigated and eventually deduced that the problem was the version of USB supported by my machine's hardware. A naive user, or even a moderately powerful software user, would not have a chance of figuring out a bus bandwidth mismatch. To determine that I only had USB 1.0 support, I looked at Apple's tech specs for this powerbook, which is in itself a challenge, because the powerbooks are differentiated by parenthetical keywords like "DVI" and "Gigabit Ethernet". Again, if I'm a naive user, there's no way I could figure out which one I have. Consulting the tech specs, I found that I had two 12 Mbps USB ports. When I do the math, that sounds slow for disk access: 1 gig = 1000 Mb = around 80 seconds if everything is cruising at top speed -- bleck. But it didn't say "USB 1.0" anywhere. Tech specs of later powerbooks explicitly said USB 2.0. Combined with the observed performance problems, I concluded that the problem was the USB version. &lt;br /&gt;There's no way a naive user could have figured this out. Even if they took the machine into a genius bar, they probably would have left the peripherals home, and the genius would just say, "it's operating as well as we could expect for a machine this old; if you want it faster you'd better buy a new machine." &lt;br /&gt;I'm not saying I'm such a whiz with diagnosing hardware issues; far from it! My point is that many people are subject to sub-optimal user experiences because of subtle hardware and software incompatibilities. &lt;br /&gt;All of which I suppose points to a more general idea: naive users of any technology or discipline suffer from their lack of expertise. My car could be tuned better; my taxes could be lower; my house could be heated more efficiently; my cel phone probably has superpowers it's hiding from me. I'm not sure what to do about this, though. Learn everything about everything? Okay! Good thing I've got another 60 years to live.</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2008/01/naive-users-suffer.html' title='naive users suffer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=2559900080597467455' title='1 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/2559900080597467455'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/2559900080597467455'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-4446818199897679578</id><published>2008-01-03T11:44:00.000-08:00</published><updated>2008-01-03T11:56:15.240-08:00</updated><title type='text'>slowed to a crawl by I/O</title><content type='html'>I'm using my PowerBook G4 Titanium as my main machine for a while -- hopefully not long, because this is insanely slow. I'm trying to understand how it was wonderful five years ago, and now painfully slow, when I'm just running a browser and iTunes and gmail notifier and not even a terminal. I figured it out: the I/O is making it seem hellaciously slow. I used to have a FireWire iPod; now I'm using a USB iPod (thank you, Marshall). I used to be satisfied with my built-in 30 gig hard disk; now I'm using an external half-terabyte disk. Here's the kicker: &lt;em&gt;this machine doesn't support USB 2!&lt;/em&gt; It was built back when firewire seemed like it was going to win. Firewire lost, though, at least for commodity consumer peripherals, and I'm hamstrung by slow IO. &lt;br /&gt;I'm picking out my next mac, and I'm having a hell of a time deciding between almost all the form factors. I need one &lt;em&gt;now&lt;/em&gt;, can't wait until after Macworld, so buying a monster macbook pro seems like a bad idea; I'll just be kicking myself when the prices drop and a new mindblower comes out in two weeks. The iMacs have the combination of tons more computing power and disk space for less money, but I've already got a huge wonderful display. (Hmm, could I use an iMac with the built-in display &lt;em&gt;and&lt;/em&gt; my widescreen external display? Mmm, tasty!) And of course, I adore the idea of a Mac Pro, but I got one of those a few years ago and immediately discovered I would rather have a laptop. The one that I can totally rule out is the mini; 2GB ram just isn't how I roll. Probably the thing to do is to get a Mac Pro now, and plan on getting the rumored new subnotebook as my next planned purchase. Buying components instead of all-in-one's is the most flexible, but least portable, solution.</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2008/01/slowed-to-crawl-by-io.html' title='slowed to a crawl by I/O'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=4446818199897679578' title='1 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/4446818199897679578'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/4446818199897679578'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-5213822900124215607</id><published>2007-12-30T11:46:00.001-08:00</published><updated>2007-12-30T11:57:21.189-08:00</updated><title type='text'>get your backstreet boys off my network!</title><content type='html'>If you're going to use a neighbor's open wifi connection, it's probably not a great idea to share your iTunes library. I opened my network a few days ago because I was having trouble getting my Powerbook G4 online; I couldn't get it to connect using any of the password-based security schemes. I thought I turned on MAC filtering, but the netgear router adminstration page was a bit confusing -- it shows a "Wireless Card Access List" but doesn't actually do MAC address filtering unless you've checked a box above the access list. So I thought I had a closed network, but I was wrong. Fine, I deserve to have neighbors find and share my connection. &lt;br /&gt;And then I launched iTunes and saw "Ernesto's LimeWire Library" under the "shared libraries" tag. (Not really his name.) Bwahhahha! Apparently Ernesto found my open network! I bet he had no idea that he was sharing his music.&lt;br /&gt;I returned to the netgear router admin, &lt;em&gt;actually&lt;/em&gt;  turned on MAC addr filtering, and bye-bye Ernesto! Whee! Now he's looking around going, damn, what happened to that open wifi? &lt;br /&gt;This is a nice feeling -- I did something kind of mean but I had every right to do it. That is so rare!</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/12/get-your-backstreet-boys-off-my-network.html' title='get your backstreet boys off my network!'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=5213822900124215607' title='1 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/5213822900124215607'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/5213822900124215607'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-2953644506476741943</id><published>2007-11-24T19:06:00.000-08:00</published><updated>2007-11-24T19:38:53.306-08:00</updated><title type='text'>nutritious syntactic sugar</title><content type='html'>Is syntactic sugar just tasty, or does it actually improve the language? Depends on your definition of "improve," I suppose. I just found &lt;b&gt;a ruby idiom&lt;/b&gt; in &lt;a href="http://books.pragprog.com/titles/rails2"&gt;Agile Web Development with Rails&lt;/a&gt; that can make a very common, wordy coding task short and clear. We often have to say "give me a thing, and if it doesn't exist yet, make one for me." &lt;br /&gt;In Java:&lt;br /&gt;&lt;pre&gt;public cart findCart() {&lt;br /&gt;        if (cart == null) cart = new Cart();&lt;br /&gt;        return cart;&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;In Ruby, this can be expressed as...&lt;br /&gt;&lt;pre&gt;def find_cart &lt;br /&gt;    session[:cart] ||= Cart.new &lt;br /&gt;end&lt;/pre&gt; &lt;br /&gt;The &lt;b&gt;or-equals operator&lt;/b&gt; belongs in a dynamic language, where expressions that evaluate to booleans can also be very nice rvalues. These three lines of code show off a few things about Ruby that might be mistaken for syntactic sugar, but &lt;em&gt;actually make the language better:&lt;/em&gt;&lt;ul&gt; &lt;br /&gt;        &lt;li&gt;Avoid unnecessary punctuation.&lt;/li&gt;&lt;br /&gt;        &lt;li&gt;Clean syntax for hashes make them almost as readable as member data accessors&lt;/li&gt;&lt;br /&gt;        &lt;li&gt;Most statements are also expressions.&lt;/li&gt;&lt;br /&gt;        &lt;li&gt;Implicit returns.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;em&gt;It's delicious... and nutritious!&lt;/em&gt;</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/11/nutritious-syntactic-sugar.html' title='nutritious syntactic sugar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=2953644506476741943' title='1 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/2953644506476741943'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/2953644506476741943'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-2418910263574023871</id><published>2007-11-23T11:21:00.000-08:00</published><updated>2007-11-23T11:41:12.543-08:00</updated><title type='text'>Over-Preparedness Vindicated!</title><content type='html'>Last winter I posted the contents of my &lt;a href="http://sbshine.net/blog/2007/02/personal-geek-security-pack.html"&gt;personal geek security pack&lt;/a&gt;: some money, some painkiller, some duct tape, a BART ticket, a snack, that sort of thing. Since then I've been carrying it around in my backpack.&lt;br /&gt;&lt;br /&gt;In an incident involving an ice cream sandwich and an intra-pocket butter malfunction, I lost my wallet a few days ago. In Berkeley -- that's a large bay away from San Francisco. No problem! Well, okay, yeah, it was a problem, but the problem-ness was much ameliorated by having a BART ticket and twenty dollars cash in my personal geek security pack. I used the money to buy a bus ticket back to look for my wallet at the site of the ice-cream-sandwich incident, then retreated to San Francisco with the loaded BART ticket.&lt;br /&gt;&lt;br /&gt;The wallet hasn't turned up, but I've got spare ID tucked away in a safe place (not at home!) and a bunch more cash on my refrigerator door. Over-preparedness: vindicated!&lt;br /&gt;&lt;br /&gt;Now-- everybody go back up your data! And store the backups off-site! And put twenty bucks in a secret spot in your backpack! And for the love of Pete, don't put butter in your pockets!</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/11/over-preparedness-vindicated.html' title='Over-Preparedness Vindicated!'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=2418910263574023871' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/2418910263574023871'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/2418910263574023871'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-7171952851622664015</id><published>2007-11-22T10:58:00.000-08:00</published><updated>2007-11-22T11:12:01.909-08:00</updated><title type='text'>Slow news is good news?</title><content type='html'>I rarely read news online. You might think that leaves me out of crucial blogosphere zeitgeist or military-industrial-political news, but nope: my co-workers filter the web for me, forwarding articles about OpenLaszlo, net neutrality, software-as-a-service, and media business models; and I read messenger-bag-loads of books and magazines. Each month, I read &lt;a href="http://www.harpers.org/"&gt;Harper's&lt;/a&gt; cover-to-cover, with a liberal (heh) dose of the Atlantic, Utne Reader, MIT Technology Review, San Francisco, and occasional forays into The Economist, and the Sunday New York Times. Then a year or two after things happen, I read non-fiction books: &lt;a href="http://www.lawrencewright.com/books.html"&gt;The Looming Tower&lt;/a&gt;, the &lt;a href="http://books.google.com/books?id=gxNlbTCdr5kC&amp;amp;dq=great+deluge&amp;amp;pg=PP1&amp;amp;ots=cx-rDa-NPQ&amp;amp;sig=01bRcoM4r27x43jN5wdbQeMYofg&amp;amp;prev=http://www.google.com/search%3Fq%3Dgreat%2Bdeluge%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dorg.mozilla:en-US:official%26client%3Dfirefox-a&amp;amp;sa=X&amp;amp;oi=print&amp;amp;ct=title&amp;amp;cad=one-book-with-thumbnail"&gt;Great Deluge,&lt;/a&gt; &lt;a href="http://www.amazon.com/Assault-Reason-Al-Gore/dp/1594201226"&gt;the Assault on Reason&lt;/a&gt;, &lt;a href="http://www.naomiklein.org/shock-doctrine"&gt;the Shock Doctrine&lt;/a&gt;, that sort of thing.&lt;br /&gt;Reasoned slow analysis with editors and proofreaders and fact-checkers, passages I can go back to years later (without the internet way-back machine), passages that authors will have to stand by for decades, &lt;span style="font-style: italic;"&gt;footnotes&lt;/span&gt; -- yeah, I'll pay for that. What would the invasion of Iraq look like two years later? A &lt;a href="http://www.amazon.com/Fiasco-American-Military-Adventure-Iraq/dp/159420103X/"&gt;fiasco&lt;/a&gt;. What about the Thanskgiving 2007 travel breakdown? Check back in two years and I'll have read some reasoned analysis, complete with footnotes.</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/11/slow-news-is-good-news.html' title='Slow news is good news?'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=7171952851622664015' title='3 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/7171952851622664015'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/7171952851622664015'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-6216669271854124444</id><published>2007-10-17T11:02:00.000-07:00</published><updated>2007-10-17T11:10:58.546-07:00</updated><title type='text'>TurboTax Wins Me Over</title><content type='html'>After I &lt;a href="http://sbshine.net/blog/2007/10/turbotax-web-vs-turbotax-desktop.html"&gt;posted a complaint yesterday&lt;/a&gt;, TurboTax responded to me with superstar customer service. Bob Meighan, the VP of TurboTax, posted a response to my blog entry, and Becca from customer support wrote me a long detailed response, in which she offered to refund my fee for the online service. She explained that with a situation like that, real-time tech support would probably have been able to help me, and pointed out that perhaps my anti-virus software was the culprit. On my PC, I run an out-of-date version of Symantec Anti-Everything, which I haven't tweaked at all (assuming that I'm just hosed no matter what) so Becca might well be right about my anti-virus software interfering. &lt;br /&gt;&lt;br /&gt;So, &lt;em&gt;I'm getting my $109 back, and next year I'll use TurboTax Online again.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;My original point, with all of this, was that sometimes RIA's can be better than desktop applications, even for single-user applications where security matters. By sending all the information over the relatively straightforward, universal https protocol, application developers can shield users from network vicissitudes, while still providing as much security as direct connections from desktop to server. &lt;br /&gt;&lt;br /&gt;Granted, in an RIA model for TurboTax, I'm sending my financial information to Intuit, who then has the chance to do Evil Things with it -- but really, when I hit send on TurboTax Desktop, I have no more reason to believe that Intuit isn't caching and analyzing my data than I do with TurboTax Online. Once my financial information leaves my LAN, it's basically "out there," and I have no illusions about "privacy."</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/10/turbotax-wins-me-over.html' title='TurboTax Wins Me Over'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=6216669271854124444' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/6216669271854124444'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/6216669271854124444'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-5424394364977108107</id><published>2007-10-16T10:38:00.000-07:00</published><updated>2007-10-16T11:27:37.193-07:00</updated><title type='text'>TurboTax Web vs TurboTax Desktop</title><content type='html'>I just finished filing my 2006 taxes, an activity made significantly more difficult by TurboTax. The desktop edition of TurboTax was unable to update itself, on my PC running Windows XP, despite hours and hours of trying. The one-click update didn't work; it didn't give me any feedback at all about whether it succeeded. The manual update looked like it worked, but the application kept telling me that I needed to get updated forms, which were not yet available from TurboTax. In September of 2007, the software promised that the forms would be ready by January 12, 2007. Er, what? In October of 2007, I got email from TurboTax saying that those forms were now ready -- bizarre since everyone else needed these forms in April 2007. (I'm not talking about obscure forms here; just Schedule C.) So I try &lt;em&gt;again&lt;/em&gt; to update my desktop TurboTax, and once again it fails. I go through some insane machinations from the support site ("open the command prompt and run this command: &lt;tt&gt;ping -mysterious -incantation&lt;/tt&gt;) to discover that my fragment size was insufficent. More TurboTax forums, and I learn that I have to set the MTU size on my router. Joy, joy -- my cable gateway (blazingly fast, blazingly expensive) doesn't allow the user to set the MTU. I don't blame Cisco, here -- I blame TurboTax, for not being able to cope with a net connection that handles everything else I throw at it. BitTorrent? Fine! Downloading 50mb installers? Fine! Sustained ssh connections for days? Fine! Downloading tax forms: nope. Ridiculous. &lt;br /&gt;At this point I mailed Intuit for support. They got back to me a few days later, and told me to do the things I had already done, which I had explained in my support request that I'd already done them. They told me to call them for support during business hours. &lt;em&gt;I have a job, people.&lt;/em&gt; TurboTax was supposed to be &lt;em&gt;convenient&lt;/em&gt; and there was supposed to be &lt;em&gt;readily available technical support.&lt;/em&gt; &lt;br /&gt;But &lt;em&gt;I needed to get my taxes done&lt;/em&gt;, and I could see that getting on the phone with them wasn't going to be helpful. I realized that I could avoid this subtle network incompatibility if I used the web-based TurboTax. Alas, web-based TurboTax can't import an incomplete return from desktop TurboTax, so I had to re-enter all my information. The tab key didn't work as nicely to move between fields as it did on the desktop application, but it was usable. After spending an hour or two filling out forms, my taxes were submitted and accepted. &lt;br /&gt;The lesson for TurboTax is... if connecting with your big fragment sizes fails with a desktop application, try making the connection over http or https. Yes, even desktop applications can connect over http.  &lt;br /&gt;And: Intuit, make live tech support available by phone 24/7 before October 15, not just before April 15.</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/10/turbotax-web-vs-turbotax-desktop.html' title='TurboTax Web vs TurboTax Desktop'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=5424394364977108107' title='1 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/5424394364977108107'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/5424394364977108107'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-3416420651639885663</id><published>2007-10-12T10:37:00.000-07:00</published><updated>2007-10-12T11:24:28.400-07:00</updated><title type='text'>GORE OBAMA CLINTON CLINTON</title><content type='html'>Al Gore for President. &lt;br /&gt;Barack Obama for Vice President.&lt;br /&gt;Bill Clinton for Ambassador to the United Nations. &lt;br /&gt;Hillary Clinton for Secretary of Health and Human Services. &lt;br /&gt;Wes Clark for Secretary of State.&lt;br /&gt;Dennis Kucinich for Secretary of Labor. &lt;br /&gt;Ron Paul for Secretary of Homeland Security.  &lt;br /&gt;John McCain for Secretary of Defense. &lt;br /&gt;Max Cleland for Secretary of Veterans' Affairs. &lt;br /&gt;Jerry Brown for Secretary of Housing and Urban Development. &lt;br /&gt;Michael Pollan for Secretary of Agriculture.</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/10/gore-obama-clinton-clinton.html' title='GORE OBAMA CLINTON CLINTON'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=3416420651639885663' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/3416420651639885663'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/3416420651639885663'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-9080476459370742730</id><published>2007-10-12T10:23:00.000-07:00</published><updated>2007-10-12T10:36:24.035-07:00</updated><title type='text'>another reason to love OS X</title><content type='html'>At home, I put my macbook pro on the left of my widescreen monitor. At work, I put my macbook pro on the right of my  19" monitor. My mac automatically recognizes not only that I have hot-swapped a DVI monitor, but also &lt;em&gt;which&lt;/em&gt; monitor I have plugged in, and &lt;em&gt;where&lt;/em&gt; I last positioned &lt;em&gt;that monitor&lt;/em&gt;. For total icing on the cake, I can configure the relative virtual vertical position of the two monitors, so that I can move the cursor straight across from the top of my laptop screen to the middle of the external display. &lt;br /&gt;I love you, OS X. You complete me.</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/10/another-reason-to-love-os-x.html' title='another reason to love OS X'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=9080476459370742730' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/9080476459370742730'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/9080476459370742730'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-8696928649180791581</id><published>2007-10-01T13:43:00.001-07:00</published><updated>2007-10-01T13:53:08.163-07:00</updated><title type='text'>doctors with cel phone</title><content type='html'>&lt;a href="http://metropolitan.md/"&gt;Metropolitan Medical Group&lt;/a&gt; is the practice I've been looking for. Check this out: I emailed my doctor a question about a prescription yesterday. Nothing urgent. He emailed me back, at midnight on sunday, saying he would call the pharmacy in the morning. The next morning he called me to tell me he had called the pharmacy, and told me to call him back &lt;em&gt;on his cel phone&lt;/em&gt; if there were any problems. There was, in fact, a problem -- the pharmacy wanted to fill the wrong dosage -- so I called the doctor back on his cel phone. He answered, he knew exactly the medication and dosage we were talking about, and said he'd call the pharmacy and straighten it out right away. &lt;br /&gt;And then, &lt;em&gt;while I'm composing this entry&lt;/em&gt;, the receptionist called me to let me know that the doctor had talked to the pharmacist himself and made sure that the dosage would be correct. This is &lt;em&gt;unheard-of&lt;/em&gt; service. &lt;br /&gt;Boutique medicine? Hardly! I pay a yearly fee of $79, and they take my insurance, so it's $20 per visit. They usually have same-day appointments, with a PA if a doctor isn't available, and their office is three blocks from my house. Amazing.</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/10/doctors-with-cel-phone.html' title='doctors with cel phone'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=8696928649180791581' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/8696928649180791581'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/8696928649180791581'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-4909746237121579590</id><published>2007-10-01T13:38:00.000-07:00</published><updated>2007-10-01T13:42:52.452-07:00</updated><title type='text'>quick slow-food oatmeal</title><content type='html'>I have discovered the perfect quick slow-food breakfast. I take a half cup of steel-cut organic oats, add a half cup of water, soak overnight, then microwave it in the morning for two minutes. I add some maple syrup and cream, and it's dreamy. It has way more heft than instant oatmeal, it's super-fast, and it's incredibly inexpensive.</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/10/quick-slow-food-oatmeal.html' title='quick slow-food oatmeal'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=4909746237121579590' title='1 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/4909746237121579590'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/4909746237121579590'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-8855750759973484433</id><published>2007-09-13T11:30:00.000-07:00</published><updated>2007-09-13T11:44:32.284-07:00</updated><title type='text'>urban psy-ops: half-smile</title><content type='html'>Living downtown, I see hundreds of faces every time I leave my apartment. Mostly the only people who make eye contact are asking for money. The others are mostly staring at the ground or staring into the blank distance. We seem to all have learned the avoid-eye-contact standard behavior that goes with New York City. Here's the thing: I live in the middle of a small community. The same couple of hundred people walk down New Montogomery Street to offices each day; the same couple hundred art students lug portfolios between &lt;a href="http://www.academyart.edu/"&gt;Academy of Art&lt;/a&gt; classes; the same MUNI drivers maneuver the 30 and the 45 up third street every day. We don't have to all ignore each other. &lt;br /&gt;So here's my project, which I've been practicing for the last few days: endeavor to be present and available and positive as I walk around the city. This is a simple matter of three physical postures: &lt;b&gt;head up, eyes open, half-smile&lt;/b&gt;. And, if I happen to meet someone's eyes, I smile a bit more, and nod. That's all, but it feels &lt;em&gt;really good&lt;/em&gt;. Try it; it feels like making friends with the city, or at least, deciding not to reject the whole population without even seeing them. Try it, and let me know how it goes. Be brave! Change the world! Stop spreading fear! Spread pleasure!</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/09/urban-psy-ops-half-smile.html' title='urban psy-ops: half-smile'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=8855750759973484433' title='1 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/8855750759973484433'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/8855750759973484433'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-4052231657764362764</id><published>2007-08-18T23:10:00.000-07:00</published><updated>2007-08-18T23:46:54.151-07:00</updated><title type='text'>heart of the city</title><content type='html'>I was getting ready for bed around ten tonight when I heard a ruckus outside. I live at Third and Mission, in the heart of San Francisco, along the corridor between the ball park and union square, with views of the Bay Bridge, the financial district, and Market Street from my living room. When something starts to happen, I know it before KRON-4 has a chance to get reporters on the scene. First there was a roaring crowd; waves of cheering and shouting that roused me from my cozy bed to peer out the windows searching for the source. Mission Street jammed up, and New Montgomery got gridlocked. Third Street was taken over by pedestrians; cars couldn't get through the crowds. Sirens and police cars converged a few blocks south of here. What was going on? &lt;br /&gt;I tried the tv, thinking maybe local news would know what's up. Nope, just the same annoying sports guy talking about boxing. Was it the Giants? Did Barry Bonds just do something actually worthy of celebration? Nope, the Giants are in Miami tonight. Okay, can the local papers help me? Nope, their news feeds have no mention of &lt;br /&gt;"right now." How can you google for "why are people yelling outside my window?" I heard chanting -- what were they saying? It wasn't "peace now!" and it wasn't "impeach bush!" or "out of iraq now!" &lt;br /&gt;Mystified and curious, I pulled on a pair of jeans and a sweatshirt and went downstairs. On the way down, other building residents asked each other what was going on, but no one had answers. Not even the concierge knew, and he could see the traffic piling up just beyond the rotating doors. &lt;br /&gt;Finally on the sidewalk, I entered the stream of people, and start demographing them: mostly 20 somethings, not hipster, not sporty, more middle-American than we usually see in these parts, gaggles of straight kids with a distinct smell of beer. The first guy I approach has fresh stitches in his eyebrow and a bruised face. He ignores my questions and walks on; it's kind of a "28 days later" moment. Next I approach a girl who probably can vote but can't drink, with sweaty curly blond hair. "What's going on? Where's everybody coming from?" I ask. "Concert," she replies. "Who?" "Rage," she answers, and I know she means Rage Against the Machine. The light changes and the pedestrian stream is interrupted for a minute while a few cars progress through the Third and Mission intersection. I ask the next group of people, again, "What's going on?" Again the reply is "Concert." "Who?" "Rage." Why is everyone speaking in single-world sentences? Come on, I have a faux-hawk and I'm wearing a hoody and surfer shoes, you can talk to me! At least they assume that I know who "Rage" is. &lt;br /&gt;I do, in fact, know who Rage is, and I'm a little worried. Rage is nothing if not political. If they drove a stadium full of drunk Californians to cheering that rivals Critical Mass, well, I bet some Starbucks windows will get smashed tonight. Lord knows there are &lt;a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;geocode=&amp;q=starbucks+near+third+street+and+mission+street,+san+francisco,+ca&amp;ie=UTF8&amp;ll=37.786691,-122.408423&amp;spn=0.018179,0.035834&amp;z=15&amp;om=1"&gt;plenty of candidates in this neighborhood&lt;/a&gt;. &lt;br /&gt;Half an hour later, there are more sirens, less shouting. Law and order is reasserting itself. More honking; the cars are taking over the streets again. I want to be here for the revolution. I don't think the smell of the crowds or the sound of gridlock will be televised.&lt;br /&gt;UPDATE: The concert was &lt;a href="http://www.rockthebells.net"/&gt;Rock The Bells&lt;/a&gt; an all-day hip-hop/funk/punk festival at McCovey Cove Parking Lot, and included Rage, indeed, but also Wu-Tang Clan, Public Enemy, Mos Def, Nas, Cypress Hill, and other bands I'm too old to know about.</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/08/heart-of-city.html' title='heart of the city'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=4052231657764362764' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/4052231657764362764'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/4052231657764362764'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-7409142745617658453</id><published>2007-07-22T11:06:00.000-07:00</published><updated>2007-07-22T11:08:44.940-07:00</updated><title type='text'>Philz Coffee</title><content type='html'>This coffee is insanely good. This coffee is so good that I have taken a bus across town for a single cup. This coffee is so good that upon taking the first sip I have to yell repeatedly about how fucking awesome it is. This coffee is so good that I'm willing to pay $2.75 for a cup. Hell, I'd pay twice that. This coffee is a different beverage entirely than Starbucks and Peets or even IntelligentsiA and Cafe Trieste. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.philzcoffee.com"&gt;Philz Coffee&lt;/a&gt; is the wonder of which I speak. There are three locations, all in San Francisco, and I recommend that everyone make it a point to once in their lives have a cup of Philz, even if it means driving two thousand miles across the desert in the summer. (Okay, that's a bit hyperbolic, even for me.) &lt;br /&gt;&lt;br /&gt;Upon walking into Philz, the customer is greeted with a list of twenty coffee blends. A loving description is available on the menu, or the bouncy hipsters behind the counter will help you choose the right one. I asked for something like Kona or Jamaican Blue Mountain, and they steered me to the "So Good" blend. It's not necessary to call these kids barristas... "angels" would hit the mark better. The angel takes a single scoop of whole beans from one of several dozen tubs, grinds them, pours them into a puffy paper filter, then pours super-hot water over the beans. She adds cream and sugar to my specifications, then hands me the glorious product of this endeavor. The top layer is a thick froth; the liquid is exquisite. It has all the beautiful rich coffee flavor with none, zero, none of the bitterness. The lack of bitterness is what separates Philz from everything else ever. This is when the yelling starts; I spend a few minutes unable to contain my astonishment and joy at the deliciousness of this coffee. &lt;br /&gt;&lt;br /&gt;...all of which explains why, at 11 am on a Sunday with the New York Times delivered to my door, I'm contemplating a trek across town to purchase another heavenly concoction. My god. Go drink this coffee, then tell me I'm wrong. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.philzcoffee.com"&gt;Philz Coffee&lt;/a&gt;, 24th at Folsom, Fourth at Berry, or 18th and Castro, San Francisco. www.PhilzCoffee.com.</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/07/philz-coffee.html' title='Philz Coffee'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=7409142745617658453' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/7409142745617658453'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/7409142745617658453'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-1800728416297285245</id><published>2007-07-21T21:20:00.000-07:00</published><updated>2007-07-21T21:30:26.108-07:00</updated><title type='text'>Sleeping Dead Man</title><content type='html'>&lt;a href="http://sbshine.net/blog/2007/images/sleepingdeadman_large.jpg"&gt;&lt;img src="http://sbshine.net/blog/2007/images/sleepingdeadman_small.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I found this man sleeping, or dead, on Second Street this afternoon. I just finished reading &lt;span style="font-style:italic;"&gt;The Great Deluge&lt;/span&gt; by Douglas Brinkley, who told the story over and over of white people with options and money ignoring poor brown people in trouble. Brinkley’s &lt;span style="font-style:italic;"&gt;Deluge&lt;/span&gt; was the story of Hurricane Katrina in New Orleans and the Gulf Coast; looking at this man, I thought of corpses abandoned in the floodwaters of the Lower Ninth Ward, and of Bush and Chertoff, going about their business in air-conditioned comfort while thousands of people awaited rescue in the Superdome. “Suffering of biblical proportions” indeed. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;I took the photo, because, well, &lt;span style="font-style:italic;"&gt;please&lt;/span&gt;, what a shot. Then I was ashamed of myself. Here was a person who was obviously in some sort of trouble. If everything is all right, we do not fall asleep in the middle of the sidewalk at two in the afternoon. If he was (just) homeless, he would have been dirty, and he would have been huddled against the side of the building. He wasn’t dirty, and he had shaved recently, so something other than homelessness had led him to pick this spot for his nap. Or his death; I really did have to look closely to see whether he was breathing.  He was probably just nodded out on heroin, and not in much trouble, I told myself. I told myself that checking on him would involve waking him up, and that he would probably be angry. I told myself that he was probably in a delightful heroin haze. I told myself I would be much better off leaving him alone. Still. &lt;/p&gt;&lt;p&gt;I am white, and I am healthy; I have options and I have family and money and an education and a job and an apartment. In this neighborhood, I pay attention to the Web 2.0 companies, Yerba Buena Center for the Arts, conventions at Moscone, traffic on the Bay Bridge on-ramps, the organic cafés, and the fine arts bookstores. Things below knee level are literally beneath my notice. Still. I &lt;span style="font-style:italic;"&gt;had&lt;/span&gt; noticed &lt;span style="font-style:italic;"&gt;this&lt;/span&gt; man. I wasn’t going to be able to walk away unless I knew that he was okay. I was willing to risk his anger or even violence because I didn’t want him to die. &lt;/p&gt;&lt;p&gt;So I knelt next to him and asked, “Are you all right? Do you need help? Do you want an ambulance?” His eyes opened and closed, opened and closed, unfocused. His lips parted but he wasn’t really there. I was reaching for my phone to call 911 when he came back to himself. “Why you gotta bother me? I’m sleeping, leave me alone. Stop bothering me!” I was relieved; he was alive. I apologized and walked away.&lt;/p&gt;&lt;p&gt;We get a few chances like this, I think. I’m not going to head to Mississippi the next time the river floods, I’m not even going to work in a soup kitchen anytime soon. Maybe I should. But yeah: when it’s this easy, I won’t just walk away. &lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/07/sleeping-dead-man.html' title='Sleeping Dead Man'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=1800728416297285245' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/1800728416297285245'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/1800728416297285245'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-6798463612830932180</id><published>2007-02-12T09:07:00.000-08:00</published><updated>2007-02-11T10:56:36.043-08:00</updated><title type='text'>personal geek security pack</title><content type='html'>I always carry these items, in a tiny &lt;a href="http://pelican.com"&gt;Pelican case&lt;/a&gt; in my backpack:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Prepaid phone card&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="http://www.bart.gov"&gt;BART&lt;/a&gt;ticket&lt;/span&gt; (or the local equivalent)&lt;/li&gt; &lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Cash&lt;/span&gt;. $20, $50, or $100 is all good, but in twenties or smaller denominations.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;4 quarters&lt;/span&gt;(Think parking meter.)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Duct tape&lt;/span&gt;, in a flat "roll"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="http://www.gusports.com/html/gu_faqs.htm"&gt;Gu Energy Gel&lt;/a&gt;&lt;/span&gt;! Food goo with caffeine&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Painkiller&lt;/span&gt; of your choice. I like ibuprofen, but if you've got an extra vicodin sitting around, throw that in too. Most 911 first responders can't give you morphine, you know. So if you live the kind of lifestyle where (say) dislocating your shoulder or dropping a couch on your toe is not unlikely, it'd sure be nice to have real painkillers around. Your mileage may vary!&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;LED Flashlight&lt;/span&gt;. I use an &lt;a href="http://www.inovalight.com"&gt;Inova&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;USB thumb drive&lt;/span&gt; with recovery software for your favorite OS's. The &lt;a href="http://www.sony.net/Products/Media/Microvault/usm-h.html"&gt;Sony USM-H Micro Vault&lt;/a&gt; is 1.5cm x 3cm x 2.7mm.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Pocketknife. My dad turned me on to &lt;a href="http://www.crkt.com/"&gt;Columbia River Knife and Tool&lt;/a&gt;. IMHO, a single tough blade beats the &lt;a href="http://www.leatherman.com/"&gt;leatherman&lt;/a&gt; on weight vs utility and volume vs utility for civilized situations. (I don't go to Borneo much, do you? Although it is a pleasure to answer in the affirmative when someone says, "anybody got pliers?" If this matters to you, put a small pocketknife if in the emergency pack, and carry the leatherman in your pocket.)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;span style="font-weight:bold;"&gt;lighter&lt;/span&gt;. When the power goes out, a flashlight is nice, but I dare you to find a lighter in your apartment in the middle of the night aided only by a flashlight. This item pairs with a stock of candles in a well-known location in your apartment.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;em&gt;Don't keep this in your wallet!&lt;/em&gt; One of the use cases for this packet is "I lost my wallet." (Or, more likely, "someone stole my wallet.")&lt;br /&gt;Any suggestions for other things to add?</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/02/personal-geek-security-pack.html' title='personal geek security pack'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=6798463612830932180' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/6798463612830932180'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/6798463612830932180'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-5206570064036667075</id><published>2007-02-11T10:29:00.000-08:00</published><updated>2007-02-11T10:39:17.176-08:00</updated><title type='text'>nullifying backups</title><content type='html'>While playing with &lt;a href="http://stickam.com"&gt;stickam&lt;/a&gt;, I decided to demonstrate how I cook dinner to my huge audience. This involved separating frozen meat patties by banging them on the desk. I stopped this maneuver before completion, because my giant external hard drive, also located on the desk, started to &lt;em&gt;whine&lt;/em&gt;. Loudly. After cooking and eating my tasty dinner, I returned to the hard drive. I figured the heads had gotten misaligned. With the power off, I tried tapping it gently. I tried tapping it harder. The whine was still there, and prohibitively loud. I figure the medium is probably compromised but I can use it for storage that can be ephemeral. (Damn it.) Today I turned it on again because my iTunes is setup to download podcasts there, and I needed some fresh podcasts. Hey! &lt;em&gt;Writing data to the disk stopped the whining!&lt;/em&gt; &lt;br /&gt;So can I ever rely on this disk again?&lt;br /&gt;[UPDATE] No, I can never rely on this disk again, and I should be punished for entertaining the thought that I could. For that matter, I should &lt;em&gt;never rely on a single point of failure&lt;/em&gt; for critical data. Time for me to work on my &lt;a href="http://www.strongspace.com"&gt;strongspace&lt;/a&gt; setup.</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/02/nullifying-backups.html' title='nullifying backups'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=5206570064036667075' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/5206570064036667075'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/5206570064036667075'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-5694416102208830633</id><published>2007-02-07T09:22:00.000-08:00</published><updated>2007-02-07T10:08:49.613-08:00</updated><title type='text'>handy shell tools for finding large files</title><content type='html'>Heard over and over in development shops everywhere: "We're out of disk space! Who is the spacehog?" "Not me! It must be your project!" "Let's delete temp files | log files | core dumps | stuff that looks old."  I will spare you the lecture on the heartbreak of irreplaceable data loss, and instead I provide a few one-line shell goodies to identify where the disk space is going, with human-readable text reports sufficient for mailing to all your co-workers.&lt;br /&gt;The classic command for analyzing disk usage is&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ &lt;span style="font-weight: bold;"&gt;du -k&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;which will print something like this&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;32      Documents/Standards/sac-1.3/doc/org/w3c/css/sac/helpers&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;568     Documents/Standards/sac-1.3/doc/org/w3c/css/sac&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;568     Documents/Standards/sac-1.3/doc/org/w3c/css&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;568     Documents/Standards/sac-1.3/doc/org/w3c&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;568     Documents/Standards/sac-1.3/doc/org&lt;/span&gt;&lt;br /&gt;That lists the size in kilobytes, followed by the file name. Output like this quickly gets unreadable. We can apply some concepts of information visualization to improve this output. Let's put the most important stuff at the end, by adding a sort command:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ du -k Documents &lt;span style="font-weight: bold;"&gt;| sort -n&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;The last few lines of this list the biggest directories and their size in kilobytes:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;80180   Documents/Reference/docs/api/java&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;82924   Documents/Reference/docs/api/javax&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;110788  Documents/Speed Download 4&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;205708  Documents/Reference/docs/api&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;251800  Documents/Reference/docs&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;254668  Documents/Reference&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;434216  Documents&lt;/span&gt;&lt;br /&gt;Comparing six-digit numbers at a glance requires brain work. To make it easier, get human-readable output from du, by replacing the -k flag with -h. Now a line of output looks like this:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;4.1M    Documents/Standards&lt;/span&gt;&lt;br /&gt;That breaks our sort, though; &lt;span style="font-family: courier new;"&gt;sort -n&lt;/span&gt; is numeric, and 2M is less than 4K. Wrong. Let's just throw out any du output less than 1 mb. I do that by piping the output through sed. I also want to limit how deep we descend into directories, since directories sizes include the summarry of their children's sizes. On the mac, pass in a -d depth flag; on linux, use --maxdepth=depth.&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ du -h &lt;span style="font-weight: bold;"&gt;-d 3&lt;/span&gt; . | sed -e /\n*[KB]/d | sort -n &lt;/span&gt;&lt;br /&gt;Then to get just the highlights, pipe that through a tail command, to select just the last 30 or so big guys:&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ du -h -d 3 . | sort -n | sed -e /\n*[KB]/d &lt;span style="font-weight: bold;"&gt;| tail -30 &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;But wait, this is kind of stupid; I'm asking sort to sort a whole lot of stuff, then promptly throwing out most of the sorted things. Let's switch the order of the sed and the sort, which will make the sort smaller and faster.&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ du -h -d 3 . | &lt;span style="font-weight: bold;"&gt;sed -e /\n*[KB]/d | sort -n &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;span&gt;| tail -30 &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Props to Unix Power Tools and Jeffrey Friedl's Mastering Regular Expressions. We're just mortals, here, folks, but we're living in a well-documented world.&lt;br /&gt;On the mac, for an easier way to do this, try &lt;a href="http://www.omnigroup.com/applications/omnidisksweeper/"&gt;OmniDiskSweeper&lt;/a&gt;.</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/02/handy-shell-tools-for-finding-large.html' title='handy shell tools for finding large files'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=5694416102208830633' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/5694416102208830633'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/5694416102208830633'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-7818018.post-116957287035004788</id><published>2007-01-23T09:20:00.000-08:00</published><updated>2007-01-23T12:04:12.623-08:00</updated><title type='text'>practice makes perfect</title><content type='html'>To be productive as a software developer, or tester, or sys-admin, you have to know how to use your tools. Most development tools in the projects I run with are based on the old-skool unix model: a shell script, a build utility, obscure text configuration files, environment variables, and a source-code control system. Systems like that are exquisitely sensitive to errors, and even "vanilla" installs usually need some local tweaking, and some setup rituals. All of this can be maddening when you &lt;em&gt;want to get some work done&lt;/em&gt; and the tools won't let you. What can be done? &lt;br /&gt;    Certainly, build tools should be easier to use. But they're not, and that's the world we live in. The answer came to me last night watching a martial artist do forms on tv. In martial arts, forms are a detailed choreography that represent a hypothetical fight; the purpose of practicing forms is to get each detail of each action dialed-in. I recognized the form being performed; it was the first form I learned, as a beginner in Ja Shin Do. "He must be a beginner," I thought, "to still be practicing the basics." Then I kicked myself: he was practicing the basics to perfect them. Go back to the beginning, and do it again... this is the practice of experts. &lt;br /&gt;    We get good at using the tools by using them, over and over. Start from a blank slate and build a development environment from nothing. Do this ten times in a row, and pay attention to exactly where you install the prerequisites. Build muscle memory for what goes where. Do it ten more times, and pay attention to the initial invocation rituals. Do it again, over rocky ground this time, or an os you don't like. &lt;b&gt;If you want to be an expert software tools user, then practice, practice, practice.&lt;/b&gt;</content><link rel='alternate' type='text/html' href='http://sbshine.net/blog/2007/01/practice-makes-perfect.html' title='practice makes perfect'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7818018&amp;postID=116957287035004788' title='1 Comments'/><link rel='replies' type='application/atom+xml' href='http://sbshine.net/blog/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/116957287035004788'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7818018/posts/default/116957287035004788'/><author><name>benjamin shine</name><uri>http://www.blogger.com/profile/10627836049284994114</uri><email>noreply@blogger.com</email></author></entry></feed>