Category Archives: Uncategorized

Do you Want Someone to Impersonate You to Your LinkedIn Contacts and Leave You Humiliated? Try FounderDating.

[Edit: FounderDating’s CEO, Jessica Alter, politely asked me to remove the word “spam” from the title of this post because that word implies I didn’t know a message would be sent out. I have changed the post’s title at her request.]

A week ago, a friend of mine asked me to write a recommendation for him on FounderDating.com. I happily complied, and when I was done writing the recommendation I was shown pictures of a bunch of my LinkedIn contacts. FounderDating asked me to identify ten that I would vouch for. I didn’t have to do it but I thought oh well, I guess I’ll do it and see what happens. So all I did was click their photos. Nothing more. [Edit: after clicking their photos I clicked a button to submit my selections.]

Bad idea.

As far as I could tell, nothing happened. I figured behind the scenes maybe they would send notes to these people, telling them their contact Brian Morearty had used FounderDating, and suggesting that they try it too. I understand social networking and I understand that when you give an app permission to access a social networking account, your contacts will see that you used it. That would have been ok with me. But what they did was more insidious than that.

FounderDating used the LinkedIn API to send the following note to these ten contacts. I don’t remember being asked to approve the wording–because if I had been asked, I most certainly would not have approved the wording. [Edit: there actually was a link to “see/edit this message” at the bottom left of the form. I apparently didn’t see it because it was in the smallest font size on the form and wasn’t underlined, the way links often are. If I had clicked it I would have had a chance to change the text of the outgoing message.] I was humiliated this morning when one of my contacts sent me a heartfelt thank-you. I had to write back that while I most definitely do believe in him, I did not write this note.

Here’s what FounderDating wrote to the ten LinkedIn contacts I identified:

Hey [Name],

I was asked to vouch for a few people to join FounderDating – an invite-only network of entrepreneurs (50% engineers) all ready to start their next side-project or company. You’re on my short list. I highly recommend applying.

Apply here > [url]

(Note: copy and paste this link if it’s not clickable).

You can thank me later,
Brian

It seems factually correct, right? Let’s break it down:

  • “Hey [Name]:” personal greeting. Implies that I wrote it myself, not that it was written by someone else to my contacts.
  • “I was asked to vouch for a few people to join FounderDating:” this is accurate. However, again, it implies I wrote this note myself.
  • “You’re on my short list:” well, yes, they did ask me for ten of my contacts. But this gets embarrassingly personal at this point. I highly respect all ten of the people whose photos I clicked. But several of them are people I would not say to their face, “you’re on my short list.”
  • “I highly recommend applying:” EXCUSE ME? When did I recommend applying, much less HIGHLY recommend it?
  • “You can thank me later.” OH MY GOD. What kind of ass says that when he recommends signing up for some online service?

For fuck’s sake, at this point I most certainly DO NOT recommend people use FounderDating. Quite the contrary. I have shut them off from sending more messages on LinkedIn.

Sorry for the rant. I fell for a scam and I’m embarrassed. I hope you will learn from my mistake.

I have written to LinkedIn’s support team notifying them of this abuse of their API Terms of Service. See Section D: “Don’t Harm or Trick Members.”

Your Application must not:

  • Impersonate a LinkedIn user or misrepresent any user or other third party when requesting or publishing information.

Follow-up

On May 8, 2013, this post made the front page of Hacker News and got a lot of attention. FounderDating’s CEO, Jessica Alter, contacted me and we exchanged several emails. She was polite. She requested that I make some corrections to this post, which I have done. Specifically:

  • I added a comment saying that after selecting the pictures of my LinkedIn contacts, I clicked a button to submit the form.
  • I removed the word “spam” from the post’s title because that word “implies we don’t let you know a message goes out.” They did let me know a message would go out. (See screenshot below.) And even if they hadn’t let me know that, I mentioned in the post that I did expect a message to go out.
  • I clarified that there actually was a “see/edit this message” link in the bottom left hand side of the form. I didn’t notice this link because it was in small type and it looked exactly like the text above it, which was not a link.

Here is a screen shot of the form (I blurred the names):

FD form blurred

If you click “See/edit this message” in the bottom left corner, this is what you see:

FD wording

