Tag Archives: Work

Hire This Guy!

I’m looking for work. Here’s my resume.

I’m passionate about doing things that matter, and doing them well. I’m a leader with experience. I lead by serving my business, bosses, and coworkers. I solve problems efficiently and I always add value.

I’m a pro at pretty much any back-end, devops, sysadmin work. I have a strong preference for using Free/Libre/Open Source Software (and contributing back upstream often). Most of my career has been websites: PHP, Python, Java, Perl and the like. I’m experienced with SQL and NoSQL databases. I can do front-end work except graphic design. Most recently I’ve been coding a lot with PHP (specifically, Symfony2), AWS APIs and MongoDB.

I would love to do work right now which involved cloud automation, specifically, Amazon Web Services infrastructure provisioning. I could easily automate the setup for a very robust, high-traffic web/mobile service. I’ve had years of experience with AWS and want to work with it more. But that’s just one idea—I’m pretty flexible.

I love learning new tools and tech. I do so quickly, and I’m generally at my best (performance and happiness) while I’m learning. So if I’m not already versed in whatever tech your business needs to succeed, don’t worry, I will be soon.

Tweet of same

Update 2012-12-14: I’m now seeking full-time work in Seattle

How to securely connect an AWS load balancer to EC2 instances

Here’s the magic sauce to securely allow traffic to your webservers only from your load balancer. Run the following:

ec2-authorize --region REGION -C /path/to/cert.pem -K /path/to/key.pem ELB_NAME -u OWNER_ALIAS -o SOURCE_SECURITY_GROUP

The tricky bits for me were:

  • having to generate an X.509 key and cert just for this purpose (there’s gotta be a way to do that from the web console)
  • OWNER_ALIAS above and in the web console equates to SOURCE-OR-DEST-GROUP-USER in the ec2-authorize(1) manpage.
  • SOURCE_SECURITY_GROUP above and in the web console equates to SOURCE-OR-DEST-GROUP in the ec2-authorize(1) manpage.
  • to remember to include --region

The documentation for same is confusing to someone like me who doesn’t know much AWS security group terminology.

As far as I know, there’s no way to perform, view, or manage this special security setting through the web console.

offline HTML 5 validation

HTML 5 logo

I’m liking Henri Sivonen’s Validator.nu service. I’ve got it running locally, and it works well. I can use it as a web service and validate HTML from within Vim, using quickfix to rapidly resolve errors. My Jenkins CI server uses the same validator via phpunit tests.

Warning: it took me a very long time to get it running locally. Technically easy (just run a build script), but it downloads tons of libraries and files before it can do its job.

Debugging web tests on remote servers

I run “web tests” on a remote server. I use Selenium to act like a person interacting with a website, viewing and entering data. Selenium is pretty awesome, it can drive a real web browser like Firefox.

Even better is to have these web tests run automatically every time I commit code. I use Jenkins for this. Jenkins even fires up a headless desktop so Selenium can run Firefox.

When a web test breaks (especially in some way I can’t reproduce on my local desktop), sometimes it helps to actually see what Jenkins sees as it runs the test. Here’s a quick guide for doing so on an Ubuntu GNU/Linux server.

  1. Connect to the remote server using SSH. Install VNC server:
    sudo apt-get install vnc4-server
  2. On the remote server, become the user tests run as. For example:
    sudo su - ci
  3. Set a password for the VNC server using the vncpasswd command.
  4. Start headless X server by running vncserver. Note the given display. If example.com:1 is included in the output of vncserver, the display is :1.
  5. Figure out which port the VNC server is using. I usually do something like

    sudo netstat -nape | grep '^tcp.*LISTEN.*vnc.*'

    Here’s some example output:

    tcp        0      0 0.0.0.0:6001            0.0.0.0:*               LISTEN      107        3099855     13233/Xvnc4     
    tcp6       0      0 :::5901                 :::*                    LISTEN      107        3099858     13233/Xvnc4

    By trial and error, I figured out that 5901 was the port I should use.

  6. Port-forward VNC to your local machine.

    1. Disconnect from the server.
    2. Reconnect, including -L10000:localhost:5901 on your SSH command line.
    3. Leave this connection open.
  7. On your local machine, connect a VNC client to localhost:10000. An X terminal should be displayed.

  8. In the X terminal, run your web tests.

  9. When finished debugging, kill the X server using the display noted earlier.
    vncserver -kill :1

