Skip navigation

About two months ago I was lucky enough to marry the most beautiful girl in the world (depending on the world). No, seriously, she could be a part time model. Check out my Facebook profile for pictures. We were married in Los Angeles California’s Koreatown by our friend Leslie, whom we had deputized by the county of Alameda (that’s where Oakland lives). The vows below were those spoken by Leslie, Curi (my wife) and me.

Our Vows:
Read More »

Set aside everything you think you know about Network Monitoring Systems, or NMSs. Here’s the rules:

  1. They All Suck.
  2. Use Nagios.

At this point you’re saying:

  • “My NMS has a SQL back-end!”
  • “My NMS has auto discovery!”

Odds are, those features both suck and blow at the same time.

. Now I’ll show you how to setup a simple kiosk web page for your NMS. This will focus primarily on Nagios, but could easily be adapted for other NMSs.

Read More »

Below you’ll find a list of tech companies in San Francisco who are hiring. This list has a bias towards companies in SOMA (specifically South Park). If your company is hiring and you’re not listed, please feel free to comment with a link to your careers|jobs page. If your company is hiring and you don’t have a careers|jobs page, consider adding one?

[ A - F | G - L | M - R | S - X | Y & Z ]

A – F

Academia
Advent
Airbnb
Ampush Media – 450 9th Street, San Francisco
Animoto
AppDynamics
Automattic
Backtype – 542 Brannan Street, San Francisco, CA 94107
BigTent
BitTorrent
Blurb
Boku
Booyah
Card Pool
Cloudmark
CrowdFlower – 455 Valencia Street, San Francisco, CA 94103
DoubleTwist
Dropbox – 153 Kearny St, Floor M, San Francisco, California 94108
EngineYard
EventBrite – 410 Townsend Street, Suite 200, San Francisco, CA 94107
Flickr
Fluther
Formspring
Read More »

I’ve encountered this error several times while running daemons (or detached processes) in Mac OS X – most recently within a Python scripted called from our continuous integration daemon:

gaierror: [Errno 2] Temporary failure in name resolution

Initially I thought I was facing a glibc bug. However, according to Python’s Build Bot system, I’m not the first person to run encounter this error. Luckily there is hope. The fix: Run your process as group daemon.

Here’s an example launchd plist for a Mac OS X Bamboo Agent running as group daemon:
Read More »

The following steps describe how to get Solaris 10 (or any other Intel based OS, including FreeBSD (tested), Linux (tested) and Windows) installed as the primary (single boot) OS on a MacBook Pro. After fighting with the non-trival method of installing Mac OS X and setting up Boot Camp, it turns out you can simply format the disk with a Master Boot Record (MBR) instead of the default EFI. Please read through this entire procedure before you attempt this method.

Overview

  • Using a MacOS X Install DVD format the disk with a single partition MBR.
  • Boot from the Solaris 10 Install DVD and install Solaris.
  • Download and install Marvell Yukon Ethernet drivers using a USB stick.

Read More »

The nice people over at Packt Publishing sent me a copy of “Python Testing: Beginner’s Guide” to review. Apparently griping about py.test and Testlink make you a domain expert… That aside, I am really looking forward to reading the book; testing Python – as well as testing with Python – constitute the majority of my day-to-day work. Here’s an extracted chapter from the book: Chapter 5: When Doctest isn’t Enough: Unittest to the Rescue

ANNOUNCEMENT: Upcoming Disaster Communications Meeting on Wednesday, February 10, 2010 6:30PM

The American Red Cross Bay Area (ARCBA) San Francisco Disaster Communications (DComms) Team is holding its first meeting on Wednesday, February 10th, 2010 from 6:30PM to 8:00PM at 85 Second Street, SF in the 1st Floor Boardroom. Topics to be discussed include:

  1. Introduction by Team Leadership
  2. ARCBA Mission
  3. DComms Team Mission
  4. San Francisco Communications Room Tour
  5. Upcoming Training Opportunities
  6. Radio Programming Assistance

THIS IS AN OPEN EVENT. All interested parties are invited to attend. Please bring your radio (if you own one).

Talk in frequency is 147.42MHz Simplex on the 2Meter Amateur Radio band.

For more information please contact the ARCBA SF Disaster Communications Team:

Sincerely,
Greg Albrecht & Lawrence Lin
SF Disaster Communications Leads
American Red Cross Bay Area
85 Second Street, 8th Floor
San Francisco, CA 94105

Many important relief efforts are taking place right now in Haiti and I want to make sure that the people of our local disaster communications teams are taking notes. We’ve been given the opportunity to witness a humanitarian crisis emerge real time via numerous traditional and new media outlets. This crisis is the kind of event that we hope against all odds will never happen, but plan against time to prepare for.

Please take your time in capturing this moment and try think about how you would prepare yourself, your friends, your community and your preferred social structures. Take notes, save reports, pictures, and anything that you find worthy. Below is a sample of the areas of detail that are worth reviewing:

  1. logistics in and out of the effected areas
  2. communications resilience and usage in the effected areas
  3. coordination of resources from unsolicited entities
  4. previously ignored assets now of use in the effected areas

My hope is that at some point in the next month our disaster communications teams can get together as groups and discuss what we saw (or perceived) and use it to train ourselves. Think of this as the worse case Use Case.

There are lots of Testlink API client examples in Python. None-of-them-work. I’d like to think mine does:

#!/usr/bin/env python
import xmlrpclib

class TestlinkAPIClient:
    SERVER_URL = "http://testlink.splunk.com/lib/api/xmlrpc.php"
    
    def __init__(self, devKey):
        self.server = xmlrpclib.Server(self.SERVER_URL)
        self.devKey = devKey

    def reportTCResult(self, testcaseexternalid, testplanid, status):
        # fyi: this is XML-RPC, the order of our parameters matters.
        data = {"devKey":self.devKey, "testcaseid":testcaseid, \
        "testplanid":testplanid, "status":status, "guess":True}
        return self.server.tl.reportTCResult(data)

    def getInfo(self):
        return self.server.tl.about()

# substitute your Dev Key Here
client = TestlinkAPIClient(devKey="xxx")

# get info about the server
print client.getInfo()

# Substitute for tcid and tpid that apply to your project
print client.reportTCResult(testcaseexternalid='splunk-655', \
testplanid=1328, status="p")

Python comes with the tarfile module who’s usage allows manipulation of tar archives, including those using bzip2 or gzip compression. Python 2.6′s tarfile includes the ability to exclude files when creating tar archives:

TarFile.add(name, arcname=None, recursive=True, exclude=None)
Add the file name to the archive. name may be any type of file (directory, fifo, symbolic link, etc.). If given, arcname specifies an alternative name for the file in the archive. Directories are added recursively by default. This can be avoided by setting recursive to False. If exclude is given it must be a function that takes one filename argument and returns a boolean value. Depending on this value the respective file is either excluded (True) or added (False).

Changed in version 2.6: Added the exclude parameter.

Searching around I was unable to find an example usage of this parameter, so I’ve created the example below:

#!/usr/bin/env python
import tarfile

# return True for files we want to exclude
def excluded_files(file):
    _return = False
    # here we're checking to see if the file is 'fwdApp' -
    # a file don't want included in our tar archive.
    if file.find('fwdApp') > -1:
        _return = True
    return _return
# create a tar archive of my home directory
tar_archive = tarfile.open('home.tar','w')
tar_archive.add('/home/gba',exclude=excluded_files)
tar_archive.close()

Follow

Get every new post delivered to your Inbox.