Slow down to speed up

The next maneuver that Mott proposed for his pupils was most complicated: ‘Randy, you’re in Gemini down here and you must intercept Agena-B up here. Don’t go for the target. Burn straight ahead. Go faster to go slower.’

‘Doc, I understand that part. But what in hell do I do next?’

‘As you move to a higher orbit, your speed will begin to drop off, and believe it or not, if you obey the figures your computer will be feeding you, you’ll bring your Gemini right in behind the target. The computer will time it so that when you’re about a hundred feet apart, your speeds will be identical, and so will your orbit. Then your twelve-year-old son could dock the two vehicles, because you can make the Gemini move a quarter of a mile an hour faster than the Agena, ease it into a docking.’

Claggett and Pope looked at each other, and the former said, with his bright Texan grin, ‘Like the pretty girl said in My Fair Lady, “I think I got it.”’

‘I believe the professor said that,’ Mott said. ‘And to protect you,’ he added, ‘we always time the docking so it occurs in the daylight part of the orbit.’

‘Real thoughtful,’ Claggett said.

‘So think about the orbits tonight. Memorize the diagram. And keep telling yourself, “To go faster, I must go slower.”’ (James Michener, Space, 502)

You can envision this somewhat counter-intuitive aspect of orbital mechanics in a couple of different ways. First, you can think of the higher orbit as stealing your kinetic energy (slowing you down) and converting it into potential energy (increasing your altitude). You can also picture it in terms of Kepler’s second law, which states that an orbit sweeps out equal areas in equal time. The higher your orbit, the more area your radius is sweeping across, and so your momentum becomes slower in order to compensate.

orbit2This notion of speeding up to slow down (and conversely slowing down to speed up) is useful for considering how organizations and projects scale. When your project (program, product, etc.) is small and your customer base is small, you can and do move very quickly. If you are a programmer, it is possible to rewrite your entire codebase in a few weeks. At this stage, organizational disciplines can feel like unnecessary drag on this perceived speed. But if you have fallen into the trap of thinking that way, as your project and customer base grow, the lack of discipline actually becomes a drag on your ability to make further change. Over time, with a continued lack of discipline, both the chance of error and the so-called blast radius of that error become larger. You are slowed down both by your fear of error, and by the cost of having to correct such errors. Being thus slowed down, how can you speed back up?

Certainly this sort of breakneck early speed may be a legitimate tradeoff. The term technical debt was coined to help articulate the fact that such a tradeoff is being made for the sake of present benefit against future cost. But as an organization or project grows, the need to pay down this technical debt becomes more and more critical. And this is where notions such as “paying off debt” and “slowing down to speed up” can help us to feel perfectly at ease with the time and effort we are spending on organizational disciplines that do not obviously contribute to more features and more customers.

For example: if I have “slowed down” by taking the time to create a large battery of automated tests for my codebase, then I am actually able to “speed up” in making further changes to that codebase, because I have a higher degree of confidence not only that my changes will not break existing behaviors, but thereby that my changes will not result in added support costs by exposing my customers to bugs.

To paraphrase the wise man: better is he who has self-governance than he who, without it, governs a city.

And keep telling yourself, “To go faster, I must go slower.”

See also: The Start-Up Trap

PureApplication in Malaysia

Last week I helped to facilitate an IBM PureApplication pattern camp in Kuala Lumpur, where we helped PureApplication customers and business partners from Malaysia, Thailand and Vietnam to build their own patterns. While there was snow and ice back home in Raleigh, it was very bright and warm in Kuala Lumpur!

kualalumpur

Along the way we had a chance to discuss best practices for script packages and scripting, high availability and disaster recovery, multi-system deployment, IBM Bluemix running directly on PureApplication System, and best practices for backup. It’s exciting to see PureApplication growing in Southeast Asia!

Applying maintenace to your PureApplication instance using the command-line interface

The PureApplication Knowledge Center documents how to apply maintenance to your instance using the virtual system management console. If you have maintenance that you want to apply to a large number of virtual system instances, you may wish to automate the application of this maintenance using the command-line interface. The Knowledge Center also documents how you can find and apply ifixes and fixpacks to your virtual system instances using the CLI. The following interactive session using the PureApplication CLI demonstrates how you can do this. First, we apply an ifix to an instance:

[ibmadmin@smoonen pure.cli]$ bin/pure -h 172.21.72.32
User name: smoonen
Password:
Welcome to the IBM PureApplication System CLI.  Enter 'help' if you
need help getting started.
>>> import time
>>> # Locate the virtual system instance
>>> instance = deployer.virtualsysteminstances.list({"deployment_name":"WebSphere advanced cluster"})[0]
>>> # Show me the names of the available fixes
>>> [fix['name'] for fix in instance.findFixes()]
[u'scott-efix', u'8.5.5.4-WS-WASProd-TFPI54321_8.5.5004.20150101_1412']
>>> # Apply the efix to all of the applicable nodes
>>> efix = [fix for fix in instance.findFixes() if fix['name'] == 'scott-efix'][0]
>>> operation = instance.applyFixes([ {'vmtemplate': template, 'vmfixes': [efix] } for template in efix['applicableto'] ])
>>> for x in range(30) :
...    if operation.status != 'PENDING' and operation.status != 'ACTIVE' : break
...    time.sleep(30)
...    operation.refresh()
...
{
  "complete_time": "2016-01-19T06:30:15.479Z",
  "name": None,
  "operation_id": "o-f846360f-2f02-458c-873e-6cabbff4335f",
  "parameters": (nested object),
  "result": "{
     "ODRNode.11453175791583.MAINTENANCE": "SUCCESS",
     "IHSNode.11453175791582.MAINTENANCE": "SUCCESS",
     "CustomNode.11453175791585.MAINTENANCE": "SUCCESS",
     "DmgrNode.11453175791584.MAINTENANCE": "SUCCESS"
  }",
  "return_value": (nested object),
  "role": "MAINTENANCE",
  "status": "COMPLETED",
  "submit_time": "2016-01-19T06:29:20.119Z",
  "type": "configuration",
  "virtualapplication": (nested object)
}
>>>

