Thursday, October 9, 2008

WTB: want to build

My project list keeps getting longer and longer, and subscribing to excellent project blogs like Make and Evil Mad Scientist Labs doesn't help. Maybe one of these days...

Here are some things that just got added to the list.

Thursday, September 11, 2008

Unexpectedly vegan recipes

Don't get me wrong- I enjoy a side of bacon as much as the next omnivore. But since Ev's coming to visit, I decided to go looking for some tasty vegan recipes to make while she's here. I do like the vegan food: vegan donuts in Seattle, vegan Thai food in Seattle, vegan comfort food in Berkeley. In the process I discovered that some of my favorite recipes are, in fact, actually vegan.

Beer Bread (from Jane):
- 3 cups flour
- 1/4 - 1/2 cup sugar
- 3 tsp baking powder
- 1 tsp salt
- 12 oz beer

Mix dry ingredients well. Add beer and mix until thoroughly combined. Put into loaf pan and bake at 375 for 50 minutes - 1 hour.

Spinach coconut dal (serves 4):
- 1 and 1/2 cup red lentils
- 3 and 1/2 cups water
- 1/2 tsp salt
- 1/2 tsp turmeric
- 1/2 tsp chili powder
- 1 lb fresh spinach, chopped
- 2 tbsp olive oil
- 1 medium onion, chopped
- 1 tsp cumin
- 1 tsp mustard seeds
- 1 tsp garam masala
- 1/2 cup coconut milk

Boil the water and add salt, lentils, turmeric, chili powder, turn heat down to med/low. While the lentils are cooking, saute the onion in the olive oil, cumin, and mustard seeds until the onion is transparent. Add the onions and spices to the lentils, and then add the spinach to the lentils. Simmer lentils until soft, then add the garam masala and coconut milk. Serve.

Moroccan Stew (serves 4):
- 1/3 cup olive oil
- 1 medium onion, chopped
- 2-3 garlic cloves, minced or pressed
- 1 tsp ground cumin
- 1 tsp turmeric
- 1/2 tsp cinnamon
- 1/2 tsp cayenne
- 1/2 tsp paprika
- 1 tbsp freshly grated ginger
- 2 carrots, chopped
- 2 medium potatoes, chopped
- 1 medium eggplant, chopped
- 1 green bell pepper, sliced
- 2 small zucchini, chopped
- 2 large tomatoes, chopped
- 1 can garbanzo beans, with liquid

Saute onions in oil and add garlic and all spices, saute until onions are translucent. Add vegetables in order given above (carrots, then potatoes, etc) pausing to saute each for a few minutes before adding the next. Add garbanzo beans. Add water or veg stock if stew is dry. Simmer on low until all vegetables are tender. This recipe is quite flexible- add or remove vegetables, vary the amounts and it still ends up tasting pretty good.

Thursday, September 4, 2008

Adventures in start-up land: part 2

After 6 months at a startup building an eco-friendly database of product and company information, I have decided to move on, to another startup focusing on deployment and auto-scaling platforms for cloud computing systems. Part of my motivation is that the company moved offices in an unfortunate way for me, increasing my commute to 2-2.5 hours each way (which is rough but could be workable). But also, while an eco-friendly database and search engine is really cool, I've realized that it also falls under a very risky category of funding and possible business plans. Would a product like this really take off in a recession economy? And how will it make money? The answer to this last question (at least for most website startups) is usually "advertising," but user traffic is fickle, the switching cost for search engines is 0, and name-brand advertising companies have very specific and strict requirements for user demographics and traffic patterns. It's a noble goal, but perhaps too risky for me personally to justify the commute or relocation...

Also, I'm pretty excited about the cloud computing space. Last November Amazon launched the Elastic Compute Cloud, a pay-per-use linux server farm built on Amazon's existing, successful, massively scalable data center management infrastructure. Since then many startups have deployed onto EC2 (I personally deployed my previous startup onto it), and have seen drastic cost savings and flexibility compared to traditional hosted deployment models.

In the past, companies either had too much hardware or too little. If they needed to save money, they would purchase too little, and a sudden burst of unexpected traffic would take their site down, usually taking hours or days to recover from. The safe but costly alternative was to buy more hardware than you need, and let it sit idle most of the time, but utilize it when the traffic surge occurred. This was very expensive.

