Where to find me at #LCA2012

I’m going to be pretty busy while in Melbourne and Ballarat for the next 10 days.

Here’s my itinerary:

There’s a rumor that Stewart Smith and I might do a Q&A about databases in the cloud. If it happens, it will involve lots of pessimism and swearing.

Drop me an note if you want to meet up! I’ll be in Ballarat until early Friday morning.

Then I fly back to LA to give a keynote at SCaLE that Sunday (blog post about that coming).

Packing list for LCA 2012

I leave in two days for Linux Conf AU, in Ballarat, Australia! This is my second LCA, and I’ve given talks internationally at least 10 times. For the past six months, I’ve used a short checklist to help make sure I don’t miss the important things (ticket, passport, underwear!).

Today, I took a little more time to prepare and share what I’m taking with me.

This is based on Tantek’s SXSW Packing List. I share this list under Creative Commons 3.0.

Caveats:

  • I generally do not wear jeans or slacks to conferences, and when I do, my pants do not have pockets. They’re bulky, uncomfortable on long flights and, frankly, don’t look as good as a skirt. So, I’ve adjusted some of the stuff in the list for that wardrobe choice.
  • I generally do not wear t-shirts to conferences I speak at.
  • I am going without a smartphone at the moment. My last one was stolen in a Vancouver, BC coffee shop in early December 2011. I’ve taken it as an opportunity to simplify, and so far, I feel better.

Night before

Lay out your outfit for the next day.

  • Underclothes (bra, underwear), socks and a tank-top slip. – I found these Dynamic nylon/spandex slips that go under sweaters and dresses. Super versatile, cheap ($16?) and look great. Having trouble finding them online, but Sloan sells them in Portland.
  • Dress – Something simple that will be comfortable on the plane, like this Urban Outfitters knit drape dress.
  • Leggings – black, probably bring two pair and again, these look great under a dress or sweater and can be taken off when you transition from 30F to 30C weather. I found the best value fleece leggings at Ipnosi.
  • Boots – black, zippered are my favorites. I’m going to another conference immediately after LCA back in the US, so I need something other than sandals for the trip.
  • Hooded jacket – I’m taking a green hooded duck canvas jacket with zippered pockets. Great with a dress, and nice, low-germ substitute for a germ-rich airline blanket during the 10+ hour flight.

Backpack

  • A backpack – I have a NorthFace Surge (have had three of these). They will often dip below $100 in certain colors. The laptop area is a little big for the Air, but overall, this is a solid, spacious pack. I’ve put 10 days worth of stuff for a conference and holiday in Japan with this pack. Has a nice bonus pocket in the bottom and useful double zipper on the front for stuffing random documents and quick access to a Kindle, a few inner pockets for separating tools, pills and etc..

Here’s all the stuff that goes into my backpack!

Essentials

  • Passport and Visa (if necessary) – And you might need a Visa where you’re going, so check before you leave! A visa for a 3-month trip to Australia is usually fast and easy.
  • Wallet – I bring ID, I try not to bring keys with me since my neighbors have keys and my husband picks me up and drops me off at the airport.
  • Ear plugs – Essential for dorm accommodations and getting stuck in airports.
  • Small, unlined notebook – I doodle, and leave notes for people. Nice if there are perforated pages in the back so that the binding of the book doesn’t fall apart after ripping out pages.
  • Pens and a pencil – Pencil is more durable in the rain (hail, Portland!)
  • Burts Beeswax Lip Balm – Planes and hotels are so dry!
  • Small bottle of lotion – Washing hands and filtered air ends up leaving my face and hands chapped.
  • Small Camera – I have a Canon Elph. Bring an extra SD card in case your existing one goes corrupt!
  • e-reader – I have a Kindle, but any e-reading device will do. I’m bringing Liespotting: Proven Techniques to Detect Deception as my research project for the flights.
  • Book – I’m also bringing a The Graveyard Book for taxi-ing and lift-off. A thick newspaper might also work here.
  • US-based Phone – I currently have an LG-VX5600 with no data plan on Verizon. I pay $10/mo on a family plan that has something like 300 texts and supports at least 300 minutes per person.
  • Laptop – I’ve got a 13″ Air. Loving it so far.
  • Music storage device – maybe an iPod/iTouch.
  • A paper envelope – for storing receipts and stray bits of paper with notes.
  • Ziplog bags – for liquids getting through the airport, packing away nicknacks, temporary storage for food, an easy water cup and dealing with anything that might explode in transit.
  • Handmade bags and enclosures for tech gadgets – I made two pouches to hold cables, devices and power converters. I hate having lots of stray items rolling around in bags. This helps me not lose things and maintain a little more order. Having a sewing machine makes this easy – I made two items last night for the trip! :)

