SaltyCrane: keyboardhttps://www.saltycrane.com/blog/2017-07-30T18:56:10-07:00How to map Caps Lock to Escape when tapped and Control when held on Mac OS Sierra
2017-07-30T18:56:10-07:00https://www.saltycrane.com/blog/2017/07/how-map-caps-lock-escape-when-tapped-and-control-when-held-mac-os-sierra/<p>
Escape and Control are useful keys when
<a href="/blog/2015/12/switching-emacs-vim-actually-spacemacs/">using Vim</a>
so it's nice to map them to a more convenient key like Caps Lock.
I had been using Karabiner to do this, but Karabiner doesn't work on Mac OS Sierra.
Fortunately
<em>
<a href="https://github.com/tekezo/Karabiner-Elements">
Karabiner-Elements</a>
provides a subset of the features planned for the next generation Karabiner
</em>
including remapping Caps Lock to Escape when tapped and Control when held down.
The solution below is from
<a href="https://github.com/tekezo/Karabiner-Elements/issues/8#issuecomment-309037790">
@zeekay on issue #8
</a>.
I am using Karabiner-Elements 0.91.12 and macOS Sierra 10.12.4.
</p>
<ul>
<li>Uninstall Seil and Karabiner, if previously installed</li>
<li>Install Karabiner-Elements
<pre class="console">$ brew cask install karabiner-elements </pre>
</li>
<li>
Edit <code>~/.config/karabiner/karabiner.json</code> to be:
<pre>{
"global": {
"check_for_updates_on_startup": true,
"show_in_menu_bar": true,
"show_profile_name_in_menu_bar": false
},
"profiles": [
{
"complex_modifications": {
"parameters": {
"basic.to_if_alone_timeout_milliseconds": 250
},
"rules": [
{
"manipulators": [
{
"description": "Change caps_lock to control when used as modifier, escape when used alone",
"from": {
"key_code": "caps_lock",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [
{
"key_code": "left_control"
}
],
"to_if_alone": [
{
"key_code": "escape",
"modifiers": {
"optional": [
"any"
]
}
}
],
"type": "basic"
}
]
}
]
},
"devices": [],
"fn_function_keys": {
"f1": "display_brightness_decrement",
"f10": "mute",
"f11": "volume_decrement",
"f12": "volume_increment",
"f2": "display_brightness_increment",
"f3": "mission_control",
"f4": "launchpad",
"f5": "illumination_decrement",
"f6": "illumination_increment",
"f7": "rewind",
"f8": "play_or_pause",
"f9": "fastforward"
},
"name": "Default profile",
"selected": true,
"virtual_hid_keyboard": {
"caps_lock_delay_milliseconds": 0,
"keyboard_type": "ansi"
}
}
]
}</pre>
</li>
</ul>
<h4>Alternative</h4>
<p>
<a href="https://gist.github.com/kbussell/9d9f9f10032c5bbdec9dc2d2ce5259c2">
@kbussell created a script
</a>
to do the same using
<a href="http://www.hammerspoon.org/">Hammerspoon</a><sup>1</sup>
instead of Karabiner.
</p>
<hr>
<small>
<ol>
<li>
Hammerspoon is awesome.
</li>
</ol>
</small>
How to download a tarball from github using curl
2011-04-21T08:41:14-07:00https://www.saltycrane.com/blog/2011/04/how-download-tarball-github-using-curl/<p>The -L option is the key. It allows curl to redirect to the next URL. Here's how to download a tarball from github and untar it inline:</p>
<pre class="console">$ curl -L https://github.com/pinard/Pymacs/tarball/v0.24-beta2 | tar zx </pre>
<p>Via <a href="http://support.github.com/discussions/repos/1789-you-cant-download-a-tarball-with-curl">
http://support.github.com/discussions/repos/1789-you-cant-download-a-tarball-with-curl</a></p>
<p>Alternatively, using wget:</p>
<pre class="console">$ wget --no-check-certificate https://github.com/pinard/Pymacs/tarball/v0.24-beta2 -O - | tar xz </pre>
(Not too successfully) trying to use Unix tools instead of Python utility scripts
2011-04-20T19:00:32-07:00https://www.saltycrane.com/blog/2011/04/trying-use-unix-tools-instead-python-utility-scripts/<p>
Inspired by articles such as
<a href="http://gregable.com/2010/09/why-you-should-know-just-little-awk.html">
<em>Why you should learn just a little Awk</em></a> and
<a href="http://www.johndcook.com/blog/2011/04/19/learn-one-sed-command/">
<em>Learn one sed command</em></a>, I am trying to make use of Unix tools
<code>sed</code>, <code>awk</code>, <code>grep</code>, <code>cut</code>, <code>uniq</code>, <code>sort</code>,
etc. instead of writing short Python utility scripts.
</p>
<p>Here is a Python script I wrote this week. It greps a file for a given
regular expression pattern and returns a unique, sorted, list of matches
inside the capturing parentheses.
</p>
<pre class="python"># grep2.py
import re
import sys
def main():
patt = sys.argv[1]
filename = sys.argv[2]
text = open(filename).read()
matchlist = set(m.group(1) for m in re.finditer(patt, text, re.MULTILINE))
for m in sorted(matchlist):
print m
if __name__ == '__main__':
main()</pre>
<p>
As an example, I used my script to search
<a href="http://code.djangoproject.com/browser/django/tags/releases/1.3/django/contrib/admin/templates/admin/edit_inline/tabular.html">
one of the Django admin template files</a> for all the Django template markup in the file.
</p>
<pre class="console">$ python grep2.py '({{[^{}]+}}|{%[^{}]+%})' tabular.html </pre>
<p>Output:</p>
<pre>{% admin_media_prefix %}
{% blocktrans with inline_admin_formset.opts.verbose_name|title as verbose_name %}
{% cycle "row1" "row2" %}
{% else %}
{% endblocktrans %}
{% endfor %}
{% endif %}
{% endspaceless %}
{% for field in inline_admin_formset.fields %}
{% for field in line %}
{% for fieldset in inline_admin_form %}
{% for inline_admin_form in inline_admin_formset %}
{% for line in fieldset %}
{% if field.is_hidden %}
{% if field.is_readonly %}
{% if field.required %}
{% if forloop.first %}
{% if forloop.last %}
{% if inline_admin_form.form.non_field_errors %}
{% if inline_admin_form.has_auto_field %}
{% if inline_admin_form.original %}
{% if inline_admin_form.original or inline_admin_form.show_url %}
{% if inline_admin_form.show_url %}
{% if inline_admin_formset.formset.can_delete %}
{% if not field.widget.is_hidden %}
{% if not forloop.last %}
{% load i18n adminmedia admin_modify %}
{% spaceless %}
{% trans "Delete?" %}
{% trans "Remove" %}
{% trans "View on site" %}
{{ field.contents }}
{{ field.field }}
{{ field.field.errors.as_ul }}
{{ field.field.name }}
{{ field.label|capfirst }}
{{ forloop.counter0 }}
{{ inline_admin_form.deletion_field.field }}
{{ inline_admin_form.fk_field.field }}
{{ inline_admin_form.form.non_field_errors }}
{{ inline_admin_form.original }}
{{ inline_admin_form.original.id }}
{{ inline_admin_form.original_content_type_id }}
{{ inline_admin_form.pk_field.field }}
{{ inline_admin_formset.formset.management_form }}
{{ inline_admin_formset.formset.non_form_errors }}
{{ inline_admin_formset.formset.prefix }}
{{ inline_admin_formset.opts.verbose_name_plural|capfirst }}
{{ inline_admin_form|cell_count }}
{{ verbose_name }}</pre>
<p>Here's my attempt at using Unix tools:</p>
<pre class="console">$ sed -rn 's/^.*(\{\{.*\}\}|\{%.*%\}).*$/\1/gp' tabular.html | sort | uniq </pre>
<p>However the output isn't quite the same:</p>
<pre>{% admin_media_prefix %}
{% else %}
{% endblocktrans %}
{% endfor %}
{% endif %}
{% endspaceless %}
{% for field in inline_admin_formset.fields %}
{% for field in line %}
{% for fieldset in inline_admin_form %}
{% for inline_admin_form in inline_admin_formset %}
{% for line in fieldset %}
{% if field.is_readonly %}
{% if inline_admin_form.form.non_field_errors %}
{% if inline_admin_form.original or inline_admin_form.show_url %}
{% if inline_admin_formset.formset.can_delete %}
{% if not field.widget.is_hidden %}
{% load i18n adminmedia admin_modify %}
{% spaceless %}
{% trans "Remove" %}
{{ field.contents }}
{{ field.field }}
{{ field.field.errors.as_ul }}
{{ field.field.name }}
{{ field.label|capfirst }}
{{ inline_admin_form.fk_field.field }}
{{ inline_admin_form.form.non_field_errors }}
{{ inline_admin_formset.formset.management_form }}
{{ inline_admin_formset.formset.non_form_errors }}
{{ inline_admin_formset.formset.prefix }}
{{ inline_admin_formset.opts.verbose_name_plural|capfirst }}</pre>
<p>Unix tools are powerful and concise, but I still need to
get a lot more comfortable with their syntax. Please leave a comment
if you know how to fix my command.
</p>
Got my Leopold Tenkeyless from Elite Keyboards
2011-04-16T07:48:21-07:00https://www.saltycrane.com/blog/2011/04/got-my-leopold-tenkeyless-elite-keyboards/<a href="https://picasaweb.google.com/lh/photo/zWpdHFxtpLC03mHejtMnjQ?feat=embedwebsite"><img src="https://lh3.googleusercontent.com/_WnP2PKiLI14/TaC6Ya9Z09I/AAAAAAAAAYQ/J2lKJfUrPRo/s400/IMG_20110407_204508.jpg" /></a>
<p>
<em>2011-04-07:</em>
Got the Leopold tenkeyless for work. Tenkeyless is a must for quicker mouse access. And I actually like the lighter touch of the Cherry MX Browns versus the Unicomp's buckling springs. I like it so much I want to replace my Unicomp at home with another Leopold.
</p>
<p>
<em>UPDATE 2012-02-08:</em>
Since I liked my first one, and got tired of hitting my mouse against my
Unicomp, I got a second Leopold Tenkeyless for home.
</p>
<h4>Links</h4>
<ul>
<li><a href="http://elitekeyboards.com/products.php?sub=leopold,tenkeyless&pid=fc200rtab">
Leopold Tenkeyless Tactile Touch Keyboard at Elite Keyboards
</a></li>
<li><a href="http://geekhack.org/showwiki.php?title=START+HERE+--+The+Geekhack+Mechanical+Keyboard+Guide+-+Includes+Glossary+and+Links">
The Geekhack Mechanical Keyboard Guide
</a></li>
<li><a href="http://geekhack.org/showwiki.php?title=Island:6189">
Comparison of key force for Model M, Unicomp, Cherry Browns/Blues, and Topre from geekhack
</a></li>
</ul>
On the quest for consistent keybindings
2008-07-09T17:53:00-07:00https://www.saltycrane.com/blog/2008/07/on-quest-for-consistent-keybindings/<p>I'm trying to get consistent keybindings in the applications
which I use the most starting with Emacs, then bash/screen,
conkeror (my web browser), and others like KPDF and OpenOffice.
I haven't got complete consistency, but I'm making progress.
Here are my notes on setting the keybindings for a few of the
applications. Maybe when I find the perfect setup, I will write
about my complete configuration. Until then, here are some sparse
notes. Note, for some reason, I've mixed in vi-style, h-j-k-l,
movement keybindings with the standard emacs keybindings. I use
control+h,j,k,l to move around by character or line and
meta+h,j,k,l to move by word or page. I've been using this for
several months and it works pretty well-- much better than using
pgup/pgdown and the arrow keys.</p>
<br /><br /><b>Emacs</b><br />
<p>Here is part of my <code>~/.emacs</code>:</p>
<pre>;; buffer switching
(iswitchb-mode t)
(global-set-key "\C-b" 'switch-to-buffer)
;; movement key bindings (use h-j-k-l for movement like vi)
(global-set-key "\C-l" 'forward-char)
(global-set-key "\C-h" 'backward-char)
(global-set-key "\C-j" 'next-line)
(global-set-key "\C-k" 'previous-line)
(global-set-key "\M-l" 'forward-word)
(global-set-key "\M-h" 'backward-word)
(global-set-key "\M-j" 'scroll-up)
(global-set-key "\M-k" 'scroll-down)
;; rebind displaced movement key bindings
(global-set-key "\C-p" 'kill-line)
(global-set-key "\M-v" 'downcase-word)
(global-set-key "\M-b" 'recenter)</pre>
<br /><br /><b>Readline (bash)</b><br />
<p>To change the keybindings for readline (bash), I edited my
<code>~/.inputrc</code>. Luckily, readline is very similar
to Emacs and there are a lot of commands that I didn't know
about. Here are a few examples. For a full
list of commands see the readline manpage.</p>
<pre># ~/.inputrc
"\C-h": backward-char
"\C-l": forward-char
"\M-h": backward-word
"\M-l": forward-word</pre>
<br /><br /><b>GNU Screen</b><br />
<p>Here are some keybindings I use in GNU Screen.
I use C-b to switch windows like Emacs buffers. I enter
copy mode by pressing M-k and exit by pressing C-g.
The "-m" means the keybinding is for copy mode only.
"stuff" is used to stuff some stuff into the input buffer.
"^" is used for Ctrl and "^[" is used for Meta (Alt).</p>
<pre># ~/.screenrc
bindkey "^B" select # like emacs switch buffers
bindkey "^[k" eval "copy" "stuff ^b"
bindkey "^k" eval "copy" "stuff k"
bindkey -m "^[j" stuff ^f # move down one page
bindkey -m "^[k" stuff ^b # move up one page
bindkey -m "^[h" stuff b # move backward word
bindkey -m "^[l" stuff w # move forward by word
bindkey -m "^j" stuff j # move down one line
bindkey -m "^k" stuff k # move up one line
bindkey -m "^h" stuff h # move back one character
bindkey -m "^l" stuff l # move forward one character
bindkey -m "^e" stuff $ # move to end of line
bindkey -m "^a" stuff 0 # move to beginning of line
bindkey -m "^f" stuff ^s # incremental search forward
bindkey -m "^ " stuff " " # set mark
bindkey -m "^g" stuff q # exit copy mode</pre>
<br /><br /><b>Conkeror</b><br />
<p>My <code>~/.conkerorrc</code> keybindings section is pretty
long, so I won't include it. But again, I use C-b to switch
buffers, and Ctrl and Meta plus h-j-k-l to navigate.
</p>
<br /><br /><b>OpenOffice.org</b><br />
<p>This is directly from Appendix A Keyboard Shortcuts in the
<a href="http://documentation.openoffice.org/manuals/oooauthors2/0118GS-KeyboardShortcuts.pdf">
<em>Getting Started Guide</em></a>. Unfortunately,
OpenOffice doesn't allow me to use the Meta (Alt) key for
custom keybindings so I can't use my usual Emacs keybindings.
Apparently, Peter in <a href="http://user.services.openoffice.org/en/forum/viewtopic.php?f=7&t=4809&p=22203">this
forum thread</a> had the same lament. If anyone knows how to
fix this, please let me know.</p>
<pre>
To adapt shortcut keys to your needs, use the Customize dialog, as described below.
1) Select Tools > Customize > Keyboard. The Customize dialog (Figure 1) opens.
2) To have the shortcut key assignment available in all components of OpenOffice.org select the
OpenOffice.org button.
3) Next select the required function from the Category and Function lists.
4) Now select the desired shortcut keys in the Shortcut keys list and click the Modify button at
the upper right.
5) Click OK to accept the change. Now the chosen shortcut keys will execute the function
chosen in step 3 above whenever they are pressed.
</pre>
<br /><br /><b>KPDF</b><br />
<p>I like KPDF better than Evince. I haven't tried anything else.
To change some keyboard shortcuts in KPDF go to "Settings",
"Configure Shortcuts..."</p>
How to paste in Cygwin bash using CTRL-V
2008-05-01T18:32:00-07:00https://www.saltycrane.com/blog/2008/05/how-to-paste-in-cygwin-bash-using-ctrl/<p>I come from a Windows background where Cut/Copy/Paste are almost always CTRL+X/C/V
respectively. I like this consistency, so adjusting to Cygwin's (or other *nix
environments') use of SHIFT+INSERT or the middle mouse button for pasting in
terminals is a little annoying. After a bit of googling, I found a mailing
list thread that solved my problem.</p>
<p>This method uses a modification to <a href="http://en.wikipedia.org/wiki/Readline">
readline</a>'s ~/.inputrc configuration file, so it should work in rxvt, xterm,
or even the default cmd.exe shell. Here is what to do:</p>
Add the following line to your ~/.bashrc:
<pre>stty lnext ^q stop undef start undef</pre>
And add the following line to your ~/.inputrc:
<pre>"\C-v": paste-from-clipboard</pre>
<p>These modifications will unmap <code>stty</code>'s <code>lnext</code> (literal next-character) and
<code>readline</code>'s
<code>quoted-insert</code> settings which are normally mapped to CTRL-V.
For more details, see <a href="http://www.cygwin.com/ml/cygwin/2005-08/msg00190.html">
this cygwin mailing list thread</a>.</p>
<p>Note, this appears to be a Cygwin-specific solution. Linux users could use custom key
bindings in <code>gnome-terminal</code> or <code>konsole</code>, or translation tables
with <code>xterm</code>.</p>
<br />Useful commands for reference:<br />
<code>$ bind -p</code><br />
<code>$ stty -a</code><br />
Conkeror: "Firefox for Emacs users"
2008-01-28T17:31:00-08:00https://www.saltycrane.com/blog/2008/01/firefox-for-emacs-users/<p>I recently discovered
<a href="http://conkeror.mozdev.org/">Conkeror</a> via Bill Clementson's article,
<a href="http://bc.tech.coop/blog/060529.html"><em>Firefox for Emacs users
</em></a>. I must say it is pretty sweet. It's the type
of thing that makes you have to get up and go to the bathroom because it's
so exciting.</p>
<p>So I switched over to Emacs from Eclipse about 4 months ago. Though it has
been slow learning everything in Emacs, I am starting to feel pretty
comfortable now and actually feel uneasy when I'm using another editor.
It is very nice to be able to do everything with the keyboard in Emacs. I
can do all cursor movement, scrolling, and selection very nicely in Emacs.
And all text manipulation commands are immediately accessible from the
keyboard. Pair that with a bash command line running inside GNU screen,
and I can do about 50% of my work without using a mouse. Of the other 50%,
one big chunk is Microsoft Outlook which, as far as I know, I need because
we are using an Exchange server. But the other big chunk is web browsing,
which, up until now, has been very mouse dependent.</p>
<p>Enter Conkeror, the keyboard-driven web browser that "conkers" the web
without a mouse. (I just made that up, btw. I do not know the origin of
the name "Conkeror".) Conkeror is a Mozilla-based browser (e.g. Firefox) with
an Emacs-like skin. Emacs users should feel at right home-- screen-stealing
toolbars and menubars are gone. In their place is the modeline and
mini-buffer. Commands are entered using <code>M-x</code>, switch
buffers using <code>C-x b</code>, incremental search using <code>
C-s</code>, and edit text using Emacs editing conventions. (Being
a relative Emacs newbie, I actually rebound a lot of these to be more
Windows/Firefox friendly. But I expect long time Emacs users would rejoice.)
</p>
<p>In my opinion, the best part about Conkeror is the hyperlink navigation
design. Hitting the <code>f</code> key while browsing highlights all
possible hyperlinks (or focus areas) <em>within the current view</em>.
Limiting the scope of choices to the current view is smart because you
most likely won't want to follow a link that's not in the current view.
To follow a link, there are two options. The first is to type in the link
number which is overlaid in the top left corner of each link. The second
method is to start typing any part of the link text and tab through the
remaining selections. A different color highlight shows which link is
currently selected. The second method is very fast-- however, the first
method is more robust in that it can handle links with no text or a large
number of links with similar text.</p>
<p>Conkeror is currently being actively developed and can be considered to
be alpha stage software so there are issues and bugs. Also the documentation
seems to be pretty sparse. However, to me, it looks like a really great tool
with a potential for much more efficient and comfortable browsing. Kudos
to the authors.</p>
<p>Will I ditch Firefox for Conkeror? That question remains to be answered. I
hope the answer will be yes. I plan to use it for a few days and see if I run
across any deal-breakers. Hopefully, with Conkeror, I can up my mouseless
activity to around 70%.</p>
<p>Below are some notes on using Conkeror. I am using the snapshot XULRunner
version of Conkeror on Windows XP.</p>
<br /><br /><strong>How to set a proxy server</strong><br />
<p>Assuming you have your proxy configured in Firefox already...</p>
<ul><li>Type <code>g about:config</code> and hit ENTER in Conkeror.</li>
<li>Hit ENTER to promise you'll be careful.</li>
<li>Hit TAB to get to the "Filter:" box and type in "proxy".</li>
<li>Go to <code>about:config</code> in Firefox and filter on "proxy".</li>
<li>Make the relevant settings in Conkeror match Firefox. Make sure
you set "network.proxy.type" in addition to the proxy servers. (If you
were wondering, no, I don't know how to set these preferences without
using the mouse.)</li>
</ul>
<br /><br /><strong>Here is my .conkerorrc file:</strong><br />
<p>See also <a href="http://dotfiles.org/.conkerorrc">dotfiles.org</a> for a few more.</p>
<pre>// new bindings
define_key(default_global_keymap, "C-w", "kill-current-buffer");
// rebound from global.js
define_key(default_global_keymap, "h", "find-url");
define_key(default_global_keymap, "f1", default_help_keymap);
define_key(default_global_keymap, "b", "switch-to-buffer");
define_key(default_global_keymap, "C-f", "isearch-forward");
// note, i had to comment out the "C-f" binding in basic-commands.js to make this work
// rebound from isearch.js
define_key(isearch_keymap, "C-f", "isearch-continue-forward");
// rebound from normal.js
define_key(content_buffer_normal_keymap, "back_space", "go-back");
define_key(content_buffer_normal_keymap, "S-back_space", "go-forward");
// rebound from element.js
//define_key(content_buffer_normal_keymap, "k", "bookmark");
// rebound from basic-commands.js
define_key(content_buffer_normal_keymap, "home","beginning-of-line");
define_key(content_buffer_normal_keymap, "end","end-of-line");
define_key(content_buffer_normal_keymap, "C-home","cmd_scrollTop");
define_key(content_buffer_normal_keymap, "C-end","cmd_scrollBottom");
// rebound from text.js
define_key(content_buffer_text_keymap, "home", "cmd_beginLine");
define_key(content_buffer_text_keymap, "end", "cmd_endLine");
define_key(content_buffer_text_keymap, "C-left", "cmd_wordPrevious");
define_key(content_buffer_text_keymap, "C-right", "cmd_wordNext");
define_key(content_buffer_text_keymap, "C-y", "cmd_redo");
define_key(content_buffer_text_keymap, "C-z", "cmd_undo");
define_key(content_buffer_text_keymap, "C-v", "cmd_paste");
define_key(content_buffer_text_keymap, "C-x", "cmd_cut");
define_key(content_buffer_text_keymap, "C-c", "cmd_copy");
// new for textarea.js
define_key(content_buffer_textarea_keymap, "home", "cmd_beginLine");
define_key(content_buffer_textarea_keymap, "end", "cmd_endLine");
define_key(content_buffer_textarea_keymap, "C-left", "cmd_wordPrevious");
define_key(content_buffer_textarea_keymap, "C-right", "cmd_wordNext");
define_key(content_buffer_textarea_keymap, "C-y", "cmd_redo");
define_key(content_buffer_textarea_keymap, "C-z", "cmd_undo");
define_key(content_buffer_textarea_keymap, "C-v", "cmd_paste");
define_key(content_buffer_textarea_keymap, "C-x", "cmd_cut");
define_key(content_buffer_textarea_keymap, "C-c", "cmd_copy");
// rebound for textarea.js
define_key(content_buffer_textarea_keymap, "C-home", "cmd_moveTop");
define_key(content_buffer_textarea_keymap, "C-end", "cmd_moveBottom");
// rebound from zoom.js
define_key(content_buffer_normal_keymap, "C-subtract", "zoom-out-text");
define_key(content_buffer_normal_keymap, "C-add", "zoom-in-text");
// webjumps
add_delicious_webjumps ("saltycrane");
add_webjump("g", "www.google.com/search?q=%s");
add_webjump("d", "del.icio.us/saltycrane/%s");
add_webjump("blank", "about:blank");
add_webjump("reader", "www.google.com/reader");</pre>
<br /><br /><strong>How to search the Conkeror mailing list archive</strong><br />
<p>Don't use the one linked from the Conkeror website. Instead use:
<a href="http://www.nabble.com/MozDev---conkeror-f11304.html">http://www.nabble.com/MozDev---conkeror-f11304.html</a>
</p>
<br /><br /><strong>How to get out of Adobe reader when visiting a pdf file</strong><br />
<p>See <a href="http://www.nabble.com/adobe-reader-tp7373120p7373120.html">
this thread</a> on the MozDev - conkeror mailing list archive.</p>
<br /><br /><strong>How to copy a link</strong><br />
<p>Use the <code>c</code> command.</p>
<br /><br /><strong><code>add_command</code> doesn't work!</strong><br />
<p>Per the ChangeLog, it was renamed to <code>interactive</code>. I still
can't figure out how to use <code>message</code> though.</p>
<br /><br /><strong>How to uninstall XULRunner</strong><br />
<p>Run the command <code>xulrunner --unregister-user</code> and then delete
the xulrunner directory. If you deleted the xulrunner directory without unregistering,
delete the registry items in <code>HKEY_CURRENT_USER\Software\mozilla.org\GRE</code>
on Windows, or the directory <code>~/.gre.d</code> on Linux.</p>
<p><em>Update 2008-09-11</em>: I discovered Conkeror now has external editing
capabilities. I can hit C-i in a text box and it will bring up Emacs. Problems:
I set EDITOR and VISUAL to be emacsclient, however,
when I spawn conkeror from wmii using MOD-p, and hit C-i in conkeror, it starts
a new emacs server instead of connecting to my current one. However, if I just
start conkeror from my terminal command line, it works correctly. Also, I don't
know how to change the major mode of Emacs for editing the text boxes. Otherwise,
good stuff.</p>
Useful Windows XP keyboard shortcuts
2007-11-06T16:45:00-08:00https://www.saltycrane.com/blog/2007/11/useful-windows-xp-keyboard-shortcuts/Windows+BREAK: System Properties<br />Windows+D: Display the desktop<br />Windows+E: Open Windows Explorer<br />Windows+L: Lock the keyboard<br />Windows+R: Open the Run dialog box
Useful Firefox keyboard shortcuts
2007-11-06T16:44:00-08:00https://www.saltycrane.com/blog/2007/11/useful-firefox-keyboard-shortcuts/Lesser known shortcuts:<br />CTRL+E or CTRL+K: focus search box<br />CTRL+L: focus location box<br />CTRL+J: toggle downloads window<br />CTRL+U: show page source<br />CTRL+B: toggle del.icio.us bookmarks in the sidebar<br />CTRL+H: toggle history in the sidebar<br />CTRL+D: add a del.icio.us bookmark<p>Basic shortcuts:<br />F11: toggle full screen<br />CTRL+T: open new tab<br />CTRL+W: close current tab<br />CTRL+F: find on page<br />CTRL+PGUP: previous tab<br />CTRL+PGDOWN: next tab<br />CTRL+P: open print dialog<br />ALT+LEFTARROW: back<br />ALT+RIGHTARROW: forward<br />ALT+HOME: home
</p>
My software tools list
2007-08-10T13:32:00-07:00https://www.saltycrane.com/blog/2007/08/current-configuration/<style type="text/css">
td {
vertical-align: top;
}
</style>
<p>Inspired by Mark Pilgrim's
<a href="http://web.archive.org/web/20101214224709/http://diveintomark.org/archives/2006/06/26/essentials-2006">
2006 Essentials list</a>,
below is a list of my current software tools. If you notice a lot of
"I switched from ..." statements, keep in mind that I am a
<a href="http://undefined.com/ia/2006/10/10/the-fourteen-types-of-programmers-type-2-those-that-like-shiny-things/">
programmer who likes shiny things</a>.
</p>
<h4 id="other-lists">Other lists</h4>
<ul>
<li><a href="http://web.archive.org/web/20101214234142/http://diveintomark.org/archives/2008/10/28/essentials-2008">
Mark Pilgrim's Essentials, 2008 edition</a>
</li>
<li><a href="http://web.archive.org/web/20081226033542/http://adam.gomaa.us/blog/essentials-cop-out/">
Adam Gomaa's Essentials (2008)</a>
</li>
<li>Here is a <a href="http://mark.pilgrim.usesthis.com/">2010 update
for Mark Pilgrim</a>. After 2 and a half years, I still have several items
in common: <a href="#operating-system">Ubuntu</a> running <a href="#terminal">rxvt-unicode</a>
and <a href="#editor">Emacs 23</a>, the <a href="#keyboard">Unicomp keyboard</a>,
an <a href="#mobile-phone">Android phone</a>, <a href="#email">Gmail</a>,
Google Reader, Google Docs, and Pandora.
</li>
<li><a href="http://salvatore.sanfilippo.usesthis.com/">Salvatore Sanfilippo on usesthis.com (2011)</a></li>
<li><a href="http://aaron.boodman.usesthis.com/">Aaron Boodman on usesthis.com (2011)</a></li>
</ul>
<h4 id="contents">Contents</h4>
<table>
<tr>
<td>
<ul>
<li><a href="#operating-system">Operating System</a>: Ubuntu</li>
<li><a href="#window-manager">Window Manager</a>: Qtile</li>
<li><a href="#editor">Editor</a>: Emacs</li>
<li><a href="#terminal">Terminal</a>: urxvt + screen</li>
<li><a href="#vcs">Version Control System</a>: Git</li>
<li><a href="#high-high-level-language">"High-high-level" Language</a>: Python</li>
<li><a href="#web-framework">Web Framework</a>: Django/Flask</li>
</ul>
</td>
<td>
<ul>
<li><a href="#web-browser">Web Browser</a>: Firefox</li>
<li><a href="#email">Email</a>: Gmail</li>
<li><a href="#graphical-diff">Graphical Diff</a>: KDiff3</li>
<li><a href="#keyboard">Keyboard</a>: Leopold Tenkeyless (MX Browns)</li>
<li><a href="#office-chair">Office Chair</a>: Undecided</li>
<li><a href="#mobile-phone">Mobile Phone</a>: Motorola Droid 4</li>
</ul>
</td>
</tr>
</table>
<h4 id="my-list">My software tools list</h4>
<table style="font-size:100%">
<tr>
<td ><b>Category</b></td>
<td ><b>Currently using</b></td>
<td ><b>Comments</b></td>
</tr>
<tr>
<td id="operating-system" ><p>Operating System</p>
<a href="#operating-system" title="Section permalink" class="sectionlink">¶</a></td>
<td ><p><a href="http://www.ubuntu.com">Ubuntu</a> 14.04 Trusty Tahr</p>
</td>
<td >
<p>My first
Ubuntu install was in 2007 (dual-boot) and I got my first Windows-free machine
in 2008. I have used Cygwin
and coLinux when on Windows. Cygwin integrates better with Windows applications,
but coLinux is super fast and allows you to run a full Linux distro on top of
Windows. Windows does have some advantages, but overall I prefer Linux.</p>
<p><em>Update 2008-09</em>: Switching jobs means I can now use Linux at work.
I'm now using Linux about 90% of the time. My wife still uses Windows Vista on our laptop.</p>
<p>I don't have enough experience
with OSX to draw any authoritative conclusions, though I think
<a href="http://en.wikipedia.org/wiki/Mark_Pilgrim">Mark Pilgrim</a>
has <a href="http://diveintomark.org/archives/2006/06/02/when-the-bough-breaks">
biased me against Apple</a>. Also, I think Linux's
<a href="http://c2.com/cgi/wiki?FreeAsInBeer">free as in beer</a> (and somewhat
related free as in speech) characteristics
vs. Mac's expensive (and somewhat related proprietary) characteristics
resonate with the cheap engineer in me.</p>
<p>Additional Linux vs. Mac commentary:</p>
<ul>
<li>
<a href="http://en.wikipedia.org/wiki/Jamie_Zawinski">JWZ</a> 2000:
<a href="http://www.jwz.org/doc/linux.html">Unix/linux sucks less, but it still sucks.</a>
</li>
<li>
JWZ <a href="http://jwz.livejournal.com/494040.html">2005</a>,
<a href="http://jwz.livejournal.com/780264.html">2007</a>: Linux sucks more.
</li>
<li>
<a href="http://en.wikipedia.org/wiki/Paul_Graham">Paul Graham</a> 2005:
<a href="http://www.paulgraham.com/mac.html">Return of the Mac.</a>
</li>
<li>
Mark Pilgrim 2006: <a href="http://diveintomark.org/archives/2006/05/30/bye-apple">
Bye, Apple</a>
</li>
<li>
<a href="http://en.wikipedia.org/wiki/Cory_Doctorow">Cory Doctorow</a> 2006:
<a href="http://www.boingboing.net/2006/06/29/mark-pilgrims-list-o.html">
Me too</a>.
</li>
<li>
<a href="http://en.wikipedia.org/wiki/Tim_Bray">Tim Bray</a> 2006:
<a href="http://www.tbray.org/ongoing/When/200x/2006/06/15/Switch-From-Mac">Me too</a>,
<a href="http://www.tbray.org/ongoing/When/200x/2006/08/16/Back-to-the-Mac">Back to the Mac</a>
</li>
<li>
Steve Yegge 2008:
<a href="http://steve-yegge.blogspot.com/2008/04/settling-osx-focus-follows-mouse-debate.html">
Switching to OSX for the fonts</a>
</li>
<li>
Of course, <a href="http://en.wikipedia.org/wiki/Linus_Torvalds">Linus Torvalds</a>
<a href="http://www.smh.com.au/news/technology/q-and-a-with-linus-torvalds/2008/02/05/1202090403120.html?page=2">
"prefers" Linux</a> (2008)
</li>
<li><a href="http://en.wikipedia.org/wiki/Donald_Knuth">Donald Knuth</a>,
author of <em>The Art of Computer Programming</em>,
<a href="http://www.informit.com/articles/printerfriendly.aspx?p=1193856">
uses Ubuntu Linux for work, and Macs for play</a> (2008).
</li>
<li>Salvatore Sanfilippo (author of <a href="http://code.google.com/p/redis/">Redis</a>)
chooses to use
a Mac so he can <em>"focus on what <he's> doing without spending hours trying to
fix unrelated desktop stuff"</em> but says Linux is
<a href="http://antirez.com/post/linux-better-for-coding.html">
<em>"still better for coding"</em></a> (2009).
</li>
<li>Ted Dziuba: <a href="http://harmful.cat-v.org/software/operating-systems/osx/osx-unsuitable-web-development">
<em>MacOS X is an Unsuitable Platform for Web Development</em>
</a> (2011)</li>
<li>Bozhidar Batsov: <a href="http://batsov.com/Linux/Windows/Rant/2011/06/11/linux-desktop-experience-killing-linux-on-the-desktop.html">
<em>The Linux desktop experience is killing Linux on the desktop</em>
</a> (2011)</li>
</ul>
<p>History: 1987: <a href="http://en.wikipedia.org/wiki/Apple_IIGS">Apple GS/OS</a>,
1994: <a href="http://en.wikipedia.org/wiki/Windows_3.1x">Windows 3.1</a>,
2000: <a href="http://en.wikipedia.org/wiki/Windows_98">Windows 98</a>,
2001: <a href="http://en.wikipedia.org/wiki/Windows_XP">Windows XP</a>,
2007: <a href="http://en.wikipedia.org/wiki/Windows_Vista">Windows Vista</a>,
2007: <a href="http://en.wikipedia.org/wiki/Ubuntu_%28operating_system%29">Ubuntu</a>
</p>
</td>
</tr>
<tr>
<td id="window-manager"><p>Window Manager</p>
<a href="#window-manager" title="Section permalink" class="sectionlink">¶</a></td>
<td ><p><a href="http://www.qtile.org/">Qtile</a></p></td>
<td >
<p>The WM written in Python,
<a href="http://panela.blog-city.com/fun_of_tiling_window_managers.htm">
recommended by Matt Harrison</a>.
</p>
<p>Previously, wmii: dynamic, tiling, scriptable window manager that doesn't
require a mouse. It sucks less.</p>
<p>I switched from <a href="http://www.nongnu.org/ratpoison/">ratpoison</a>
at the same time I started using coLinux because running native Linux
allowed me to use any Linux window manager as well.</p>
<p>Recently, some have switched from wmii to
<a href="http://xmonad.org/">xmonad</a>, the new
<a href="http://www.haskell.org/">Haskell</a> tiling window manager.
It has some nice features over wmii, including dual head support, but after
a brief excursion, I slightly prefer wmii's way of doing things.</p>
<p>If you're a hard core Lisper,
<a href="http://www.nongnu.org/stumpwm/">stumpwm</a> is the window manager
for you. It has a <a href="http://en.wikipedia.org/wiki/REPL">REPL</a>. This one
seems a little too hard core for me, especially since I don't know Lisp.</p>
<p>History: 2007: ratpoison, 2007: wmii, 2012: Qtile</p>
</td>
</tr>
<tr>
<td id="editor"><p>Editor/IDE</p>
<a href="#editor" title="Section permalink" class="sectionlink">¶</a></td>
<td><p><a href="http://www.gnu.org/software/emacs">GNU Emacs</a> 24.3</p></td>
<td >
<p>Switched from Eclipse in 2007. It was a slow transition, but
I think Emacs is worth the investment.</p>
<p><b>On Emacs vs. Vim:</b> I really like that Vim can be used easily on remote
machines. Currently, I use TRAMP for remote file editing. It is very cool,
but it is slow, and I sometimes fall back on nano (*gasp*) for a quick
config file edit when I am logged into a remote terminal. I also suspect
that the dual modes of Vim are more efficient than Emacs-- I'm just not
smart enough to get used to it. Maybe someday I will switch to
<a href="http://www.gnu.org/software/emacs/manual/html_node/viper/index.html#Top">Viper
mode</a>. Why Emacs over Vim? I choose Emacs because it is more powerful
and closer to an IDE. Emacs Lisp allows you to do whatever you want.
</p>
<p><b>On Emacs vs. Eclipse:</b> I found Eclipse was too slow and heavy, used too
much screen real estate, and was too difficult to customize. Scripting
Eclipse required writing extensions in Java whereas Emacs can be extended
in elegant Lisp. I think Eclipse (and other IDE's) are better for code
exploration and they probably have features that I'm not aware of since
I don't use them. I figure, though, that with enough Emacs Lisp, Emacs
can do anything those IDEs can do. If you really want those features,
it's a question of if you want to spend the time achieving perfection
in Emacs or getting real work done in another IDE. I choose perfection. ;)
</p>
<p>Additional commentary:</p>
<ul>
<li><a href="http://blog.ianbicking.org/the-vs-emacs.html">
THE vs. Emacs</a>, Ian Bicking (2005)</li>
<li><a href="http://steve.yegge.googlepages.com/effective-emacs">
Effective Emacs</a>, Steve Yegge (2005)</li>
<li><a href="http://blog.ianbicking.org/other-editors.html">
Other Editors?</a>, Ian Bicking (2005)</li>
<li><a href="http://glyph.twistedmatrix.com/2008/04/structured-python-editor.html">
Structured Python Editor</a>, Glyph Lefkowitz (2008)</li>
<li><a href="http://chalain.livejournal.com/74234.html">
Editor Wars: Revenge of the... oh, whatever.</a>, Chalain (2008)</li>
<li><a href="http://metajack.im/2008/09/05/what-you-can-learn-from-emacs/">
What You Can Learn From Emacs</a>, Jack Moffitt (2008)</li>
<li><a href="http://glyph.twistedmatrix.com/2008/12/emacs-test.html">
The Emacs Test</a>, Glyph Lefkowitz (2008)</li>
<li><a href="http://www.redreddesign.com/blog/emacs-extensions-i-cant-live-without/">
emacs extensions i can’t live without</a> (2009)</li>
</ul>
<p>Screencasts:</p>
<ul>
<li><a href="http://platypope.org/yada/emacs-demo/">I need a cool European accent</a></li>
<li><a href="http://www.vimeo.com/1013263">What You Can Learn From ido.el</a></li>
<li><a href="http://www.youtube.com/watch?v=76Ygeg9miao#t=01m47s">YASnippet demo</a></li>
</ul>
<p>Install method:
<del><a href="http://www.saltycrane.com/blog/2008/10/installing-emacs-23-cvs-ubuntu-hardy/">
from source</a></del>
<code>sudo apt-get install emacs</code>
</p>
<p>Useful packages:</p>
<ul>
<li><a href="http://www.gnu.org/software/tramp/">
Tramp</a>: transparent remote file access</li>
<li><a href="http://www.emacswiki.org/emacs/InteractivelyDoThings">
ido</a>: Buffer switching and more</li>
<li><a href="http://orgmode.org/">Org-Mode</a>: note taking, task lists</li>
<li><a href="http://github.com/yoshiki/yaml-mode">yaml-mode</a>: for yaml</li>
<li><a href="http://jblevins.org/projects/markdown-mode/">markdown-mode</a>: for markdown</li>
<li><a href="http://code.google.com/p/yasnippet/">YASnippet</a>:
Textmate-inspired templating. Great for making HTML less tedious.</li>
<li><a href="https://github.com/nonsequitur/smex">smex: IDO for M-x</a></li>
<li><a href="https://github.com/magnars/multiple-cursors.el">multiple-cursors</a>: this is really fun *and* useful.</li>
<li><a href="http://web-mode.org/">web-mode</a>: for HTML/CSS/Javascript</li>
</ul>
<p>My emacs config on github: <a href="http://github.com/saltycrane/emacs">http://github.com/saltycrane/emacs</a></p>
<p>History: 2001: Emacs/NEdit/UltraEdit, 2006: Eclipse, 2007: Emacs</p>
</td>
</tr>
<tr>
<td id="terminal"><p>Terminal</p>
<a href="#terminal" title="Section permalink" class="sectionlink">¶</a></td>
<td><p><a href="http://software.schmorp.de/pkg/rxvt-unicode.html">urxvt</a></p>
9.19
+ <br><a href="http://www.gnu.org/software/screen/">screen</a></td>
<td>
<p>urxvt supports xft (anti-aliased) fonts, real transparency (not that
I actually use transparency with Qtile), and fading (which I do use with Qtile)
and it is much faster and lighter than gnome-terminal or konsole. screen allows me to switch
terminal sessions without ugly tabs, attach to remote sessions, search through
the scrollback buffer, and more. <em>Update:</em> urxvt also has embedded perl.</p>
<p>Install method:
<del><a href="/blog/2009/11/how-make-urxvt-look-gnome-terminal/">from source</a></del>
<code>sudo apt-get install rxvt-unicode</code>
</p>
</td>
</tr>
<tr>
<td id="vcs"><p>Version Control System</p>
<a href="#vcs" title="Section permalink" class="sectionlink">¶</a></td>
<td>
<p><a href="http://git-scm.com/">Git</a></p>
</td>
<td>
<p>Switched from Subversion to Mercurial in June 2007. The merging in Mercurial
is very nice and can be done without thinking. I do miss Subversion/Subclipse's
revision history viewer, file compare, and ability to isolate files apart from
changesets. <em>Update 2010-04-05:</em> See <a href="#c8633">my comment
below</a>.
</p>
<p><em>Update 2011-05:</em> Switched my personal repos to Git. Use Git almost
exclusively now.
</p>
<p>Additional commentary:</p>
<ul>
<li><a href="http://jonchu.posterous.com/16445171">
DVCS: Why I chose Mercurial over Git</a> (2010)</li>
<li><a href="http://blog.extracheese.org/2010/05/why-i-switched-to-git-from-mercurial.html">
Why I Switched to Git From Mercurial</a> (2010)</li>
</ul>
<p>Install method: <code>sudo apt-get install mercurial</code></p>
<p>History: 2001: SCCS, 2003: Other, 2007: Subversion, 2007: Mercurial,
2010: Mercurial/Git, 2011: Git</p>
</td>
</tr>
<tr>
<td id="high-level-language"><p>"High-level" Language</p>
<a href="#high-level-language" title="Section permalink" class="sectionlink">¶</a></td>
<td><p>None</p></td>
<td>
<p>Previously, I used C. Now I use don't use any statically-typed languague. Wouldn't mind learning <del>C++</del> Go. Although,
Linus <a href="http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918">
doesn't like it.</a></p>
</td>
</tr>
<tr>
<td id="high-high-level-language" ><p>"High-high-level" Language</p>
<a href="#high-high-level-language" title="Section permalink" class="sectionlink">¶</a></td>
<td ><p><a href="http://www.python.org/">Python</a> 2.7</p></td>
<td >
<p>My love for Python is strong. I switched from Perl in 2005
and have no regrets. Object-oriented, easy to read (no more
<a href="http://en.wikipedia.org/wiki/There_is_more_than_one_way_to_do_it">
TIMTOWTDI</a>), and smart people use it. I also want to learn Javascript 2
becuase it is the
<a href="http://steve-yegge.blogspot.com/2007/02/next-big-language.html">
"Next Big Language"</a> and Lisp because it is the
<a href="http://www.paulgraham.com/avg.html">"most powerful language"</a>.</p>
<p><b>On Python vs. Ruby:</b> from what I've read, I characterize Ruby as the
more expressive language more similar to Perl (than Python is) and Python
as the more regimented language. Since I like regimented, I like Python.</p>
<p><b>On Python vs. Lisp:</b> I've concluded that I lack the intelligence to
harness enough of Lisp's power to counteract its non-practicality (e.g.
lack of libraries).</p>
<p>Additional commentary:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Paul_Graham">Paul Graham</a>:
<a href="http://www.paulgraham.com/icad.html">Python is
getting closer to Lisp</a> (2002)</li>
<li>Paul Prescod: <a href="http://www.prescod.net/python/IsPythonLisp.html">
no it isn't</a></li>
<li>Paraphrase of <a href="http://www.swiss.ai.mit.edu/~gjs/">
Gerald Jay Sussman</a> (one of the creators of Scheme):
<a href="http://blog.snowtide.com/2009/03/24/why-mit-now-uses-python-instead-of-scheme-for-its-undergraduate-cs-program">
Why MIT now uses python instead of scheme for its undergraduate CS program</a>
(2009)</li>
</ul>
<p>Install method: preinstalled on Ubuntu</p>
<p>History: 2001: <a href="http://www.perl.org/">Perl</a>,
2005: <a href="http://www.python.org/">Python</a>
</p>
</td>
</tr>
<tr>
<td id="web-framework" ><p>Web Framework</p>
<a href="#web-framework" title="Section permalink" class="sectionlink">¶</a></td>
<td >
<p>
<a href="http://www.djangoproject.com/">Django</a> /
<a href="http://flask.pocoo.org/">Flask</a>
</p>
</td>
<td >
<p><em>2014-10:</em>I now use Flask at work. Previously, I used Django. I think I like SQLAlchemy and Jinja2 better than Django. Django has a lot more built in and is put together better. Flask's thread locals are convenient and messy. Probably <a href="http://www.pylonsproject.org/">Pyramid</a> is the best but no one uses it.</p>
<p>Here are some links:</p>
<ul>
<li><a href="http://www.ianbicking.org/">Ian Bicking</a>:
<a href="http://blog.ianbicking.org/theres-so-much-more-than-rails.html">
There's so much more than Rails</a> (2005)</li>
<li><a href="http://blog.ianbicking.org/2008/01/12/what-php-deployment-gets-right/">
What PHP deployment gets right</a> (2008)</li>
<li><a href="http://www.feedmagnet.com/blog/django-vs-rails/">
Django vs. Rails</a> (2009)</li>
</ul>
<p>Install method: <code>pip install Django</code> / <code>pip install Flask</code></p>
</td>
</tr>
<tr>
<td id="web-browser"><p>Web Browser</p>
<a href="#web-browser" title="Section permalink" class="sectionlink">¶</a></td>
<td><p>Firefox</p></td>
<td >
<p>Not to be confused with <a href="http://www.konqueror.org">
Konqueror</a>, Conkeror is an emacs-like, keyboard driven, scriptable,
Mozilla-based web browser. I've used it almost full
time since January 2008. It is still considered alpha stage software
so there are a number of bugs. However, it is still pretty sweet. I use
Firefox as a backup (and IE Tab for Launchcast and Netflix on Windows).</p>
<p>Unfortunately, one of the annoying things in Firefox 2 is present in
Conkeror as well-- memory leaks. Based on
<a href="http://kb.mozillazine.org/Memory_Leak">this Mozilla article</a>
and some brief personal experience, Firefox 3 has made fixes in this area.
It would be nice if Conkeror could benefit from the Firefox 3 fixes.</p>
<p><em>Update 2010-05-04:</em> Conkeror is really awesome, but I had some memory/cpu issues with it
a while ago and haven't put in the work to merge my custom keybindings
with the latest Conkeror code. Also waiting to see if there will be
an Emacs version of <a href="http://vimium.github.com/">Vimium</a>
(since, after all <a href="http://vimperator.org/">vimperator</a>
followed conkeror).
</p>
<p>I'm currently using a combination of Google Chrome and Firefox.
Chrome is faster, especially for Javascript-intensive sites, but I really
<a href="http://superuser.com/questions/91334/alternative-to-arrow-keys-in-google-chrome-location-bar">
<em>hate</em> the Google Chrome Omnibar</a>. If you have a solution
or workaround, please post an answer. Firefox also has some Add-ons
that Chrome doesn't.
</td>
</tr>
<tr>
<td id="email" ><p>Email</p>
<a href="#email" title="Section permalink" class="sectionlink">¶</a></td>
<td ><p>Gmail</p></td>
<td >
<p><em>Update 2010-05-04:</em>
Gmail. It's slow but it has a lot of features and it's in
my web browser and it's easy and it works and I don't really like using
email that much anyways. Oh, and, big plus, syncing works almost perfect
with my Android phone. (Actual full switch to Gmail was around December 2008.)
</p>
</td>
</tr>
<tr>
<td id="graphical-diff" ><p>Graphical diff/merge</p>
<a href="#graphical-diff" title="Section permalink" class="sectionlink">¶</a></td>
<td ><p><a href="http://kdiff3.sourceforge.net/">KDiff3</a></p></td>
<td >
<p>I started using KDiff a while ago on Windows and have
always liked it. I'm thinking, though, since I'm an Emacs person, I ought to
use <a href="http://www.gnu.org/software/emacs/manual/html_mono/ediff.html">
Ediff</a>.</p>
<p>Install method: <code>sudo apt-get install kdiff3</code></p>
</td>
</tr>
<tr>
<td id="keyboard"><p>Keyboard</p>
<a href="#keyboard" title="Section permalink" class="sectionlink">¶</a></td>
<td>
<p><a href="http://pckeyboards.stores.yahoo.net//en104wh.html">
Unicomp Endurapro</a> /
<a href="http://elitekeyboards.com/products.php?sub=leopold,tenkeyless&pid=fc200rtab">
Leopold Tenkeyless w/ Cherry MX Browns
</a></p>
</td>
<td>
<p>I realize a keyboard is hardware and not software, but it is
hardware that can evoke strong opinions, so I made an exception.
</p>
<p>One problem with hardware is I can't try out all the different types
and choose the one I like the best as I can with software. So
my selection is based on reviews not on actual experience. And,
after buying the Endurapro, I found I actually did not like the
integrated mouse stick, so I should have bought a Customizer 104/105
and saved $30.</p>
<p><em>Update 2011-05:</em> Got the Leopold tenkeyless for work.
Tenkeyless is a must for quicker mouse access.
And I actually like the lighter touch of the
Cherry MX Browns versus the Unicomp's buckling springs. I like it
so much I want to replace my Unicomp at home with another Leopold.
</p>
<p><em>Update:</em> Got a second Leopold for home to replace my Unicomp.</p>
<p>Additional commentary:</p>
<ul>
<li><a href="http://www.jwz.org/gruntle/wrists.html">
my wrists and welcome to them.</a>, JWZ (1999)</li>
<li><a href="http://www.dansdata.com/deck.htm">
Deck keyboard</a>, Dan (2005)</li>
<li><a href="http://bc.tech.coop/blog/060131.html">
Surviving Emacs - Part 4</a>, Bill Clementson (2006)</li>
<li><a href="http://glyf.livejournal.com/55780.html">
Keyboard Fight</a>, Glyph Lefkowitz (2006)</li>
<li><a href="http://diveintomark.org/archives/2006/05/30/bye-apple">
Bye, Apple</a>, Mark Pilgrim (2006)</li>
<li><a href="http://glyph.twistedmatrix.com/2009/01/meandering-review-of-logitech.html">
A Meandering Review of the Logitech Illuminated Keyboard</a>,
Glyph Lefkowitz (2009)</li>
</ul>
<p>History: 2009: Unicomp Endurapro, 2011: Leopold Tenkeyless (MX Browns)</p>
</td>
</tr>
<tr>
<td id="office-chair"><p>Office Chair</p>
<a href="#office-chair" title="Section permalink" class="sectionlink">¶</a></td>
<td><p>Undecided</p></td>
<td><p>Herman Miller Aeron or Steelcase Leap</p>
</td>
</tr>
<tr>
<td id="mobile-phone"><p>Mobile Phone</p>
<a href="#mobile-phone" title="Section permalink" class="sectionlink">¶</a></td>
<td><p><a href="http://www.motorola.com/Consumers/US-EN/Consumer-Product-and-Services/Mobile-Phones/Motorola-DROID-US-EN">Motorola Droid 4</a></p></td>
<td>
<p>After almost 10 years (and 3 generations) of the Palm Treo, I got the
Motorola Droid.</p>
<p>The Droid is pretty awesome, but I don't like switching
to landscape mode to use the keyboard-- especially when toolbars and headers
take up half the screen. I think Palm and Blackberry got this form factor Right.
Just as I prefer the keyboard over the mouse on my PC, I want to use the keyboard
and D-pad over the touchscreen on my phone.
<em>Update 2010-05-04:</em> The keyboard is mediocre and use of the D-pad
center button sucks. My Palm Treo 650 D-pad worked much better.
</p>
<p>My reasons for choosing an
<a href="http://en.wikipedia.org/wiki/Android_%28operating_system%29">Android</a>
phone are: I <em>need</em> a physical keyboard.
I <em>want</em> to hack on my phone. I <em>think</em> Android has more potential than Palm's
<a href="http://en.wikipedia.org/wiki/WebOS">webOS</a>
or <a href="http://en.wikipedia.org/wiki/Maemo">Maemo</a>.</p>
<p>Useful apps:</p>
<ul>
<li><a href="http://code.google.com/p/connectbot/">Connectbot</a>
Secure shell (SSH) client for the Android platform. Use this all the time. Awesome.</li>
<li><a href="http://www.android.com/market/#app=listen">Listen</a>
Listen from Google Labs brings podcast search, subscribe, download and stream to your Android-powered device.</li>
<li><a href="http://mytracks.appspot.com/">My Tracks</a>
Record GPS tracks. Monitor your performance. Share your outdoor activities with friends.
Really enjoy this one. Love tracking my romping.
</li>
</ul>
<p><em>2010-05-04 Updates:</em></p>
<ul>
<li><a href="http://www.google.com/mobile/voice/">Google Voice</a>: Free text messages
and better voicemail. Another useful app. Makes voicemail suck a lot less.</li>
<li><a href="http://levelupstudio.com/foxyring">FoxyRing</a>: automatically
control the ringer volume based on ambient noise level. I was doubtful about this one,
but it actually works well for me.</li>
<li><a href="http://www.flixster.com/mobile/apps/android">Flixter (Movies)</a>:
Useful for checking movie showtimes.
</li>
<li><a href="http://www.youversion.com/mobile/android">Bible (YouVersion)</a>:
This version is pretty good. I miss my <a href="http://www.plkr.org/">Plucker</a>
created Bible on my Palm though. I wish there was something like Plucker for
Android.
</li>
<li>DroidLight: use the LED camera flash as a flashlight. Simple and useful.
Works much better than using the screen as a flashlight.
</li>
<li><a href="http://www.google.com/mobile/navigation/">Google Navigation</a>: I
don't need my Garmin anymore. (Each has advantages and disadvantages, but I
have found it to be a capable replacement.)</li>
<li>Just want to mention that the Calendar sucks. It is great that I can sync
with my Google calendar, but I really hate the Android Calendar UI.</li>
</ul>
<p>Additional Commentary/Links:</p>
<ul>
<li><a href="http://randomfoo.net/2009/06/15/thoughts-on-the-palm-pre-g2-and-iphone-3g">
Thoughts on the Palm Pre, G2, and iPhone 3G</a> Leonard Lin (2009 June)</li>
<li><a href="http://jwz.livejournal.com/1055120.html">
JWZ gets a Palm Pre</a> (2009 June)</li>
<li><a href="http://jwz.livejournal.com/1055369.html">
Emacs on Android</a> (2009 June)</li>
<li><a href="http://daringfireball.net/2009/08/the_android_opportunity">
The Android Opportunity</a>, John Gruber (2009 August)</li>
<li><a href="http://jwz.livejournal.com/1108212.html">
Dear Palm, it's just not working out</a>, JWZ (2009 October)</li>
</ul>
<p>History: 2002: <a href="http://en.wikipedia.org/wiki/Treo_180">Handspring Treo 180</a>,
2003: <a href="http://en.wikipedia.org/wiki/Treo_600">Handspring Treo 600</a>,
2005: <a href="http://en.wikipedia.org/wiki/Treo_650">Palm Treo 650</a>,
2009: <a href="http://en.wikipedia.org/wiki/Motorola_Droid">Motorola Droid</a>
2011: <a href="http://en.wikipedia.org/wiki/Droid_4">Motorola Droid 4</a>
</p>
</td>
</tr>
</table>