SaltyCrane: hardwarehttps://www.saltycrane.com/blog/2014-12-20T23:34:50-08:00Setting up the Lenovo Thinkpad X1 Carbon (2nd gen) fingerprint reader in Ubuntu 14.04
2014-12-20T23:34:50-08:00https://www.saltycrane.com/blog/2014/12/setting-lenovo-thinkpad-x1-carbon-2nd-gen-fingerprint-reader-ubuntu-1404/<p>
These are the steps I used to get the fingerprint sensor on the Lenovo Thinkpad X1 Carbon (2014 2nd generation) to work on Ubuntu Linux 14.04 Trusty Tahr 64-bit. After googling through many articles, this is the one that solved it for me:
<a href="http://thinkpadmint.blogspot.com/2014/02/getting-t440s-validity-vfs5011.html">
http://thinkpadmint.blogspot.com/2014/02/getting-t440s-validity-vfs5011.html
</a> Thank you!
</p>
<p>
The X1 Carbon has a Validity Sensors 138a:0017 sensor.
As of this writing, this sensor is not officially supported by libfprint, but you can compile a driver.
</p>
<h4 id="find-sensor">See what sensor you have</h4>
<pre class="console">$ lsusb
Bus 001 Device 003: ID 04ca:7036 Lite-On Technology Corp.
Bus 001 Device 002: ID 8087:8000 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 003: ID 8087:07dc Intel Corp.
Bus 002 Device 002: ID 138a:0017 Validity Sensors, Inc.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub</pre>
<h4 id="dependencies">Install dependencies</h4>
<pre class="console">
$ sudo apt-get install libmagickcore-dev
$ sudo apt-get install libusb-1.0.0-dev libnss3-dev libglib2.0-dev
$ sudo apt-get install libxv-dev
$ sudo apt-get install libtool
$ sudo apt-get install fprintd
$ sudo apt-get install automake
</pre>
<h4 id="compile-driver">Compile the driver</h4>
<ul>
<li>Download tarball from
<a href="https://github.com/abbradar/fprint_vfs5011/tree/faa090818200ca3ea6bfac8bb510e5e01a246c34">
https://github.com/abbradar/fprint_vfs5011/tree/faa090818200ca3ea6bfac8bb510e5e01a246c34
</a>
</li>
<li>Unzip, autogen, configure, make, install
<pre class="console">
$ cd ~/Downloads
$ unzip fprint_vfs5011-faa090818200ca3ea6bfac8bb510e5e01a246c34.zip
$ cd fprint_vfs5011-faa090818200ca3ea6bfac8bb510e5e01a246c34
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
</pre>
</li>
<li>Copy file
<pre class="console">
$ sudo cp /lib/udev/rules.d/40-libfprint0.rules /etc/udev/rules.d/
</pre>
</li>
<li>Add a section to the file
<pre class="console">
$ sudo vi /etc/udev/rules.d/40-libfprint0.rules
</pre>
<pre>
# Validity VFS5011
SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0017", ATTRS{dev}=="*", ATTR{power/control}="auto", MODE="0664", GROUP="plugdev"
</pre>
</li>
</ul>
<h4 id="install-gui">Install the fingerprint GUI</h4>
<pre class="console">
$ sudo apt-add-repository ppa:fingerprint/fingerprint-gui
$ sudo apt-get update
$ sudo apt-get install libbsapi policykit-1-fingerprint-gui fingerprint-gui
</pre>
<h4 id="run-gui">Run the fingerprint GUI and enroll a finger</h4>
<pre class="console">
$ fingerprint-gui
</pre>
<h4>Other links</h4>
<ul>
<li><a href="http://zecheru.com/thinkpad-fingerprint-ubuntu-14-04/">http://zecheru.com/thinkpad-fingerprint-ubuntu-14-04/</a></li>
<li><a href="https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X1_Carbon_%28Gen_2%29#Fingerprint_Reader">https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X1_Carbon_%28Gen_2%29#Fingerprint_Reader</a></li>
<li><a href="http://askubuntu.com/questions/442838/fingerprint-reader-driver-for-validity-sensors-fingerprint-scanner">http://askubuntu.com/questions/442838/fingerprint-reader-driver-for-validity-sensors-fingerprint-scanner</a></li>
<li><a href="https://bugs.launchpad.net/ubuntu/+source/libfprint/+bug/1382165">https://bugs.launchpad.net/ubuntu/+source/libfprint/+bug/1382165</a></li>
<li><a href="http://thinkpadmint.blogspot.com/2014/02/getting-t440s-validity-vfs5011.html">http://thinkpadmint.blogspot.com/2014/02/getting-t440s-validity-vfs5011.html</a></li>
<li><a href="https://github.com/abbradar/fprint_vfs5011">https://github.com/abbradar/fprint_vfs5011</a></li>
<li><a href="https://github.com/ars3niy/fprint_vfs5011/issues/4">https://github.com/ars3niy/fprint_vfs5011/issues/4</a></li>
</ul>
Ordered a Lenovo X1 Carbon for 40% off
2014-11-30T23:32:02-08:00https://www.saltycrane.com/blog/2014/11/ordered-lenovo-x1-carbon-40/<p>
I ordered a ~$1200 2.8 lb. 14" <a
href="http://shop.lenovo.com/us/en/laptops/thinkpad/x-series/x1-carbon-2/">Lenovo
Thinkpad X1 Carbon</a> (2014, 2nd generation, 20A7) today at 40% off for the
Black Friday / Cyber Monday sale. I hope I like the keyboard. I splurged
for an Intel Core i7-4600U, 8GB RAM, 256GB SSD, and the WQHD 2560x1440
display. I have enjoyed 7 months with my ~$200 2.8 lb. 11" <a
href="http://us.acer.com/ac/en/US/content/series/c720">Acer C720
Chromebook</a>. It's a pleasant contrast to my work-issued 5.9 lb. 17"
<a
href="http://www.lenovo.com/shop/americas/content/pdf/notebooks/ThinkPad/W-Series/W510_datasheet.pdf">Lenovo
Thinkpad W510</a>. <a
href="https://github.com/dnschneid/crouton">Crouton</a> worked well for
running Linux on the Chromebook but I wanted a dedicated Linux laptop
and a better screen. I will bequeath the C720 to my wife since she
currently uses my 7+ year old <a
href="http://en.wikipedia.org/wiki/Dell_Inspiron_E1405">Dell Inspiron
E1405</a>. I considered the 3.5 lb. 14" <a
href="http://shop.lenovo.com/us/en/laptops/thinkpad/t-series/t440s/">Lenovo
Thinkpad T440s</a> due to better battery/keyboard/flexibility, but the
X1 Carbon was ~$200 cheaper for a similarly spec'd model due to a bigger
discount and I liked the thinner and lighter design and better display.
Many reviews complained about the new keyboard layout and adaptive
function row. I hope key remapping will reduce the pain enough. LWN.net
editor, Jonathan Corbet mentioned he bought an X1 Carbon in <a
href="http://lwn.net/Articles/619784/">High-DPI displays and Linux</a>,
so it can't be too bad, right?
</p>
<p>Here is the full <a href="http://support.lenovo.com/us/en/products/laptops-and-netbooks/thinkpad-x-series-laptops/thinkpad-x1-carbon-type-20a7-20a8/documents/PD030763">
2014 2nd Gen ThinkPad X1 Carbon (Type 20A7, 20A8) spec sheet</a>.</p>
<p>
<em>Update 2015-03-14</em>: Lenovo released the 3rd generation of the
X1 Carbon which fixes the keyboard and improves battery life. Too bad
I didn't wait a few months. Here is the
<a href="http://support.lenovo.com/us/en/products/laptops-and-netbooks/thinkpad-x-series-laptops/thinkpad-x1-carbon-20bs-20bt/documents/PD100511">
new 2015 3rd Gen spec sheet</a>.
</p>
Setting up a Linux DVR w/ MythTV, Ubuntu 12.04, and a Hauppauge WinTV-HVR 1250 TV tuner card
2012-07-29T14:36:59-07:00https://www.saltycrane.com/blog/2012/07/setting-linux-dvr-w-mythtv-ubuntu-1204-and-hauppauge-wintv-hvr-1250-tv-tuner-card/<p>Setting up <a href="http://www.mythtv.org/">MythTV</a> involves a little pain, but once it's set up, it's pretty great. And you don't have to spend lots of money on a DVR from the cable company. With my modest hardware specs, playback is smooth and clear, however Picture in Picture is too jittery to be useful. Here's what I did to get my MythTV DVR running on my Ubuntu machine.</p>
<h4 id="parameters">Parameters</h4>
<ul>
<li>Ubuntu 12.04 LTS (Precise Pangolin)</li>
<li>MythTV 0.25</li>
<li><a href="http://www.amazon.com/Hauppauge-1196-WinTV-HVR-1250-PCI-E-Tuner/dp/B0014YFC18/">
Hauppauge 1196 WinTV-HVR-1250 PCI-E x1 TV Tuner 1196</a>
(The included remote does not work with Linux. However this
<a href="http://www.amazon.com/gp/product/B005C6CVAE">Anker Mini Bluetooth Keyboard</a> from Amazon works really great for controlling MythTV from the couch.)</li>
<li>Location: North America</li>
<li><a href="http://www.amazon.com/gp/product/B004QK7HI8/">Leaf Indoor OTA (over the air) HDTV Antenna</a> (You can use a cheap $20 HD antenna instead and it will work great, but I liked how the Leaf was so thin and unobtrusive. I tape mine to my window near the computer and run a 25-foot HDMI cable to the TV.)</li>
<li>Video card: <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16814130585">EVGA 01G-P3-1302-LR GeForce 8400 GS 1GB 64-bit DDR3 PCI Express 2.0 x16 HDCP Ready Low Profile Ready Video Card</a></li>
<li>Other PC hardware specs: 4GB RAM, Athlon II X3 3.1GHz CPU (<a href="/blog/2011/02/decided-build-linux-desktop-pc-myself/">full details</a>)</li>
</ul>
<h4 id="install-tuner-card">Install the Hauppauge WinTV-HVR 1250 TV tuner card</h4>
<p>Put the card in the computer. Connect the TV antenna to the card.</p>
<h4 id="check-tuner-card">Check the TV tuner card is recognized</h4>
<p>Ubuntu 12.04 includes drivers for the Hauppauge 1250 TV tuner card, so I did not need to install any drivers.</p>
<p><em>Update 2016-10-16:</em>On Ubuntu 16.04, look in /var/log/syslog instead of /var/log/dmesg.</p>
<pre>$ cat /var/log/dmesg</pre>
<pre>
[ 15.211985] cx23885 driver version 0.0.3 loaded
[ 15.214279] cx23885 0000:03:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
[ 15.214492] CORE cx23885[0]: subsystem: 0070:2259, board: Hauppauge WinTV-HVR1255 [card=20,autodetected]
[ 15.214600] IR NEC protocol handler initialized
[ 15.230936] IR RC5(x) protocol handler initialized
[ 15.235576] MCE: In-kernel MCE decoding enabled.
[ 15.237132] IR RC6 protocol handler initialized
[ 15.237703] EDAC MC: Ver: 2.1.0
[ 15.238256] AMD64 EDAC driver v3.4.0
[ 15.242493] IR JVC protocol handler initialized
[ 15.246743] IR Sony protocol handler initialized
[ 15.250908] IR MCE Keyboard/mouse protocol handler initialized
[ 15.256862] lirc_dev: IR Remote Control driver registered, major 250
[ 15.257125] IR LIRC bridge handler initialized
[ 15.284735] lp0: using parport0 (interrupt-driven).
[ 15.361892] tveeprom 0-0050: Hauppauge model 22111, rev E2F5, serial# 8323201
[ 15.361895] tveeprom 0-0050: MAC address is 00:0d:fe:7f:00:81
[ 15.361897] tveeprom 0-0050: tuner model is NXP 18271C2 (idx 155, type 54)
[ 15.361899] tveeprom 0-0050: TV standards NTSC(M) ATSC/DVB Digital (eeprom 0x88)
[ 15.361901] tveeprom 0-0050: audio processor is CX23888 (idx 40)
[ 15.361903] tveeprom 0-0050: decoder processor is CX23888 (idx 34)
[ 15.361904] tveeprom 0-0050: has no radio, has IR receiver, has no IR transmitter
[ 15.361906] cx23885[0]: hauppauge eeprom: model=22111
[ 15.361909] cx23885_dvb_register() allocating 1 frontend(s)
</pre>
<h4 id="install-mythtv">Install MythTV</h4>
<pre>$ sudo apt-get install mythtv</pre>
<h4 id="setup-mythtv">Set up the MythTV backend</h4>
<p>Run mythtv-setup to select your TV tuner card and scan for channels.</p>
<pre>$ mythtv-setup</pre>
<p>Click "Yes" to add your user to the "mythtv" group.</p>
<p>Click "Yes" to restart your login session.</p>
<p>Change the following options:</p>
<ul>
<li>2. Capture cards -> (New capture card) -> Card type: DVB DTV capture card (v3.x) -> Finish</li>
<li>4. Video sources -> (New video source) -> Video source name: FOOBAR, Listings grabber: North America (SchedulesDirect.org) (Internal), User ID: blank, Pass: blank</li>
<li>5. Input connections -> [DVB: /dev/dvb/adapter0/frontend0] -> Video source: FOOBAR -> Scan for channels<br>
Note: if you see the error "Failed to open the card", make sure the mythv-backend is actually stopped. The GUI said it would stop the backend but it was still running.
</li>
</ul>
<p>After running mythtv-setup, it will ask you if you want to start the backend. Select yes to start the backend. It will also ask you if you want to run mythfilldatabase. Select yes to run mythfilldatabase. This may take a while.</p>
<h4 id="ensure-backend-running">Ensure mythv backend is running</h4>
<p>After running mythtv-setup, the mythtv backend should start running.<p> <p>To check that the backend is running, run:</p>
<pre>$ ps -ef | grep myth</pre>
<p>If the mythtv backend is not running, start it using the following command:</p>
<pre>$ sudo service mythtv-backend start</pre>
<h4 id="troubleshooting-mythbackend">Troubleshooting mythbackend</h4>
<p>If mythbackend doesn't stay running, there may be some configuration that is broken.
Check /var/log/syslog. If that does not have enough information, run the backend with the --verbose option:
<pre>$ mythbackend --verbose</pre>
</p>
<h4 id="run-mythfrontend">Run the MythTV frontend</h4>
<pre>$ mythfrontend</pre>
<h4 id="keyboard-shortcuts">Some keyboard shortcuts</h4>
<ul>
<li>P - pause/play</li>
<li>SPACE - set/clear bookmark</li>
<li>LEFT/RIGHT ARROW - skip back/forward</li>
<li>M - menu</li>
<li>D - delete</li>
</ul>
<h4 id="other-stuff">Other stuff</h4>
<ul>
<li>You may want to change the theme. I chose the TintedGlass 2.43 theme.</li>
<li>To get schedule information, I ended up signing up for a membership at <a href="http://www.schedulesdirect.org/">www.schedulesdirect.org</a>. It is $25/year (or ~$2/month). It seems to be the recommended way to get schedule information.</li>
</ul>
<h4 id="mythtv-remote-computer">How run mythfrontend on another Ubuntu laptop connected to your LAN <em>(Added 2013-06-07)</em></h4>
<br>
<p>Since MythTV has a flexible client/server architecture, you can run the MythTV backend server on
one machine and access it from multiple other machines running a Mythtv frontend.
These steps assume the remote frontend is running on a laptop with Ubuntu 12.04
and it is connected to your local network (LAN) (not through the internet (though that is possible.).)</p>
<p><em>UPDATE:</em> Playing 1080p HD content over my $30 Belkin G wireless router (rated at 54 Mbps)
had occasional stalls in the playback. Repositioning my router helped, but after a couple days,
I decided to order a <a href="http://www.amazon.com/Factory-Refurbished-NETGEAR-WNDR3400-Wireless-N/dp/B0085WN7YQ/ref=sr_1_7?ie=UTF8&qid=1370820492&sr=8-7&keywords=dual+band+wireless+router">
Netgear N600 Wireless-N Dual Band Router</a>. Hopefully this will solve my problem.
</p>
<p>On the Mythtv backend server configured above:</p>
<ul>
<li>Determine the IP address of the Mythtv backend server by running ifconfig
<pre>$ ifconfig </pre>
For me, it is 192.168.2.2. This will be used in the steps below.
</li>
<li>Follow the instructions here: <a href="http://www.mythtv.org/wiki/Mythfrontend">http://www.mythtv.org/wiki/Mythfrontend</a>
<ul>
<li>Edit /etc/mysql/my.cnf so the the bind-address line is commented out (on Ubuntu 16.04 edit /etc/mysql/mysql.conf.d/mysqld.cnf):
<pre>#bind-address 127.0.0.1</pre>
</li>
<li>Allow remote users access to the database. Note: replace "mypassword" with the value found in ~/.mythtv/mysql.txt.
<pre>$ mysql -u root
mysql> grant all on mythconverg.* to 'mythtv'@'%' identified by 'mypassword';
mysql> flush privileges;
mysql> exit</pre>
</li>
<li>Restart mysql server:
<pre>$ sudo service mysql restart </pre>
</li>
</ul>
</li>
<li>Ensure mythbackend is not using 127.0.0.1.
<ul>
<li>Run mythtv-setup:
<pre>$ mythtv-setup </pre>
</li>
<li>Change the IP address from 127.0.0.1 to 192.168.2.2 (or IP address you determined from above.)</li>
</ul>
</li>
</ul>
<p>On the laptop:</p>
<ul>
<li><pre>$ sudo apt-get install mythtv-frontend </pre></li>
<li>click "yes" to be added to the mythtv group</li>
<li>click "yes" to restart your session</li>
<li>click "OK" to the msg about logging out of your session</li>
<li>logout and login again</li>
<li>Run mythfrontend
<pre class="console">$ mythfrontend </pre>
</li>
<li>For the hostname: enter the IP address of the Mythtv server. For me it is 192.168.2.2.</li>
<li>Enter the Mysql password. This can be found in ~/.mythtv/mysql.txt (or ~/.mythtv/config.xml or /etc/mythtv/config.xml on newer versions) on the Mythtv server machine. Or you can check the settings of the mythfrontend running on the server machine.</li>
</ul>
<h4 id="watch-on-android">How to watch your recorded videos on your Android phone over the internet</h4>
<br>
<ul>
<li>This method uses the <a href="http://www.mythtv.org/wiki/Services_API">MythTV Services API</a></li>
<li>PC: Set up a SSH server on your MythTV backend server</li>
<li>PC: Get the external IP address of your MythTV backend server
<pre>$ curl http://ifconfig.me
111.222.333.444 </pre>
</li>
<li>
Android: Install <a href="https://play.google.com/store/apps/details?id=org.connectbot">Connectbot</a>
on your Android phone and enable port forwarding of 6544.
For more info see: <a href="http://parker1.co.uk/mythtv_ssh.php">http://parker1.co.uk/mythtv_ssh.php</a>
<ul>
<li>Android: Using Connectbot, connect to your MythTV server using the IP address from above (111.222.333.444)</li>
<li>Android: Menu -> Port Forwards -> Menu -> Add port forward:
<ul>
<li>Nickname: mythtv</li>
<li>Type: local</li>
<li>Source port: 6544</li>
<li>Destination: localhost:6544</li>
</ul>
</li>
<li>Android: Disconnect and reconnect</li>
</ul>
</li>
<li>Android: Install and set up <a href="https://play.google.com/store/apps/details?id=org.mythtv">MythTV Android Frontend</a>
<ul>
<li>Android: Touch the settings icon -> Away Profiles
<ul>
<li>Name: Away</li>
<li>MythTV Master Backend Address: http://localhost:6544/</li>
</ul>
Save
</li>
<li>Android: Away -> Recordings -> Select a show to watch -> watch it</li>
</ul>
</li>
</ul>
<p>See also:</p>
<ul>
<li><a href="http://parker1.co.uk/mythtv_stream.php">http://parker1.co.uk/mythtv_stream.php</a></li>
<li><a href="http://parker1.co.uk/mythtv_android.php">http://parker1.co.uk/mythtv_android.php</a></li>
</ul>
<div style="display: none">
<h4>How to control your DVR from your Android phone</h4>
<ul>
<li>Configure your MythTv Frontend on your PC:
<ul>
<li>Setup -> General -> Hit "Next" 6 times -> Check "Enable Network Remote Control"</li>
<li>Setup -> Appearance -> Hit "Next" 3 times and
<ul>
<li>Check "Enable LCD device"</li>
<li>Check "Display time"</li>
<li>Check "Display menus"</li>
<li>Check "Display music arstist and title"</li>
<li>Check "Display channel information"</li>
</ul>
</li>
</ul>
<li>Install <a href="http://code.google.com/p/mythdroid/">MythDroid</a> on your Android phone</li>
<li>Install <a href="http://code.google.com/p/mythdroid/wiki/MDDInstall">MDD</a> on your PC
<ul>
<li>Install libimlib2
<pre class="console">$ sudo apt-get install libimlib2-dev </pre>
</li>
<li>Download MDD
<pre class="console">$ wget http://mythdroid.googlecode.com/files/mdd-0.6.2.tgz </pre>
</li>
<li>Install MDD
<pre class="console">$ tar xvf mdd-0.6.2.tgz
$ cd mdd
$ perl Build.PL </pre>
Type "y" because you are running this on the PC that runs your MythTv frontend
<pre class="console">$ ./Build installdeps </pre>
Hit ENTER to accept all the defaults
<pre class="console">$ ./Build test
$ sudo ./Build install </pre>
Type "y" to stop mythfrontend. Then start it again
<pre class="console">$ mythfrontend </pre>
</li>
</ul>
</li>
</ul>
</div>
<h4 id="restore-backup">How to restore an old database on a fresh install <em>Added 2016-10-16</em></h4>
<p>See <a href="https://www.mythtv.org/wiki/Database_Backup_and_Restore">https://www.mythtv.org/wiki/Database_Backup_and_Restore</a>
</p>
<pre class="console">
$ wget https://raw.githubusercontent.com/MythTV/mythtv/master/mythtv/programs/scripts/database/mythconverg_restore.pl
$ chmod a+x mythconverg_restore.pl
$ ./mythconverg_restore.pl --directory /mnt/hdd2/mythtv/db_backups --filename mythconverg-1317-20161008080149.sql.gz --drop_database --create_database
$ # if there has been a database schema change, you will need to run mythtv-setup
</pre>
<h4 id="help-references">Help / References</h4>
<ul>
<li><a href="http://www.ehow.com/how_5870992_build-linux-dvr.html">
How to build a Linux DVR
</a></li>
<li><a href="http://ubuntuforums.org/showthread.php?t=1989920">http://ubuntuforums.org/showthread.php?t=1989920</a></li>
<li><a href="http://ubuntuforums.org/showthread.php?t=1573600">http://ubuntuforums.org/showthread.php?t=1573600</a></li>
</ul>
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>
This time I decided to build my Linux desktop PC myself
2011-02-21T21:44:57-08:00https://www.saltycrane.com/blog/2011/02/decided-build-linux-desktop-pc-myself/<p>Three years ago, <a href="/blog/2008/02/dell-530n-ubuntu-vs-build-it-yourself/">I decided to buy a Dell Ubuntu desktop PC</a> instead of building it myself. This time around, I went the other way. My main reasons were: better parts and easier upgrades. We'll see what I decide in 2014.
</p>
<table>
<tr>
<td>Motherboard</td>
<td>ASUS AM3 AMD 880G HDMI and USB 3.0 Micro ATX Motherboard M4A88T-M/USB3
<a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16813131660">newegg</a>
</td>
<td>Amazon</td>
<td>$99.99</td>
</tr>
<tr>
<td>CPU</td>
<td>AMD Athlon II X3 445 Rana 3.1GHz Socket AM3 95W Triple-Core Desktop Processor ADX445WFGMBOX</td>
<td>Newegg</td>
<td>$77.00</td>
</tr>
<tr>
<td>Power supply</td>
<td>OCZ Technology StealthXStream 2 500-Watt Power Supply</td>
<td>Amazon</td>
<td>$59.99</td>
</tr>
<tr>
<td>Case</td>
<td>Cooler Master Elite 360 RC-360-KKN1-GP ATX Mid Tower/Desktop Case (Black)</td>
<td>Amazon</td>
<td>$39.99</td>
</tr>
<tr>
<td>Hard drive</td>
<td>Seagate Barracuda 7200.12 ST3500418AS 500GB 7200 RPM SATA 3.0Gb/s 3.5" Internal Hard Drive -Bare Drive</td>
<td>Newegg</td>
<td>$39.99</td>
</tr>
<tr>
<td>RAM</td>
<td>
<del>Already own 3GB DDR2</del><br>
Crucial 4GB 240-PIN Dimm DDR3 - 1333 PC3-10600
</td>
<td>Amazon</td>
<td>$46.99</td>
</tr>
<tr>
<td>Optical Drive</td>
<td>
Asus DVD RW
</td>
<td>Fry's Electronics</td>
<td>~$25.00</td>
</tr>
<tr>
<td>Shipping</td>
<td colspan=2>
Free shipping on all items
</td>
<td>$0.00</td>
</tr>
<tr>
<td colspan=3>
Total</td>
<td>$388.95</td>
</tr>
</table>
<p>I used this guide: <a href="http://www.extremetech.com/article2/0,2845,2367455,00.asp">Build a Linux Media Center PC</a> <em> August 6, 2010</em></p>
<p>See also: <a href="http://www.extremetech.com/article2/0,2845,2366286,00.asp">8 Reasons to Build Your Own PC</a></p>
<a href="https://picasaweb.google.com/lh/photo/u1xg-jWJkINCi8Sdvk-P2g?feat=embedwebsite"><img src="https://lh5.googleusercontent.com/_WnP2PKiLI14/TXT2v7AJZnI/AAAAAAAAAXk/dwhB7maXKZk/s400/IMG_20110226_133344.jpg" height="299" width="400" /></a>
<a href="https://picasaweb.google.com/lh/photo/iD_tZ0lx2WeQRYwW7Hfx5w?feat=embedwebsite"><img src="https://lh3.googleusercontent.com/_WnP2PKiLI14/TXUhManYtjI/AAAAAAAAAXk/HIk9EbIRYcs/s400/IMG_20110226_133029.jpg" height="299" width="400" /></a>
<a href="https://picasaweb.google.com/lh/photo/h09eexN4VrCm7y6kmpeydw?feat=embedwebsite"><img src="https://lh4.googleusercontent.com/_WnP2PKiLI14/TXT2XMYnQNI/AAAAAAAAAXk/xm-g0zaLQao/s400/IMG_20110226_134315.jpg" height="299" width="400" /></a>
<a href="https://picasaweb.google.com/lh/photo/HSbEhPtaA0NodAUIV7I_PA?feat=embedwebsite"><img src="https://lh5.googleusercontent.com/_WnP2PKiLI14/TXT1L2WBKVI/AAAAAAAAAXk/iZuYZ58cBVc/s400/IMG_20110226_135846.jpg" height="299" width="400" /></a>
<a href="https://picasaweb.google.com/lh/photo/K4vCzsGVnTIjZCcXDCh6Bw?feat=embedwebsite"><img src="https://lh4.googleusercontent.com/_WnP2PKiLI14/TXT1dolRmVI/AAAAAAAAAXk/i0QEzAXCVRs/s400/IMG_20110226_135202.jpg" height="299" width="400" /></a>
<a href="https://picasaweb.google.com/lh/photo/cNvsz37aOZRaUFc2Egks_A?feat=embedwebsite"><img src="https://lh6.googleusercontent.com/_WnP2PKiLI14/TXT0y1zWzzI/AAAAAAAAAXk/u2fOeQ7bSvw/s400/IMG_20110226_140401.jpg" height="299" width="400" /></a>
<a href="https://picasaweb.google.com/lh/photo/udqvCq0gROlCw18lPIbSaw?feat=embedwebsite"><img src="https://lh6.googleusercontent.com/_WnP2PKiLI14/TXT1AYeQoKI/AAAAAAAAAXk/nBgNo0M94vA/s400/IMG_20110226_141136.jpg" height="299" width="400" /></a>
<a href="https://picasaweb.google.com/lh/photo/IWY4oJ8w9YJb2lxkKWbVBg?feat=embedwebsite"><img src="https://lh4.googleusercontent.com/_WnP2PKiLI14/TXTzIJbnhUI/AAAAAAAAAXk/IrNZjNgIWu0/s400/IMG_20110226_143826.jpg" height="299" width="400" /></a>
<a href="https://picasaweb.google.com/lh/photo/KKqs7ns6YE2vLwLp3qSPyg?feat=embedwebsite"><img src="https://lh3.googleusercontent.com/_WnP2PKiLI14/TXTyZe1VknI/AAAAAAAAAXk/-YvAP-cDR7w/s400/IMG_20110226_162949.jpg" height="299" width="400" /></a>
<a href="https://picasaweb.google.com/lh/photo/6P-5t0VPGsauAHgCoZzh9w?feat=embedwebsite"><img src="https://lh3.googleusercontent.com/_WnP2PKiLI14/TXTxqvOwa_I/AAAAAAAAAXk/tyW2uvvnKoM/s400/IMG_20110305_211916.jpg" height="299" width="400" /></a>
<a href="https://picasaweb.google.com/lh/photo/mMlPRjlV_Al5FzX_YakkNQ?feat=embedwebsite"><img src="https://lh5.googleusercontent.com/_WnP2PKiLI14/TXTxdpMqD8I/AAAAAAAAAXk/7RTfjw5z9kM/s400/IMG_20110305_212128.jpg" height="299" width="400" /></a>
<a href="https://picasaweb.google.com/lh/photo/KfBa1JVlvkapfJjctFEq5w?feat=embedwebsite"><img src="https://lh3.googleusercontent.com/_WnP2PKiLI14/TXTxRASSceI/AAAAAAAAAXk/aax0D77QIVg/s400/IMG_20110305_213251.jpg" height="299" width="400" /></a>
<a href="https://picasaweb.google.com/lh/photo/xZYF9o-8jRdEcZEv5cn6wA?feat=embedwebsite"><img src="https://lh4.googleusercontent.com/_WnP2PKiLI14/TXTxF_t0zWI/AAAAAAAAAXk/jVGYZC10zYA/s400/IMG_20110305_214907.jpg" height="299" width="400" /></a>
<a href="https://picasaweb.google.com/lh/photo/wG5EcNrZT9kh_vAABFdTVg?feat=embedwebsite"><img src="https://lh6.googleusercontent.com/_WnP2PKiLI14/TXTw5dmcy5I/AAAAAAAAAXk/WyJQWvNhSbM/s400/IMG_20110305_214919.jpg" height="400" width="299" /></a>
<a href="https://picasaweb.google.com/lh/photo/SD_bOtsBSk8Lw0pKGzwmWQ?feat=embedwebsite"><img src="https://lh5.googleusercontent.com/_WnP2PKiLI14/TXTwsvs2LzI/AAAAAAAAAXk/-pDniB8nU8M/s400/IMG_20110305_215412.jpg" height="299" width="400" /></a>
<a href="https://picasaweb.google.com/lh/photo/zelUyqDTZeyHfj1b6dS3VA?feat=embedwebsite"><img src="https://lh5.googleusercontent.com/_WnP2PKiLI14/TXTwWGKcl4I/AAAAAAAAAXk/rYRbJEjsTpw/s400/IMG_20110307_061932.jpg" height="400" width="299" /></a>
<a href="https://picasaweb.google.com/lh/photo/uDfmQ_5fKxfrkLdOrISW5Q?feat=embedwebsite"><img src="https://lh4.googleusercontent.com/_WnP2PKiLI14/TXTwBjW52yI/AAAAAAAAAXk/JNyUzcIt_cI/s400/IMG_20110307_062535.jpg" height="299" width="400" /></a>
Dell 530N Ubuntu vs. build it yourself
2008-02-01T22:56:00-08:00https://www.saltycrane.com/blog/2008/02/dell-530n-ubuntu-vs-build-it-yourself/<p>I just received my new Dell 530N with Ubuntu 7.10 pre-loaded. I seriously considered building a PC myself but after weighing the pros and cons decided to go with the Dell. The main reason I chose the Dell was because it was the faster/easier option. The cost comparison was pretty similar. Hal's Notes has <a href="http://digimojo.blogspot.com/2007/09/dell-ubuntu-vs-build-it-yourself.html">an article</a> which compares the cost of the 530N vs. the cost of parts from newegg.com. Here is my very similar anaylsis.</p>
<p>My 530N was $349 (unfortunately i had to pay $30 for shipping) and included the following:</p>
<ul>
<li>Intel Pentium Dual Core processor E2160 (1.80GHz,800FSB)</li>
<li>1GB DDR2 SDRAM at 667MHz</li>
<li>128MB NVIDIA GeForce 8300GS</li>
<li>250GB SATA II Hard Drive (7200RPM)</li>
<li>48X CDRW/DVD Combination Drive</li>
</ul>
<p>The only thing I upgraded was the processor-- from the E2140 to the E2160 because I had read it was better for overclocking (if it turns out to be possible to overclock with Dell's motherboard). </p>
<p>For the build it myself option, I started with a budget configuration from <a href="http://techreport.com/articles.x/13660/2">The Tech Report</a>. The total for that machine in November 2007 was $519. Adjusting the items to closer match the Dell 530N got me down to $409. See below.</p>
<ul>
<li> LITE-ON Combo Black SATA Model DH-52C2S-04 - OEM <br />
$24.99</li>
<li> Antec NSK4480 Black/ Silver 0.8mm cold-rolled steel construction ATX Mid Tower Computer Case 380W Power Supply - Retail <br />
$79.95</li>
<li> Western Digital Caviar SE16 WD2500KS 250GB 7200 RPM SATA 3.0Gb/s Hard Drive - OEM <br />
$69.99</li>
<li> EVGA 128-P2-N428-LR GeForce 7200GS 512MB (128MB on Board) 64-bit GDDR2 PCI Express x16 Video Card - Retail <br />
$34.99</li>
<li> Kingston 1GB 240-Pin DDR2 SDRAM DDR2 667 (PC2 5300) Desktop Memory Model KVR667D2N5/1G - Retail <br />
$19.99</li>
<li> GIGABYTE GA-P35-DS3L LGA 775 Intel P35 ATX Intel Motherboard - Retail <br />
$99.99</li>
<li> Intel Pentium E2160 Allendale 1.8GHz LGA 775 65W Dual-Core Processor Model BX80557E2160 - Retail <br />
$78.99</li>
<li>Subtotal: $408.89</li>
</ul>
<p>I didn't change the motherboard and case specified in article. I am guessing they are better than the Dell. Besides that, the Dell comes out cheaper. Note, that if I had upgraded Dell's components, say to 2GB RAM, a 320GB hard disk, a DVD burner, and a 256MB video card, the advantage goes out the window. I am guessing this is how Dell makes money-- lure the customer in with a low base price and charge extra for upgrades.</p>
<p>I went back and forth on the decision multiple times. One thing that almost made me build it myself was the much better chance of being able to overclock my processor with a standard motherboard. According to <a href="http://www.hardwarezone.com/articles/view.php?cid=2&id=2332&pg=2">this article</a> on hardwarezone.com, the E2160 can be overclocked to almost double and will still remain very stable. With standard motherboards, this is not too difficult to achieve. However, Dell's motherboards make it much more difficult. Hopefully for me, someone will figure it out and post an article about it.</p>
Installing Ubuntu with Vista on Dell 1405
2007-10-12T00:19:00-07:00https://www.saltycrane.com/blog/2007/10/installing-ubuntu-with-vista-on-dell/I just installed <a href="http://www.ubuntu.com/">Ubuntu</a> linux on my Dell E1405 personal laptop. A friend had talked about setting up an Ubuntu machine so I thought it would be good for talking tech and also good experience. The setup so far has been relatively easy. The most difficulty has been that I had to delete two of Dell's partitions on the hard disk before I could install Ubuntu. I am dual booting Windows Vista, which was already installed, and Ubuntu 7.04 Feisty Fawn. I know Gutsy Gibson is only a few days away but I couldn't wait.<br /><br /> My Dell laptop came with 4 primary partitions already loaded:
<ol>
<li>the Dell Utility FAT16 partition: 47 MB</li>
<li>the Dell Recovery partition: 10 GB</li>
<li>the main Windows Vista NTFS partition: 62.48 GB</li>
<li>the MediaDirect FAT32 partion: 2 GB</li>
</ol>
This is the reason I only had about 25 GB free on my 80 GB SCSI hard disk. So it seems that the hard disk is only allowed to have 4 primary partitions. I deleted the Recovery partition. That was an easy decision because I didn't want it in the first place. Then I had to decide between the Utility or the MediaDirect partition. MediaDirect allows you to bypass Windows and directly view multimedia files such as pictures, music or DVDs. The Utility partion is used for diagnosing your computer in case something goes wrong. It appears to run a bunch of hardware tests. Both seemed nice to have but I decided to be practical and save the Utility partition. It will be nice to have something to test my hardware if things go wrong in the future. The rest of the installation was easy. I used the guide from <a href="http://apcmag.com/5046/how_to_dual_boot_vista_with_linux_vista_installed_first">APC </a>. It was the top of my Google search for "dual boot ubuntu vista" and it worked fine. The next step is getting my EVDO broadband card working so I can access the internet.
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>