Leah Culver's Blog

Blog
  • Archives
  • Subscribe
  • leahculver.com

Living in the Cloud - My New Year's Resolution from 2011

On the last possible day to write about my 2011 New Year's resolution, here it is:

Live in the cloud.

The term "cloud" has most often been used in the context of enterprise computing, but there are lots of cloud services for your personal life as well.

In 2011 I attempted to get rid of as many physical things as I could. I took some risks and purposefully sought out new services I could use to further my cloud lifestyle. Here's a rundown of all the cloud services I used to replace all the "stuff" in my life.

Media

I started off the year by moving all my personal files to Dropbox. I purchased some extra space on Dropbox and was able to toss out my old backup drive. At first I was wary of putting all my personal files on someone else's machine(s) but I've had an excellent experience so far. It's super convenient not to have to manage my own backups anymore and I don't even have to worry about actually backing up my computer.

For music, I began listening to Rdio this year. Around the time I switched to Dropbox, I realized that it didn't really make sense to own my own mp3s when I could just stream anything I wanted to listen to at any time. I haven't owned any physical albums in years, but now I don't even own any digital albums. Yay. Spotify is also a good option for streaming music. However, I started using Rdio before Spotify was available in the US and I still like Rdio better (my friends are on Rdio, nicer design, better community).

I also finally got rid of most of my books this year. It was difficult parting with my books. However, I've been reading new books on Kindle anyway, so it didn't really make sense for me to have a bunch of physical books taking up space in my tiny apartment.

I won't talk much about my TV and movie setup because although it's totally awesome, it's not very legal. I do rent a lot of movies on iTunes and watch TV shows on Hulu and ABC, but the selection just isn't there yet.

Transit

Last October I got rid of my car - I donated my beloved 1991 Jetta to charity. In exchange I picked up a Clipper card for public transit, a Public bike for my daily commute, and Zipcar for the times I just had to have a car (not really that many). I realize that this is mostly possible because I live in San Francisco, a city with nice weather for biking and walking and not great for driving a car anyway.

In addition to biking and walking, I enjoy taking a nice Ubercab when I go out and the Ubercab iPhone app has an amazing view where you can watch the cab as it travels to your location. Ubercab can be a bit expensive though, so sometimes I'll settle for using TaxiMagic or Cabulous to virtually hail a cab.

Home

For the past few years, I've used a housekeeping service to clean my apartment every couple of weeks. I hate cleaning. When compared with my hourly rate for programming work, it's a great deal to have someone else clean my apartment.

Just this past year I started looking for other ways to move my household chores to the "cloud".

Grocery delivery by Safeway has been a huge timesaver for me. I'll buy my groceries online and have them delivered on the weekend.

I only recently heard of TaskRabbit which helps connect you to people who will do your chores for you. I'm excited to try them out as soon as I can come up with a suitable task (building furniture?).

Travel

2011 was a great year to book travel in the cloud. Hipmunk made booking my flights much faster and better with their awesome Agony rating (you can see which flights cause you the least agony!).

I booked my trip to SXSW this year super late and no hotels were available. However, I was able to find a great place via Airbnb and I ended up staying at an apartment close to all the action. I also used Airbnb to book an apartment for a 3-week stay in Amsterdam. I don't think there's anything closer to living like a local!

Right now I'm in NYC for New Year's. I left booking a hotel until the last minute (oops.) but was able to find an affordable room near Times Square using the Hotel Tonight iPhone app.

Going out and staying in

The best cloud service I discovered this year was Rent the Runway. On Rent the Runway you can rent designer dresses (as well as acessories) at an affordable rate and return them a few days later. I rented a $385 dress for Valentine's Day for only $25! I also rented a dress for attending a summer wedding. I loved being able to wear a different designer dress for each event.

I've started using Foursquare and the Yelp iPhone app to discover new restaurants. It's great to find places that my friends like on Foursquare and I love trying Hot New Businesses on Yelp. I've been making almost all my restaurant reservations on OpenTable. I even reserved a table for Thanksgiving dinner on OpenTable.

