Since I love to read, people sometimes ask me about my favorite books. I inevitably leave some out so I thought I'd collect them in an easy-to-find place. So here are my favorites.
Favorite authors still actively publishing
Connelly, Michael - Harry Bosch series
Crais, Robert - Elvis Cole/Joe Pike series
Doctorow, Cory - Little Brother, Walkaway, Makers, and others
Gaiman, Neil - American Gods and anything else
Hiaasen, Carl - anything
Ide, Joe - IQ series
Kowal, Mary Robinette - anything
Scalzi, John - anything
Sloan, Robin - Mr. Penumbra's 24-Hour Bookstore and others
Stross, Charles - the Laundry File series
Taylor, Dennis E - Bobiverse series
Wells, Martha - Murderbot series
Other favorite books (sorted by author name):
Adams, Douglas - First two Hitchhiker's Guide books and Dirk Gently series
Asimov, Isaac - Robot series, Foundation trilogy
Dudley, John Ball - In the Heat of the Night
Ellison, Harlan - Dangerous Visions and others
Feynman, Richard - Surely You're Joking, Mr. Feynman!: Adventures of a Curious Character
Follett, Ken - Eye of the Needle
Goldman, William - The Princess Bride & The Marathon Man
Heinlein, Robert A. - The Moon is a Harsh Mistress and his juvenile series
Irving, John - A Prayer for Owen Meany
Kidder, Tracy - The Soul of a New Machine
Kipling, Rudyard - Kim, Captains Courageous, and others
Leonard, Elmore - Maximum Bob
London, Jack - anything
Miller, Walter M - A Cantical for Leibowitz
Niven, Larry - Ringworld
Noah, Trevor - Born a Crime: Stories From a South African Childhood
Parker, Robert B. - early Spenser novels, Jesse Stone series, Virgil Cole/Everett Hitch series
Pullman, Philip - His Dark Materials trilogy
Robinson, Spider - Callahan's Crosstime Saloon series
Sayers, Dorothy - Lord Peter Wimsey series
Shute, Nevil - Trustee from the Toolroom
Sturgeon, Theodore - More Than Human and all others
Tolkien, J.R.R. - The Lord of the Rings trilogy
Twain, Mark - anything
Vonnegut, Kurt - Slaughterhouse Five and all others
Weir, Andy - The Martian
Winters, Ben H - The Last Policeman trilogy
Wodehouse, P.G. - Meet Mr. Mulliner and others
Favorite graphic novels (sorted by author name):
Ennis, Garth - Preacher, The Boys
Moore, Alan - Watchmen, V for Vendetta
O'Malley, Bryan Lee - Scott Pilgrim's Precious Little Life
Vaughn, Brian K. - Ex Machina
This blog gives me a place to comment on things which strike my fancy, hence the title. Topics may include computer software/hardware, science, space, beer, books/movies/television programs of a geeky nature, or almost anything else. It is not marked as containing adult content but be warned that I occasionally post about beer and sometimes forget to watch my language. I've been writing systems software since the days of core memory, paper tape, and front panel lights/switches.
Saturday, February 06, 2021
Favorite books
GNU Screen can make SSH sessions persistent
I do a fair number of Linux kernel builds at work. Doing a Yocto build for our target machine takes about an hour and 40 minutes for a the build to complete and the root filesystem to be prepared. If I do that from home, there's a chance that I'll get a hiccup on my VPN connection which might disrupt the build in progress. Even at work, I ssh into my Linux build machine from a Windows laptop and use xterm sessions for most of my development tasks. If I kick off a build before heading home, there's always a chance that Windows will decide to do an update which could also disrupt my build.
Fortunately GNU Screen can make your sessions persistent through disruptions due to network disconnections or other reasons. Now I make sure to start a GNU Screen session before doing my build. I start named screen sessions with a command such as "screen -S build". That way, if my session is disconnected, I can rejoin it with the command "screen -r build".
The one thing I don't like about GNU Screen is its default escape key, Control-A, since that interferes with the default Emacs command line editing mode in Bash. So I've created a ~/.screenrc configuration file with the following command to change the escape key to Control-T.
escape ^tt
Sunday, January 19, 2020
Running Ubuntu Linux in a VirtualBox VM
The first problem I encountered is that VirtualBox seems determined that new VMs will all run at very low resolutions. I've seen 640x480 being used on when running VirtualBox on both Macs and PCs running Windows 10 and it's ridiculous to be stuck with a resolution that first appeared in 1987. At that resolution, it's difficult to get through the Ubuntu installation setup as some of the buttons appear off the screen. That issue I believe is Ubuntu's fault. They should make it possible to see all buttons regardless of screen resolution. Poking around on Google, I discovered that there's a command line utility included with VirtualBox which allows you to run higher resolutions in the guest OS in VMs. First make sure that VirtualBox is not running. Start a command prompt with administrative privileges and navigate to the directory where VirtualBox is installed since the utility we need is not located in the command path. The directory you want will most likely be something like "C:\Program Files\Oracle\VirtualBox". Issue the command "VBoxManage setextradata global GUI/MaxGuestResolution any". This plus installed the Guest Additions tools in the guest OS should allow you to change your VM to a higher resolution.
The second problem I encountered was after I installed the GUI version of my favorite editor, Vim, using the command "sudo apt install vim-gnome". I was able to launch gvim but the menu was hidden which makes accessing a few features more difficult than necessary. It turns out Gnome on Ubuntu has a bug which prevents some applications from displaying a menu bar. The workaround is to define a command alias to launch Vim which undefines the UBUNTU_MENUPROXY variable.
Wednesday, November 06, 2019
Vi/Vim macros
The macro commands below are from the _vimrc file I use to customize Vim under Cygwin running on Windows 10. Note that characters in red below indicate control characters. ^M is control-M which is the code produced by the Enter key on Windows keyboards. ^[ is the code produced by the Escape key.
One of the things which saves time for me is having the ability to easily copy and paste lines from one file being edited to another. These macros help me accomplish that.
" set temporary yank and paste filename
let @p="c:\\Users\\ViUser\\Documents\\vim\\vim.tmp"
" mark beginning of a line block (uses the a mark)
map \m ma
Monday, November 04, 2019
Customizing the bash prompt
The bash settings for this prompt are shown below. You can add these lines to your .bashrc file. For operating systems which support an admin or root user, I change the prompt's background from blue to red to give quick confirmation of that elevated privilege level.
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
PBG=44
PFG=37
TFG=36
PS1='\n\[\e]1;Term ${$} \a\e]2;\u@\h - ${PWD}\a\e[1;${PFG};${PBG}m\][\D{%m-%d} \t] eh? \[\e[m\] '
Sunday, August 12, 2018
Searching for source files which contain multiple keywords
So I created the following bash script to search files for each term in order. I used ack instead of grep for the first search so it would pick only source files of interest for me. The results from my bash script returned only a single file which contained all the terms and it was this one which I needed to modify.
if [ -z "$2" ] # Is parameter #1 zero length?
then
echo "usage -- rgt term1 term2 [term3]..."
exit 1
fi
files=`ack -l "$1"`
# shift past the first search term argument since
# we've already used that one
shift
for var in "$@"
do
files=`echo $files | xargs grep -l $var`
done
if [ -z "$files" ]; then # are results zero length?
echo "no matching files found"
else
echo "matching files:"
echo "-------------------------------------"
echo "$files"
fi
Quick and easy code searches
Since I'm a big fan of platform independent tools, I had been using recursive grep searches but those frequently return too many results. It can be difficult to limit the files searched to just the source files of interest. Perhaps you have a unit test directory you don't wish to search. You might also want to skip directories containing library files or other binaries. I prefer a tool called ack to help limit the unwanted files being searched. That prevents lots of false positives which you need to wade through.
Creating a file called .ackrc in your home directory is an easy way of setting the default settings for ack. The following sample .ackrc file configures ack to ignore a few directories which normally don't contain code of interest. It also sets an alternate file extension for makefiles and configures the default source languages of interest.
--ignore-dir=.svn
--ignore-dir=dist
--ignore-dir=docs
--ignore-dir=examples
--ignore-dir=lib
--ignore-dir=tests
--type-add=make:ext:make
--asm
--cc
--make
Using ack and an appropriately configured .ackrc file can significantly reduce the number of lines of matches you must check when searching your source tree for a keyword.
-
A long time ago I was given a bit of advice that has served me well over the years. An engineer with much more experience than I had at the...
-
We lost our very special dog to an osteosarcoma a few days ago. He started limping a little over 4 months ago and it took a while to dia...
-
Most of the longtime Unix users like me love grep. Regular expressions make the silly wildcards available in Windows seem completely underw...
