Wednesday, February 20, 2013

Web servers for kids

My career in computers started when my mom told me she'd signed me up for a Geocities account and handed me a book on HTML. I was pissed at the time, mainly because she'd chosen my username (ktuite? who puts their real name in a handle?!) and my address (EnchantedForest/Glade/8531?) for me. She also mistyped the password twice so we spent a good many minutes figuring out why the password didn't work. But I got over it, and then I got really into it, and I may have peer-pressured a few friends into moving in on Geocities near me.

Naturally, I used Geocities to make a cat-picture-trading website called "Crystal Sun Cyber Cattery"

During the days of Crystal Sun Cyber Cattery, after reading the chapter on forms in the HTML book, I distinctly remember trying to make a form where you'd choose what kind of cat food bowl you wanted, what color, and the cat's name to put on the side. Then I'd draw it and send it to you! But I could not for the life of me find the elusive "cgi-bin" whatchajamajigger on Geocities, so I ended up just having the form email me and then manually parse out the dish type/color/name.

Another example of the shallow-interaction things I was able to make was this "what kind of batman are you?" quiz:

also known as Procrastination Batman...
You are a manifestation of my own stress, excessive amounts of homework and schoolwork, and a tendency i have to distract myself and waste precious time.
you may or may not be sleepy right now, but i most likely am... we should all just go to bed and wake up in a few days/weeks/years...
what a nice transparent teddy bear sitting atop your hip! and clouds and moons and stars...
oh how i want to take a nap right now...

It was awesome being able to dream up almost anything (that took the form of a not terribly interactive webpage) and share my creative endeavors (drawings, photos, stories, etc.) on the interwebs.

It was less awesome that Geocities got severely hampered over time until its fairly timely death. First, they disabled remote hosting of images. Then, FTP stopped working and you could only upload 5 new files at a time with a terrible graphical interface.

Through a long and winding life path, I finally learned PHP, CSS and Javascript (and other non-web languages) in college and was like "AHH WHERE WERE YOU WHEN I WAS 10 or 15?!" Finally in grad school I get to make ridiculously complex websites and write my own webservers that trigger crazy-cool computation of whatever I want.

The problem, looking back, is that I didn't have a server or web hosting of my very own until my university provided it or I made friends with people who could hook me up. (Thanks, Misha and Phil! and Adam and Tom!) If I had had more powerful tools or simply known about more powerful tools, I would have made some crazy-awesome shit in the middle of the night on summer vacations during high school.

What I want

I want it to be way easier for a kid to make a real website, host it, and share it. Importantly, I want there to be a plethora of features, not a dearth. (Sorry, those words just came to me. I want lots of real features, not crummy broken fake FTP of late-Geocities.)

Someone could have also said: "This is how to take a linux computer and make it host your stuff for you." I guess we have EC2. Maybe we just need a written guide:
Geocities of the 21st century: How to relive the dream with Amazon's Web Services
(Afterthought: Community is important, too. How do you see what the people like you (age-wise or skill-wise) are making? How do you exchange tips and tricks?)


 Make sharable things

I want people (kids! grownups!) that are experimenting with technology to be able to make things that they can share with other people. In particular, things that are interactive... where one person crafts an experience for another person. I'm about to uncharacteristically hate on robots, but I was never drawn to Lego Mindstorms or such things because a) it would be a physical object that would be too hard to share and b) I couldn't think of interesting, useful, and/or creative tasks.

"I made a robot that you can drive with a flashlight!"  Meh.
"I made a robot that you can remote control through the internet to play with the cats when you're not home!" NOW we're talking... P.S. I really do want that to exist.

General platform vs. content-specific platform

Folks have realized that humans want to create and share artifacts with each other. So they've gone and made all these great sites for sharing art (deviant art), photos (flickr, instagram, whatever is hip these days), videos (youtube), kid-friendly games and art (scratch), flash games (kongregate and more), more general web apps (app engine)... each of these "portals" focuses on a specific type of content, and few are programming-related content.

