Etsy

Rainy Day Crafts

Paper Terrarium
Today is gross and rainy. I’ve spent most of it working, which as you can imagine is tons of fun. While packing up some tiny glass jars for Tinysaurs I decided to take a break and make a tiny display of my own.

I had some tiny 1cm paper cranes left over from when I used to make crane earrings.  I covered the basswood stand in origami paper, and glued two of the cranes to straight pins. The whole thing is about an inch and a half tall.

Now I’m trying to decide what I should do with it. Should I just be happy with my crafty Saturday, or try to make it into a new product for Everything Tiny?

Business

Dear Businesses: Get off Twitter

<

div class=”zemanta-img” style=”margin: 1em;”>

The Twitter fail whale error message.
Image via Wikipedia

… and back on to customer support.

Twitter has become a necessity for reputation management. Don’t want people to talk crap about you on Twitter? Use it to respond to all the naysayers and whiners! Nip those problems in the bud! Twitter is so great, you can interact directly with your customers! Hooray!

Let’s back up a minute. You know what’s great for interacting directly with your customers? Email. Over the years email based customer support tools have evolved beyond your standard POP3 mail client. I do some customer support work for NearlyFreeSpeech.Net and we have a system that makes it relatively painless.

So why are all these companies putting so much money into twitter management software like CoTweet and yet leaving their customer service departments in the last century?

The result of this Twitter madness is we’re training our customers to go there first, because it’s faster than trying to get help through the official support channel. Case in point: I was having problems with my Amazon Payments account. I sent an email to their customer support team. I was told someone would look at and respond to my request in “1-2 days.” This infuriated me more, as I was already pretty ticked off at Amazon, and so I went to Twitter to complain. Lo and behold, within a few hours of my tweet I had a response from a director at Amazon Payments.

Using Twitter to catch users who fall through the cracks is great, but it should never be a company’s first line of defense. Customer service hinges on the customer’s expectation. Exceed their expectation and you win, fall short and you lose. But the expectation varies, and isn’t always based on “rational” assumptions.

A few years ago I worked at a scooter shop in Richmond, VA. The owner had a habit of staying there late to work on things, and would often take customers’ late night phone calls to help them with their scooters. As business picked up and she had less time in the evenings, she stopped taking the late night calls. And the customers who had been calling her got mad. They had come to expect free scooter help in the middle of the night, and when the shop owner didn’t meet their expectations, they felt it was bad customer service. Never mind the fact that expecting free live scooter help at 9pm is ridiculous in the first place.

Good customer support is partially about training the customer to have rational expectations. And meeting them. Tell customers up front how long it should take to respond, and then respond in about that amount of time. If you say “1-2 days,” getting back to them on day 3 is not acceptable. On the flip side, if you say “1-2 days” but usually get back within a few hours, you’re creating the expectation that your time estimate is bogus. So if it does take you 1-2 days next time you fail, regardless of what your website says, because you already created the expectation that you’ll reply considerably faster.

Most of this is relevant to only repeat users of customer support. If you check out some customer support statistics published at NearlyFreeSpeech.Net a few years ago, you’ll see that 50% of their support requests come from 5% of their users. So while most of your users won’t interact with your support system more than once, most of your support issues will come from repeat users.

So why, why, why, why, are we training our users to go whine on Twitter? Twitter is a mediocre place to do customer support at best, and puts the user’s private information at risk in worse case scenarios. Users can’t be trusted to know when it is / is not appropriate to share information, I don’t even want to think about the amount of personal data you could scrape off Twitter from customers replying to service reps.

If you’ve got people manning the Twitter lines and yet it takes you more than a day to respond to email based customer support inquiries, you have a problem. Yes, Twitter is new and exciting, and everyone is rushing to figure out how they can control the flood of information that’s suddenly pouring from our computer screens. But you can’t play on Twitter until your homework is done, and in this case your homework is building up a good traditional customer support system.

Reblog this post [with Zemanta]
Personal

Staying Awesome While You're Unemployed

