SaltyCrane: preferenceshttps://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>
Switching from Emacs to Vim (actually Spacemacs)
2015-12-31T00:17:31-08:00https://www.saltycrane.com/blog/2015/12/switching-emacs-vim-actually-spacemacs/<p>
I <a href="/blog/2015/09/switching-osx-and-front-end-development/">
recently switched</a> from Linux to OS X and Python to Javascript.
To complete my fall from the Light, I've switched from Emacs to Vim.
Actually I just switched to
<a href="http://www.emacswiki.org/emacs/Evil">Evil Mode</a> and Spacemacs.
This is how I came to switch:
</p>
<ul>
<li>I discovered <a href="http://irreal.org/blog/?p=259">
OS X uses many Emacs key bindings</a> by default and I could set even more.
</li>
<li>I <a href="/blog/2008/07/on-quest-for-consistent-keybindings/">went back</a>
to the default key bindings in Emacs to be consistent with OS
X.<sup id="defaults"><a href="#defaults-footnote">1</a></sup>
</li>
<li>I <a href="http://emacsredux.com/blog/2013/11/12/a-crazy-productivity-boost-remap-return-to-control/">
remapped Return to Control</a>
and started using both Control keys to help use the default Emacs key bindings.
Using both Control keys felt <em>amazing</em> compared to just one...</li>
<li>...until I began feeling Emacs Pinky since Return
was slightly farther than Caps Lock.<sup id="pinky"><a href="#pinky-footnote">2</a></sup></li>
<li>I tried remapping Spacebar to Control and this felt <em>even more amazing</em>...</li>
<li>...until I tried to type a sentence at normal speed.</li>
<li>I decided I didn't want to <a href="http://stackoverflow.com/questions/52492/what-is-the-best-way-to-avoid-getting-emacs-pin">buy a foot pedal</a>.</li>
<li>I tried Spacemacs.</li>
<li>I set bash and <a href="https://pqrs.org/osx/karabiner/">Karabiner</a> to Vim
mode.<sup id="vimium"><a href="#vimium-footnote">3</a></sup>
</li>
<li>I set
<a href="/blog/2017/07/how-map-caps-lock-escape-when-tapped-and-control-when-held-mac-os-sierra/">
Caps Lock to Escape and Control</a>.
</li>
<li>I started looking for Vim screencasts.<sup id="screencasts"><a href="#screencasts-footnote">4</a></sup></li>
</ul>
<p>
Even after 3 months, I'm still working a lot slower, but I'm hoping it's a good investment.
One thing I've noticed is that Vim seems to use a lot of number and symbol keys.
I need to learn to touch type my numbers! <em>Update 2017-07-31:</em> After 1.5 years, I'm still
enjoying Spacemacs and Vim key bindings (and I've gotten better at my numbers). I find Vim mode
more relaxing compared to the many key chords used in Emacs. A few of my favorite commands are
<code>f</code>/<code>t</code> to jump to a character on a line and <code>.</code> and
<code>;</code> to repeat commands.
</p>
<h4 id="spacemacs">Spacemacs</h4>
<img class="img-responsive" alt="spacemacs screenshot" src="/site_media/image/blog/spacemacs.gif">
<p>
<a href="http://spacemacs.org">
Spacemacs</a> is an Emacs starter kit<sup id="starter-kit"><a href="#starter-kit-footnote">5</a></sup> (like Emacs Prelude) optimized for Vim key bindings.
It provides the "best of both worlds" –
the efficiency of Vim's modal editing and the extensibility of Emacs Lisp.
</p>
<p>
Spacemacs replaces many Emacs modifier combinations
by setting a <a href="http://usevim.com/2012/07/20/vim101-leader/">leader key</a>
to the Spacebar (hence the name <em>space</em>macs).
To open a file, use <code>SPC f f</code> instead of <code>C-x C-f</code>.
Spacemacs makes commands easily discoverable using
<a href="https://github.com/justbur/emacs-which-key">which-key</a>.
Just press SPC to see a list of commands, press a key and see more commands.
</p>
<p>
Spacemacs has a good out-of-the-box configuration for Javascript and React development.
It uses js2-mode, web-mode<sup id="web-mode"><a href="#web-mode-footnote">6</a></sup> for JSX, flycheck w/ eslint, <a href="http://ternjs.net/">tern</a>, and some things I haven't used.
</pre>
<h4 id="install">Install Spacemacs</h4>
<p>Here's how to install Spacemacs on OS X.</p>
<ul>
<li>Install Emacs
<pre class="console">$ brew install emacs --with-cocoa --with-gnutls --with-imagemagick </pre>
</li>
<li>Install Spacemacs
<pre class="console">$ mv ~/.emacs.d ~/.emacs.d.bak # if you have an exisiting .emacs.d directory
$ git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d </pre>
</li>
<li>Start Emacs (in terminal mode). This will download and compile packages and
ask if you want to use vim mode or emacs mode.
<pre class="console">$ emacs </pre>
</li>
</ul>
<h4 id="client-server">Start Emacs in client/server mode</h4>
<ul>
<li>Start the Emacs server
<pre class="console">$ emacs --daemon </pre>
</li>
<li>Start an Emacs client in the terminal
<pre class="console">$ emacsclient -t </pre>
</li>
<li>Start a graphical Emacs client
<pre class="console">$ emacsclient -c </pre>
</li>
</ul>
<h4 id="config">Spacemacs config</h4>
<p>
Spacemacs has its own configuration file located at <code>~/.spacemacs</code>
or <code>~/.spacemacs.d/init.el</code>. For more information, see the
<a href="https://github.com/syl20bnr/spacemacs/blob/master/doc/DOCUMENTATION.org#dotfile-configuration">configuration documentation</a>.
My personal Spacemacs configuration is <a href="https://github.com/saltycrane/.spacemacs.d">
on github</a>.
</p>
<h4 id="commands">Useful Spacemacs commands</h4>
<pre>SPC q q - quit
SPC w / - split window vertically
SPC w - - split window horizontally
SPC 1 - switch to window 1
SPC 2 - switch to window 2
SPC w d - delete current window
SPC TAB - switch to previous buffer
SPC b b - switch buffers
SPC f f - find a file
SPC f s - save a file (:w also works)
SPC p p - open project
SPC p h - find a file in current project
SPC b d - delete current buffer
SPC b M - move buffer to another window
SPC v - enter expand-region mode
</pre>
<h4 id="vim-bindings">Useful Vim key bindings</h4>
<pre>movement
--------
0 - beginning of line
^ - beginning of non-whitespace
$ - end of line
9j - move down 9 lines
w - move forward by word
b - move backward by word
gg - first line
G - last line
C-u - up half page
C-d - down half page
f/ - move forward to first "/" character
t/ - move forward right before the first "/" character
; - repeat that command again
H - head of the screen
M - middle of the screen
L - last of the screen
} - move forward by paragraph or block
{ - move backwards by paragraph or block
* - search for word under the cursor
n - search again forward
N - search again backwards
# - search backwards for word under cursor
/ - search forward
? - search backward
% - find matching brace, paren, etc
ma - mark a line in a file with marker "a"
`a - after moving around, go back to the exact position of marker "a"
'a - after moving around, go back to line of marker "a"
:marks - view all the marks
'' - go to the last place you were
[{ - jump back to the "{" at the beginning of the current code block
editing
-------
x - delete char under cursor
X - delete char before cursor
A - add to end of line
I - insert at the beginning of the line
dd - delete line
D - delete from cursor to end of line
di' - delete text inside single quotes
yy - copy line
Y - copy from cursor to end of line
cc - change line
C - change from cursor to end of line
cit - change text inside html tag
ci' - change text inside single quotes
ci{ - change text inside curly brackets.
ci... - etc
p - paste after cursor
P = paste before cursor
o - add line below
O - add line above
. = repeat last comment
r - replace character
R - replace. (overwrite) (good for columns of text)
J - join line (cursor can be anywhere on line)
visual mode
-----------
v - visual char mode
V - visual line mode
C-v - block visual mode
</pre>
<hr>
<small>
<ol>
<li id="defaults-footnote">
And to be consistent with other machines or programs using Emacs or Emacs key bindings.
Mandatory Eclipse for a 4 day Hadoop training emphasized this need.
[<a href="#defaults">back</a>]
</li>
<li id="pinky-footnote">
At this point, I probably could have learned to move my hand 2 cm to the right,
but I have been <a href="/blog/2007/08/current-configuration/#editor">curious about Vim</a>
for a while now. <em>Update 2017-07-31:</em> mabye a better alternative is using semicolon
instead of Enter as the right Control key as
<a href="https://github.com/tekezo/Karabiner-Elements/issues/8#issuecomment-307668284">
mentioned here</a>.
[<a href="#pinky">back</a>]
</li>
<li id="vimium-footnote">
Later I also installed <a href="https://vimium.github.io/">Vimium</a>.
[<a href="#vimium">back</a>]
</li>
<li id="screencasts-footnote">
I found some excellent Vim screencasts here:
<a href="http://derekwyatt.org/vim/tutorials/">http://derekwyatt.org/vim/tutorials/</a>.
[<a href="#screencasts">back</a>]
</li>
<li id="starter-kit-footnote">
Though some <a href="http://www.lunaryorn.com/2016/01/26/why-spacemacs.html">
don't call it a starter kit</a>.
[<a href="#starter-kit">back</a>]
</li>
<li id="web-mode-footnote">Hat tip to web-mode's author/maintainer. I created
<a href="https://github.com/fxbois/web-mode/issues/632">an issue</a>
about JSX indentation and it was fixed in less than a day.
[<a href="#web-mode">back</a>]
</li>
</ol>
</small>
Switching to OS X and front end development
2015-09-10T08:26:36-07:00https://www.saltycrane.com/blog/2015/09/switching-osx-and-front-end-development/<p>After 7 years, I've yielded to the Dark Side and switched from Ubuntu to OS X on my work laptop.
I've also switched from Python and back end web development to JavaScript and front end development.
The former is mostly to support the latter.
</p>
<p>Linux is rare<sup>1</sup>, especially among front end developers,
and I want to make it easy to collaborate as I learn new things.
I've had problems working with Photoshop files in GIMP and I couldn't run
the iOS simulator. <a href="https://news.ycombinator.com/item?id=10812214">
Issues with Linux device drivers</a> don't help.
</p>
<p>I'm choosing front end development because I want to code closer to the end user.<sup>2</sup>
In small part like Ian Bicking
<a href="http://www.ianbicking.org/blog/2014/02/saying-goodbye-to-python.html">
wrote last year</a>,
I feel unexcited about back end development and really excited about
JavaScript and front end development. I'm excited about
ES 2015 and
React and
React Native and
CSS transitions.<sup>3</sup>
I'm even coming around to Node.js.
JavaScript is <a href="https://www.destroyallsoftware.com/talks/wat">uglier</a>
than Python, but it's getting
<a href="https://medium.com/google-developers/exploring-es7-decorators-76ecb65fb841">
better</a>
and there are things
<a href="https://glyph.twistedmatrix.com/2015/09/software-you-can-use.html">
Python can't do</a> that
<a href="http://steve-yegge.blogspot.com/2007/02/next-big-language.html">
JavaScript can</a>.<sup>4</sup> If only beauty mattered, maybe I'd use Scheme.<sup>5</sup>
</p>
<p>I'm sure I will hate OS X at first, but hopefully it will be good in the
long run. If anyone can recommend a tiling window manager like
<a href="http://www.qtile.org/">Qtile</a> for OS X, please let me know.
</p>
<p><em>(I will continue using Emacs because <a href="http://emacsrocks.com/">Emacs rocks!</a> <sup>6</sup>)</em>
</p>
<hr>
<small>
<ol>
<li>I think I was the last person at my company running Linux.</li>
<li>I've been trying to do front end work for years now, but
I finally got a sensible chance to switch as my company is
changing it's technology stack from Python to Ruby and
Backbone/Angular to React.</li>
<li><em>Update 2016-01-04:</em> Here are even <a href="http://www.2ality.com/2016/01/web-technologies-2015.html">
more exciting web technologies</a>: Electron, progressive web apps, and WebAssembly.</li>
<li><em>Update 2016-01-01:</em> I found James Hague had <a href="http://prog21.dadgum.com/203.html">
similar thoughts</a> on Python and JavaScript.</li>
<li>Speaking of functional languages and JavaScript, <a href="http://elm-lang.org/">Elm</a> sounds pretty cool.</li>
<li><em>Update 2016-01-26:</em> <a href="/blog/2015/12/switching-emacs-vim-actually-spacemacs/">Or will I?</a></li>
</ol>
</small>
Install wmii snapshot 20090703 on Ubuntu Jaunty
2009-07-13T09:30:34-07:00https://www.saltycrane.com/blog/2009/07/install-wmii-snapshot-20090703-ubuntu-jaunty/<p>On Friday I installed the latest snapshot of <a href="http://wmii.suckless.org/">wmii</a>,
the lightweight, tiling, dynamic, scriptable, keyboard navigatable window manager.
(See my <a href="/blog/tag/wmii/">wmii tag</a> for more posts about wmii.)
Wmii orangizes windows into columns.
Traditionally there has been three modes for each
column: default, stack, and max. "Default" shows all windows in a column.
"Stack" shows
only one window at a time with the title bars of the other windows showing.
"Max" shows only one window without any other titlebars. I usually use two columns
each in stack mode. To navigate windows, I use Mod4+j/k to move among windows in a
column and Mod4+h/l to move between columns. This has worked well for me, but sometimes
I wanted to display two windows in a column while keeping the rest of the windows hidden.
Thankfully, the latest snapshot of wmii now includes a new mode which solves my problem.
It is a hybrid of the "default" and "stack" modes. It is called "defalut-max" and it
allows for multiple stacks of windows per column. There is also a "default+max" mode
which is like a hybrid of the old "default" and "max" modes. Additionally these modes
now apply to the floating layer as well.
</p>
<p>Another really cool thing about the latest wmii snapshot is that it now includes
a Python library to interface with the wmii filesystem and a wmiirc written in
Python. This should make it a lot easier to script wmii. This is exciting stuff.
Thanks to Kris Maglione and the wmii contributors.
</p>
<p>Here are my notes for installing wmii snapshot 20090703
on Ubuntu 9.04 Jaunty.
</p>
<h4>Install prerequisites</h4>
<ul>
<li>
<pre>$ sudo apt-get install build-essential xorg-dev</pre>
<pre>$ sudo apt-get install dwm-tools</pre>
</li>
<li>This is so it can find the freetype headers.
<pre>$ sudo ln -s /usr/include/freetype2/freetype /usr/include/freetype</pre>
</li>
</ul>
<h4>Install wmii</h4>
<ul>
<li>Download wmii+ixp-snap20090703.tgz from the
<a href="http://www.suckless.org/wmii/">wmii homepage</a>
and save it to <code>~/incoming</code>.
</li>
<li>Unpack
<pre>$ cd ~/incoming
$ tar -zxvf wmii+ixp-snap20090703.tgz</pre>
</li>
<li>make config
<pre>$ cd ~/incoming/wmii+ixp-snap20090703
$ make config</pre>
Accept all defaults except set <code>PREFIX=/home/eliot/lib/wmii_20090703</code>
<br><br>
</li>
<li>make & make install
<pre>$ make
$ make install</pre>
</li>
<li>Create links in my <code>~/bin</code> directory:
<pre>$ cd ~/bin
$ ln -s ~/lib/wmii_20090703/bin/* .</pre>
</li>
</ul>
<h4>Use the fun Python wmiirc</h4>
<ul>
<li>Copy the Python files to <code>~/.wmii-hg</code>. This includes the <code>pygmi</code> directory, the <code>pyxp</code> directory, and the two wmiirc files.
<pre>$ cp -r ~/incoming/wmii+ixp-snap20090703/alternative_wmiircs/python/* ~/.wmii-hg/</pre>
</li>
<li>Edit <code>~/.wmii-hg/wmiirc.py</code> as desired.</li>
</ul>
<h4>Run wmii</h4>
<ul>
<li>Create <code>~/.xsession</code>:
<pre>xmodmap ~/.Xmodmap
gnome-screensaver&
gnome-power-manager&
nm-applet --sm-disable&
urxvt&
until wmii; do
true
done</pre>
</li>
<li>Log out of the current window manager and then select X client script
as the session and log in.</li>
</ul>
<h4>Install <code>slock</code> screen locker</h4>
<ul>
<li>Download from <a href="http://tools.suckless.org/slock">http://tools.suckless.org/slock</a></li>
<li>
<pre class="console">$ tar zxvf slock-0.9.tar.gz
$ cd slock-0.9
$ sudo make clean install </pre>
</li>
<li>Running slock:
Simply invoke the 'slock' command. To get out of it, enter your password.
</li>
</li>
</ul>
<h4>Freetype header error</h4>
<p>The first time around, I got the following error:</p>
<pre style="overflow: scroll; height: 80px;">In file included from /usr/include/X11/Xft/Xft.h:39,
from ../include/x11.h:9,
from cmd/wmii9menu.c:49:
/usr/include/ft2build.h:56:38: error: freetype/config/ftheader.h: No such file or directory
In file included from ../include/x11.h:9,
from cmd/wmii9menu.c:49:
/usr/include/X11/Xft/Xft.h:40:10: error: #include expects "FILENAME" or <FILENAME>
In file included from ../include/x11.h:9,
from cmd/wmii9menu.c:49:
/usr/include/X11/Xft/Xft.h:60: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘_XftFTlibrary’
/usr/include/X11/Xft/Xft.h:94: error: expected specifier-qualifier-list before ‘FT_UInt’
/usr/include/X11/Xft/Xft.h:101: error: expected specifier-qualifier-list before ‘FT_UInt’
/usr/include/X11/Xft/Xft.h:198: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/X11/Xft/Xft.h:303: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/X11/Xft/Xft.h:362: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘XftLockFace’
/usr/include/X11/Xft/Xft.h:401: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/X11/Xft/Xft.h:407: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/X11/Xft/Xft.h:416: error: expected declaration specifiers or ‘...’ before ‘FT_UInt’
/usr/include/X11/Xft/Xft.h:417: error: expected declaration specifiers or ‘...’ before ‘FT_UInt’
/usr/include/X11/Xft/Xft.h:426: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘XftCharIndex’
/usr/include/X11/Xft/Xft.h:459: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
make[1]: *** [wmii9menu.o] Error 1
make: *** [dall] Error 2</pre>
<p>Per <a href="http://qtopia.net/modules/newbb_plus/archive.php?forum=8&topic_id=43:">this
discussion</a>, I solved the problem by creating a symbolic link:</p>
<pre>$ sudo ln -s /usr/include/freetype2/freetype /usr/include/freetype</pre>
Free Computer Science courses online
2009-06-30T19:56:18-07:00https://www.saltycrane.com/blog/2009/06/free-computer-science-courses-online/<p>I found out there is a <a href="http://www.cs.sunysb.edu/~algorith/video-lectures/">video
lecture series</a> to go along with my new book
<a href="http://www.amazon.com/exec/obidos/ASIN/1848000693/thealgorithmrepo">The Algorithm Design Manual</a>.
The audio level is really low, but I think it will complement my book reading nicely.
There are also lecture notes and homework assignments. It also turns out
<a href="http://ocw.mit.edu/OcwWeb/web/home/home/index.htm">MIT</a> has
a huge collection
of free courses online. Not all of them have video though. I listed some interesting
Computer Science related courses with video below. After more searching, I found
<a href="http://webcast.berkeley.edu/">UC Berkeley</a> also has a number of free
courses online, including four Computer
Science courses with video. The final source I found was
<a href="http://aduni.org/courses/">ArsDigita University</a>. They have a
good number of Computer Science video lectures as well, but I had a hard time
connecting. Let me know if I am missing other good sources.
</p>
<p><em>Update 2009-7-8:</em> I've updated the list to include
<a href="http://see.stanford.edu/see/courses.aspx">Stanford</a>'s online
courses. They have 3 Introduction to Computer Science courses with video lectures
and 3 Artificial Intelligence courses with video lectures.
</p>
<h4><a href="http://www.sunysb.edu/">Stony Brook University Courses</a></h4>
<ul>
<li>
<a href="http://www.cs.sunysb.edu/~skiena/373/">CSE 373 Analysis of Algorithms</a><br>
Professor: Steven Skiena<br>
Textbook: <a href="http://www.amazon.com/exec/obidos/ASIN/1848000693/thealgorithmrepo">The Algorithm Design Manual</a><br>
When: 2007<br>
Primary Language used: C<br>
Video: <a href="http://www.cs.sunysb.edu/~algorith/video-lectures/">26 lectures</a><br>
Slides: <a href="http://www.cs.sunysb.edu/~algorith/video-lectures/">26 PDF documents</a><br>
Syllabus: <a href="http://www.cs.sunysb.edu/~skiena/373/syllabus.pdf">PDF</a><br>
</li>
</ul>
<h4><a href="http://ocw.mit.edu/OcwWeb/web/home/home/index.htm">MIT Courses</a></h4>
<ul>
<li>
<a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/CourseHome/index.htm">
6.046J / 18.410J Introduction to Algorithms</a><br>
Professor: Charles Leiserson with Erik Demaine<br>
Textbook: <a href="http://www.amazon.com/exec/obidos/ASIN/0262032937">Introduction to Algorithms</a><br>
When: Fall 2005<br>
Video: <a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/VideoLectures/index.htm">23 lectures</a><br>
Lecture Notes: <a href="http://ocw.mit.edu/ans15436/ZipForEndUsers/6/6-046JFall-2005/6-046JFall-2005.zip">23 PDF files</a><br>
Syllabus: <a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/Syllabus/index.htm">Web page</a><br>
<br>
</li>
<li>
<a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-189January--IAP--2007/CourseHome/index.htm">
6.189 Multicore Programming Primer</a><br>
Instructor: Saman Amarasinghe<br>
When: January 2007<br>
Video: <a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-189January--IAP--2007/LectureNotesandVideo/index.htm">
18 lectures</a><br>
Lecture Notes: <a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-189January--IAP--2007/LectureNotesandVideo/index.htm">
18 PDF files</a><br>
Syllabus: <a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-189January--IAP--2007/Syllabus/index.htm">Web page</a><br>
<br>
</li>
<li>
<a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-033Spring-2005/CourseHome/index.htm">
6.033 Computer System Engineering</a><br>
Professors: Hari Balakrishnan and Samuel Madden<br>
Textbook: <a href="http://www.amazon.com/exec/obidos/ASIN/0201835959">The Mythical Man-Month</a>
<a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-033Spring-2005/Readings/index.htm">among others</a><br>
When: Spring 2005<br>
Video: <a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-033Spring-2005/LectureNoteswithVideo/detail/embed04.htm">
22 lectures</a><br>
Lecture notes: <a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-033Spring-2005/LectureNoteswithVideo/detail/embed04.htm">
22 PDF files</a><br>
Syllabus: <a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-033Spring-2005/Syllabus/index.htm">Web page</a><br>
<br>
</li>
<li>
<a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-035Fall-2005/CourseHome/index.htm">
6.035 Computer Language Engineering (SMA 5502)</a><br>
Professors: Saman Amarasinghe and Martin Rinard<br>
Textbooks: <a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-035Fall-2005/Readings/index.htm">Optional choices</a><br>
When: Fall 2005<br>
Primary language used: Java<br>
Video: <a href="http://www.youtube.com/view_play_list?p=0300FE43396456C1">7 lectures + 1 Recitation</a><br>
Lecture Notes: <a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-035Fall-2005/LectureNotes/index.htm">
18 PDF files</a><br>
Syllabus: <a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-035Fall-2005/Syllabus/index.htm">Web page</a><br>
<br>
</li>
<li>
<a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-001Spring-2005/CourseHome/index.htm">
6.001 Structure and Interpretation of Computer Programs</a><br>
Instructors: Hal Abelson and Gerald Jay Sussman<br>
Textbook: <a href="http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-1.html#titlepage">
Structure and Interpretation of Computer Programs</a><br>
When: Video is from July 1986<br>
Primary language used: Lisp (Scheme)<br>
Video: <a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-001Spring-2005/VideoLectures/index.htm">20 lectures</a><br>
Lecture notes: <a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-001Spring-2005/LectureNotes/index.htm">
30 PDF files</a><br>
Syllabus: <a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-001Spring-2005/Syllabus/index.htm">Web page</a><br>
</li>
</ul>
<h4><a href="http://webcast.berkeley.edu/">UC Berkeley Courses</a></h4>
<ul>
<li><a href="http://webcast.berkeley.edu/course_details_new.php?seriesid=2008-D-26509&semesterid=2008-D">
CS 162 Operating Systems and System Programming</a> (Fall 2008)</li>
<li><a href="http://webcast.berkeley.edu/courses.php?semesterid=2008-D">
CS 61A The Structure and Interpretation of Computer Programs</a> (Fall 2008)</li>
<li><a href="http://webcast.berkeley.edu/course_details_new.php?seriesid=2008-D-26332&semesterid=2008-D">
CS 61B DATA STRUCTURES</a> (Fall 2008)</li>
<li><a href="http://webcast.berkeley.edu/course_details_new.php?seriesid=2008-D-26404&semesterid=2008-D">
CS 61CL Machine Structures</a> (Fall 2008)</li>
</ul>
<h4><a href="http://see.stanford.edu/see/courses.aspx">Stanford Courses</a></h4>
<ul>
<li><a href="http://see.stanford.edu/see/courseinfo.aspx?coll=824a47e1-135f-4508-a5aa-866adcae1111">
CS106A Programming Methodology</a></li>
<li><a href="http://see.stanford.edu/see/courseinfo.aspx?coll=11f4f422-5670-4b4c-889c-008262e09e4e">
CS106B Programming Abstractions</a></li>
<li><a href="http://see.stanford.edu/see/courseinfo.aspx?coll=2d712634-2bf1-4b55-9a3a-ca9d470755ee">
CS107 Programming Paradigms</a></li>
<li><a href="http://see.stanford.edu/see/courseinfo.aspx?coll=86cc8662-f6e4-43c3-a1be-b30d1d179743">
CS223A Introduction to Robotics</a></li>
<li><a href="http://see.stanford.edu/see/courseinfo.aspx?coll=63480b48-8819-4efd-8412-263f1a472f5a">
CS224N Natural Language Processing</a></li>
<li><a href="http://see.stanford.edu/see/courseinfo.aspx?coll=348ca38a-3a6d-4052-937d-cb017338d7b1">
CS229 Machine Learning</a></li>
</ul>
<br>
See also: <a href="http://aduni.org/courses/">ArsDigita University Courses</a>
Using wmii with Gnome
2009-03-19T11:15:17-07:00https://www.saltycrane.com/blog/2009/03/using-wmii-gnome/<style>
.super {
vertical-align: super;
font-size: 85%;
}
.fn {
font-size: 85%;
}
</style>
<p>
<a href="http://glyph.twistedmatrix.com/2009/01/you-got-your-windowmaker-in-my-peanut.html">
Thanks to Glyph</a>, I can now use
<a href="http://wmii.suckless.org/">wmii</a> as the
<a href="http://en.wikipedia.org/wiki/Window_manager">window manager</a> for
<a href="http://www.gnome.org/">Gnome</a>. I like wmii because it makes good use
of screen real estate, is keyboard-navigatable, is
scriptable<a class="super" name="tt1" href="#ss1">1</a>, and uses
minimal resources<a class="super" name="tt2" href="#ss2">2</a>.
</p>
<p>
It is possible to use
<a href="http://live.gnome.org/GnomePanel">gnome-panel</a> within wmii-- just press
<code><em>MOD+P gnome-panel RET</em></code>. And you can manually fine tune your
<code>.xinitrc</code> or <code>.xsession</code> by adding your required stuff
such as <code>gnome-power-manager</code> and <code>nm-applet</code>. (This is what
I had been doing (and may continue to do depending on how this full on Gnome thing
works out).)
</p>
<p>
If, for some strange reason (e.g.
you want to use an annoying<a class="super" name="tt3" href="#ss3">3</a>
<a href="http://www.adobe.com/products/air/">Adobe Air</a> application), you want
to use the full Gnome desktop with wmii, that is possible also. To do this,
start up Gnome and go to <em>System, Preferences, Sessions</em>. Uncheck
<em>Window Manager</em>, then click <em>Add</em> and fill in the path
to your wmii executable. Glyph also suggests running <code>gconf-editor</code>
and turning off <em>/apps/nautilus/preferences/show_desktop</em>. After logging
out and logging in, you should now have wmii as the window manager for Gnome.
</p>
<p>Note, I've only used this Gnome+wmii configuration about a day, so I'm not sure if
I will keep it or not. I have found
<a href="http://www.tweetdeck.com/">TweetDeck</a> will load up but has some disappearing
act problems. <a href="http://www.twitterlocal.net/">TwitterLocal</a> on the
other hand, seems to run fine.
</p>
<p><em>Update 2010-07-18:</em> I only used the full Gnome+wmii configuration for a couple days before going back to pure wmii. However, I am retrying this configuration with Ubuntu 10.04 Lucid again since I have a more powerful computer now and I need extra non-hacker type stuff to just work without trying to figure out which program provides it... So it looks like Ubuntu 10.04 no longer has the Sessions item in the Preferences menu. I tried using <code>gconf-editor</code> and changin <code>/desktop/gnome/session/required_components/windowmanager</code> from <code>gnome-wm</code> to the path to my wmii executable but that didn't work. If you know how to do it, let me know.
</p>
<hr>
<ol class="fn">
<li>
<a name="ss1"></a>Yes I have written one script for wmii. It allows me to change column widths
using the keyboard instead of the mouse. It's a bit of a hack, but maybe I will
make another post for that sometime. <em>Update 2009-04-12: <a href="/blog/2009/04/scripting-wmii-column-widths-python/">here is that post</a></em> <a href="#tt1">↩</a>
</li>
<li>
<a name"ss2"></a> Of course, using Gnome with wmii negates this advantage. When I bought my Dell
530N with 1GB of RAM, I had planned to purchase more RAM separately because it was
so much cheaper. I suppose I ought to do that sometime. Of course at work, my
computer had only half a gig of RAM and I was running out of memory continually.
<a href="#tt2">↩</a>
</li>
<li>
<a name="ss3"></a> I call Air annoying because it only works in Gnome or KDE (and to add another
alliterative adjective). Otherwise, I don't know much about it.
<a href="#tt3">↩</a>
</li>
</ol>
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>
Recommended books
2008-04-17T19:13:00-07:00https://www.saltycrane.com/blog/2008/04/recommended-books/<p>I love having a subscription to <a href="http://search.safaribooksonline.com/home">
Safari Books Online</a>. Currently my company provides a free subscription,
but if I get a new job, I might consider subscribing myself. Since I get to
browse a number of books at no cost, I thought I'd note which books are my
favorites. (Note, I am not being paid by Safari Books Online.)</p>
<h4 id="general-software">General Software</h4>
<ul>
<li><em>Structure and Interpretation of Computer Programs, Second Edition</em>,
Harold Abelson and Gerald Jay Sussman, MIT Press, ?year?<br />
I learned about this book through a job posting. It might bring you to
tears if you get it. I'm only in the second chapter. It is used in an introductory
Computer Science course at MIT. It uses Scheme (Lisp) to demonstrate concepts.<br />
Available free online at:
<a href="http://mitpress.mit.edu/sicp/full-text/book/book.html">
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html</a><br />
A <a href="http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/">
free video lecture series</a> is also available.
</li>
</ul>
<h4 id="c">C</h4>
<ul>
<li><em>The C Programming Language, Second Edition</em>, Brian W. Kernighan
and Dennis M. Ritchie, Prentice Hall, 1988<br />
The definitive C book.
</li>
</ul>
<h4 id="python">Python</h4>
<ul>
<li><em>Core Python Programming, Second Edition</em>, Wesley J. Chun,
Prentice Hall, September 18, 2006<br />
Usually I like O'Reilly books best, but I slightly prefer Chun's text
to <em>Learning Python</em>.<br />
Available at
<a href="http://search.safaribooksonline.com/0132269937?tocview=true">
Safari Books Online</a>
</li>
<li><em>The Django Book</em>, Apress, December 2007<br />
I think this is the first official Django book.<br />
</li>
</ul>
<h4 id="sqlite">SQLite</h4>
<ul>
<li><em>The Definitive Guide to SQLite</em>, Mike Owens, Apress, May 2006<br />
I browsed a few SQL books but liked this one better than most.
It has a good theory section.<br />
Available at
<a href="http://apress.com/book/view/9781590596739">
Apress.com</a>
</li>
</ul>
<h4 id="linux">Linux or related</h4>
<ul>
<li><em>X Power Tools</em>, Chris Tyler, O'Reilly, December 15, 2007<br />
Lots of good information on the X Window System and more; easy to understand.
I wish the basic Ubuntu or
Linux books had some of this information.<br />
Available at
<a href="http://search.safaribooksonline.com/9780596101954?tocview=true">
Safari Books Online</a>
</li>
<li>
<em>SSH, The Secure Shell: The Definitive Guide, Second Edition</em>,
Daniel J. Barrett; Richard E. Silverman; Robert G. Byrnes,
O'Reilly, May 10, 2005<br>
Available at
<a href="http://search.safaribooksonline.com/book/networking/ssh/0596008953">
Safari Books Online</a>
</li>
</ul>
<h4 id="ruby">Ruby</h4>
<ul>
<li><em>why's poignant guide to Ruby</em> by <a href="http://whytheluckystiff.net/">why
the lucky stiff</a><br />
Only in chapter 3, but very funny.<br />
Available free online at: <a href="http://poignantguide.net/ruby/">http://poignantguide.net/ruby/</a>
</li>
</ul>
<h4 id="javascript">Javascript</h4>
<ul>
<li>
<em>Javascript: The Good Parts</em>, Douglas Crockford, O'Reilly, May 2008<br>
This is the first Javascript book I read as I switched to Javascript and Frontend development. I was debating whether to read it since it was so old but I found it to be good and recommend it.
</li>
<li>
<em>You Don't Know JS: ES6 & Beyond</em>, Kyle Simpson, O'Reilly, December 2015<br>
This is the primary way I learned ES6. It is very detail oriented.<br>
Available free online
<a href="https://github.com/getify/You-Dont-Know-JS/tree/master/es6%20%26%20beyond">
on github
</a>
</li>
<li>
<em>JavaScript Allongé, the "Six" Edition</em>, Reg "raganwald" Braithwaite, Leanpub, 2016<br>
This was the third Javascript book I read and it was the most fun. It teaches functional programming concepts such as closures, shadowing, higher order functions, combinators, decorators, etc using ES6.<br>
Available free online at:
<a href="https://leanpub.com/javascriptallongesix/read">https://leanpub.com/javascriptallongesix/read</a>
</li>
</ul>
<h4 id="non-technical">Non technical</h4>
<ul>
<li>The Hitchhiker's Guide to the Galaxy by Douglas Adams</li>
<li>Calvin and Hobbes by Bill Watterson</li>
<li>Crime and Punishment by Fyodor Dostoyevsky</li>
<li>Mere Christianity by C. S. Lewis</li>
<li>Screwtape Letters by C. S. Lewis</li>
</ul>
<h4 id="see-also">See also</h4>
<ul>
<li><a href="http://www.reddit.com/r/books/comments/ch0wt/a_reading_list_for_the_selftaught_computer/">
http://www.reddit.com/r/books/comments/ch0wt/a_reading_list_for_the_selftaught_computer/</a></li>
<li><a href="http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read">
http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read</a></li>
<li><a href="http://www.reddit.com/r/books/comments/cq4qe/reddits_bookshelf/">
http://www.reddit.com/r/books/comments/cq4qe/reddits_bookshelf/</a></li>
</ul>
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>
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>