Secondary contents

  • Ocular backup – I talked my eye doctor into giving me a set of disposable contacts for last-minute scuba dives or impromptu 2-6am clubbing where glasses would just be silly. I also always bring a spare pair of glasses and my prescription.
  • Unruled pad of paper – For taking notes in sessions and bigger sketching
  • Energy bars – two or three for the plane. I prefer Clif bars and Lara bars. Builder bars (20g of protein!) are good if you’re going to have a series of breakfasts that are all carbs.
  • Peppermint gum – coffee, carbs == bad breath
  • Hat – Good for runs in hot, sunny weather, or instant camouflage in crowded rooms.
  • Anker Astro2 8400mAh External Battery – Includes a flashlight. Great for charging any of your devices and making friends.
  • John’s Phone – a simple phone that can be used most anywhere. Doesn’t support texting, which may be an issue. :) It’s a quad-band phone that supports 2G / GSM 850-900-1800-1900 Mhz. The only things it *doesn’t* support are pure 3G and CDMA networks. My plan is to get a Telstra SIM at the airport when I arrive. Suggestions welcome.
  • Ethernet cable – the dorm rooms at LCA in ballarat don’t have wireless.
  • earbud headphones
  • Small laptop/shoulder bag – A tiny bag to just carry your laptop. Much more convenient in the evenings and brunches.
  • Universal power adapter – I’ve used this particular model in five countries. I can’t say that it’s my favorite – if I had thought about it earlier, I would have gotten an AU power converter plug a couple weeks ago!
  • Sandals – something to change into after landing in warm weather!

Carry-on bag

I use an eBags Motherlode eTech Mini. I’ve had three of them, and the worst part is eventually the zipper dies. They have a lifetime warranty policy, but I travel enough that I’ve just bought a new bag rather than wait for a repair. But I’ll be testing that next month when I’m home for a while. :)

For the carry-on

  • Empty Water bottle + carabiner – so important when you’re in dry, air conditioned climate for weeks.
  • Energy bars – I take about 2 per day of the trip
  • Stain remover – Great suggestion from Tantek, and essential when you’re on the road perpetually.
  • Woolight liquid detergent – great for hand-washables and dry-clean-only dresses. And way cheaper than $200 to get five days of clothes cleaned in a hotel laundry.
  • Sunblock and swimsuit – Always bring a suit regardless of the weather. Nice bottom layer in a pinch.
  • Fleece pants – excellent for sleeping and laundry day while travelling.
  • Pumas – pair of walking/running shoes for any occasion.
  • 6 pairs underwear, socks – and however many bras are appropriate
  • Workout gear – depends on your body type, but I bring 2 sport-bras, short fast-drying yoga pants and a fast-drying technical top. Much easier to clean than cotton. In unfamiliar or cross-country terrain, I bring a separate pair of running shoes and a plastic bag to protect everything else from the dirt.
  • 2 dresses, 2 skirts, 1 pair pants, 4 tops, 1 sweater – enough outfits for three talks, a keynote and an evening out!
  • Lip gloss, lipstick and eyeshadow – I stick with a Shiseido slightly-sparkly lip gloss, MAC red lipstick for evenings and a black/white combo eye shadow. I use the black for eye liner and the white for accents.
  • Bathroom kit – includes: toothbrush, toothpaste, brush, shaver, nail clippers, face moisturizer, deodorant, hair product, vitamin C, advil and a multi-vitamin.

Tech pre-work

  • Set up a perma-logged in IRC session for yourself. I use irssi in a screen session on a cloud-hosted virtual machine.
  • Set up bitlbee to login to your IM in the same session. This is awesome for people who don’t use IRC leaving you notes while you’re offline.
  • Check out the wiki for any events shaping up and add those to your calendar or TripIt plans.