Measuring Development Speed

We’re rewriting the Mifos front-end from Struts 1.0/JSP to SpringMVC/Freemarker. So far it’s been slow going, so we’re trying out several experiments to speed up the process.

I think it’s important to measure the impact of our improvements. I want to know: are we moving faster? Is product quality flourishing? Can we say so quantitatively? The last bit has been the most elusive. It’s like measuring how useful a painting is!

Still, here are some measures which we hope will eventually show how much the improvements are or are not helping. Right now we’re just establishing baseline data.

The red line in the graph represents legacy front-end code that will eventually disappear. The green line is new code, but it really doesn’t matter.

From the chart data, we can say the following by measuring deltas between points: the most dramatic change in Struts/jsp LOC was 4380, for the time period ending Aug 2010.  The most dramatic change in SpringMVC/ftl LOC was 3665, for the time period ending Sep 2010.

Assumptions:

  • these data are not useful for estimating speed of future refactoring work
  • all acceptance tests pass in refactored areas
  • look & feel of refactored areas is acceptable

The 2nd & third bullets are a bit vague. To address this shortfall, we’ll measure the following aspects of quality:

  1. Time spent modifying CreateSavingsAccountTest.
  2. Number of issues (regressions) caught during CSS walk through.
  3. Number of layout or functional bugs logged during testing phase (missed during walk through).
  4. Time spent by QA manually testing the feature, including logging issues and retesting bugs fixes.

Finally, developers should know if things are better. This is the most qualitative and possibly the most important “measure”! Certainly, for the migration of our codebase from svn to git, it was the only measure we used, and it was enough.

Thoughts/comments/feedback are appreciated. I’d rather have some kind of simpler measure, like “x increased by 250%”. Do you know of any more effective (and hopefully simpler) means of measuring development speed?

I used gnuplot to generate the graph. Here’s the source.

Mifos opportunity: i18n

We need help with i18n (and support of L10n) in Mifos. Are you interested in becoming the Mifos i18n champion? It’s a great volunteer opportunity! The work should be intermittent, and basically at your leisure. One of the really fun parts is working with the folks at Translatewiki.net… they added a bunch of messages from our “questionnaire” module, and after a few days it was completely translated to Interlingua, Macedonian, Dutch, Norwegian, and Finnish! There’s an army of talented translators ready to help.

Here are some example tasks for the i18n champion:

  • Make sure messages in Mifos are translatable.
  • Document messages and resolve issues mentioned on our Translator Helpdesk.
  • Hang out in #mediawiki-i18n (an IRC channel on Freenode), answer Mifos questions when they come up, or add them to the Translator Helpdesk.
  • Work on specific i18n issues: MIFOS-3859, MIFOS-3821, MIFOS-2018 and others.
  • Improve and refine the Mifos i18n/L10n guide.

See also: #Mifos, #microfinancing and #Wikimedia

Update

A day after I sent out this call for help we got two volunteers! Thank you, Stanley Kwok and Jasmine Sandhu!

Mifos Manual as an ebook

I learned about ebooks last week. Very cool! I’ve found them much more readable than PDFs or Web pages. Maybe it’s the ebook readers… they sure help me focus on the content.

Since we used FLOSS Manuals to write our manual, it’s easy to generate an ebook using Objavi. Here’s the Mifos Manual as an ebook. Looks pretty good on the iPhone (lately I’ve been using “Stanza”). Probably looks even better on a Nook, Kindle, or iPad.