A good analogy for this problem is figuring out how many active cash registers to have at a store at any given time. If there are 20 people and 1 cash register at a store, the line to the cash register will take so long that people will leave without buying stuff, and the store won't make as much money. If you open up 4 more cash registers, then the lines get short enough that the people stick around and make their purchases, and the store makes more money. But if you have 5 cash registers open all the time when there aren't many people, this costs the store more without additional gain, so how do you know how many cash registers to keep open at any given time?

With a cloud computing system like EC2, you set up your production website architecture on the number of machines you need to handle your current load of traffic. For most startups this is the bare minimum needed to ensure redundancy and eliminate single points of failure. Then you set up monitoring to notify you when your traffic starts to spike up. When it does, you can automatically (or manually) scale out your application fleet to handle the traffic by booting more machine instances of your application server. When the traffic subsides, scale the fleet down by terminating the extra machine instances. In the EC2 model you only pay for what you use, so you only pay the high cost of running many machines for the time period in which you need them. The tricky part is how to automatically scale in an efficient way that minimizes cost, minimizes downtime, and adheres to your SLAs? That's where my new startup comes in. :)

Santa Cruz and elephant seals

Spent labor day weekend in Santa Cruz, a very mellow beach town filled with surfers and tourists. They have a boardwalk there that rivals Ocean City NJ in its novelty food stands and amusement part style midway. They had the boardwalk snack classics: funnel cake and garlic fries, as well as some more frightening fare like deep fried twinkies. Seriously- a whole stand dedicated to deep-friend twinkies.

The beach and boardwalk were ridiculously crowded, but the we found the beaches a few miles north of Santa Cruz to be more sparse and clean, and did some swimming and sunning there.

A few miles south of Santa Cruz is a beach park called Ano Nuevo, which is an elephant seal sanctuary this time of year. We took a hike down to the beach and did in fact see lots of elephant seals- they are the big gray lumps on the beach in the photo. They are huge- they can weigh up to 4000 pounds!

Tuesday, September 2, 2008

Also in Chile: rapa nui, theoretical penguins, cartoon irony

Easter Island is about 2000 miles off the western coast of Chile. Unfortunately we didn't get a chance to go there- it would have taken 4 days out of our 8 day trip, and another $1000 for tickets. But we did visit a museum about the island, where this Moai statue sits, in the shrubberies, guarding the residential streets of Vina del Mar. Unlike most museums (that don't want to scare children or disturb sensitive people) this one did not gloss over Easter Island's brutal history. Civil wars, colonialism, and mismanagement of ecological resources led to famine, death, and the near total destruction of the native people. So little of the culture from before the late 1800s European invasions was preserved that the Rapa Nui language from before that period remains undecifered.

Also in this very blunt museum was an installation describing, in great detail, the ritual of creating shrunken heads, with actual shrunken heads behind the glass! This was not a mystical process: the skin was removed from the human head, wrapped around a monkey skull, and dried until it shrunk to fit the smaller skull. Clever.

80% of the world's population of Humboldt penguins nest on a protected island off the coast of Chile, in a suburb of the town of Zapallar, a few hours north of Vina del Mar. I was very excited to go see the penguins, figuring it would probably be my only chance to ever see them in the wild. But unfortunately the penguin island was obscured by fog. Can you find the penguins in this photo?






In Valparaiso we found the Mirador de Lukas House Museum, a collection of the cartoons and journalism of Renzo Pecchenino ("Lukas"), a political cartoonist in the 1960s.

Thursday, July 31, 2008

Hey! Ho! Yo voy!