Print your boarding pass

24 hours before your flight, be sure to:

  • Log on to your airline’s website
  • check-in online
  • print your boarding pass
  • put it in your backpack

Night before

  • Collect devices and chargers: phone, Kindle, laptop, usb power supply. Maybe also tablet. Pack spare batteries in checked luggage.
  • Confirm in wallet: enough US cash for two meals, credit card, debit card, identification. If you have status on an airline, bring the card for cutting in line.
  • Confirm how you’re getting to the airport, and the time you need to be there.
  • Confirm how you’re getting from the destination airport to your hotel or first stop.

Morning of

  • Shower and put on clothes laid out the night before
  • Put: laptop, kindle, phone, notebook, keys, any reading material, wallet and IDs in carry on. Include:
    • power cable(s) and supply(s),
    • video adapter(s) connected to your external monitors
  • Arrive at airport 90 minutes early
  • Join the #lca.conf.au IRC channel

Have a great flight!

Landing

  • Pick up a SIM for your phone – for Melbourne, that’s at the nearest Telstra store, and there’s one in the airport.
  • Take public transit into town – There’s almost always a bus or train that will take you into the downtown of a major city. Melbourne has a skybus that leaves every 10 minutes from the terminal right into downtown!

And your adventure begins! :)

Support the Ada Initiative

I support the Ada Initiative because biology doesn’t explain: why there aren’t more women in computer science, why I don’t have more women colleagues who hack on databases, or why we don’t have more women contributing to open source projects.

You can support the Ada Initiative, too.

I wrote a few years ago about how I thought we might best get more women involved. Four years later, my tl;dr version is: make friends with women. Imagine if every male developer could name 10 women that they considered friends among their colleagues. People they trusted, hacked with and built new companies with.

But grassroots efforts alone can’t solve the lack of women’s involvement.

My story of involvement with open source and computing starts with friends who shared the fun with me in college. They invited me to Marathon parties, late night hacking sessions with new processors, pranking coworkers whose system images weren’t quite as secure as they’d advertised…

I love free and open source culture, IT security culture and all the people that I’ve met over the past 13 years. My life is so incredibly enriched and joyful as a result of the people who share what they learn with me.

Despite my love, there’s trouble in paradise. We could be better. And one thing I wish for is more women in my open source communities.

Over the years, I’ve been part of efforts to increase the number of women involved in the projects I’ve founded – Open Source Bridge (more than 50% managed by women, >30% speakers women), Legion of Tech (1/3 of the original board members were women), and Code-N-Splode (all women’s programming and speaker development group).

Now, I’m an advisor to the Ada Initiative. I’ve watched over the last year as Mary and Val have worked to focus their mission and identify exactly what they think will encourage women. They have to balance their experiences and the resistance to cultural change endemic to businesses, organizations and the loose organizations around open source.

It’s fucking hard work. And they’re doing a great job.

Ada Initiative is the organization I wish would have existed 13 years ago. It’s the voice of experience and a catalyst for change that we need inside our communities. It’s a place for women to go for advice and help when things go right — or when things go wrong.

So, what can you do?

The Ada Initiative needs money. They need corporate support. They need individual contributions.

If you, or your company, can contribute and keep the Ada Initiative going for another year, contribute today. Mary and Val have done the hard work of getting started. Now they need your help to keep going.

Puppet Faces: defaults and ‘puppet node clean’

Puppet Faces are an extendable API for tricking out your Puppet instances. (“Faces” is just short for “Interfaces”.) Just a couple days ago I wrote about my survey of puppet + ec2 provisioning tools.

The problem I’m trying to solve, which I don’t feel like I’ve solved well, is how to give a type to a new system at bootstrap time, without using DNS. The type variable maps to a node manifest group, and determines the personality of a host – is it a database, webserver or development instance?

What I’d like to do is pass a type to puppet at install time and have the puppetmaster and the agent remember that mapping between host and type.

I did it with a really simple Facter plugin, install scripts named by type (passed in to puppet node install), and a file created by the install script in /etc/puppet.