I’ve never been without a job (or three) for very long, but It’s been a little over a year now since I’ve had an employer. While self-employment has its ups and downs, I’ve been doing pretty well. Looking back at the past year, I think it’s because I’m constantly moving at 1000 miles an hour. Since not everyone has the blessing/curse of “being driven by an invisible motor” all the time, I’ve compiled a list of things that have helped me find work over the last year. Hopefully it will be helpful for someone in a similar situation who isn’t having as much luck.

Do/make something. Every day.

I don’t mean you need to do the laundry or take the garbage out more often now that you have more free time. I mean you need to pick something and do it every day. Something productive. It doesn’t really matter what it is, as long as you keep doing it. Write, paint, code, whatever the hell it is you do… do it every day. If a big project is too intimidating and you find yourself procrastinating, set your goals smaller. Write a short story every day instead of your epic.

Some of the work you produce will be crap. Maybe it turns out you’re not actually that good at whatever it is you do. That’s fine. I bet you anything if you do it every day for a month you’ll get better. Or you’ll realize it’s not for you and move on to something else. Either way, you should have something to show for the time you haven’t been rotting away in a cubicle. Make other people jealous of you rather than pity you.

Keep working.

Just because no one is paying you doesn’t mean you get to quit working. Sucks, right? If you can’t find anyone to pay you to use whatever skills you have, find someone who will let you do it for free. If no one will let you work for them for free, come up with your own project and work on that (see above).

Working for free can suck, but it can also be a great way to get experience you might not already have. No one has any interest in hiring a web designer with no real world experience. But a designer with a few completed projects under their belt is much more interesting. No one has to know you did the work for free (unless they ask for salary history, but that’s a completely different story).

As above, the more you do it, the better you will get. If you don’t know how to do something, learn how. Do things you don’t know how to do. It’s one of the best ways to learn, and since you’re working for free anyway you might as well get something out of it.

Network.

Whenever someone says the word “networking” in a social context, I immediately think of slimy dudes who try to be everyone’s friend in hopes of using them for a connection later. You do not have to become a slimy dude to build your network successfully. But you do need to leave the house. Opportunities for paid work are not going to fall on your lap while you’re sitting around honing your Guitar Hero skills. Join club, volunteer, or otherwise go out and get involved with some sort of social activity. It doesn’t even need to be related to your professional skills. If it is, so much the better.

I’ve gotten a lot more value out of a few stronger connections than simply trying to meet as many people as possible. And networking is only valuable if you’re doing something / making work for yourself (see points 1 and 2). If you’re volunteering at the animal shelter, you want to be “that guy who paints and fixes broken pianos” not “that guy who is unemployed.” The fact that no one pays you to do these things is incidental. When your animal loving friend knows a guy who needs his piano fixed, he’ll think of you.

Lather, rinse, repeat

All this seems really obvious. And it is. Yet for some reason we all seem to have at least one friend who sits around all day replying to Craigslist want cialis levitra sales viagra ads and playing World of Warcraft not that there’s anything wrong with that and can’t figure out why she isn’t landing any jobs. Maybe you’re saying to yourself “but I already do all those things.” Do you? Really? Oh, good for you. But in my experience, it’s easy to start slacking once you have no deadlines or deliverables. Hold yourself accountable. Sure the economy sucks and there aren’t a ton of jobs out there. But if you find yourself in a similar situation, take a good hard look at what you’re doing. Maybe you could be doing it better.

Reblog this post [with Zemanta]
Startup Life

Well, I Suppose It's Official…

… I am going full-time with my startup. In a moment, I’ll tell you what it is, but in the meantime, let’s look at how I got here:

At any given point I have probably a dozen half-finished and half-baked projects lying around. Some of these are business ideas, some of these are just projects with no intent of monetization. Invariably they take a backseat to things like paid work. What can I say, I’m a sucker for things like paying rent and eating food besides Top Ramen.

About three weeks ago, I haphazardly mentioned one of them, called Tastemob, to a friend of mine. I’d been listlessly searching for a co-founder, and had mostly decided to set the project aside and maybe get a desk job, mostly because I miss working with other people. Around the same time, a friend of mine forwarded me a job opening at a social gaming company in Manhattan.

