On Missing The Point…

September 4th, 2008

We love feedback - I’ve got alerts, RSS feeds and filters up the wazoo to let me know what people are saying. And the new feedback system for OSCON totally rocks!  We got messages about how we did instantly, and there’s nothing better for improving your presentation than getting constructive criticism right away.

But there was one message that really stuck in our craw!  Someone thought we had emphasized the social aspects of running user groups way too much.

Here’s the thing: user groups are social. The primary mission of a user group is to (wait for it…): Meet Other People.

That’s the difference between a lecture, or a class, or a job. Maybe you are coming to the meeting because you want to learn something from the topic, but the primary goal of a user group has to be about the people who are there and facilitating ways for those people to make one-to-one connections.

User groups are a way to, on a very small scale, enable the type of connections you can make at conferences. Except user groups target a very specific topic, and can in some cases be a better bet for meeting people concerned about the same things as you are in your industry!

And usually, user groups meet after hours during a person’s free time - time that they could be spending with their family, friends or just chilling out. Respect that donation of time and make it worth a person’s while! A bit of technical information never lasts as long as a new colleague or friend.

We’re speaking at PLUG tonight!

September 4th, 2008

Selena & I will be giving a modified version of our OSCON talk at PLUG tonight.  Time & location on the PLUG website.  See you there!

HP2510p Laptop review

August 20th, 2008

I have a new laptop; my first all-new-to-me computer!  Well, that I didn’t get through work.  My PCs have always been Frankenputers.  (And actually, it’s a refurb.  Like I said: new-to-me.)

First, today’s interesting tip.  I have a different definition of “gentle” than the recommendation there - I had to push pretty dang hard, but it did work.

I demoed HP’s 2510p at LinuxfestNW and it was pretty much love at first sight.  I confess, it was the touchpad.  Touchpads usually give me the creeps - using one is like nails on a chalkboard.  The touchpad on the 2510 is smooth, and molded as part of the wrist rest, so it won’t get any goo caught in the edges.

Next super-sweet feature:  the keyboard.  I have small hands, long fingers.  Laptop keyboards are usually a pretty good size for me, until we get down into the “ultralight” category; then they start feeling a bit cramped.  While I certainly wouldn’t want to, say, write my dissertation on this keyboard, the size of the individual keys gives it the feel of a bigger keyboard.  It’s got a nice clicky feel, too - you’ll probably annoy the people you’re sitting next to.

According to the instructions in the users’ manual, the keyboard should be pretty easy to replace.  Good news for those of us who have a history of inadvertently* destroying our keyboards.  Perhaps I will order a spare right now.

It also doesn’t hurt that the laptop weighs in at 3.2 pounds with the 6-cell battery.  It’s important that I not be weighed down by my computing equipment.

Speaking of battery - I ran this battery test (mainly because it was the easiest one that popped up in google.)  Max sound, max brightness, Conan the Barbarian + Star Trek:Insurrection brought it to just under 50% power remaining.  I’ll do more tests later with actual work, but for now, I’m not going to worry about battery life too much.

It came with a bluetooth PC card mouse.  Wouldn’t want to use it full-time, but it’s pretty nifty.

The fingerprint scanner is cool, but with the small overall size of the laptop, I find that my hand sets it off & I get random popups (when I’m in Windows) telling me to swipe my finger slower.  (More about Windows vs Linux on this laptop in later posts.)

The sound is actually quite excellent for a laptop.

Oddities:
The (GigE!) NIC seemed flaky at first; it randomly dropped several times over the first few days.  The cable tested fine, and I haven’t had the problem since, so haven’t been able to troubleshoot that further.

The delete & end keys are reversed from every other keyboard I’ve ever used.  This is annoying, but can be fixed with keymapping.

Check out the temperature photo in this excellent review.  This baby gets warm - unpleasantly so using it directly in my lap.  You definitely want it supported on a hard surface.

*That’s my story, and I’m stickin’ to it.

Running a Successful User Group

July 27th, 2008

Gabrielle and Selena presented “Running a Successful User Group” (slides 1.4MB) at OSCON 2008 last Wednesday. Michael Halligan was nice enough to post his notes from the session. We had around 40 people attending, and had great participation from the crowd! Couldn’t have asked for a better audience.

We also created a handout that gets into the nitty-gritty of running a group (PDF 4.2MB). Later, we’ll see what we can do about wiki-fying the content. For now, printing it out double-sided and then stapling it in the middle works pretty well.

We have a stack of index cards from everyone to go through, and looking forward to starting a mailing list for user group leaders. Watch this space for the mailing list announcement!

Upcoming event: PDX Coders’ Summer Social