To reiterate, all FounderDating did was send a message I didn’t like to a few people I chose. In addition to requesting that I make clarifications to this post, Ms. Alter asked me what changes I would like to see made to the UI on FounderDating. I requested that they show me the flip-side of the lightbox before the messages get sent, without requiring me to choose to “see/edit” the message. Something like a 2-step wizard would be fine. Step 1: select contacts. Step 2: I am presented with the second screenshot.

I would also like the default message to be less annoying.

Send a Page from Safari to Opera Mini When You Need to Reflow Text on the iPhone

You’re on your iPhone surfing the tweets and you come across a link to an article or discussion you want to read. You click it and start reading. But the text is too small so you two-finger zoom. But that makes the text too wide for the screen, even in landscape mode. And now you’re stuck feeling like a blooming idiot swiping your finger side to side down this long page while you try to read it. It distracts you from the thing you’re trying to read and it takes too long.

I Like Stuff That’s Not Horizontal Scrolling

The iPhone’s Safari browser can’t re-flow text in wide columns on web pages. For people like me, this is a deal-breaker. Scrolling side-to-side over and over again just to read a web page is time-consuming and annoying. It’s the primary reason I switched to Android a year and a half ago. Android’s browser fixes this problem exactly the way you would want: if you two-finger zoom into some text it immediately re-flows the text to fit the new screen size. I love it.

In iOS 5, Apple finally introduced Reader mode. A little “Reader” icon appears in the URL bar of some pages. Clicking it enlarges and reflows the text for better readability. It’s nice–when it works. Apple says “Reader in Safari smartly recognizes when there’s an article on the page,” but unfortunately it’s not as smart as they claim. There are plenty of pages where the text is too wide but the Reader icon doesn’t appear, so you’re still stuck scrolling side-to-side as you attempt to read.

For an example of a page that doesn’t re-flow nicely and doesn’t offer Reader mode, use your iPhone and try reading this discussion of Safari text re-flow on the Apple Support Communities site.

Opera Mini to the Rescue

There are other browsers that can claim they can reflow text on the iPhone. I’ve tried a bunch of them. The one I find does the best job of re-flowing text with minimal hassle on a wide variety of pages is Opera Mini, which is free and fast.

Here is the aforementioned discussion thread. The first picture is in Safari after zooming in to a readable font size. The second is Opera after doing the same. See the difference? In Safari you have to scroll side to side to read it. In Opera you don’t.

To enable text re-flow, go to Settings and turn on the “Text Wrapping” setting.

But Safari is the iPhone’s Default Browser

So that’s all well and good but what about that little story about surfing the twitterverse and clicking a link? Whenever you click a URL in any other app like email, Twitter, Facebook, etc., the iPhone will open the page in Safari. Apple doesn’t give you a choice. You can’t tell it to open in Opera. Sure, you could click in the URL, then long-click it, then choose Select All, then choose Copy, then launch Opera, then click the Opera URL bar, then click Paste. But by the end of all that it’s time to go to bed.

Well I just figured out a little workaround that costs nothing and lets you send any page from Safari to Opera in two clicks. So at any time you’re two clicks away from reflowing your text.

The trick is to use a bookmarklet I made called Send to Opera.

  1. First click: the Bookmark icon.
  2. Second click: the Send to Opera bookmarklet.

To add it, go to this Send to Opera page and follow the instructions.

How does it work? It simply inserts the letter “o” at the beginning of the URL. For example if the URL is http://104.237.154.7/, Send to Opera tells the browser to open ohttp://104.237.154.7/. With an O at the front, the request is sent to Opera.

Cool, huh?

How to Free Up Inactive (Blue) Memory in Mac OS X

Want to turn Activity Monitor’s “blue” (inactive) memory to “green” (free) on your Mac without closing any programs?

Run Terminal and type:

  $ purge

My memory went from  to  the last time I did this. Not too shabby. (Why did it also clear up some Active Memory? I have no idea.)

That’s all you have to do. It can take up to a minute. While purge is running your system will be slow. After that, with all that free memory, it’ll be zippier than before.

Don’t listen to all the remarkably obnoxious fanboys or official Apple support pages telling you just to leave Inactive Memory alone because it will be freed up quickly if it is needed, or that the system knows better than you do when to free memory. Trust your experience. In my experience it will not and it does not. 