What happened next is kind of a blur. My aforementioned friend, whose name is Katherine, started going full steam ahead with the Tastemob project, doing all viagra for women sorts of business-y things I had previously not really taken the time to do. She started getting really excited about the project, and that reignited my interest in it. Meanwhile I had an interview at the game company, and after a bit of phone tag with my references they offered me a position. In the time between the interview and the offer (barely two weeks) we had applied to a few startup incubators with Tastemob and gotten generally positive responses to the idea.

My boyfriend Chris maintains that I am the only person who would ever get upset by an offer for a job they wanted. He may be right. But faced with choosing between a job that sounded pretty good versus putting my all into a startup that might just have some legs… it was hard. I talked it over with a variety of my friends. In the end, almost everyone said to go for the startup, that I’d be plagued with “what ifs” if I didn’t. One person suggested I take the job and then just quit if the startup got funded, which is a bit too shady for me. It took me a good half hour to write the email declining the job, and probably another 10 minutes to hit “send.” I made my now business partner, Katherine, swear she really did think Tastemob was a viable product and that we were going to try our damnedest to make it work.

Now that I’ve turned down a job in favor of Tastemob, I have a distinct sense of “no going back.” Sure, I’m freelancing now anyway so it’s not as if I’ve suddenly committed to a giant decrease in pay the way quitting an existing job might. But it still brings a sense of finality to the decision.

This post has gotten a bit lengthy, so I’ll save another post for blathering on about Tastemob itself. In short, it’s a social shopping tool, meant to solve the problem of “I want to buy something but I can’t find the exact thing I’m looking for.” I built the prototype in November, and now we’re hoping to have a beta up in mid March (having not worked on it all winter). And now that I’m in it for real, it appears we’re gong to be building a real company on it.

Reblog this post [with Zemanta]
Business

Zahra's Paradise

For the past month I’ve been doing some freelance with First Second, working on a website for an upcoming comic book. It’s called Zahra’s Paradise and we launched today. I’m amazed at how much traffic we’ve had in the nine hours since the site went live. So far we’ve blown through about two gigs of bandwidth. Not bad for a site that’s less than a day old.

Of course it helps that it was picked up by a few local newspapers and blogs.

The project has been interesting for a few purchase cheapest viagra different reasons. First, it’s being simultaneously published in 7 different languages. 7. More than anything else it’s a logistical challenge to communicate with a dozen different people each speaking a few of the languages. I think by the end I was emailed 4 different copies of the Farsi version by various people. I had to be very careful to keep the Farsi and Arabic files separate, because I admittedly can’t distinguish them very well. Side by side I can see some clear differences (Farsi is more curvy looking) but looking at single words I’m hopeless. Getting the software to play nice with both the comic plugin and the language plugin was also tricky. Not so much difficult as “fiddly.”

Reading the comments I feel like I can tell who came from BoingBoing, they’re the ultimate Unimpressable Connosoirs. They have useful comments like “no one who prays would keep alcohol in the house!” Uh ok, whatever dude.

It’s an interesting and well written comic, so seriously check it out.

Programming

Tutorial: Writing a TCP server in Python

During the last 12 hours of the hackathon I decided to write a TCP server for an old project I want to finally finish. I decided to write it in Python, mostly because my friend Adam likes Python and Adam would inevitably be the one answering my questions when I got stuck. I should mention that prior to yesterday evening I knew nothing about socket programing. And I only had a vague idea of what threading was.

Since not everyone has friends like Adam, I’m writing up my findings in a tutorial.

Note: A bug in my CSS is causing the code blocks to show up extra wide. I’ll fix it once I’m back home from the hackathon

Understanding Sockets

First, I’m going to assume you understand that this is not a tutorial about writing an HTTP server. Instead this server will take connections from clients and keep them open to pass data back and forth until one side decides to close the connection. By keeping the connection open we eliminate the need to constantly poll the server for updates.

Socket Programming HOWTO provides a broad overview of sockets and is a good starting place.

Python’s Socket Library

Luckily python has an easy to use library. Like other libraries, we import it with thusly:

from socket import *

Many of the socket methods you’ll use are pretty self explanatory:
socket.listen() – listens for incoming connections
socket.accept() – accepts an incoming connection
socket.recv() – returns incoming data as a string
socket.send() – sends data to client socket*
socket.close() – closes the socket

*in this context the ‘client socket’ can be on either the server or client side. When a client connects to a server, the server creates a new client socket on its end. The two clients, one on each end, communicate with each other while the server socket remains open for incoming connections. This becomes more clear as you work with socket connections.

Writing the server
First thing’s first, we need to establish our server socket:

##server.py
from socket import *      #import the socket library

##let's set up some constants
HOST = ''    #we are the host
PORT = 29876    #arbitrary port not currently in use
ADDR = (HOST,PORT)    #we need a tuple for the address
BUFSIZE = 4096    #reasonably sized buffer for data

## now we create a new socket object (serv)
## see the python docs for more information on the socket types/flags
serv = socket( AF_INET,SOCK_STREAM)    

##bind our socket to the address
serv.bind((ADDR))    #the double parens are to create a tuple with one element
serv.listen(5)    #5 is the maximum number of queued connections we'll allow

So now we have a server that’s listening for a connection. Or at least we did until the script reached the end and terminated, but we’ll get to that in a bit. Let’s leave our server hanging and jump to our client software.

Creating the client
Start a new python script for the client. We’ll need many of the same constants from the server, but our host will be ‘localhost’. For now we’ll be running both the server and the client on the same machine.

##client.py
from socket import *

HOST = 'localhost'
PORT = 29876    #our port from before
ADDR = (HOST,PORT)
BUFSIZE = buy online levitra cialis viagra 4096

cli = socket( AF_INET,SOCK_STREAM)
cli.connect((ADDR))

Notice that we’re creating another socket object on this end but instead of binding and listening, we’re using the connect() method to connect to our server.

So what happens if we run our server and then run our client? Well, not much. While our server starts to listen, it then hits the end of the script. We need it to instead wait until it accepts a connection and then do something with that connection.
socket.accept() does just that, and returns two things: a new client socket and the address bound to the socket on the other end. Once we have that, we can send data!

Continuing on server.py:

serv = socket( AF_INET,SOCK_STREAM)    
 
##bind our socket to the address
serv.bind((ADDR))    #the double parens are to create a tuple with one element
serv.listen(5)    #5 is the maximum number of queued connections we'll allow
print 'listening...'

conn,addr = serv.accept() #accept the connection
print '...connected!'
conn.send('TEST')

conn.close()

The last step is to jump back over to our client and tell our client to expect to receive data:

cli = socket( AF_INET,SOCK_STREAM)
cli.connect((ADDR))

data = cli.recv(BUFSIZE)
print data

cli.close()

Now when you run your server it will wait until a client connects. Once you run your client it will connect and receive a short message (the word “TEST” in this case) and print it to the screen. If you wanted to you could have the client send a response, using the same send() and recv() methods (but reversed).

Make sure you close() your connections when you’re done using them. If you don’t close things nicely they have a nasty habit of staying bound/connected until you forcibly kill the python process. This can be a real pain when you’re debugging.

By itself this isn’t particularly useful, especially considering we can only handle one connection at a time and exit once it’s closed. By adding a few while loops and some threading we can make this into something much more valuable. As it is, I’m pretty wiped from the hackathon, so the threading tutorial will have to wait until another day.

bento

Bento #9: Cheese and Crackers!

I’ve been slacking on the bento photos a bit. It’s been a hectic week and while very few of my bentos take more than 10 minutes, staying organized and waking up more than 30 minutes before I’m supposed to leave has been a bit of a challenge.  I’ve also skipped photographing bentos which were just more of the same. And I entirely missed the one with the chicken pot pie. Chris was running out the door so there wasn’t time for theatrics.

This is one of the faster bentos I’ve put together. It couldn’t have taken more than 5 minutes. Today we have:

  • Leftover pasta and meatballs. You’ll recognize this from Bento #7. We’ve finally managed to eat it all!
  • Half an orange. Are you starting to see a pattern? At least I know he’s getting vitamin C.
  • Snow peas
  • Laughing Cow cheese spread
  • Water crackers