In late June we went to Chile! We spent 2 days in Santiago, the capital, a day in Colina (a little mountain town north of Santiago) and 3 days in Vina del Mar and Valparaiso on the coast. Santiago is huge! 7 million people, roaring traffic, bustling streets, hoards of goth teenagers stylishly ignoring you. On the first day, we wandered around the city, and discovered a Ramones poster in Spanish with the tag line "Hey! Ho! Yo voy!" which literally means "Hey! Ho! I go." Hmm... I guess "yo voy" sounds catchier than "vamonos"? Not that I remotely mastered enough Spanish to get by before I went. I really meant to- bought Rosetta Stone and everything, but work was so busy right before I left (the whole 16 hour a day startup crunch-mode business), I didn't find the time. So I did a lot of deciphering of street signs and menus. Pointing at things on menus and smiling politely worked out quite well. I discovered lots of interesting food. I think my favorite dish was pastel de choclo- a corn pie. Found a recipe for it after getting home and tried to make it myself, and it came out quite well (I used double the amount of corn specified in the recipe though). But navigation was quite difficult. I learned that when lost, go to hotels to ask directions- usually there's someone behind the desk who speaks your language. Asking, say, goth teenagers or nuns on the street does not work so well. Generally the people we approached seemed to be afraid of us strange english speaking gringos.

My favorite city was Valparaiso- a city of artists on the coast. The buildings are all painted with fantastic murals, and the streets are checkered with artisan shops. Wild friendly dogs roam the streets. We stumbled upon lots of interesting cafes and art galleries, and ate more than our fair share of empanadas (note to self: never order more than one empanada ever). Noticed that everywhere we went the sound of american 80s music filled the room. I swear I heard Madonna in elevators, hipster cafes, grocery stores, art galleries, and restaurants. The Chileans love 80s music. We went out dancing one night, and every single song played was American 80s music. Very few Chileans we met spoke fluent English, but all the kids in the club knew all the words to Like A Virgin. The seminal 80s music moment was when we were eating lunch at a cafe, served by a few tough-looking tattooed guys, and a Mariah Carey MTV special came on the tv. The tough waiter teared up, and sang along to every song.

Saturday, June 21, 2008

the perils of dirty, hetereogenous data sources

The company I work for is building a gi-normous database of everything you ever wanted to know about any product, company, or ingredient you've ever heard of. As it turns out, getting lots of data isn't hard, but combining it all together is pretty hard, and making sense of it is very hard. There's a lot of data in the world, no perfect universal product identifier (UPC isn't specific enough for our purposes, and most data sets we get don't include it), and the data is very dirty. In the process of building smarter data ingestion systems and massaging the data, we often come across some hilarious bits of it.

Some things that have turned up on ingredient lists (aside from the usual cryptic 12 syllable chemicals):
  • dust mite
  • panther fur (in a bath soap, of course)
  • air
  • tobacco dust
  • bone oil
  • thistle
  • DNA
  • "explosives" (no further elaboration)
  • care (but, surprisingly, not love)
There are also some hilarious mispellings, often of "deionized." My favorite was "demonized water." You gotta watch out for that stuff.

And there are also the hazard lists. Hilarity ensues when bored government workers have to make official lists. Workplace hazards include "shift work that involves circadian disruption" and "adding machines."

Tuesday, May 13, 2008

There is a cereal and milk bistro in Berkeley!

There is a new 'Cereal and Milk Bistro' near Telegraph and Channing in Berkeley, and while I was skeptical about the concept after just seeing the Coming Soon signs, after a taste test I must say I am impressed.

The bistro carries a full range of cereals, from Fruit Loops to Muesli, and in your bowl you can get two scoops of cereals (preferably mixing healthy and junky). Next comes toppings- these also range elaborately from healthy to junky, from fruit to chocolate chips. They had more toppings than your average frozen yogurt joint.