For the nights I want to stay in, I now order food online using GrubHub. A bunch of my favorite restaurants are available for delivery on GrubHub and the website copy is by far the funniest (Groupon and Yelp are runners up).

More?

Living in the cloud this past year has been an amazing experience. My apartment has gotten less cluttered as I've gotted rid of all the extra stuff. I've also had an amazing experience discovering new places and saving lots of time.

Are there any other great personal cloud services that I've missed? Anything I just have to try in 2012?

Posted on 12/31/2011 at 03:25 PM | Permalink | Comments (26)

Convore - group chat for everyone

I've got a new company and a new product, Convore. Convore is the somewhat indirect result of my thinking on group chat for the past few years.

About two years ago I was using IRC almost every day to communicate at work and with friends. For the 2009 Django Dash, I helped design and build a web-based IRC client called Leafy Chat with Alex Gaynor and Chris Wanstrath. Soon after building the IRC-based Leafy Chat, it started to bother me that IRC was so complicated and nerdy. Even with the Leafy Chat web client, I kept mulling over how much the experience could be improved.

After building a few initial prototypes of non-IRC group chat apps, I got to talking with another Django developer, Eric Florenzano, about group collaboration. Eric was really interested in forums and the idea of topic-based conversations. We ended up combining the IRC-style group chat with the added topic structure of forums created a prototype, nicknamed Podium.

With our initial prototype we recruited a couple of our friends try it out. Within a month of testing we were sold on the concept. We recruited our third co-founder and designer, Eric Maguire, and were accepted to Y Combinator for their Winter 2011 session.

Just last Wednesday we launched Convore and the end of this story is that I think we've built something really cool and totally new and exciting.

Please try out Convore today and let me know what you think!

 

More about Convore:

  • Convore official blog post
  • TechCrunch
  • The Next Web
  • ReadWriteWeb
  • VentureBeat
  • Mashable
  • Louis Gray
  • Mixergy
  • MIT Technology Review

Posted on 02/16/2011 at 06:45 PM | Permalink | Comments (9)

iPhone Pull to Refresh

Ever since Tweetie 2, the pull-to-refresh paradigm has been a hot feature for iPhone applications. The idea is that you can pull down on a list of items to refresh them. This saves you from needing some sort of "refresh" or "reload" button. Nice!

For the upcoming V2 of the Plancast iPhone app we really wanted to replace the current "reload" toolbar item with the pull-to-refresh style. However, the existing open source pull to refresh examples such as Three20's Pull to Reload and EGOTableViewPullRefresh are a little too complicated for my taste. Heck - this should only require one file!

So here it is... a very simple pull-to-refresh:

PullToRefresh

All you need to do is add the .h and .m files to your project and subclass them. I've added a bit of a hack to make pull-to-refresh work with tables that have multiple sections (like Plancast).

There's even a built-in demo so you can try it out right away.

Refresh-1 Refresh-2 Refresh-3

Posted on 12/13/2010 at 05:58 PM | Permalink | Comments (29)

Hello StyleSeat!

Lately I've been working part-time on StyleSeat, the website for hair stylists and their clients. I've been helping with some Django development and am really excited about the product.

Styleseat
The basic idea is that as a stylist, personal trainer, massage therapist, esthetician etc. you can use StyleSeat as your personal homepage. You can list your services and prices as well as show off photos of your work. For Pro users, StyleSeat provides an appointment calendar and helps you keep in touch with your current clients while also generating new business.

For those of us who aren't stylists but are looking for a good haircut, StyleSeat has recently added an online booking feature (currently in beta). I'm pretty lazy and love the idea of finding and booking hair appointments online!

Up until now StyleSeat has been a bit stealthy... but now that the site is up and running smoothy they're open for business! Check it out: http://styleseat.com/

Posted on 07/27/2010 at 11:02 PM | Permalink | Comments (4)