I want to be able to successfully convince my non-programmer friends that they should try programming. Making a website (or Processing java applet) and putting it online somewhere seems like a great way to start. The amp it up and make it more stylish and interactive. Voila, now you know stuff! The problem is that the web/the world is so factioned now that I don't know where you'd go to actually do that. You can't make a webpage that has photos, videos, flash games, and forms all in one place; you have to put each piece of content on a separate site. And then it doesn't really add up to your programming/web and general creativity skills, it adds up to your specific video-making skills or your specific drawing skills.

I almost think that making an Android app is better, since you could make some cute, tiny, minimally-featured thing that was all yours, and you could share it with your friends via the .apk or in the market. Too bad Android apps are quite complicated. Ooh ooh, you can also make an Android app JUST WITH PROCESSING! I've seen that work pretty awesomely with the DawgBytes outreach program at UW, where a summer camp of middle school girls were running graphical Processing apps on their phones by Day 1 or 1.5.

Real, full-featured tools

I mentioned this before, how Geocities betrayed me by taking away features, and how there's so much that I've learned recently that existed (in some form) back in the day that I wish I'd known about back then. It's also related to the tailored, content-specific sharing websites in that they only support a handful of features. There's enough crap out there to make it "really easy for novices" to start doing something. But where should they go after that? I am all for very specific tracks and instructions and guides for getting started in something new and scary, but I don't see why the new environment has to be a crippled version of the real environment its imitating.

It's like being in a bubble; the people who are driven to explore will eventually find the edge of the bubble. Maybe they'll just get suck at the edge. Or Maybe they'll build something crazy up along the inner surface of the bubble. Or maybe if they're lucky and they know someone on the other side, they'll pop through to the outside world.

snow globe
Trapped in a bubble?! (Robert Couse-Baker on flickr)

Sunday, February 10, 2013

Stop Writing Bugs

Once upon a time, I was programming something and it wasn't doing what I wanted and I was turning into a ball of frustration. Adam's suggestion was to "Stop writing bugs!" So I stopped telling the computer to do things I didn't really want it to do, and I lived happily ever after. JUST KIDDING!

I don't recommend telling your girlfriend to simply stop writing bugs, but in this situation, I was like, "Huh. That's pretty philosophical and vague, but I'll give it a try." It worked, in that I got that code sorted out.
Anyway, two things:


You have control here. The bugs aren't coming from the computer or the outside world (except for the original computer bug); they're coming from the programmer.

Sometimes I have to slow down and try to be more thoughtful about what I'm programming. Frantic flailing about and guessing and testing hypotheses (especially multiple hypotheses at once) is where trouble comes from. I try to avoid this. And to notice if I'm flailing about and let myself stop and try a new approach. If I don't understand how something works, I (usually) test it out somewhere else or read about it more. Essentially, I should know what the code I'm writing will do.

Getting the truth out of the computer 

These are recent ideas from Adam expanding on the "stop writing bugs" philosophy. The computer will still do things you don't expect or don't understand. But it usually has a reason, and there are tools to find out those reasons.

I had a bad habit of writing PHP code with no debugging info available and no idea where the error logs were. Make some edit and suddenly the whole page is blank. I would put on my "not gonna write bugs!" hat and try to be careful, but I was wasting my own time not just having the logs there to tell me when I was missing a semi-colon or something trivial.

There are lots of other tools for different situations. Core files and gdb are sort of my friends these days. Chrome's developer tools. The debugger version of Flash. Adam claims packet sniffers are great, but also under-appreciated, and wants me to mention strace as well. 

In conclusion, learn how to make your computer divulge its secrets.

Monday, February 4, 2013

Startup Weekend UW

One week has elapsed since Startup Weekend! Here's a picture of my awesome team:

Team Dookie! (Name explained below...)
We developed a crowdsourced public health service called PoorMe. The explanation is this: Public health data is really valuable, but hard to come by. You can help by sharing your symptoms when you're sick. There's more to it than that, though. In addition to logging your symptoms (which only show up anonymously) you put together a list of ways your friends could help you out while you're sick, by recommending something to watch on Netflix or bringing you some soup. The hope is that by creating a "community of co-misery" and a space for altruism and taking care of your friends, we'll make a website that people are more likely to use to report their illnesses. Then we collect more timely public health data than just a) sick people who make it to hospitals or b) what Google can infer from people performing flu-related searches.

