SaltyCrane: subversionhttps://www.saltycrane.com/blog/2010-02-04T16:03:01-08:00Using kdiff3 with svn merge
2010-02-04T16:03:01-08:00https://www.saltycrane.com/blog/2010/02/using-kdiff3-svn-merge/
<p><a href="http://www.dronecode.org.uk/daybook/2008/10/graphical-merge-for-subversion.html">http://www.dronecode.org.uk/daybook/2008/10/graphical-merge-for-subversion.html</a></p>
<h4>Reference documentation</h4>
<a href="http://svnbook.red-bean.com/en/1.5/svn.advanced.externaldifftools.html">
Using External Differencing and Merge Tools</a><br>
<a href="http://svnbook.red-bean.com/en/1.5/svn.tour.cycle.html#svn.tour.cycle.resolve">
Resolve Conflicts (Merging Others' Changes)</a><br>
<a href="http://svnbook.red-bean.com/en/1.5/svn.advanced.confarea.html#svn.advanced.confarea.opts.config">
Config file</a><br>
Example of hg convert on Ubuntu
2009-08-05T15:57:23-07:00https://www.saltycrane.com/blog/2009/08/example-hg-convert-ubuntu/<p>Converting a Subversion repository to a Mercurial repository is very easy.
Here's an example that uses
<a href="http://mercurial.selenic.com/wiki/ConvertExtension">hg convert</a>
to convert a SVN repository
(<a href="http://code.google.com/p/django-tagging/">django-tagging</a>)
to Mecurial on Ubuntu. I'm using Mercurial 1.3 on Ubuntu 9.04.</p>
<ul>
<li>Install Subversion Python bindings. (This should solve the "Subversion python bindings could not be loaded" error)
<pre>sudo apt-get install python-subversion</pre>
</li>
<li>Enable the "convert" extension. Add the following to your <code>~/.hgrc</code> file:
<pre>[extensions]
hgext.convert =</pre>
</li>
<li>Convert:
<pre>hg convert http://django-tagging.googlecode.com/svn/trunk/ django-tagging-hg</pre>
</li>
<li>Update:
<pre>cd django-tagging-hg
hg update</pre>
</li>
</ul>
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>
How to show diffs with Subclipse
2007-04-04T09:59:00-07:00https://www.saltycrane.com/blog/2007/04/how-to-show-diffs-with-subclipse/
<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_lZhqNsiakm4/RhPZsxkx6XI/AAAAAAAAABM/kTNNLhi2hbU/s1600-h/compare_revision.png"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_lZhqNsiakm4/RhPZsxkx6XI/AAAAAAAAABM/kTNNLhi2hbU/s200/compare_revision.png" alt="" id="BLOGGER_PHOTO_ID_5049618970457532786" border="0" /></a>
<span style=";font-family:arial;font-size:small;color:black;">
I want to show revision history diffs in SVN/Subclipse/Eclipse. I looked in the "History" view, but this is not where to find it. Instead, right-click on your file in the "<b>Navigator</b>" view, select "<b>Compare With</b>" > "<b>Revision...</b>". Then double-click on a revision to compare to. The example screenshot is from <a href="http://markphip.blogspot.com/index.html">Mark's blog.</a>
</span>
How to setup a subclipse project to branch/tag
2007-03-29T20:06:00-07:00https://www.saltycrane.com/blog/2007/03/how-to-setup-subclipse-project-to/<p>I've read that branching/tagging is one of the nice features of SVN (See
<a href="http://markphip.blogspot.com/index.html">Mark Phippard's
blog</a> and <a href="http://svnbook.red-bean.com/">the subversion book</a>).
However, it took me a little while to figure out how to set up my
directory structure with the recommended "trunk", "branches", and "tags"
folders. These are my basic step-by-step notes for how I set up my
Subclipse project and then created a branch. This assumes you've already
installed Subclipse and set up a repository. If you have not done that,
see <a href="http://www.saltycrane.com/blog/2007/03/how-to-install-subversion-svn-with/">How
to install Subversion (SVN) with Eclipse on Windows</a>.
</p>
<ol>
<li>Add your Eclipse project to the repository in a "trunk" folder<br />
<ul>
<li>Start with an Eclipse project named "myproject"</li>
<li>In the "<b>Navigator</b>" window, right-click on your
project, select "<b>Team</b>" > "<b>Share Project...</b>"</li>
<li>Select "<b>SVN</b>" and click "<b>Next</b>"</li>
<li>Select your repository. (This tutorial assumes it is located
at "svn://localhost".) Click "<b>Next</b>".</li>
<li>In the "Enter Folder Name" dialog, select the "<b>Use
specified folder name</b>" option and enter "<b>myproject/trunk</b>". The
"URL:" box should show something like
"svn://localhost/myproject/trunk". Click "<b>Next</b>".</li>
<li>Click "<b>Finish</b>". A new dialog will open. Select the
files to commit, enter a comment, and click "<b>OK</b>". I got the
following output in the "Console" window: <pre> Filesystem has no item
svn: URL 'svn://localhost/myproject/trunk' non-existent in that revision
Bad URL passed to RA layer
svn: URL 'svn://localhost/myproject' non-existent in revision '234'
mkdir -m "Initial import." svn://localhost/myproject
mkdir -m "Initial import." svn://localhost/myproject/trunk
checkout -N -r HEAD svn://localhost/myproject/trunk
Checked out revision 236.
add -N C:\path\to\myproject\.settings
A C:/path/to/myproject/.settings
add -N C:\path\to\myproject\.settings\org.eclipse.cdt.core.prefs
A C:/path/to/myproject/.settings/org.eclipse.cdt.core.prefs
add -N C:\path\to\myproject\.cdtbuild
A C:/path/to/myproject/.cdtbuild
add -N C:\path\to\myproject\.settings\org.eclipse.cdt.managedbuilder.core.prefs
A
C:/path/to/myproject/.settings/org.eclipse.cdt.managedbuilder.core.prefs
add -N C:\path\to\myproject\.cdtproject
A C:/path/to/myproject/.cdtproject
add -N C:\path\to\myproject\.project
A C:/path/to/myproject/.project
commit -m "Initial import." C:/path/to/myproject/.cdtbuild C:/path/to/myproject/.cdtproject C:/path/to/myproject/.project C:/path/to/myproject/.settings C:/path/to/myproject/.settings/org.eclipse.cdt.core.prefs C:/path/to/myproject/.settings/org.eclipse.cdt.managedbuilder.core.prefs
Adding path/to/myproject/.cdtbuild
Adding path/to/myproject/.cdtproject
Adding path/to/myproject/.project
Adding path/to/myproject/.settings
Adding path/to/myproject/.settings/org.eclipse.cdt.core.prefs
Adding path/to/myproject/.settings/org.eclipse.cdt.managedbuilder.core.prefs
Transmitting file data ...
Committed revision 237.</pre>
</li>
</ul>
</li>
<br />
<li>Create "branches" and "tags" folders in the repository<br />
<ul>
<li>Switch to the "<b>SVN Repository Exploring</b>" perspective.
(From the "<b>Window</b>" menu, select "<b>Open Perspective</b>" > "<b>Other...</b>".
Select "<b>SVN Repository Exploring</b>" and click "<b>OK</b>".)</li>
<li>In the "SVN Repository" window, expand the tree, and
right-click on "<b>myproject</b>", select "<b>New</b>" > "<b>New
remote folder</b>".</li>
<li>In the "Create a new remote folder" dialog, expand the tree
and select "<b>myproject</b>". For "<b>Folder name:</b>", enter "<b>branches</b>".
Click "<b>Next</b>".</li>
<li>Enter a comment and click "<b>Finish</b>".</li>
<li>Expanding the "myproject" folder now shows the "branches" and
"trunk" subfolders.</li>
<li>I got the following output in the "Console" window: <pre>mkdir -m "Created branches folder." svn://localhost/myproject/branches</pre>
</li>
<li>Repeat these steps to create a "tags" folder.</li>
</ul>
</li>
<br />
<li>Create a branch<br />
<ul>
<li>Switch back to the previous perspective.</li>
<li>Commit any changes you want in the branch.</li>
<li>In the "Navigator" window, right-click your project and
select "<b>Team</b>" > "<b>Update</b>"</li>
<li>Right-click your project and select "<b>Team</b>" > "<b>Branch/Tag...</b>"</li>
<li>In the "Copy (Branch/Tag)" dialog, in the "<b>To URL:</b>"
textbox, enter "<b>svn://localhost/myproject/branches/mybranch</b>".
(The "From WC at URL:" box should read
"svn://localhost/myproject/trunk".)</li>
<li>Leave the "<b>HEAD revision in the repository</b>" option
selected, enter a comment, and click "<b>OK</b>".</li>
<li>I got the following output in the "Console" window: <pre>copy -rHEAD svn://localhost/myproject/trunk svn://localhost/myproject/branches/mybranch</pre>
</li>
</ul>
</li>
<li>Switch your working copy to the branch
<ul>
<li>You can now switch your working copy between the trunk and
the branch.</li>
<li>Right-click your project and select "<b>Team</b>" > "<b>Switch
to another Branch/Tag...</b>"</li>
<li>In the "<b>To URL:</b>" textbox, enter "<b>svn://localhost/myproject/branches/mybranch</b>".
Click "<b>OK</b>".</li>
<li>I got the following output in the "Console" window: <pre>switch svn://localhost/myproject/branches/mybranch C:/path/to/myproject -rHEAD
At revision 239.</pre></li>
</ul>
</li>
<li>You should now be able use the features discussed in <a href="http://markphip.blogspot.com/2007/01/enhanced-support-for-branches-and-tags.html">Enhanced
Support for Branches and Tags in Subclipse</a></li>
</ol>
<br><p>Branching steps were taken from <a href="http://dserodio.livejournal.com/11122.html">How to branch
with Subclipse</a>.</p>
How to install Subversion (SVN) with Eclipse on Windows
2007-03-01T18:02:00-08:00https://www.saltycrane.com/blog/2007/03/how-to-install-subversion-svn-with/Subversion looks to be the new version control system of choice in the open source community, supplanting CVS which supplanted RCS. This article, <a href="">Why Subversion Over CVS</a>, gives some reasons to choose Subversion over CVS. Many people also choose subversion over commercial products such as ClearCase and Visual Source Safe. The authors of "Windows Developer Power Tools" (O'Reilly 2006) write: <blockquote cite="http://search.safaribooksonline.com/0596527543/windowsdpt-CHP-11"><p><i>
Subversion is our favorite version-control system, and we definitely recommend it above all others (including commercial products) in most scenarios. There may be certain areas where commercial systems excel, but for overall version control, it's tough to beat Subversion.</i></p></blockquote>
<b>Step by step instructions</b><br />
<p>Here are my notes for installing <a href="http://subversion.tigris.org/">Subversion</a>, <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a> (a Subversion client which integrates with Windows Explorer), and <a href="http://subclipse.tigris.org/">Subclipse</a> (the plugin for Eclipse integration) on Windows. This assumes you already have Eclipse installed. Also, these notes are geared towards version control for individual use as opposed to team use.</p>
<ol>
<li>Install Subversion and TortoiseSVN using SVN 1-Click Setup<br />
<ul>
<li>Go to <a href="http://svn1clicksetup.tigris.org/">http://svn1clicksetup.tigris.org/</a>, click "<b>Download the latest version</b>", run the installer, and accept all the defaults.</li>
<li>This is a Windows installer used "<i>to simplify the process of setting up a Subversion repository on a Windows-based computer. Svn1ClickSetup takes a user through the steps necessary to install the Subversion command-line utilities and TortoiseSVN, as well as creating a repository and initial project.</i>" --from svn1clicksetup.tigris.org</li>
<li>To check that something went right, go to Windows Explorer and right-click on a file. You should see the "TortoiseSVN" context menu item.</li>
</ul>
</li><br />
<li>Install the Subclipse plugin using the instructions at <a href="http://subclipse.tigris.org/install.html">http://subclipse.tigris.org/install.html</a>.
</li><br />
<li>Define the SVN Repository
<ul>
<li>In Eclipse, from the "<b>Window</b>" menu, select "<b>Open Perspective</b>" > "<b>Other...</b>". Select "<b>SVN Repository Exploring</b>" and click "<b>OK</b>".</li>
<li>Inside the "<b>SVN Repository</b>" window, right-click in the big empty space, and select "<b>New</b>" > "<b>Repository Location...</b>".</li>
<li>In the "<b>Url:</b>" box, type "<b>svn://localhost</b>". Click "<b>Finish</b>". (Use this url to connect to the repository hosted on the SVN server on your local machine created using svn1clicksetup. I got this tip from <a href="http://james.cooley.ie/2006/12/01/version_control_with_eclipse_on_windows.html">http://james.cooley.ie/2006/12/01/version_control_with_eclipse_on_windows.html</a>. If you want to use a repository on another server, then point to that location instead. "file://, http://, or https:// are the other protocols that can be used.)</li>
</ul>
</li><br />
<li>Add an Eclipse project to the repository
<ul>
<li>In the "<b>Navigator</b>" window, right-click on a project and select "<b>Team</b>" > "<b>Share Project...</b>".</li>
<li>Select "<b>SVN</b>" and click "<b>Next</b>"</li>
<li>Your repository, "svn://localhost", (which you added in step 3) should show up here. Click "<b>Next</b>".</li>
<li>Click "<b>Next</b>" again. Click "<b>Finish</b>". I got the following output in the "Console" window:
<pre> Filesystem has no item
svn: URL 'svn://localhost/my_project' non-existent in that revision
mkdir -m "Initial import." svn://localhost/my_project
checkout -N -r HEAD svn://localhost/my_project
Checked out revision 5.</pre>
</li>
<li>Select the files you want to add and click "<b>OK</b>". I got the following output in the "Console" window:
<pre>add -N C:\path\to\my_project\test.py
A C:/path/to/my_project/test.py
commit -m "Initial import." C:/path/to/my_project/test.py
Adding path/to/my_project/test.py
Transmitting file data ...
Committed revision 6.</pre>
</li>
<li>See this article for more information: <a href="http://www-128.ibm.com/developerworks/opensource/library/os-ecl-subversion/?ca=dgr-jw22EclipseSubversion">How to use Subversion with Eclipse</a></li>
</ul>
</li><br />
<li>Modify and commit a file
<ul>
<li>Edit one of the newly added files and save it.</li>
<li>In the "<b>Navigator</b>" window, right-click on the file, and select "<b>Team</b>" > "<b>Commit...</b>".</li>
<li>Enter a comment and click "<b>OK</b>". I got the following output in the "Console" window:
<pre>commit -m "test" C:/path/to/my_project/test.py
Sending path/to/my_project/test.py
Transmitting file data ...
Committed revision 7.
</pre></li>
</ul></li>
<li>Show the history for a file
<ul>
<li>In the "<b>Navigator</b>" window, right-click on the file, and select "<b>Team</b>" > "<b>Show History</b>".</li>
<li>The "History" window should open showing the revisions of your file. Double-click on a revision to open it or right-click for other options.</li>
</ul>
</li><br />
</ol>
<b>Related posts:</b><br />
<ul>
<li><a href="http://www.saltycrane.com/blog/2007/03/how-to-setup-subclipse-project-to/">How to setup a subclipse project to branch/tag</a>
</li>
</ul><br />
<b>Other resources</b><br />
<ul>
<li><a href="http://markphip.blogspot.com/index.html">Mark Phippard's blog</a>- Blog by the project lead for Subclipse</li>
<li><a href="http://svnbook.red-bean.com/">Version Control with Subversion</a>- The free Subversion book published by O'Reilly</li>
</ul>