Three weeks of iPhone development

I'm three weeks into developing my first iPhone application, for Plancast. It's been crazy and fun to try to learn something new so quickly! In case you are thinking of getting started with iPhone development, here's how I got started...

First I picked up a copy of the book, iPhone SDK Application Development, by Jonathan Zdziarski. I pretty much picked it up randomly - I made a last-minute stop at borders to get a book on iPhone development to read on a flight. Zdziarski's book looked good and was the skinniest one I could find. Turns out that for such terse text, it gets the job done. More impressive is that half the text are tutorials and I love (love love love) tutorials. My first day of iPhone development was spent typing out these tutorials and running them in the simulator.

Next, for general good iPhone stuff, I tried out Facebook's Three20 project. It's a bit skimpy on documentation but there's some great UI stuff in there. It's actually a whole framework but so far I'm only using a tiny part of the library for the Plancast app (tabs and loading spinners).

For connecting to the web, I'm using ASIHTTPRequest which is fantastic. It has a lovely page of documentation and handles most use-cases for making requests including authorization and asynchronous requests.

Early on my app was running very slowly because it was loading lots of images from the web. I complained of this issue to Cathy from Chomp and she pointed me to this blog post on loading images in the background. The Three20 library also has this functionality.

Overall I've really enjoyed iPhone development so far. After working on web apps for so long it's nice to have a different set of pain points. Memory management in Objective-C isn't nearly as terrifying as I thought it would be but it is very frustrating to see the non-descriptive EXEC BAD ACCESS. I always make a ton of mistakes when trying out new things. Luckily, I'm good at debugging!

Posted on 03/06/2010 at 06:18 AM | Permalink | Comments (24)

Last day at Six Apart

Today is my last day working at Six Apart. I've been working at Six Apart for a little over a year now - since they acquired Pownce last December. During the past year I've contributed to Motion as a Django developer and TypePad as a Product Manager.

I'll miss all the smart people at Six Apart and I will continue to follow what's going on with the company. I'm keeping my blog on TypePad so I expect good things!

What will I do next? Starting on Monday, I'll be developing an iPhone app for Plancast, a social event calendar (similar to Upcoming.org). Yay.

As for my future plans... Leafy Chat maybe?

Posted on 02/12/2010 at 09:23 PM | Permalink | Comments (27)

Typekit fonts on TypePad

Check out the nice new type on my blog!

Okay, so I'm not much of a designer but I really love seeing new typefaces on the web with @font-face. Yep, I'm a little tired of Helvetica, Arial and Times.

For this blog (and my Awesome blog) I'm using Typekit to supply the fonts for me. It's fairly easy to set up an account with Typekit and get access to a bunch of nice fonts. Plus, I don't need to host the font files myself and the type designers get paid (yay).

I'm using a new feature of TypePad that allows me to add Typekit fonts to my design. The feature is a bit tricky to use so I thought I'd post step-by-step instructions here for all who want to try it out.

Here's how it's done:

1. Sign up for Typekit (and TypePad Pro Unlimited)

Sign up for Typekit via http://typekit.com/ref/typepad to get a discount on Typekit for your TypePad blog. Another option is to sign up for a free account which gives you two free fonts. I don't recommend using more than two fonts per site anyways!

2. Set up a Kit

After you create a Typekit account, you'll have a "Kit" for your blog. A Kit is a set of fonts for an individual site. For example, I keep all the fonts for this blog in a Kit with blog.leahculver.com as the domain. This means that any fonts I add to the Kit can be used at blog.leahculver.com.

Typekit-kit

3. Add a font to your Kit

Once you have your Kit, you'll want to add some fonts. You can browse around by style or by tag. When you find a font you like, click the "Add" link to add it to your current Kit.

Typekit-add-font
After clicking "Add" a new window will pop-up with information about your Kit. This is called the "Kit Editor" and you can manage your fonts for your Kit in this window.

Typekit-kit-editor 

4. Publish your Kit