PoorMe's website and heatmap of symptoms in Seattle

If you think this is a nice idea, you'll be happy to know that we're still working on it!

Format of Startup Weekend UW

There were about 125 people in attendance. This event was held at one of the new dorms of University and Washington, so a lot of the people were students, undergrads especially. I suspect other Startup Weekends have an older crowd and non-zero alcohol.

Initial pitches
On Friday evening, anyone who wanted to give a pitch got 60 seconds to do so. There were something like 56 ideas pitched, including me deciding at the last minute to pitch this Collaborative Photography idea. Then we got stickers and went around chatting people up and voting on our favorite pitches via sticker. About 20 pitches got enough stickers to advance to the next phase (I got 3 stickers and the minimum was about 4) and then we formed teams around those ideas and got to work. By Sunday afternoon, there were 16 final presentations which were related but usually not exactly the same as the original pitches.

Pitch pruning

What I was hoping to get out of it

A friend had described Startup Weekend as an awesome experience for her, so I wanted to try it out. I'm also going to Crowdcamp in a few weeks, which will be another weekend-long hackathon type event and I wanted to practice being productive in a brand new team for a weekend. I also wanted to use the experience to get out of my comfort zone (is start-up starting right for me?) and possibly figure out what the business side of startups is all about.

I succeeded at the extrovert-boundary-pushing, idea-pitching bit.

I had a great time, too! I had a lot of fun with my group, going out and seeking customer validation and learning enough Django to be useful and making fancy things with Google maps.


Rants about money

I feel as confused by "business" as before. Academia, or at least non-profit land and doing things for the common good makes more sense to me. My distorted view of money is that I'd rather pay for the opportunity to make things than to pay for something mostly useless made by someone else.

The project I gravitated towards was pitched by another grad student and is totally inline with things I believe, like getting the crowd to contribute useful data in a way that adds up. It should be funded with grants and be a non-profit and stuff, right?! My least favorite part of the weekend was the "mentors" asking us how we were going to make money and us coming up with awkward, orthogonal stories to do so. Some of those ideas, like one-click delivery of food and medicine are starting to sound okay, though, and people do seem to like them. But it's just a website. We shouldn't need that much money to make it go.

Two of the teams at the end had "business models" that I really rather liked. They seemed the most genuine to me, anyway. The teams were and which got other people to donate their $100 AWS credit (that was another sweet perk of attending!) to essentially fund those websites for a couple years until the joke and the AWS credit dies out. Also, both of these groups had smooth, hilarious presentations.

The presentation for Perfect Guy But... was hilarious.
The only other idea that I would personally consider paying to use was something called NomOn, which would deliver a random food item in a certain price range. "Are you ever too hungry to make a decision?" YES LIKE ALL THE TIME...

Poop and pivoting

Finally, story time about where Team Dookie came from! Also, another dirty word: pivoting!

The original pitch was called "Dookie Detective" and the idea was that people with stomach troubles could log their symptoms and where they'd eaten recently and together track down the source of various food-borne illnesses.

Unfortunately for us, when we went out and talked to people about such an app, they got kind of weirded out. People don't want to talk about poop, let alone log it on their phones. "If I'm spewing from both ends, I want to focus on getting better and not touch my phone," they said.

We may have also started asking people about tracking their poop on a daily basis and not too many people were keen on that either. One guy at the med center did exclaim, however, that "poop is fascinating!"

Anyway, middle of Saturday, we switched focus to general kinds of sickness, like the flu and whatnot, and ways to make being sick suck less. That made things more comfortable for everyone. There are still plenty of references to poop, though, especially in the github repository where everything is in a folder called "poopreporter". And there's the name: PoorMe!

This post has gone on for too long now, but look, here's a project facing the poop-analyzing problem head on: In my heart, they earn the true "Dookie Detectives" title.