Here is the purge man page:

PURGE(8)                  BSD System Manager's Manual                 PURGE(8)

NAME
     purge -- force disk cache to be purged (flushed and emptied)

SYNOPSIS
     purge

DESCRIPTION
     Purge can be used to approximate initial boot conditions with a cold disk buffer
     cache for performance analysis. It does not affect anonymous memory that has been
     allocated through malloc, vm_allocate, etc.

SEE ALSO
     sync(8), malloc(3)

Dear GitHub: Please Improve Your Notifications

An Open Letter to GitHub

[Update 8/6/2012: good news. GitHub has just released a complete overhaul of their notification system. After reading the blog post about it, it looks as if they have fixed most or all of the issues I raised in this post. It looks like a lot of thought and hard work went into this change. Thanks for listening, GitHub.]

Dear GitHub,

Hi guys!

Guess what: GitHub’s great. Yeah, you know that.

But hey: could you please fix GitHub notifications? They seriously suck. No, really, I mean it. They’re the worst. Sorry, I don’t mean to hurt your feelings. I know a human being designed the notification system.

GitHub notifications are a productivity sink. Despite having fifteen checkboxes for customization in the Notification Center, I still can’t make them work in a way that helps me. Don’t get me wrong, I am not asking you to fix it by adding more checkboxes to the list. I am asking for an overhaul of how the notification system works. Below I will try to clearly lay out the problems I see and what I would like the system to do instead. The overall goal is to change notifications from a productivity sink to a productivity boon. Continue reading

Hello, Entrepreneur. (And Consultant.)

The last time I changed jobs it was the spring of 1999, in the glory days of the dot-com frenzy. I decided to leave my job at an enterprise software company that shall remain unnamed (but it starts with “O” and ends with “racle.”) Enterprise software was not where my heart was. I thought about joining a startup and I talked to a bunch of them, but they all said the same thing when I asked about their business model: we’re not making any money but don’t worry, we’ve got millions of customers.

I knew we were in a bubble. Don’t get me wrong—I’m no soothsayer and I couldn’t tell you exactly when the bubble would burst, but it was clear it would. So I joined Intuit, the only company I interviewed with that was actually making a profit.

It turned out to be a pretty good choice.

The nearly 12 years I worked at Intuit were amazing. The QuickBooks team warmly welcomed me. I worked with fantastic people. I became the tech lead for the UI Toolkit team. I worked on a lot of elegant little touches that make the user experience more delightful, like a better quickfill (autocomplete) control. I trained engineers on how to build great user interfaces. I stayed there til 2005 when I decided to try something new, but Intuit is such a great place to work that I just transferred to another group. I moved around a couple more times, always staying in the Small Business Division, and since 2008 I have been doing web development in Intuit’s Grow Your Business division. This is the group that makes Intuit Websites.

I recently decided the time has come again to change jobs. But this time is different. Instead of looking for a job as an employee somewhere else, I’ve decided to do something I’ve been thinking about for a number of years: I am becoming a software entrepreneur and consultant/trainer.

Both? Well, yeah—I’ll be spending 30 hours a week consulting and training (focusing on Ruby on Rails and JavaScript) and the remaining time starting my own business.

My Startup

During my “entrepreneur” time I am creating a website with tools and community for small real estate investors. I am an investor myself, having bought houses and condos in Southern California, Arizona, and even Melbourne, Australia. When I got started with investing I was willing to invest anywhere in the U.S., but I had one big question:

Which market should I invest in?

The answer depended on what was I looking for in a real estate investment. Some investors look for equity growth, others for cash flow. Some look for a market on an upswing, others for a market in a trough. Some look for job growth, some for immigration, some for vacancy rates, and on and on. The thing is, all this data is available for free from the U.S. Government but it’s really hard for a small real estate investor to find. And once they’ve found it, it’s also hard to collate it and get a quick answer to the simple question of which market to invest in. Real estate agents can be helpful but unless you happen to find one who specializes in finding investing opportunities around the country, they won’t really know what to recommend. In that case they’re likely just to tell you that their own market is a good one to invest in.