If you're happy with the font(s) in your Kit, you will need to click "Publish" in your Kit Editor in order for your fonts to be ready to display on your blog.

Typekit-publish
5. Set up the Typekit embed code in TypePad

Okay, so now you have a Kit and a font in that Kit. To use your Kit on your website, you need some embed code in the HTML head. TypePad will add this embed code automatically! Just go to your blog settings and click on Add-Ons in the left-hand navigation. You'll see a place to add your Kit ID.

Typepad-typekit
Where can you find your Kit ID? Click on Kit Settings in your Kit Editor and you'll see a short ID that you can enter into your TypePad settings. Typekit-kit-id 6. Find your font-family

To use Typekit fonts on TypePad, you'll need to change the font-family attribute in your blog's Custom CSS. Click on the Advanced link in your Kit Editor to get some ideas for how to change the font-family attribute.

Typekit-font-family
For example, I should use "coquette-1" and "coquette-2" in my font-family attribute.

7. Add your fonts to your blog design

Almost done! Now you have your Kit, your font(s), and have configured your font to work with TypePad. The very last step is specifying where you would like your font in your blog design. Would you like the entire blog to be in your custom font? Post titles? Just the blog header?

In order to specify where to apply the font, you'll need to edit your custom CSS. Visit the Design tab for your blog and select "Custom CSS" from the left-hand side.

Then you can specify the font-family attribute that you found in the last step. So if I want my blog header to display my font, for my design I would specify:

Custom-header-css
After saving my Custom CSS I will see that my blog header has a new font!

Blog-header-font

Okay, so I'm not actually going to use the Coquette typeface for my blog header... it's just a simple example. You can see which fonts I really use here: http://typekit.com/colophons/syx1hbh

More about TypePad + Typekit:

  • Typekit blog post
  • TypePad blog post

Posted on 02/08/2010 at 09:59 PM | Permalink | Comments (7)

Log in or sign up with OpenID

As part of an upcoming TypePad homepage redesign, I wanted to know how many people are using Facebook, Twitter and OpenID to log in to TypePad.

I originally published these findings on the internal company blog in September, but due to the amount of interest in my last blog post about user authentication, I'm republishing them here.

Currently TypePad allows for OpenID log in via a wide variety of services.

Typepad-log-in
To find out which services people are using to log in, I contacted Jonathan March, Six Apart's Data Architect. I found out that while we don't track every log in specifically, we can get a very rough estimate by looking for a URL in a user's ID. Though the data is a bit out of date, I think it is still very useful.

Users by Provider (active in the past two months)

Users-2mo
OpenID* users by Provider (active in the past two months)

Openid-users-by-service-2mo
* Technically the two of the largest providers aren't actually using OpenID. Twitter uses OAuth and Facebook has a proprietary system, Facebook Connect. Check out Ben Ward's awesome blog post for more about the user experience of OpenID and OAuth.

From this rough data we can see that while a majority of people are using the TypePad log in, a good portion are also using Facebook, Google, Twitter, and Yahoo - in that order.

What about sign up?

The previous graphs are based on data about users who have LOGGED IN in the past few months. What about new users - users who have SIGNED UP recently? Luckily Jonathan thought of this and followed up with data and graphs on the growth of alternative authentication providers. The results are a bit shocking.

User sign ups between 2 and 3 months ago (June 28 to July 28)

Typepad-openid-july

User sign ups between 1 and 2 months ago (July 28 to Aug 28)

Typepad-openid-aug
User sign ups in the past month (Aug 28 to Sept 28)

Typepad-openid-sept
OpenID user sign ups by provider by week

Providers-by-week

Umm... wow. That's a huge amount of growth in new users signing up via alternative providers!

A lot of this growth probably has to do with the log in page itself. TypePad has been continually redesigning their log in page as well as the blog comment form to encourage people to use OpenID and specifically Facebook and Twitter. Whatever the cause, it appears that users are increasingly using alternative authentication to register for TypePad and are choosing Facebook above other services.