And finally, you get your choice of milks- skim, 2%, whole (no chocolate yet, but I hear it's often requested). Your bowl thoughtfully comes with a straw, so you can sip up all the remaining milk when you finish your cereal.

Overall, it's a fun idea, though definitely one that will be dependent on business from all the nearby college carb-o-tarians.

Recycling

All I can say is, my pepper plants are happy. Right to left we have some habanero peppers, a tomatilla, and a poblano pepper. Putting the California sunshine to work.

Wednesday, April 23, 2008

Graffiti in Berkeley














I've noticed some interesting graffiti on the Berkeley streets lately, mostly spray-stenciled, and generally on the uplifting side.
















Here's an anonymous love note. Much sweeter than craigslist 'i saw u.'




















Plant a tree. I also saw "The trees are our brothers" carved into wet cement. A friend of mine claims he always looks up at the trees when he sees police officers (or "peace officers" as they are officially called in the DMV handbook) because of those persistent tree sit protesters.

Thursday, April 17, 2008

April is album showing off month

February was album writing month, March was being a workaholic at the new job month, and now April is album showing off month! The RPM challenge posted all the albums they received and made an online streaming jukebox out of them! Check out our album here, and all 793 albums here. Hooray for random yahoos making music in their garages!

Thursday, April 10, 2008

Big-O for business

Most software engineers have found themselves in situations where they are asked by non-software people why some fundamental engineering principle is true. First you bug your eyes out and balk, then resist the urge to say "It's obvious!" and storm away, and then ponder that if it really is indeed so obvious, shouldn't the explanation also be obvious? I found myself in two such situations this week, and in both cases was able to use Big-O algorithm analysis (otherwise known as basic complexity theory) to explain my point. Which was also an excellent excuse to draw graphs on the whiteboard.

1. Why write unit tests?
Who likes to manually test software by hand? Not me. It's boring, repetitive, and time-consuming. There's a time and place for repetitive, time-consuming tasks and that's called knitting. So, how do you minimize your manual testing burden? By writing unit and functional tests. Why is it such a time saver? If you didn't write tests, then every time you changed a single piece of logic in your system, to be sure this change didn't cause any unintended side-effects, you'd have to go through and test the whole system. And of course most people don't have time to do that, so they only test everything before each release. So, if you make n changes or improvements to your system, and you manually test everything before every release, this is order-n work to make all your changes, then another order-n work before each release to test the system. In total you have to do n*num_releases testing work. So the amount of testing you need to do scales, at minimum, linearly with the number of changes you make to your system. If you were very virtuous (which you never have time for) and tested the whole system after every change you made, then the cost of each change would be n-squared work instead of n.

If you write a test for each piece of functionality you create (preferably before you create it), you only need to simply run all your automated tests after you make a change to see if you broke something. So let's say the cost of running the existing tests is negligible, and writing a test is about as much work as writing the functionality (though usually it's much easier). So if you make n changes to your system, for each change you write a test. Let's say this is 2*n total work for n changes made. You need to do no additional manual testing when you make a new change, you just run your existing tests. And before each release, you can just run all your existing tests. So the total amount of work you need to do is a constant factor of the amount of functionality you build: 2*n, and the amount of manual testing before each release is some constant. This scales way better than doing order-n manual testing work before each release (or not doing enough testing and having buggy releases). It's a slightly bigger initial investment, but pays off with less future maintenance work.

2. Why worry about limiting dependencies between people or teams? (aka, why you should leave the software engineers alone so they can just write code)

Let's say you have n entities in your corporate system. In a small company these entities may be individual people, and in a large company these entities may be groups or teams. Entities can have dependencies on each other: like engineers getting approval from management before releasing a new feature, or a software group needing a framework group to fix a bug in a framework before they can fix their performance problems. Let's think about these entities as nodes in a graph, and dependencies as edges between nodes.

A node with many edges is a process bottleneck. An example is a person who must personally oversee all changes before they are released on a website, or a framework that all projects depend on, or a scarce resource (like an Oracle DBA). If you don't limit dependencies in this graph, worst case you have a fully connected graph, which has order n-squared edges. Dependencies translate into added work, and lost time waiting on a blocking task or person. So let's say the number of edges in the graph correspond to the amount of work that needs to get done. If you don't explicitly limit dependencies between entities, you can easily get into situations where there are order-n entities (workers) and order-n-squared edges (work to be done). Not only is this more work than your workers can possibly accomplish even if they work twice as hard (n squared is still > 2n), at every time step the gap between work created and work finished grows bigger. This is bad- it means the farther you get into a project the more you get behind schedule. This can be avoided by explicitly limiting dependencies to a constant number of edges per node. This will ensure that you have order-n edges in your graph of n nodes, and your organization isn't creating more work for itself than it can handle. Ways to do this? Let people report to only one manager instead of several, don't page the whole company over a network issue- just page the networking team, let the software engineers just write code instead of additionally acting as tech support and project managers and deployment engineers all at the same time.

Saturday, March 22, 2008

evaluating the new hotness, Ruby On Rails