July 15th, 2008

The first PDX Coders’ Social was such a success, we’re having another one! Hope to see you there!

This Week in Geekville.

July 11th, 2008

This week at PDX.pm, chromatic gave an excellent talk about “how not to fail”.  There was quite a bit of discussion of Godzilla attacks and the calculus thereof, which I don’t think I can adequately capture.  “You had to be there”.  Anyway, on to my notes!

The keys:
- Recognize points of failure before the actual failure occurs.  The idea being to prevent the failure.
- Perform root cause analysis.  Your biggest problem may not be the most annoying, obvious, or easiest to solve.
- Do the simplest, fastest thing you can do to ease the problem.  You’re conducting an experiment to see if it has any effect on the problem.

Some examples of places you can get hung up:
- Waiting for a decision from someone else.  That someone else could be you.  Self-awareness is critical.
- Waiting for someone else to do something.  This is usually a sign of a technical bottleneck, such as a complicated process.  “The only person who can ____ is too _____.” (The blanks on this slide had my hopes up for madlibs.)
- Becoming demotivated (which is a word I thought only I used) by tedious or annoying tasks.  (Or people.)  Get rid of the annoying thing.  (Please obey all local laws.)  Motivational tip:  leave something to do tomorrow!  That way you start the day on a high note.  I do this all the time - in fact, I keep a list on hiveminder of “instant gratification projects” - things I can do in 15 or 30 minutes - and any time I’m frustrated & need to feel like I’ve accomplished something, I do one of those.
- Lacking direction.  Try creating a one-sentence problem statement.

Time-based releases force you to get your release process under control - and maybe even automated!  It gets you in to a rhythm.  (My rhythm, since it’s just me and I don’t really have “releases”, is to have “Refactoring Fridays”.)

Tips that especially apply to FOSS projects, where just about everyone is a volunteer:
- Make it easy for people to get involved
- Encourage discussion
- If someone new has contributed something, but it’s not quite up to snuff, tell them (nicely) how they could improve next time

We’re speaking at OSCON

July 8th, 2008

Come hear what we have to say about Building a User Group!

Lesson 0

http://en.oreilly.com/oscon2008/public/schedule/detail/2757

PostgreSQL QA Platform

June 23rd, 2008

http://wiki.postgresql.org/wiki/QA_Platform_hosted_at_Command_Prompt