While this data is very rough, it helped with our upcoming TypePad homepage redesign. As part of the new homepage, we are including a sign up form. The new sign up form is simple - only an email address and password are required. However, there is also a button to "Register with Facebook."

Posted on 11/16/2009 at 08:07 PM | Permalink | Comments (14)

Log in or sign up?

"Sometimes I put my log in information into the register fields."

"Me too! I hate that not only do I feel stupid, I have to retype everything again."

For one of my side projects, Leafy Chat, we have just added the concept of user accounts. This includes the need for registration and log in (as well as log out and forgot password and so on). Leafy Chat only requires an email address and a password for both registration and log in, so it would be great to have some clever way to have both forms on the homepage.

Some things to consider:

  • Users only need to register once but will log in many times.
  • It's really important to get new users and registration should be dead simple.
  • Users will accidentally use the wrong form and should not be punished by having to re-enter their information.
  • The two forms, register and log in, require different validation. For log in, we need to check if the username/password combination is valid and for registration we need to verify that the email address is unique.

Another project that I've designed also has an email/password registration system. Hurl is a site for testing APIs. At any point while using Hurl, a user can click the "Log in" link to log in or register. A pop-up displays a single form and two buttons to choose from: "Log in" or "Sign up"

Hurl-log-in-sign-up

I like this design because by clicking the correct button, the user determines which validation to perform. For example, if the user clicks "Sign up" and the email is already in use, they probably already have an account and can simply click "Log in" to correct the action. What if the user first clicks "Log in" but doesn't actually have an account? They simply get an error message that the account doesn't exist and can click "Sign up" to create one. The user isn't punished for picking the wrong form.

I think the Hurl design is an improvement over a two-form system but it's far from perfect. I don't like that the buttons look so similar and that there's very little guiding the user to pick one or the other.

Mike Malone suggested taking a look at Amazon's log in/register page. Wow.

Amazon-log-in
I love this form because it is so straightforward. If you're an existing user, it's only one step to log in. For a new user, the form takes you to a second page that asks you for a little more information and also prepopulates the email you entered.

The use of radio buttons makes it clear that there are two distinct validation choices (as opposed to the form buttons which don't necessarily imply that you should only pick one). While radio buttons aren't the trendiest HTML form input, they are the appropriate one for prompting a user to pick one option out of many (while not obscuring the options like a select input does).

So after probably far too much research, I've come up with the following single register/log in form for Leafy Chat.

Log in

 Leafy-log-in

Sign up

 Leafy-sign-up

The form updates via JavaScript when the user selects a radio button. For the log in form, notice that the submit button says "Log in" and there is a link to retrieve a forgotten password. For the sign up form, the label for the password field prompts the user to "Choose a password" and "Sign up!" while also accepting the terms of service.

I like this design because a user can either log in or sign up directly from the homepage and the radio buttons stand out and make the options clear to the user. I love that the page dynamically updates to provide relevant help for the chosen form. Also, the user can easily correct any errors without re-entering their email/password.

What do you think?

Posted on 11/13/2009 at 06:38 AM | Permalink | Comments (89)

Hurl is now open!

Hurl is now open source!

Chris Wanstrath and I originally developed Hurl for the 2009 Rails Rumble where it won Most Complete. The idea was to create a simple web version of cURL, a command-line tool often used to test web APIs.

Hurl is super easy - just enter a URL and any extra parameters such as HTTP headers, body parameters, and authentication and then click "Send." You'll get the response and can save and share it.

By open sourcing the code behind Hurl we hope that other developers will be able to build on the concept. One very requested feature is to create an embeddable version of Hurl that can be used in developer documentation for easy try-it functionality.

Check out Hurl:

  • Hurl
  • Project homepage
  • GitHub
  • Twitter
Help us make Hurl even better! Patches welcome.

Posted on 10/20/2009 at 03:00 PM | Permalink | Comments (11)

« Previous | Next »