I've been getting up to speed in Ruby on Rails over the last 3 weeks, and I'm definitely impressed by the developer productivity you get with this framework. You can literally get a working data-driven website up in under 20 minutes. You can also slap a new front-end or look and feel onto an existing website in about 20 minutes. I like Rails' "convention over configuration" philosphy, having spent countless annoying hours with other web application frameworks and ORM layers tracking complicated bugs down to incorrect configuration. Ruby is easy to learn, and yields very clean, readable code. I'm not sure yet how excited I am about dynamic typing, but you can do some really clever polymorphic tricks. Overall, I like that RoR makes a handful of good software development practices the path of least resistance: test driven development, MVC component separation, etc.

If you're interested in learning RoR, I highly recommend Agile Web Development with Rails.

The biggest criticism I've heard about RoR is that it's slow. It is a bit slow, but it's also easy to make your code faster. We were recently optimizing a backfill process, and found that we could get a 10x speedup by replacing ActiveRecord.find with ActiveRecord.find_by_sql, forcing rails to not sanitize sql strings, and preloading queries that were called often but always yielded the same result. We used ruby-prof to figure this out.

My biggest criticism so far is the lack of a great IDE with RoR support. Lots of RoR people love TextMate, but it doesn't come with a debugger. I can only imagine living in a world without debuggers if I only ever worked on code that I wrote. You don't usually get this luxury in enterprise software. Ruby-debug works great, but by itself is a command line app that spits context to a console window, which is a bit awkward; and every time you start it up you have to setup your breakpoints again, which is time-consuming. I've heard you can hook it into emacs, but haven't tried that yet.

Eclipse has the Aptana plugin, but after using it for a few days I found it quite clunky. Auto-complete is really slow and error prone, search is awkward and not inline, navigation is awkward and really slow (this is more Eclipse's fault than Aptana's though), and most importantly the debugger is so slow that it takes 4 minutes to start itself up, and half the time fails to start up at all. This is unusable.

Next I tried Netbeans, and this is my favorite so far- it's fast and easy to navigate within, the search is inline, autocomplete is fast and actually works, the default shortcuts are intuitive, and the debugger actually works most of the time. Specifically, it works great for debugging the application and the unit tests, but gets confused and hangs on functional tests. I'll be curious to see if this is improved in Netbeans 6.1.

lots of beaches round here

A few weekends ago we went to Ocean Beach, in west San Francisco. The day was perfect, thousands of people were out, and you could see for miles. We found a few interesting shells, waded in the very cold water, and discovered that sand makes a pretty good chalkboard replacement. Here is Jason reciting his favorite proof of why the square root of 2 is an irrational number.





The sunset was beautiful, and the layers of far away clouds made the sun appear huge as it began setting, and morph into odd hourglass shapes as it finished setting. As we walked back up the beach to our car we passed a wedding party lining up on the beach.

Tuesday, March 4, 2008

My first day at the new job

I arrived at work yesterday morning, to find on my desk:
  • a vase of fresh flowers
  • a shiny new MacBook pro, with a set up and fully functioning development environment
  • a 30 inch computer monitor
  • business cards with my name on them
  • a gift certificate for dinner for two at Chez Panisse
And, last but not least, because my new job title is Web Ninja, they had also gotten me a set of nunchucks. This is going to be an awesome job.

Friday, February 29, 2008

February is album writing month

