Friday, April 29, 2011
Combining ConfigParser and argparse with parse_known_args()
I'm a fan of both the ConfigParser and argparse modules in my Python scripts and I've always thought it would be great to have a way to combine them. In other words allow the user of a script to provide a command line option that specified a configuration file that specified defaults for the command line options.
Recently I discovered the parse_known_args() method, which allows one to do just that.
Here's the script p.py that demonstrates this:
Here's a configuration file and a demonstration of how it works:
So this is what I was looking for, the caller can specify a configuration file with defaults, but override those defaults with more command line options.
There's only one problem, the help option only shows the configuration file option:
That's because the '-h' is processed by the parse_known_args() instead of the final parse_args(). The way to fix this is to create two ArgumentParsers and use the add_help parameter when creating first to suppress it from parsing -h:
Now help works like you would expect:
Sunday, November 28, 2010
Using 'git stash' as a Todo list
# The following function should check the argument and make sure # it is an integer greater than zero otherwise it throws a really weird error: # ...some example of error...
And then save it to the stash with with a descriptive message (use 'git stash save --patch' if I have other stuff in my working tree):
git stash save "foo.c TODO: check argument is greater than zero"
Then later I use 'git stash pop' to bring my comments back into my working tree, make the fix and commit it. (You can name the TODO stash if you've save other things to the stash after the Todo.)
This is a reverse of the "interrupted workflow" example in the git-stash man page. Instead of interrupting my work for the bug, I'm pushing the bug into the stash so it doesn't interrupt me.
The nice thing is the comment is right in the code where it is relevant. Plus by using the string "TODO" in the message, I can quickly view any stashed todos:
% git stash list | grep -i todo
stash@{0}: On develop: foo.c TODO: check argument is greater than zeroObviously this doesn't replace a real bug tracking system, but it works well for fixes I want to get to "soon" without interrupting my current flow. If it turns out I can't get to it soon, it's easily committed so I don't lose it.
Update 11/29: Someone on HN suggested branches were a better way to do this. I played with it briefly and worked out the following script to use branches (this is a quick hack and missing a lot of error checking, don't even thing about trying to use it): (Update: doesn't quite work as written, you need to use "
git symbolic-ref HEAD" as described here.)#!/bin/sh msg=$1;shift # Kudos: http://stackoverflow.com/questions/1593051/how-to-programmatically-determine-the-current-checked-out-git-branchbranch=`git name-rev --name-only HEAD`git checkout -b $msg git add -p git commit -m "$msg" git checkout $branch
So this approach would work, and I kinda like the idea, but frankly by the time you polish this script enough to make it robust, you may as well just use a real issue tracker.
Sunday, August 29, 2010
My first experience with backscatter security...
On my recent flight from Denver, I had my first experience with a new backscatter security scanner. And I have to say, I found it very disturbing.
First, it caught me by surprise, I was returning from a workshop, having a good conversation with a colleague, going through security on autopilot. I put my stuff on the x-ray belt and then the first unusual thing happened: the TSA guard asked if I anything in my pockets. "No metal" I said. "No anything" they clarified. Odd, I thought, and double checked. "OK, nothing" I affirmed, just my boarding pass in my hand. Then I was ushered towards a device next to the normal metal detector which looks like a clear vertical tube about the size of a broom closet (the photo in this LATimes article seems close).
Now unlike walking through a metal detector, where you basically walk through like you would a doorway, the backscatter process is much more controlled and time consuming. First they took my boarding pass. Then I had to step in and assume a fixed position with my hands in a triangle over my head (thumbs and index fingers touching - the photos I find online don't really show how high your hands have to be). I had to hold that position for several seconds while the device pivoted around me, closing the entrance I walked in and opening an exit towards the other side. While I was standing there all the images I'd seen online were going through my head and the thought that somewhere someone was now basically looking at me naked while I had to hold this pose. (It probably takes a moment for the image to develop so in fact they weren't looking at me yet.)
Then I was told to wait in the device for a few more seconds, presumably until someone verified they got a good image. The guard at the exit had a walkie-talkie they were using through the process to communicate with someone looking at the image - I don't recall if they got a clear signal to let me exit or if they just waited a fixed period of time. After I exited I figured I was done, but I was then directed to another spot, outside the scanner, with foot outlines on the floor, and had to wait for another 5-10 seconds until the guard got a "male subject clear" message from their walkie-talkie (actually, the first time the message was garbled and the guard had to ask for a repeat, hence my knowledge it's a two-way communication channel).
Then I was given back my boarding pass and was free to go collect my stuff from the x-ray belt, where it had been sitting for a while at this point. (I wonder what would keep someone from walking off with it? I certainly was in no position to keep an eye on it. It wasn't clear TSA was.)
So why did I find it disturbing? First, I have to say the TSA guards were courtesy through out, they did nothing to contribute to my discomfort besides being part of the process. I can think of three reasons why it bothered me: (1) from start to finish, it's much more controlled. Unlike the metal detector, where you walk through on your own volition, it is a series of steps where you stand in specific places and poses - you feel very tightly controlled. (2) It's very asymmetric: somewhere, someone you can't see is scrutinizing you and you don't even know where or who they are. (3) It's very revealing. Having seen pictures online, I know just how laid bare I was. I've never been strip searched, so I won't say it's comparable, but with the combination of being tightly controlled and knowing I'm being seen basically naked, it's the only analogy that comes to mind.
Why was I picked to go through the device? Best I could tell, they just picked the next person in line as soon as the scanner opened up.
Did it make me feel safer? No. From everything I read (google for "odds of dying from terrorism"), I know I'm much less likely to die from a car crash, cancer and many other things. My odds of being killed by terrorism on that flight from Denver I'm sure were much lower than my odds from dying from human error on the flight.
Would I do it again? You can decline to undergo the process, but based on my experience, don't expect this option to be offered, you'll probably have to assert it. There is some debate as to how you'll be treated if you do so. I did find it disturbing enough that if I'm not in a hurry, I will decline it and take the alternative.
Added 9/20/2010: Some experiences with declining to undergo the process collected by Lauren Winstein.
Wednesday, June 2, 2010
New professional blog: blog.vonwelch.com
Additionally I have "How did I do that?" - my collection of miscellaneous how tos - and Von's Ubuntu Experiences, my ongoing diary of Ubuntu/Mythbuntu system administration.
Saturday, May 1, 2010
Look out Mickey!
Years ago — no one seems to know when — feral cats began to sneak into the park, living among the park's trees and shrubs during the day. At night, they venture out, and an estimated 200 cats now prowl through Disneyland and neighboring California Adventure Park.
But instead of evicting the cats, Disneyland's animal wranglers work to control the feline population by spaying and neutering the adult cats and finding homes for all kittens born in the resort. The cats eat at five permanent feeding stations installed throughout the two parks.
Tuesday, April 27, 2010
New mortiser table
At right is my stock mortiser and table. It was OK but had a few short-comings:
- The table is rather short (~9"), so it didn't support long stock like table legs well. I was constantly having to come up with ways of supporting work pieces.
- The fence was short, so it was hard to clamp stops for the start and stops of the mortises when I was doing multiple identical workpieces.
- The short fence also made it hard to clamp the workpiece in place to keep it from drifting either right-left or away from the fence.
- The table is a full 18" wide to better support stock.
- The fence has t-tracks in both the face and the top to allow for a variety of stops. I use a flip stop in the top track to set the start of my mortise and a fixed stop in the face to set the end of the mortise.
- The table also has two tracks perpendicular to the fence to allow for clamping the workpiece and keeping it tight to the fence. I use one rotary guide on the left to keep the workpiece against the fence (I ordered a pair of guides from Rockler, though they don't seem to sell them separately from their table at this time). On the right I use a fence clamp to hold the workpiece not only against the fence but in place horizontally during the down stroke of the mortiser.
Monday, November 2, 2009
A great post on standards by Adam Bosworth
Monday, October 12, 2009
"Open Source is Really About Documentation" and many other things...
if the documentation for an open source project sucks, nobody but the most hardcore developers will use it.I'll give a different summary: Developing good software is less about developing and more about many other things: documentation, maintaining stability, good release practices, good patches, etc.
Wednesday, May 13, 2009
Google Docs for Proposals - not quite there yet
The short-comings are:
- Outline mode: MS-Word has outline mode, which lets you move whole sections of your document around via drag'n'drop which I found critical for getting the basic structure of the document in order. With Google Docs you can cut'n'paste sections, but it's hard to get the structure, especially when considering short-coming #2 which is...
- Outline numbering: While Google Docs does support having a table of contents, it doesn't support outline numbering of sections. (I did find this bookmarklet which will do it for you, but you have to run it every time you change the sections.)
- Image captions: While MS-Word makes me want to pull my hair out at times when it comes to image placement and Google Docs has a nice drag it where you want it interface, it has no support for image captions.
- Bibliography and Citations: Again, MS-Word is far from great, but Google Docs has no support. Though it looks like you can post-process this (see second paper below).
Thursday, March 26, 2009
Simple Dollar Time Management Post
I've just capturing the titles here, please do read the full article for a lot more than what I have below. The Simple Dollar is an interesting blog, focusing on financial and productivity issues.
The tips...
Avoid multitasking like the plague.
This is unavoidable at times, but I strongly agree.
Keep a notebook/PDA with you and write down your thoughts.
Like the author, I use EverNote from my iPhone or Mac. Though if I'm really in a hurry and I'll just send myself an email or jot it on my notepad, and then copy it into EverNote when I have a few minutes.
Keep an “inbox” and process it once or twice a day.
Just like the author I keep both an online inbox (a combination of my email inbox and EverNote) and a written inbox on a notepad on my desk. At the start of my day I process the online inbox, creating my to-do list (more about this in a moment) and at the end of my day I process the written one, moving any items still undone to my online inbox, meaning all my to-dos are online and available from anywhere (home, on travel, etc.) when I leave work.
Keep a project list - and focus on it at least an hour a day.
I also keep this list in EverNote. Certainly I hope to find at least an hour every day to work on stuff in it (if I don't that means I'm in meetings all day :-/).
Keep a SHORT to-do list for each day - four items, max.
At the start of my day, I review my inbox and project list and I select what I'm going to work on for the day. I limit myself to 2-3 large items that I know will take a chunk of interrupt-free time (typically writing or planning), and then I have a half dozen or so small items that will just take a couple minutes each (e.g. send an email, order something, set up a meeting, make a quick decision, have a quick chat with someone). Whenever I get time to work, I pick a item based on the length of time I have - if I just have a few minutes between meetings, I do one or more small items, if it's longer than say 15 minutes, I pick a large item and work on it. I like to have a number of large items in case I get blocked on one or reach a point where it just needs to percolate, then I can switch to another one and make good use of any interrupt-free time.
Check email only twice a day.
I fail badly here. What happens to me is that when I start thinking about something, my hand just seems to wander my mouse over to my email applications and check it. I don't know I could get away with just twice a day, but certainly checking less would help me keep more focused at times. Maybe I should try shutting down my email application as the author suggests...
File things once a day.
I'm lucky - I deal with very little physical paper in my work, so I find I only need to do this weekly. I have a Friday routine where I go through a weekly maintenance of filing paperwork and checking deferred tasks and pending stuff.
Start your day with your major creative or thought-intensive task.
Agreed. I have two peaks in my productivity - first thing in the morning and after about three in the afternoon. Post lunch is definitely my low point - I've learned to use this time to read through old email, read papers, and other stuff that doesn't require peak brain power.
Take lots of microbreaks (or at least switch to very different tasks regularly).
I can't say I have found these to help with energy lulls. I do find that making time for brief unstructured conversations with colleagues is often beneficial. Many good ideas and problems have been solved walking to the coffee shop.
Don’t overwork.
Obviously it is unavoidable at times, but I do find at times taking a break revives one and it worth it in the long run. Sometimes this means 15 minutes during a late night push. Other times it means taking an evening off during a really busy stretch spanning a week or more. And when you do this, you have to make yourself OK with it - if you are feeling guilty when you do it, it just is not effective since your mind never gets into a relaxed state.
Thursday, February 12, 2009
I miss Sandy...
A little background. It all started with me reading Getting Things Done by David Allen. And while I'm not a religious GTD follower, I did take away one concept that has served me well. That is to have a system that gets things out of my brain so I don't have to worry about remembering them. It is very empowering to just know I have a system with which I won't forget things. I find it very stress relieving, letting me concentrate more fully on other things.
What does this mean in practice? Well, my todos fall into a few categories. Some have an obvious time they have to be done, like a meeting or a vet appointment for our dogs. There is a while array of calendar services out there with configurable reminders so that I can be emailed or SMS'ed to remind me. I like Google Calendar and it works well for these.
The next category of todo items is the "someday" category. These todos don't have any hard deadline, but when I have free time, it's nice to have them listed so that I don't have to try to remember them, they are just in front of me. Examples include writing a blog entry, cleaning up some source code I was playing with, or investigating a new technology. Really any sort of task list application works for these, but I found it is nice to have the same application for these todos as for the final cateogory.
The final category of todos is the most tricky, it's the "must be done by" group. For example, a report that has to be written by next Friday, a paper read before a meeting three weeks from now, or a phone call made before the weekend. I include in this category repeating housekeeping tasks like watering the plants in my office every week and checking up on a task I delegated.
These todos don't have a specific time they must be done, just a due date. Sometimes one can schedule them and put them on a calendar like an appointment, but often they take much longer than any single block of time I can schedule. And they are flexible, so I don't want to block out a time I could be using to meet with someone.
What I want with this category of "due by" todos is something that will start pestering me when the due date approaches, where the lead time is configurable depending on the amount of time I need to do the item. If I think it will take me three days to do the task, I'd like the pestering to start a week ahead of time so I know I can find time. If it's a 5 minute task, a day will do.
OK, so back to the title of this post and Sandy. IWantSandy, or Sandy for short, was an online service that offered a service which provided this todo list and reminder functionality. I could enter todos and tell her (yes, I will use the feminine pronouns for Sandy) to bug me when the date approached or not associate a date with "someday" todos. She had a great email interface, allowing me to add items by email and use email to mark them as done. This worked well with email, around which a lot of my work life revolves.
Well, last December, Sandy left me (OK, technically, the web site shut down) and I was forced to find an alternative. First, I tried Remember the Milk, but it just didn't work for me. Here's why:
- It didn't let me configure how far ahead of time I should get reminded about something. It always uses 3 days before the event. This was too long for some todos and not long enough for others.
- If I have multiple events on the same day, I would get them collectively in one email. I really use my email inbox as a short-term todo list for each day and I found not having a separate email for each todo just didn't work for me.
- The web interface was flashy, web 2.0, but it was too flashy. For example, one has to hover over an todo to have a menu appear to edit it and if one wasn't careful in how one then moved the mouse to that menu, it would disappear before one got there. I felt like I was playing a video game trying to use it.
EverNote also allows you to upload pictures and then recognized text in the pictures so you can search on it, something I haven't really used yet, but just seems cool! So far I've been happy with the free version, though if I continue to like it as much as I do now, I'll probably support it by upgrading to the pay verison.
But EverNote has one big short-coming for my todo management needs - it doesn't do reminders! One cannot associate a due date with an item and get email reminders. Alas.
For the moment, I'm using PingMe for this functionality. It offers nice functionality for setting reminders - offering one time or a "pester" mode, which causes it to keep reminding me, at a configurable interval, until I tell it I've done something. The interface is web-based, and nice and clean.
So I'm currently using two services - EverNote for "someday" items and PingMe for "due by" items. It's livable. Somethimes a item moves from one category to the other, which is a pain.
Which brings me back to my title: I miss Sandy. Both EverNote and PingMe do their thing better than Sandy did, but she was a good combination of both and I have yet to find her equal as a reminder assistant.
Thanks for listening.
Monday, February 9, 2009
Saturday, January 31, 2009
Why Blog?
Primarily I agree with Richard's first reason Blogging organizes thoughts. I find the process of collecting and expressing my thoughts enjoyable. My job requires me to do this constantly, but usually under time pressure, so it's nice to have an opportunity to do this at my pace.
Another reason I do it is because I have a desire to share what I've learned. It drives me nuts to think that I've just spent an hour figuring something out that someone else already had or that someone else may be fated to repeat my efforts. This is a big motivation for my Ubuntu experiences blog. It is a diary of my system administration experiences on my home network. I started it for my own benefit so that I could later remember what the heck I did and decided to put it online so that others could hopefully benefit. Based on the amount of traffic and comments it gets, I'm happy with how it is going.
Security Unwrapped is my attempt to atone for my profession's failure to really make computer security understandable usable. My goal is to make computer security understandable for my mother (hi mom!) It consists of my pointing our stories and articles I think achieve that as well as my own writings to try to take aspects of computer security and explain them in simple terms. This writing is by far the most work of the three blogs, I wish I could do more of this, but it takes time and inspiration.
The third (and final for the moment) blog is blog.vwelch.com. Honestly, I started this because I had stuff I wanted to blog about (like this) that is out of scope of my other two blogs, so I intentionally scoped it as a catch-all. Tying it back to Richard's post, it's probably most accurately described by Blogging captures and shares thoughts.
Well, that's that. Thanks for listening. Happy blogging.
Saturday, January 3, 2009
Getting rid of the gas mower: My year with the Neutron 6.2
Update Jan 31, 2009: Fixed broken image link.
I hate gas mowers with a passion. For years, I used a reel mower, but as part of a compromise with the wife when bought our house together, we got a gas mower.
But, about a year ago, I saw a compromise to the compromise in a cordless electric mower and we got a Neuton CE 6.2 Battery-Powered Mower.

After one year of using this mower, I'm very happy with it and wanted to share my experiences.
The pros:
- It is quiet. We're not talking whisper here, but compared to a gas mower, it's a pleasure to the ears.
- It just starts. Press the button and it runs. No messing with pulling a rope, clogged spark plugs, bad gas, tune-ups or any of that other small gas engine fun.
- Speaking of gas, it doesn't use any. No having to buy gas, haul it around or store it. (Ditto for oil.)
- It's light. Easy to turn and push.
- No pollution. (Ok, somewhere someone makes the electricity I understand, but I gotta think/hope/believe it's done much more cleanly than a gas mower, which is just a air-born carbon factory as far as I'm concerned.)
Only other thing to relate: late in the Summer, it suddenly stopped working one day while I was mowing. It has a thermal cutoff, and I figured that had tripped, but I checked and it hadn't. Poking around a little further I found the holder for the cutoff itself had melted. I email neuton, explained what had happened and to their credit, they shipped me a replacement board no questions asked. It was a new version of the board, so I'm hoping it was a problem they addressed.
(I have to admit, I'm not sure how someone without aptitude would have actually gone about swapping the boards, it wasn't rocket science, but did require disassembling and reassembling the mower - about 20-25 minutes of using a screwdriver, and disconnecting and reconnecting wiring).
The only other thing to mention is that it's not self-propelled. Fine by me (remember, I'm used to the reel mower), especially since it is so much lighter than a gas mower.
All together I'm very happy with it and wouldn't go back
Monday, December 29, 2008
Stuff on the Net I Like...
(Update: Lesson learned with Blogger - don't use relative sizes for images, e.g. height="10%", they look like they work until you publish and then they seem to get ignored. Use absolute values, e.g. height="100px".)

grooveelectic is nice regular music mix you can get via podcast. I find it's great music for working out but not so in your face that it can't be used as background music while you're working.

I admit I was skeptical at first of Facebook. But now that I've used it for a while, I see it's a great way to keep track, if not in touch, with people.

Some of my professional side showing through here, but if you want a good, pragmatic view of computer security and security in general, Bruce Shneier is a good source. He has both a blog as well as a monthly email.

DropBox is just a great network filesystem, letting you store and access files from multiple computers. It has web interface as well as a software to sync the files with a directory on your local filesystem. It doesn't get any easier.
Firefox is an alternative web browser to IE, Safari, etc. I find it very useful because it runs on all the different computers I use plus you can add all sorts of add-ons to increase its usefulness.
Delicious is a great alternative to web browser bookmarks. All your saved sites can be accessed from multiple computers, plus you can tag sites with multiple keywords and sort or search based on keywords. And if you are a Firefox users, there is a great extension to make using delicious easy.

Google has a lot of useful things, but if I limit myself to just one thing, it would be Google Docs. Collaborative on-line sharing and editing of documents done right.

Every Day Fiction is a daily short story you can read in five minutes. You can get it either via email or RSS.

The Fail Blog is just a good daily dose of mindless humor.
Thursday, December 18, 2008
Notes in Email
I tried XNote, but found that on the Mac is was too unreliable - I constantly had problems with notes not appearing. (I did not try the experimental XNote Plus add-on.)
I found Notary, but it doesn't work for version 2 of Thunderbird. But then I stumbled across this unoffical port of Notary to Thunderbird version 2. I installed it and so far it seems to be working fine. It adds a panel at the bottom of each email into which I can type notes that persist even when I move notes from one folder to another.
I did find I had to disable my Nostagly add-on which added keyboard shortcuts, otherwise those shortcuts take effect when I type keys into the notes panel.
Sunday, December 14, 2008
Harmony 880 and Insteon IR Linc (2411R)
Having gotten all this. Making it work together turns out to be trickier than I would have thought, so I'm documenting my experiences here. To start with, I already had the switch installed and working, which was a little tricky since unlike a standard household switch, it required a neutral connection in addition to the switch power line (consult an electrican if you don't know what you are doing here).
First thing I did was get the credit card remote that came with the IR Linc working. Following the directions on the quick start guide (pdf) that came with the IR Linc, I plugged in the IR Linc (you'll want to plug it in where you can see it easily) and did the following:
- Pointing the remote at the IR Linc, I pressed the "To Scene" button until the blue LED on the IR Linc flashed and turned off(a couple seconds).
- Still pointing the remote at the IR Linc, I pressed the Up arrow for Scene A. The blue LED started flashing.
- On the wall switch, I held the down paddle until the lights it controlled turned all the way off and then flashed, at which point the blue LED went solid (about 10 seconds).
At this point I could press and release the up or down arrow for scene A and turn the lights on or off, or press and hold either of the buttons to dim the lights up or down respectively. Pressing the "All On" or "All Off" buttons also served to turns the lights on or off. So success on getting the credit card remote working.
Now I turned my attention to the Harmony 880. First thing I did was create a new device in the remote. I found this list of IRLinc Receiver Compatible Codes, but I found I was able to create a more appropriate device. In the Harmony Remote software I selected "Add Device" (under "Devices") and then selected Home Automation -> Light Controller in the first column, "Smarthome" for the manufacturer, and for model I entered "2411R" for the model". This created a device with the numbers 0-9 on the key pad and additional buttons for 10-49.
Hmmm, this this was obviously nothing like the credit card remote (which had no numbered buttons). But anyways, I proceeded with the following based on these directions in the user's manual:
- With the credit card remote, I pressed the "To Scene" button until the blue LED on the IR Linc flashed and turned off(a couple seconds).
- Now with the harmony remote, I selected the newly added Light Controller device and I pressed the "1" button. The blue LED started flashing.
- On the wall switch, I held the down paddle until the lights it controlled turned all the way off and then flashed, at which point the blue LED went solid (about 10 seconds).
At this point I verified the pressing the "1" button on the remote did indeed toggle my lights, but I had no ability to dim the lights that I could tell.
Poking around on the net, I found this post, which describes how to program a button to just turn off or off, which I haven't see anywhere else. After pressing the button on the remote you want to link: "If you want a on or off command rather than toggle press the button on the IRLinc (once for on, twice for off)."
Based on this, I did the following:
- With the credit card remote, I pressed the "To Scene" button until the blue LED on the IR Linc flashed and turned off(a couple seconds).
- Now with the harmony remote, I selected the newly added Light Controller device and I pressed the "2" button. The blue LED started flashing.
- I pressed the button on the side of the IR Linc once.
- On the wall switch, I held the down paddle until the lights it controlled turned all the way off and then flashed, at which point the blue LED went solid (about 10 seconds).
- With the credit card remote, I pressed the "To Scene" button until the blue LED on the IR Linc flashed and turned off(a couple seconds).
- Now with the harmony remote, I selected the newly added Light Controller device and I pressed the "3" button. The blue LED started flashing.
- I pressed the button on the side of the IR Linc twice.
- On the wall switch, I held the down paddle until the lights it controlled turned all the way off and then flashed, at which point the blue LED went solid (about 10 seconds).
Then I found this post which led me to believe that perhaps only certain buttons (Vol-/+ and Channel-/+) were capable of doing smooth, repeated sending of the IR to achieve dimming. Back in my Harmony software, under Devices I selected the Lighting Controller and under Settings/Customize Buttons I mapped Vol+ to "2" and Vol- to "3" and then updated the remote. Afterwards, I selected the Lighting Controller device again and tried out the Vol+ and Vol- buttons and I got dimming, both dimmer and brighter. Progress!
I verified the following buttons support smooth dimming on the Harmony 880: Vol+/-, Channel +/-, Up, down, right and left (around the "OK" button), the up and down arrow buttons beneath the OK button, Replay and Skip, and Rewind and Fast Forward.
Now I wanted to add control of the lighting to one of my activities. Back in the Harmony software, I selected the activity and selected "Review Settings" and then "Yes, but I want more control...". On the next screen I added the Lighting Controller as a device in use. Then I clicked Save/Next/Done until I got back to the main menu. Then I selected "Customize Buttons" for the activity. I mapped "Up Arrow" and "Down Arrow" to Lighting Controller "2" and "3" respectively and clicked "Done" to get back to the main menu. Then I updated the remote again. Selecting that activity now, the Up and Down arrows let me brighten and dim my lights successfully.
That's enough success for this post. The one thing I'd still like to figure out is how to have one button press that dimmed the lights to a preset level (i.e. not all the way on or all the way off, but somewhere in between). But I'll save that for another evening...