So a few years ago I started working on a web app to solve this problem and recruited my friend Ed to help out. Think of it as Kayak for small real estate investors: you give it your criteria, drag some sliders, check some boxes, and it shows you the results. Except instead of showing you flights it shows markets. It’s fast and easy and you don’t need to pore through thousands of lines of data from government reports. The web app does all that for you instantly.

Working on the app was fun and we got a lot done over several months but it was hard to find enough time for that when we also had full-time jobs and families we wanted to see. But now that I’m consulting 30 hours a week instead working 40 hours a week, that leaves me more time every day. So I’m working on the app for real estate investors again.

I’ll make an announcement here when it’s ready to try. Subscribe to my blog so you don’t miss it. (Go here and click the Subscribe button in the right hand column.)

My Consulting and Training Business

To keep the lights on I am also doing Ruby on Rails consulting and training. I can make web apps work great on mobile phones and desktop browsers with a single code base, scale Rails apps, and a bunch more. See my About page if you’d like more info on my services, and my Contact page if you want to contact me about work.

I Like Stuff That’s Fun

I’m already having a ton of fun and I’ve barely started. It’s great to be working with Ruby on Rails full-time, controlling my destiny, and creating my future. And I’m really enjoying my first consulting gig.

Stay tuned.

Export iPhoto to Folders is Getting Better All the Time

Mark Nottingham is on a tear. Last week he sent me a pull request for a bunch more changes he made to the exportiphoto app that lets you export iPhoto events or albums to folders.

The most notable changes:

  • It uses less memory. This matters if your iPhoto library is huge, because you will no longer overwhelm your Mac’s memory when exporting the photos to folders. It now uses a SAX parser so it no longer has to load the entire iPhoto XML file into memory.
  • It shows better progress than before, telling you how many events/albums it has processed so far and how many there are total.
  • If you want, it can copy photo metadata (image name, description, keywords, faces, and rating) into the exported photos.

Export Your iPhoto Library to a Folder Structure

I wanted to export my iPhoto library to a folder structure and was disappointed to see that iPhoto has no built-in way to do it.

I found a nice little script written by Derrick Childers (scroll down to his comment; don’t use the original shell script) that did almost exactly what I needed. Derrick’s original version exported all events by year, except it didn’t work in all cases because it was based on the year of the photo’s filestamp, which might be different than the year it was taken (e.g. if you went back to retouch a photo). Guillaume Boudreau added support for exporting albums and removed the year folder because it didn’t work well, but I put it back and fixed the it to generate the year based on the event date.

(Update: I changed it to generate more than just the year. I generate the entire date of the event, followed by the event name.)

I tested it with:

  • Leopard 10.5.8
  • Python 2.5.1
  • iPhoto 8.1.2

Derrick tested his original with:

  • Snow Leopard 10.6.2
  • Python 2.6.1
  • iPhoto 8.1.1

I’ve posted it to Github. Feel free to fork and modify to your taste.

Action-Oriented Programming and The History of HTML

I just read a fascinating history of HTML, up to HTML5 by Mark Pilgrim.

One sentence keeps repeating in this essay:

“The proposal was never implemented.”

Pilgrim’s point is that shipping software wins over specs and ideas. Or in his words, “The ones that win are the ones that ship.” (Although he points out that shipping code is necessary but not sufficient for success.) A number of times HTML was “retro-specced” to match what had already been implemented.

I like that. In 2006 I coined the term “Action-Oriented Programming” on a Joel on Software discussion board:

Regarding motivation to get started implementing a product idea once you have one:

Whatever you do, do something.

Us programmers, we tend to overanalyze things. Lots of up-front design, trying to decide if it’s the right thing to do, not sure if we have enough education yet, etc. But from what I’ve read about successful entrepreneurs, they are DOERS. They’re Action-Oriented.

So I’m inventing a new term:

Action-Oriented Programming: writing the damn program instead of thinking about writing it.

The HTML spec evolved through Action-Oriented Programming. Read the History of HTML essay and you’ll see why.

P.S. Hey, I know I didn’t invent the idea of favoring working code over detailed specs. But I like the name I gave it. 🙂 I’m pleased to see that Action-Oriented Programming has become popular with the rise of agile techniques and “Getting Real.”