This month my band Tab Completion (which is a computer *and* guitar pun!) decided to do the RPM challenge, and write, record, mix, and press an entire album in the very short month of February. We did it! I'm so proud of us. We wrote ten songs and now we have a CD to show off! I'm currently on vacation (the new job doesn't start until next week), so, having convenient amounts of free time, I ended up doing all of the recording, mixing, mastering, graphic design, and CD production. It was fun but ended up being quite a lot of work, especially the graphic design part. I also learned a lot about recording in the process, and after tuning my ear to adjusting levels now have started wanting to adjust the EQ levels of everything I hear. Hey- turn the treble down on that cat!

Here is our beautiful album:





























So proud. In a month or so the RPM website will have built a streaming jukebox out of all the CDs they received, and anyone will be able to hear the whole album. What kind of music do we play? That's kind of hard to say. After a lengthy discussion we compromised on "garage folk jazz" but I'd say it's basically indie-pop. I'm happy because I get to play a lot of vibraphone and accordion on the album.

Monday, February 25, 2008

Urban Camouflage

Dutch artist Desiree Palmen creates elaborately painted urban camouflage. Pretty awesome.

Friday, February 15, 2008

Another economic solution to that social problem

Well, I've donated about $150 to the ACLU over the last few weeks as part of my economic protest, and while I feel happy about giving myself an excuse to donate money to charities doing great work, I decided to get another job. And not just for these reasons in that other post. When I decided to go work for a small company, I was hoping to find an agile, fast-paced environment, unhindered by big company process and legacy code. The medical software company was not that. If anything, it had more legacy code than Amazon, and didn't strive for innovation because its business was in maintenance mode. I need to have a hard job, where I can constantly push myself to learn more. The time for coasting is not now.

Serendipitously, I found a job at a startup company that is in its early stages and is trying to change the world by building tools to empower consumers to make more conscientious buying decisions by providing them with easily accessible and complete product and company information. This is effectively another economic solution to the larger-scale, more important social problem of unsustainable consumption. So I'm really excited about this opportunity- it's a perfect match for my skills, interests, and ambitions. And ultimately I'm glad I took the medical software job and got disillusioned with it at exactly the same time that this other company got started. The timing couldn't have been better.

My new job title will be Web Ninja. Multicast packet storm pirates better watch out. And I'll be using Ruby on Rails, and getting to work on really interesting, hard data integration and personalization problems.

So I gave my 2 weeks notice yesterday. This morning when I came into work, my boss told me that even though I didn't have vacation built up, she'd prefer to just pay me out for the two weeks and let me go home now since my work was already wrapped up. Pretty sweet. So I'm relaxing on the couch today, catching up on the 57000 blogs I subscribe to. And maybe I'll even play with Ruby a little.

Monday, February 11, 2008

American Society for Velociraptor Attack Prevention

Today my favorite stumbleupon is the American Society for Velociraptor Attack Prevention. It's pretty funny, and also an excellent get rich quick scheme. Piggybacking on the popularity of XKCD and it's references to velociraptors (substitute, velociraptors, goto), the author only had to create (or lift from wikipedia) about 5 paragraphs of relatively funny material, and probably gets enough click traffic through the ads on the site to make a bit of profit. There's even a nice box where you can enter your email address (and probably get it sold to spammers).

Sunday, February 10, 2008

Stumbleupon is teh awesome

On the suggestion of a coworker who is my new Aggregator of Internet Arcana (sorry Chris), I finally checked out StumbleUpon, a meta site that lets you list topics you are interested in, then suggests websites to you. You can refine the suggestions incrementally by rating any sites you view. You have to download a browser toolbar for that part. I assume it also aggregates all the feedback it gets from all its users to make its recommendations to me smarter.

My motivation was to discover new internet cartoons. I'm a faithful reader of Natalie Dee, Married to the Sea, and XKCD. And when I run out of those I will begrudgingly read more mainstream cartoons like dilbert. Icanhascheezburger also seems to fit my short attention span web humor need. But these heroic cartoonists have limited energy, and can only put out a comic a day. Even the distributed cat picture taggers can't keep it up over the weekend. I need more cartoons in my life.

So I downloaded StumbleUpon's toolbar and checked a few of the 'interest' boxes: Activism, Books, Irony, Counterculture, Crafts, Investing, Music, etc. Here's what the first few clicks turned up:
4/4 awesomes. I'd say Stumbleupon rocks.

One thing that is interesting is the percentage of spam websites that appear in your 'stumbles'- it seems to be about 10%. I know there are lots of spam websites out there trying to shore up their ad click-through revenue and sneak up the google search results pages, but 10% seems high. Also interesting is that it sometimes takes me a click or two to realize the website is spam- the index of the site will look totally valid and believeable but when you click through to pages the site claims to be indexing you see ads. And not surprisingly the spam websites are a whole lot more readable than many of the mom-and-pop personal webpages.

No new fabulous nerd cartoons yet, but I'll keep stumbling.

Monday, February 4, 2008

A charity list

After doing a bit of research on charities last week, and soliciting suggestions form friends, here's a charity list. It's not complete though, I'm still looking for a good charity that helps the poor with healthcare costs. Anyone want to start one?
  • Planned Parenthood of America
  • NARAL
  • ACLU
  • Americans United for the Separation of Church and State
  • Amnesty International
  • Sierra Club
  • Nature Conservancy
  • Greenpeace
  • Human Rights Campaign
  • PFLAG
  • kiva.org
  • Doctors Without Borders
  • Donors Choose
  • Heifer International
Also, here is a link to the Better Business Bureau's charity review website, which has information on what % of your donation will actually make it to the cause, how much administrative overhead there is, what the charity pays it's manager, etc.

Monday, January 28, 2008

An economic solution to a social problem

I work with a person who often goes on inappropriate political rants at work, on a variety of topics, like how "Illegal immigrants are clogging up our emergency rooms and driving up the cost of healthcare!" as well as the perils of socialized healthcare, how our country is being "invaded by outsiders", and (in a confusing attempt at two-wrongs-make-a-right sexism): how women are superior to men. It's all strikingly offensive. I don't even want to get into all the reasons why I disagree. In particular the disparaging comments about "outsiders" are cruel because half the company is on an H1B Visa. And these comments are hypocritical because all of these people on H1B Visas are underpaid and overworked. This person threatens to fire and "send them back where they belong" if they complain.

At Amazon, bringing up any of these topics or even disclosing an employee's visa status was a "fire-able offense". Overall Amazon was very progressive about workplace environment issues. There was an official definition of "hostile workplace environment" which included talking about religion, politics, race, sex, visa status, etc at work. Unfortunately, there's no such concept here, and no HR department to help mediate. Several times I've tried talking to this person about how she's affecting the workplace environment, but to no avail. She doesn't think she's doing anything wrong.

So, here's what I'm going to do to try to help, in some metaphysical way. Every time she goes on an inappropriate rant, I'm going to donate money to a charity that helps the group of people her rant oppresses. So every time she rants about illegal immigrants driving up the cost of health care, I'm going to donate money to a charity that provides health care services for the poor in areas known to have high concentrations of illegal immigrants. Every time she rants about democrats, I'm going to donate to the democratic party. Every time she makes a racist or sexist comment, I'm going to donate to the ACLU. I'm thinking $25/rant will be a good start.

I have a few charities in mind to start with, but if anyone has any suggestions or charities they particularly like, please post them in the blog comments.

Thursday, January 24, 2008

Real life steganography!

A Burmese poet uses steganography to embed a political message within a poem! But, not provably secure steganography, so unfortunately he was caught.

Tuesday, January 22, 2008

Computing the volume of a cat

Have you ever wondered how to compute the volume of a cat? Of course you have. Especially if you live in Seattle near the Capitol Hill branch of Twice Sold Tales with the 6+ cats, numerous kitty trees, and cat runs on top of the bookshelves. Otherwise known as the home of world's largest (and friendliest) cow-patterned cat. Anyway, here's a guide from the folks at EvilMadScientistLabs.

Thursday, January 10, 2008

Business 101

Today I attended (and helped lead) a 9-hour meeting with a client my company is building a portal for. Earlier this week my boss told me "Oh by the way, this client has been paying your salary. Even though I've had you working on other projects for the last 3 months, you need to make it seem like you've been working on their project for the last 3 months because I've been billing your hours directly to them."

First reaction: freaking out. This is unethical! Why didn't they tell me this? How can I possibly slap together a demo in a week that looks like 3 months of work? I'm doomed! Then I talked to my dad who laughed and said "This is business. This kind of stuff happens all the time. You should feel lucky that you were surprised." I confronted my boss about this, who said "Sorry, but the other project needed to get done too. I'll try not to do this again. In the meantime, I don't care how much overtime you need to put in to make this a good demo."

So motivating. But we made a good demo. Helped by the fact that MyGeneration is a great ORM layer, and ASP.NET has some pretty quick and easy HTML WYSISYG tools.

When I walked into the meeting this morning at first I was a little afraid. Would they see through us? Would anyone ask me explicitly how long I've been working on this project? How could I answer that question without violating my ethics? But then as we were implementing the "meet and greet" item on the agenda, one of the doctors asked if anyone knew how to share Visio files with people who didn't have Visio installed. I replied "Just export the Visio file as an image." He replied, "Export? Image?" The group was not so computer-savvy.

They loved the demo. It seemed like half of them didn't quite know what they were looking at (I had to explain what a portal was), but the other half were happy. They seemed less focused on understanding the demo and more focused on arguing with each other. I established lots of nerd cred by telling them some "aw shucks I'm such a nerd" stories from college, briefly describing the Amazon.com website architecture in words they wouldn't understand but would be impressed by, and making them feel smart for asking questions.

Overall, the meeting went really well. About half the time was spent getting consensus from them on what exactly they wanted. They had lots of ideas and anecdotes, but no clear plan. And now we have some sort of a plan. And somehow, I inadvertently convinced them to use us and not some other competing software company for one component of the project, a decision which more than justifies my salary for the year. Yay.

Were ethics violated? Turns out these folks are used to throwing money around and getting no results. They complained of giving more than 100K to the previously mentioned competing company, and getting nothing from them in return. And they've apparently been paying my company for years for nothing, so they were really happy to actually see something built. I'm sure it must be hard to try to build and run a software project knowing nothing about software, but still it strikes me as inefficient to throw money around so easily and not know how to get results from it.

I've also learned some things about doctors.

1. Doctors are like hashtables: they contain a vast amount of quickly accessible information, with no deterministic sorting or organizing scheme.

2. Doctors like to expound. It is useful to have bossy secretaries who cut them off and keep them on task.

3. Doctors like to argue with each other over minor, arbitrary points.

4. Doctors really really like drop-down boxes. Showing them drop-down boxes on a web form for data entry they had to repeatedly write out by hand makes them overjoyed. Who knew?

Sunday, January 6, 2008

A Christmas Message From Yoko Ono

I opened up the NYT this morning to find a full page ad with two words on it: IMAGINE PEACE, and a URL at the bottom. Turns out, this was Yoko Ono's Christmas message, and Yoko Ono knows about youtube. Also, apparently she helped build an Imagine Peace Tower in Iceland,
which was unfortunately not complete yet when I visited last year.

This is a funny coincidence because just this morning I was listening to Beatles Christmas Message records from '63-'69 on youtube. In '63 they are goodie-goodie cheeseballs, but they get progressively more experimental around '66, and in '69 John and Yoko have cut the others out of the process and went solo (and weird) on the Christmas Message.

The bees! (and distributed systems)

Bees inspire more efficient webserver design. The basic idea is that most servers are built for “normal” conditions, and generally don't behave well or recover properly when overwhelmed with traffic. In this article researchers developed a way for servers to communicate and spread demand across more workers, potentially discovering more workers along the way. They compare this communication to the bee waggle dance. Cute, but maybe not terribly efficient. You need to be careful with network bandwidth when allowing servers to communicate with each other. As I learned at Amazon, sending all intra-server communication to all possible listening servers maxes out your network bandwidth (in particular, your router tables) pretty quickly. Ask me about the multicast packet storms of '05 sometime.

Of course, you could simply use a load balancer to distribute your traffic evenly across many servers instead of letting the servers sort it out themselves. But this assumes you have divided the work to be done in your system into sets you can independently assign to separate server collections, and that within each server collection each server can be treated equally.

And if you're interested in distributed systems, you should read the split brain paper, by the goddess of distributed systems, Nancy Lynch.

Tuesday, January 1, 2008

New Year's Resolution: more cross country skiing, more salsa

Last night we went to a fantastic salsa new year's eve party with Marco and Lavinia and danced the night away. I didn't think I had the skills to dance in front of a group of mostly pro dancers, but it turns out I could handle Bachata: where (if you are the girl) you basically just keep a march step and follow the guy. But the real stars of the party were Marco and Lavinia- when they took the dance floor everyone stepped back and cheered them on.

Then today we went cross country skiing with Anne and Andrew at Echo Lake, near Lake Tahoe. It was incredibly beautiful and peaceful. We trekked around the backwoods for a while, then doubled around the ridge overlooking Tahoe Basin and ended up at Echo Lake, where Anne and Andrew went flying down the steep ravine leading to the lake 2 or 3 times (while I, exhausted by this point, just watched).

And here's a picture from hiking near the American river in Auburn, CA, which is about an hour east of Davis. It starts getting mountain-y again around there, as you hit the Sierras, which is a nice contrast to the mostly desert-y Davis area (I miss pine trees). I love hiking. Maybe I should quit my job and become a park ranger so I can spend the whole day outside.