This past weekend, Josh Drake, Mark Wong, & I spent about 12 hours re-organizing the commandprompt colo facility: building new racks, shuffling existing servers, installing new ones, and running new cable. (#31 in Josh Berkus’s ‘50 ways to contribute’ talk: http://www.powerpostgresql.com/download/TFCKUpload/21.x-pdf.)

Commandprompt is hosting the PostgreSQL QA Platform lab (aka “PostgreSQL’s Portland Performance Pad”, aka “The P4 Lab.”) Equipment for this project was donated by HP, Sun, and IBM.

Watch the wiki for updates to the DL380 Tuning Guide: http://wiki.postgresql.org/wiki/HP_ProLiant_DL380_G5_Tuning_Guide

load farm!

Cisco::Reconfig

June 20th, 2008

Poking around on CPAN a week or so ago, I stumbled across Cisco::Reconfig.

It looked pretty interesting, and turned out to be the work of David Muir Sharnoff. He’s responsible for Net::Netmask, which is one of my five favorites, so I had to check it out.

Sample router config (not all lines shown):

interface Loopback0
 ip address 10.254.254.1 255.255.255.255
!
interface Ethernet0/0
 description Admin LAN
 ip address 10.10.1.1 255.255.255.0
 duplex auto
!
interface Serial0/0
 description to Internet ID W065432
 ip address 1.1.1.1 255.255.255.252
!
interface Ethernet0/1
 no ip address
 shutdown
!
interface Ethernet1/0
 description User LAN
 ip address 10.10.2.1 255.255.254.0
 duplex auto
!
interface Ethernet1/1
 ip address 10.10.4.1 255.255.254.0
 duplex auto
!

Let’s write a quick & dirty script^W program to look for blank interface descriptions, because that’s something I find really annoying:

#!/usr/local/bin/perl

use strict;
use Cisco::Reconfig;

my $host        = "gabrielle";
my $host_config = "$host.confg";
print ("Checking: $host\n");
my $config  = readconfig("$host_config");

for my $intf ( $config->get('interface') ) {
    next if ( $intf->get('shutdown') );	#ignore, don't care
    next if ( $intf =~ /Loopback/ );	#idc

    my $descr   = $intf->get('description');
    chomp ($intf, $descr);  	# hm, kinda feel like I shouldn't have to do this?
    print ("$intf: $descr\n");	# just to be chatty
    if (! $descr) {
        print ("$host: $intf: Description is blank!\n");
    }
}

exit 0;

:::–>./sample.pl
Checking: gabrielle
interface Ethernet0/0: description Admin LAN
interface Serial0/0: description to Internet ID W065432
interface Ethernet1/0: description User LAN
interface Ethernet1/1:
gabrielle: interface Ethernet1/1: Description is blank!

I’m primarily interested in it for checking compliance of our configurations with our business standards. No need to chunk through a config line-by-line with regexps; in a lot of cases, a simple ‘get’ will tell me if something’s configured or not (eg “snmp server-location”.)

Specific features that look really intriguing:
- you can generate the commands you need to “fix” your config
- the “context” method allows you to draw out the surrounding lines

I can’t wait to mess around with this some more.

PDXPUG Meeting recap - Logic and Databases with Jeff Davis

June 20th, 2008

[ Jeff's slides are available at: http://www.pgcon.org/2008/schedule/events/83.en.html ]

Last night’s meeting was Jeff Davis’ last presentation as a Portlander (for a while at least!). He is leaving his job at Laika to pursue streaming database nirvana at Truviso, a company whose database product is based on PostgreSQL. There’s a bunch of whip-smart people working there, and Jeff will fit right in. If you’ve got other questions about what Truviso does, feel free to ask Jeff.

Our “question of the day” was - What are your plans for the summer? We had some great answers — including that Len’s son Ari is hosting the morning NPR news show for the next two weeks! Go Ari! It sounds like James *might* be leaving us for Redmond — stay tuned for more news on that. Gab will be riding her bike, and other people are going to just enjoy the fact that it finally seems like it *is* actually summertime.

Mark Wong is working with Joshua Drake (and Gab?) to install our new Performance Lab downtown on Saturday. Look for updates and announcements about what those servers will be used for from Mark and JD next week. HP donated two of the machines, and I believe that one other came from Sun.

We also had cocktails served by Gabrielle. THANK YOU, GAB!

Jeff’s presentation started with using logic to help express in English basic SQL concepts. For example, JOIN can be expressed with AND, and UNION can be expressed with OR. Thinking about what questions you’ll be asking about the data, and also forming those questions and statements of fact in ways that allow the assignment of clear ‘true’ or ‘false’ values will help enormously in ensuring that your data structures and SQL queries work the way that you and your customers expect.

At the risk of butchering the next discussion, here’s my take on the second part: Jeff spent quite a bit of time talking about the merits of using statements of fact when describing states, and how focusing on the truth values helps you test your assumptions about results from queries. His closing words on this topic: “Use an iterative process to clean up data before migrating it to a new system: make assumptions, test the assumptions, revise the assumptions, and repeat.”

He used the example of “pending” versus “approved by purchasing but not yet received”. This sparked a lively debate about the terminology - is it accurate to say that “pending” is Context Sensitive, and “approved by purchasing…” is Context Insensitive? Most of us seemed to agree that the second example was more useful — although Len Shapiro made the case that “pending” wasn’t so bad. He made the case that we just needed a Data Dictionary to explain it in the application. James brought up that programmers and businesses are lazy, and are unlikely to keep a piece of documentation like that up-to-date. There was a lot more discussion about this.. but at that point, I think I asked Gab for another drink, and then got Len a second drink.

In the third segment, Jeff went over two ways that the SQL standard treats NULLs - as UNKNOWN or as NO VALUE. In particular he shared these two statements:

test=# select sum(column1) FROM (values (1), (NULL)) t;
sum
—–
1
(1 row)

test=# select (1 + NULL) as plus;
plus
——

(1 row)

We chewed on that for a bit. In the first case, NULL is being treated as “no value”, and just ignored by SUM(). In the second case, NULL is being treated as UNKNOWN - as the NULL is not treated as the same data type (or domain) as ‘1′, and so the answer is NULL.

(oh boy, i hope i got that right, or there’s going to be a long thread to explain this :D)

So, then James brought up the 17 possible meanings for NULL, and how our puny human brains could not compute. Several people made exploding brain noises, we continued to talk about NULL and aggregate functions and how COUNT() seems to violate ALL the proper rules, and… whew.

It was almost 9pm, and we all decided it was time to retire to the Lucky Lab.

Len brought me up to speed on Tom’s latest GSOC work, and I said that I would help test out his graphical Planner analyzer tool. It’s something that helps you understand why it is that the Planner chose the plan it did. I’m sure that I’ll be able to speak more articulately about it after I play with it :)