Please don’t “sell out” Memorial Day

Many will “celebrate” Memorial Day as any other holiday, with barbecues, beer, and commercial sales at local malls. Simply put, they have sold out Memorial Day.

This weekend, please visit a local cemetery, find a marker for any veteran, and reflect on their service to this great nation.

“Your silent tents of green
We deck with fragrant flowers;
Yours has the suffering been,
The memory shall be ours.”
Henry Wadsworth Longfellow

American Flag and Cross in Normandy American Cemetery

Puppet environments vs Git branches

Learning Puppet and Git at the same time does make for a lot of confusion most of the time. But a video I watched the other day finally made something “click” in my head about how to manage our multiple environments with Puppet. I had been struggling with the belief that, since we have 3 environments — Dev, Test, Production — we were going to need to maintain 2 long-lived branches (“dev” and “test”) for modules and Puppet code to track changes we’re making, and then deal with using pull requests/etc to migrate the changes from Dev to Test to Production.

That seemed like it was all wrong. And I think it is.

Instead, a branch for a module/whatever will be used for testing something, and deployed as a dynamic environment via r10k to target server(s) for testing, and then we will issue a pull request/code review to merge that change back into the “master” branch once testing is complete. So all “real” servers in Dev, Test, and Production will always get “master” code deployed to them, with environment-specific differences managed via Hiera. The deployment will be controlled via something like Jenkins to ensure that once a change has been merged back into “master” it does not go right to Production with the next puppet agent run. Tags or something will need to be used to mark “master” as ready to go to Prod. Or else it would just be changes to the r10k control repository, and set eligibile versions there. Maintaining long-lived separate instances of a single control repo for each environment is not as daunting as maintaining three branches of everything all the time.

Anyway. Just tracking my current state of mind on this problem. When I think on it for a while, it seems clear in my head, but then I forget it by the next time I need to use it. So I’m leaving this here as a memory jog next time I get stuck.

dxcmd error “Unable to initialize DClient” caused by config file permissions

Attempting to run dxcmd was yielding this error on one of our IDM servers:

DirXML Command Line Utility
Copyright (C) 2003-2011 Novell Inc., All Rights Reserved

Enter user name: foo.user
Enter user’s password:
java.lang.Error: Unable to initialize DClient
at novell.jclient.JClient.initializeDclient(Native Method)
at novell.jclient.JClient.initialize(
at com.novell.nds.dirxml.util.DxCommand.commandLine(
at com.novell.nds.dirxml.util.DxCommand.main(

Using the command

strace -f dxcmd -user foo.user -password S00perS33cr3t

turned up a “permission denied” error while trying to open /etc/opt/novell/nici64.cfg. On other servers, that file was world-readable; on the problem server, it was owner- and group-readable only.

The chosen fix was to remove world-readable attribute on all servers, and use “sudo dxcmd” to eliminate the file permissions problem.

Fixing Samsung Galaxy S3 after Android 4.4.2 upgrade

I have a Samsung Galaxy S3 with Virgin Mobile. I updated to Android 4.4.2 yesterday. This afternoon, the LTE network did not work. Symptoms were that the network showed as “Samsung” instead of “Virgin Mobile.” Reboots of the phone, and pulling the battery out/waiting/reinstalling the battery did not work.

I found some postings online which suggested that a manual PRL Update followed by a Profile Update would fix the problem, but it did not.

The cure seems to be a phone restart, then enter ##72786# and wait while the phone does some background updates and automatic reboots. Eventually, on the 3rd reboot, the annoying Virgin Mobile “rave dance” wallpaper/music played and my phone connection appears to be working properly (shows that it’s connected to “Virgin Mobile” network now).

Update June 20, 2014: After doing the above fix, I lost 4G (LTE/CDMA) connection, and could only connect via CDMA. Doing a Profile update, then a PRL update, then another Profile update seems to have restored the LTE/CDMA.

In addition, the 4.4.2 Android update seems to have brought Bluetooth tethering ability to the phone! More investigation of this to come…

Using Evernote + AppleScript + QuickSilver for a daily task log

Trying to be better about tracking my daily workload, I need a lightweight hotkey-based mechanism to quickly capture something as I switch tasks. I can then go back later and total up the times, or just jog my memory about what I was doing on a certain day at a certain time. Tracking this information in Evernote is also a bonus as it’s available and searchable on all my devices.

I created an AppleScript first that did the actions needed:

(* Notebook name to create these journal entries in *)
property nb : "Daily Diary"


NOTE: I have added a new portion to the script so that users who
aren't familiar with how to use a handler can run the Script
directly and check it out. If you'd like to use this as a handler
in your own AppleScript, Just delete or comment out the portion


set notetext to text returned of (display dialog "Diary Entry" default answer "")
my handle_string(notetext)

on handle_string(notetext)
if notetext is not "" then
end if
end handle_string


on CreateDailyEvernote(txt)
set t to "Daily Journal " & (do shell script "date +'%Y-%m-%d'")
set crlf to (ASCII character 13) & (ASCII character 10)
set timeStr to time string of (current date)

(* keep track of the app that was running when we hit the hotkey *)
set frontApp to (path to frontmost application as Unicode text)

tell application "Evernote"
set foundNotes to find notes "notebook:\"" & nb & "\"" & " intitle:\"" & t & "\""
set found to ((length of foundNotes) is not 0)
if not found then
set curnote to create note with text crlf & timeStr & ": " & txt & crlf title t notebook nb
repeat with curnote in foundNotes
tell curnote to append text crlf & timeStr & ": " & txt & crlf
end repeat
end if
end tell

(* put the old foreground app back on top *)
tell application frontApp to activate

(* just to be sure there are no odd effects, explicitly hide Evernote *)
tell application "System Events"
set visible of process "Evernote" to false
end tell

end CreateDailyEvernote

and then set a QuickSilver trigger to run the script (I use Ctrl-Cmd-J — for “Journal”).

The effect is a simple plain-text list of entries.

This process is based mainly on the work done by Sonny Gill (“Creating a daily log in Evernote from Quicksilver“), but I took out the parts that write HTML into the note and deal with the clipboard as I don’t want either. I also added some AppleScript to put back the foreground app that was running when I hit the hotkey, in order to minimize the impact to my workflow. I don’t want to have to be clicking or using Cmd-Tab to try and get back to the app I was running before…