You follow a similar procedure, using slightly different method names, to apply a fixpack rather than an ifix:

>>> fixpacks = instance.findFixpacks()['candidate_fixpacks']
>>> # List available fixpacks
>>> for name in fixpacks.keys() :
...   print name + ': ' + str([fixpack['version'] for fixpack in fixpacks[name]])
...
IBM WebSphere Application Server Network Deployment: [u'8.5.5.5']
IBM HTTP Server for WebSphere Application Server: [u'8.5.5.5']
WebSphere Customization Toolbox: [u'8.5.5.5']
Web Server Plug-ins for IBM WebSphere Application Server: [u'8.5.5.5']
>>> # Update WAS ND
>>> operation = instance.applyFixpack('IBM WebSphere Application Server Network Deployment', '8.5.5.5')
>>> # Follow similar procedure as earlier to monitor for operation completion
>>> # Repeat to update other products

Powering off your PureApplication System using the command-line interface

The PureApplication knowledge center documents how you can initiate a shutdown of your PureApplication System using the system console, by navigating to the System | System Settings page and clicking the “Shut down the system” link in the Power section:

shutdown

Alternately, you can use the following statement in the PureApplication command-line interface to initiate a shutdown:

[ibmadmin@smoonen pure.cli]$ bin/pure -h 172.17.16.209
User name: smoonen
Password:
Welcome to the IBM PureApplication Software CLI.  Enter 'help' if you
need help getting started.
>>> admin.racks[0]._restattrs["target_state"] = "shutdown"
>>>

Adding a network interface to your PureApplication VM: RedHat

Previously I described how you can add an additional network interface to an existing AIX LPAR on PureApplication System. The instructions are similar if you want to add an interface to an existing RedHat 6.x VM. You should follow the same procedure in the UI to add the new interface to the virtual machine. An asynchronous job is scheduled to add the address; after the job completes, take note of the MAC address and IP address:

new-address

Then, login to the virtual machine. Locate the network interface by finding its MAC address, and configure it using the new IP address and the subnet mask for the associated IP group:

[virtuser@ipas-pvm-073-020 ~]$ sudo bash
bash-4.1# ifconfig -a | fgrep -i 00:50:56:8f:1e:a4
eth2      Link encap:Ethernet  HWaddr 00:50:56:8F:1E:A4
bash-4.1# ipcalc -bn 172.20.72.4 255.255.248.0
BROADCAST=172.20.79.255
NETWORK=172.20.72.0
bash-4.1# cat > /etc/sysconfig/network-scripts/ifcfg-eth2 << EOF
> TYPE=Ethernet
> DEVICE=eth2
> BOOTPROTO=none
> BROADCAST=172.20.79.255
> NETMASK=255.255.248.0
> NETWORK=172.20.72.0
> STARTMODE='auto'
> USERCONTROL='no'
> ONBOOT=yes
> _nm_name='static-eth2'
> IPADDR=172.20.72.4
> EOF
bash-4.1# ifup eth2
Determining if ip address 172.20.72.4 is already in use for device eth2...
bash-4.1#

This configuration will persist across reboot.

Business cards

Business cards

In the age of LinkedIn and mobile apps like Bump (now defunct), it may seem like business cards are becoming obsolete. Up to this point in time I’ve never felt the need to create a business card for myself.

However, I learned on my recent trip to Southeast Asia that the giving and receiving of business cards is very much alive and well. In this region of the world it is an important way of showing honor and respect.

In Southeast Asia, when you give and receive a business card, you should hold it with both hands, with the card facing the recipient. When you receive a card, you should read it carefully and slowly. If you are sitting down to a meeting, you should place the cards you have received in front of you for the duration of the meeting. And you should always keep cards in a card case, not in your pocket.

So, in order to prepare for future trips, I’ve finally printed my own set of business cards and bought a card case.

The PureApplication family grows

The PureApplication family grows

Congratulations to my fellow PureApplication team members for their achievement in releasing IBM PureApplication Software for US Federal Services this month!

Previously, PureApplication was available in four forms: PureApplication System, a fully integrated appliance with x86 and POWER models; PureApplication Service, running in the IBM SoftLayer public cloud; PureApplication Software, allowing customers to use the PureApplication engine in their own VMWare or PowerVC private clouds; and PureApplication Software on Azure, supporting deployment to the Microsoft Azure public cloud.

Beginning this month, IBM now has PureApplication Software offerings for Amazon’s GovCloud and Commercial Cloud Services (C2S) cloud regions. PureApplication is the premier way to deploy IBM middleware to Amazon EC2.

Multiplication tables

Multiplication tables

For some time now, we’ve been using the BigBrainz math game to help the kids practice their addition, subtraction, multiplication, and division facts.

I’m very impressed with the game. The little bit of artificial stress that is added when your math fact is crucial to defeating a “boss” seems to really help reinforce their memorization compared to flash cards!

Asher has made enormous progress in just the last week on his multiplication tables with daily BigBrainz practice. If you’re looking for a simple and fun way to reinforce multiplication tables and other math facts for your children, I highly recommend BigBrainz.