Snow peas are great for bentos because you can toss them in raw and they fit in small spaces. I like to eat them cold, but Chris prefers to heat them along with his entree. The laughing cow cheese is also great because it comes in a wheel of eight individually wrapped wedge shaped servings. It’s a soft cheese so it doesn’t really need any utensils.

Startup Life

Keeping Your Startup Organized

In the few days since my post on finding a co-founder I have, to my surprise, found a co-founder! It’s funny how things work out like that. My co-founder, Katherine, has actually been a friend of mine for a while. So unfortunately I don’t have any sage advice for those still on the hunt for a partner in crime business. Or maybe I do: talk to buy cialis viagra everyone you know about your business idea. If it’s any good, someone is bound to get excited by it.

The next step is figuring out how we stay organized. We have a lot to do: apply to various startup incubators, put together something resembling a business plan (or at least an outline of what we’re doing), sit down with a lawyer and become a real business, etc. Oh, and build the prototype. Actually the prototype is built, but it’s kind of hideous, so it needs work.

What do other startups use to stay organized? At Etsy we used Trac, which is decent software but has a somewhat miserable UI. It’s powerful, but the amount of work I’d have to put in to get it to do what I want is more than I can handle right now. We’re already using Google Docs and Google Calendar, but I can’t find anything that ties those together with a nice project management interface. We need to keep track of who is working on what incubator app, what still needs to be done for the incorporation, etc etc. I feel like just about everyone has this problem these days, so I’m interested in hearing everyone else’s solutions.

Startup Life

Finding a cofounder

When you’re looking to start a company, how do you find a cofounder?

I have an idea I’m trying to build into a company, but need a partner on it to stay focused and keep at it. It’s just too big to do by myself. I’ve been trying to think of aquaintences on either the product management side or the dev side of things who might be interested. A lot of people I know who start companies do so with former coworkers, so I started there.

Luckily, I have one former coworker who would be just fantastic to start a company with. She’s smart, motivated, and knows the market we’re going after. She was laid off from our former employer about a year ago. Of course, being as awesome as she is, she’s started her own company in the year since then (which is quite successful!) and quite understandably wants to stay with it.

Other friends, such as those at NYC Resistor, are either happy in their current jobs or already started their own companies. I’m feeling a little late to the startup party.

At the crux of my issue is the fact that I’m inherently bad at networking. This is an awful quality for an entrepreneur, I know. I also know some people who are equally bad or worse who managed to find people to start a company. So what I want to know is how viagra with no prescription in britain they did it.

bento

End of Bento Week 2

I haven’t posted many bento photos this week because I only packed lunches two days, and canada viagra for sale didn’t have time to photograph today’s.

I picked up a Benriner Japanese Mandolin Slicer at a Japanese market near here. It’s great for slicing veggies, but the blades are wicked sharp and the hand guard is kind of a joke. I’m a little scared to use it. I’ll probably pick up a cut resistant glove to wear when trying to slice harder veggies on the thing. It does however make nice even thickness slices of whatever you want.

I also picked up a few stacking bento boxes, a green one for me and a black one for Chris. I thought about getting him a Hello Kitty lunch box but decided against it.

This whole bento experiment has been really good for my fresh fruit and veggie consumption. Because they add color and can be chopped into whatever size I need they’re great for filling holes between bigger items. It’s also a good way to use up leftover veggies, since you’re packing in small portions of a variety of things. Overall I’m really happy with the lunches, and it’s totally worth waking up earlier to prepare.


The Japanese supermarket also had a HUGE array of rice cookers. Huge. I’ve decided that I’m allowed to have a rice cooker once I find a good home for the bread machine I have but don’t use much. Rice cookers range from cheap to insanely priced robotic controlled monstrosities. I’m looking at a mid-range one with a timer so I can leave the rice soaking overnight and have it ready when I come down in the morning.

I’m sure Chris will be STOKED to have one more gadget in the kitchen. Yeah, right.