Then, I wanted to be able to see which hosts were configured with which install type. Facter was aware of the type, so this seemed like it should be pretty easy…

I wrote a quick and dirty Face that pulls information out of $varlib/nodes/*.yaml on the puppet master. I imagine there are better ways to do this, but in the absence of documentation or someone to tell me not to do this, I forged ahead!

There were two things that I spent quite a bit of time chewing on before figuring it out:

  1. If you want to make an :action in your Face the default, you just add default in the body of your :action block. I had to dig through a few cloudpack files before I found it!
  2. If you are creating and terminating hosts frequently, you may end up with a bunch of certs and other annoying metadata laying around. To clean it up, the Puppet Node Face has a command you can run:

    # puppet node clean [hostname]

    You’ll probably need to be the user that’s running puppet for this to work — it affects things that the puppetmaster owns in $varlib.

    If you’re doing this with code, it’s:

    Puppet::Face[:node, :current].clean('hostname')

I put a little patch into a recent version of cloudprovisioner that invokes clean during a terminate. It’s quick and dirty, and only for AWS.

The resources I’ve found useful are:

And to a lesser extent, these blog posts were helpful for filling in a few gaps:

Going from Vagrant and Puppet into EC2: A short survey of 5 tools (and two I didn’t bother trying)

I thought this would be easy.

I started using Vagrant, and was productive with it in about a day. Really a couple hours. Most of my time was spent downloading the correct version of VirtualBox, looking for starter images and then a small amount of time experimenting with the Vagrantfile scripting language (for multiple VMs).

And we made some Puppet configs.

Then I wanted to use those same Puppet configs with EC2.

So my ultimate goals were:

  1. Reuse my existing puppet configs as much as possible
  2. Have a completely automated deploy of a server system (including checkouts of code from a private github repo)
  3. Have a puppetmaster in EC2
  4. Be able to provision systems from EC2 or my laptop
  5. Make the whole process easy for my coworkers

This is mostly a list of what I failed at using, and the thing I succeed with at the end.

Short aside:

Pro tip to people writing documentation: Most tutorials and sites that make recommendations for tools leave out the part where you run into all kinds of insane problems. Create a wiki page or a place where you collect the problems. Please.

For example: My Cloud Formation to Ubuntu AMI deploy was failing with an error in cfn.rb that said: “Unexpected return.” Um. Ok. *facepalm*

The problem was that a AWS-image specific JSON file wasn’t present (and couldn’t be created) on the target machine. So instead of noting (raise an exception, anyone?) that the file wasn’t present, the module just executed a bare return.

Because I don’t know much about Puppet internals, this was a very annoying problem to solve. (like, what gets installed in /var/lib/puppet/lib vs. in the gem install vs. the cloudpack library I was told to install in /etc/puppet/modules?)

Stepping back a bit – a useful note from the Cloud Formation folks would have been: “Hey – this probably won’t work if you try to deploy to non-Amazon Linux AMI distros of Linux.” It’s not obvious that’s the case! You’re supposed to be able to completely control the classes being installed on the target system, right? Bad assumption, apparently.

And we’re back!

Let me know in the comments if you’ve successfully navigated any of the tools I didn’t pick. Juju, in particular, I don’t think I gave a fair chance (since I didn’t try it at all).

Here’s my list:

  1. Juju

    I just wasn’t sure this was a reasonable thing to install/use. No one I knew had ever heard of it. Didn’t try it.

  2. Mcollective + tools ported to PHP

    I’m interested in Mcollective, but the configs looked overly complex, and I didn’t have anyone close by that was actively using it.

    The examples scared me away because of the PHP. I already had three languages at play in the deployment, and I didn’t need another language dependency. So, I didn’t bother trying it.

  3. Custom scripts based on the ec2-tools packages

    This approach works, but is fragile and a PITA to keep updated. I tried it as a “getting oriented” exercise, and abandoned it.

  4. Mccloud

    This looked awesome! I could reuse all my Vagrant configs and not really have to change anything… Except I had to maintain duplicate configs, just sub ‘Mccloud’. Eh.

    I may revisit this tool in the future, but it seemed to require pretty much the same things as the tool I ultimately decided to use, and didn’t seem as flexible. I also had a weird restriction where it wouldn’t allow me to spin up the correct type of image (I wanted m1.small in my testing). Could have been PEBKAC — I didn’t take good enough notes to say for sure.

  5. cloud-init

    This looked very promising! We were already using Ubuntu so seemed like a good fit.

    Pros: easy – pass in a shell script when starting an EC2 instance from the web. Cons: required yet-another-configuration style. But there were command-line tools and it was looking very promising.

    In the end, using a supported package would have required me to be running a Linux desktop to start my puppetmaster. I didn’t search much harder than brew install cloud-init for a Mac-equivalent (that doesn’t exist). So, I moved on to the next thing.

  6. AWS Cloud Formation

    I launched a puppetmaster pre-configured instance! I sort of got puppetmaster running! Then I tried to deploy an Ubuntu AMI from it… This does not work.

    So, I will save you a ton of time: Avoid trying to mix the pre-specified Cloud Formation images with other systems.

    Someone showed me the chunk of the config you can rip out and probably get it to work. I was frustrated at that point, and moved on. Too much tweaking was required, for what was uncertain gain at that point.

  7. PuppetLab’s Cloud Provisioner

    This is what I am currently using! I’m running HEAD pulled directly from github. Older versions are not recommended. (I tried three versions.)

    The configuration is pretty straightforward and documented. The one thing (a very important thing) is that you have to amend your $RUBYLIB if you don’t install the code in your version of ruby’s default libdir. There’s no gem. Yet.

    I customized the deploy script to my liking – there is an unsupported option called --install-script you can pass in that will execute whatever .erb (a shell script!) you’d like if you put it in ~/.puppet/scripts. You can also pass in your puppetmaster hostname with --server.

    Totally sweet.

    The command-line is ok, but there’s also a programmatic interface in Ruby. Dan Bode showed me a short code snippet that worked (hostnames & keys sanitized):


    irb(main):012:0> require 'puppet'
    irb(main):013:0> require 'puppet/face'
    irb(main):014:0> Puppet::Face[:node, :current].install('myserver.compute-1.amazonaws.com', :keyfile => 'mykey.pem', :login => 'ubuntu', :install_script => 'custom-puppetmaster', :server=>'myserver.compute-1.amazonaws.com')

    I so appreciate this! Faces is awesome.

I’ve got some additional tweaking to do yet, but I’m planning to commit a few amendments to the provisioner scripts included by default and the README. And I filed a couple bugs.

Overall, I’d bet that cloud-provisioner (if you use the version currently on github) will work for most people.

Day 3 at PgConf.EU: the future, replication, performance and the closing keynote

I was room host for Simon Riggs, Magnus Hagander and Greg Smith today before giving my final talk this afternoon.

The morning started with Simon Riggs talking about his wishlist for the future of Postgres – including some boundary-stretching ideas for bi-directional replication (a way to possibly support multi-master architecture for Postgres). Simon named his talk “Postgres Futures”, but also called it his personal “shopping list” of features he’d like to see implemented, or implement himself. Magnus deep-dove into the replication protocol and how to use pg_basebackup with 9.1. Greg’s talk on benchmarking is always fantastic, and I learn something new every time. He included some graphs for FusionIO testing he’d done in the last couple weeks.

I also gave my last talk of the conference, “Managing Terabytes” about my experiences managing 8.x version clusters of a terabyte or larger in size for several companies. I reorganized this talk from the last time I’d given it, and I think it came across quite a bit more clearly to the audience. One developer gave me the suggestion that I should have tried to do a series of updates to a catalog tables to try to recover page space. I’m designing a little test case to help someone do this in the future if they run into this problem with older versions of Postgres. HOT (8.4 and later) essentially fixes this issue, by the way.

The keynote was shared by Ed Boyajian and Bruce Momjian. Ed mentioned that Oracle had the best earnings statement ever in the most recent shareholders call. In spite of that, there’s a rising tide of Oracle users who are looking for alternatives, given how strongly they’re locked into their technology. He said that he was recommending companies use Postgres is a strategic lever to negotiate with Oracle. And as IT departments strapped for cash are trying to figure out how to fund new data initiatives – they’re turning to products that are free.

Bruce then quoted the opening keynote by Ram Mohan – “With open source, support is a whole new level.” And Bruce’s comment was that what Ram did when he started 10 years ago with Afilias was heretical for conventional IT wisdom at the time.

Bruce also said that he’d always thought Postgres would ultimately only ever be a niche player among databases. But with all the progress we’ve made as a project, and the new markets being explored, he sees much greater possibilities for the project.

He asked the audience about the speed at which bugs had been fixed – within 24 hours, a few days or a single week. Only one hand was raised for a bug requiring more than 1 week to be fixed, among probably 40-50 hands raised for much faster fixes.

Bruce also noted that developers are often moved to work and stay with Postgres as a project, because they have decided that “this is an important thing for me to do in my life.”

PgConf EU was a great conference, and I’d be happy to be invited back, wherever they decide to hold it in 2012.

Day 2 at PgConf.EU: hallway track and the marketing of Postgres

The hallway track is always my favorite part of the conference. I had to give a full-length and a lightning talk today, so much of my time was spent making sure I was really prepared and then giving the talks!

But between talks, I got to chat with Heroku, 2ndQuadrant and EnterpriseDB folks about what they think is coming next in the world of enterprise development and Postgres.

One topic that I touched on in those conversations and my lightning talk (Postgres needs an aircraft carrier) was that our plan for world domination needs to get quite a bit more specific and actionable.

For the open source community, the right question is not “are we ready to tackle the enterprise?” — the right question is: Which market segment and customer group are we going to target for complete market domination?

One area that we definitely already dominate is online poker. We have had a few blog posts about it, but not a whole lot else. Another is GIS through PostGIS.

I created a survey to try and capture some scenarios from the developers who work with customers every day solving problems. We need to know more about the people using Postgres and the way that they use the database.

If we can get 30 responses, I’ll publish the results. It’s a bit long, and requires some thought, so I imagine it will take some time to get them all.

If you have a customer that you think represents a good target market for Postgres, take 10 minutes and fill out the survey for us!

Day 0: PgConf.EU

Yesterday was spent settling into the Casa 400 and reconnecting with the European Postgres community!

The hotel allowed us to check in very early and so I got to settle in, grab lunch and a nap before we set out for the evening.

We had informally decided to go on a pub crawl with whoever was already in town. The decision making about where to go started around 5pm.

We now have about five years of experience trying to get 20 or more people into bars and restaurants without calling ahead and last night, luck was with us!

I broke down our lessons learned as follows:

  • Start the planning one hour before the intended departure time.
  • Have a printed map, even if it is not consulted.
  • Ask for help from locals.

Thanks to Greg, we actually asked a local bar owner about where to go, and he called a friend’s restaurant for us!

We ended up at Nels for dinner with nearly 25 people taking over most of the restaurant. I was lucky enough to have a friend in town from Portland that joined us for a long conversation about marketing, PostgreSQL, geek cruises and aircraft carriers. I think I have a topic now for a lightning talk.

After that, we walked around searching for ice cream for Ads. We ended up at Pasta e Basta, which had ice cream and singing wait staff. After hearing “Hit the road, Jack”, “Here comes the sun” and a few other tunes, we closed out the night at the hotel bar.

I got to meet the author of pgChess, Gianni Ciolli, and catch up with Jonathan Katz, Dimitri Fontaine and Peter Geoghegan.

All in all, a great start to the week at the conference! I’ll be room hosting this afternoon in room #3.

Headed to PgConf.EU

I’m headed to Amsterdam for PgConf.EU and very excited for my very first European postgres Conference.

I’m giving two talks – Managing Terabytes, and Mistakes Were Made. Both are cautionary tales about the things that one can do terribly wrong with database management, and system operations management. My goal with these talks is to start a conversation about what we can learn from failure.

I encourage everyone to share their stories about what fails. Not only are they great “campfire stories” for entertainment, but they help us all learn faster, and they teach us what ultimately works when everything is failing.

In the same vein, UpdatePDX is putting on another “tales of failure” set of short talks the following week back in Portland. I’ll be leading the charge with a short story of my own, followed by at least two other tales of failure.