<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:admin="http://webns.net/mvcb/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
    <channel>
    <title>IMHO</title>
    <link>http://blog.interlinked.org</link>
    <description>The true delight is in the &lt;i&gt;finding out&lt;/i&gt; rather than in the &lt;i&gt;knowing&lt;/i&gt;.&lt;br/&gt;-- Isaac Asimov</description>
    <dc:language>en-us</dc:language>
    <dc:creator />
    <dc:date>2008-02-24T21:08:42+00:00</dc:date>
    <admin:generatorAgent rdf:resource="http://hobix.com/?v=0.5" />
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/IMHO" type="application/rss+xml" /><item><title>Emacs Basics</title><link>http://feeds.feedburner.com/~r/IMHO/~3/243202995/emacs.html</link><guid isPermaLink="false">tutorials/emacs@http://blog.interlinked.org</guid><dc:subject>tutorials</dc:subject><dc:subject>tutorials</dc:subject><dc:subject>emacs</dc:subject><dc:subject>editor</dc:subject><dc:subject>unix</dc:subject><dc:subject>introduction</dc:subject><dc:creator>Michael</dc:creator><dc:date>2008-02-24T21:41:50+00:00</dc:date><description>&lt;p&gt;It&amp;#8217;s been a while since I wrote my &lt;a href="http://blog.interlinked.org/tutorials/vim_tutorial.html"&gt;Vim Introduction and
Tutorial&lt;/a&gt; (exactly
one year). A lot happened between now and then, I chose to get a better
feeling about Emacs for example.&lt;/p&gt;
	&lt;p&gt;The reasons aren&amp;#8217;t easily explained; The most prominent reason is the
awesome &lt;a href="http://www.gnu.org/software/auctex/"&gt;AucTex-mode&lt;/a&gt; since I&amp;#8217;m
working heavily with LaTeX lately.&lt;/p&gt;
	&lt;p&gt;Anyways, learning Vim &lt;strong&gt;and&lt;/strong&gt; Emacs is better than learning only one of
them :-).&lt;/p&gt;
	&lt;p&gt;Vim started in 1991 and is based on Bill Joy&amp;#8217;s Vi written in
1976/77. Emacs started as set of macros for the &lt;span class="caps"&gt;TECO&lt;/span&gt; editor 1976 and
was rewritten in 1984 (GNU Emacs). So both editors are based on
concepts invented more than 30 years ago and both editors are very
unlikely to change any time soon.&lt;/p&gt;
	&lt;p&gt;I still like Vim&amp;#8217;s way of doing things, for example the basic commands
are very easy and very fast to reach.&lt;/p&gt;
	&lt;p&gt;At first I wanted to compile something similar to my Vim Tutorial, but
I ended up publishing just a few notes and more or less a cheat-sheet
for Emacs. If you like it more
&lt;em&gt;official&lt;/em&gt; look at the &lt;a href="http://www.gnu.org/software/emacs/tour/"&gt;Emacs Guided
Tour&lt;/a&gt; and its very fine
&lt;a href="http://www.gnu.org/software/emacs/manual/index.html"&gt;documentation&lt;/a&gt;.&lt;/p&gt;
	&lt;p&gt;The best way to get up and running with Emacs is the included
tutorial (start by typing &lt;code&gt;C-h t&lt;/code&gt;).&lt;/p&gt;
	&lt;p&gt;I&amp;#8217;m using &lt;a href="http://aquamacs.org/"&gt;Aquamacs&lt;/a&gt; on my Mac and &lt;span class="caps"&gt;GNU&lt;/span&gt; Emacs on
Linux. Both use &lt;span class="caps"&gt;GNU&lt;/span&gt; Emacs 22 at its core, but especially Aquamacs
provides some extensions to make it (almost) seamless on &lt;span class="caps"&gt;OS X&lt;/span&gt;.&lt;/p&gt;
	&lt;h1&gt;Basic Concepts&lt;/h1&gt;
	&lt;p&gt;You can&amp;#8217;t learn Emacs and lean back, every mode Emacs provides offers
its own key bindings and has its own specialities you have to know.&lt;/p&gt;
	&lt;p&gt;So, it doesn&amp;#8217;t matter if you use Vim for day-to-day tasks and Emacs
for special purpose text editing (like typing LaTeX, or interacting
with some math software). Only the most basic commands are the same
for all modes.&lt;/p&gt;
	&lt;h2&gt;Two things to remember&lt;/h2&gt;
	&lt;p&gt;You can cancel any operation either by pressing &lt;code&gt;C-g&lt;/code&gt; or three times &lt;code&gt;&amp;lt;Esc&amp;gt;&lt;/code&gt;.&lt;/p&gt;
	&lt;p&gt;To exit Emacs, type &lt;code&gt;C-x C-c&lt;/code&gt;.&lt;/p&gt;
	&lt;h2&gt;Major/Minor Modes&lt;/h2&gt;
	&lt;p&gt;A Major Mode provides Key-Bindings, Indentation, Display, Syntax
etc. There can be only &lt;strong&gt;one&lt;/strong&gt; Major Mode active at a given time. How
would you mix two different syntax-highlighting schemes?&lt;/p&gt;
	&lt;p&gt;A Minor Mode provides additional bindings and some other behavior. For
example spell-correction, automatic line-breaks etc.&lt;/p&gt;
	&lt;h2&gt;Emacs Lisp functions and key bindings&lt;/h2&gt;
	&lt;p&gt;You can access &lt;strong&gt;all&lt;/strong&gt; functions of Emacs with: &lt;code&gt;M-x&lt;/code&gt; (that&amp;#8217;s &lt;code&gt;&amp;lt;Alt&amp;gt;-x&lt;/code&gt;
or &lt;code&gt;&amp;lt;Meta&amp;gt;-x&lt;/code&gt; or &lt;code&gt;&amp;lt;Esc&amp;gt; x&lt;/code&gt; or &lt;code&gt;&amp;lt;Option&amp;gt;-x&lt;/code&gt; depending on your setup,
preferences and terminology).&lt;/p&gt;
	&lt;p&gt;&lt;code&gt;C-x&lt;/code&gt; means pressing &lt;code&gt;Control&lt;/code&gt; and &lt;code&gt;x&lt;/code&gt; at the same time, &lt;code&gt;&amp;lt;Esc&amp;gt; x&lt;/code&gt;
means pressing &lt;code&gt;Escape&lt;/code&gt; and &lt;code&gt;x&lt;/code&gt; after another.&lt;/p&gt;
	&lt;p&gt;There is no way to bind all functions to some key-combo and it might
be impossible to remember the bindings. So, if you want to replace
some string with some other string type &amp;#8220;&lt;code&gt;M-x repl&amp;lt;Tab&amp;gt;&amp;lt;Tab&amp;gt;&lt;/code&gt;&amp;#8221; and
Emacs gives you possible completions, &amp;#8220;replace-string&amp;#8221; sounds good.&lt;/p&gt;
	&lt;h2&gt;Emacs&amp;#8217; Architecture&lt;/h2&gt;
	&lt;p&gt;Emacs has a small Lisp core written in C. But the &amp;#8220;meat&amp;#8221; of Emacs is the
expansion-library written in Emacs Lisp. Essentially everything you do and
write to extend and configure Emacs is written in Emacs Lisp.&lt;/p&gt;
	&lt;p&gt;The Bookworm has an &lt;a href="http://blog.bookworm.at/2007/03/introduction-to-all-these-emacs.html"&gt;introduction to the Emacs
introductions&lt;/a&gt;.&lt;/p&gt;
	&lt;h2&gt;Undo/Redo&lt;/h2&gt;
	&lt;p&gt;To undo almost every action you did, you can use either &lt;code&gt;undo&lt;/code&gt; as
command or one of the following key-bindings: &lt;code&gt;C-/&lt;/code&gt;, &lt;code&gt;C-_&lt;/code&gt; or &lt;code&gt;C-x u&lt;/code&gt;&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;Undo -&amp;gt; &lt;code&gt;C-/&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;To redo, you have to switch the &amp;#8220;undo-direction&amp;#8221; with &lt;code&gt;C-g&lt;/code&gt;, after
that you can use the usual undo-key of your choice.&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;Switch undo-direction -&amp;gt; &lt;code&gt;C-g&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;h1&gt;Basic Movement&lt;/h1&gt;
	&lt;ul&gt;
	&lt;li&gt;Character movement
	&lt;ul&gt;
	&lt;li&gt;Up -&amp;gt; &lt;code&gt;C-p&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Down -&amp;gt; &lt;code&gt;C-n&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Left -&amp;gt; &lt;code&gt;C-f&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Right -&amp;gt; &lt;code&gt;C-b&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;ul&gt;
	&lt;li&gt;Page movement
	&lt;ul&gt;
	&lt;li&gt;Page Down -&amp;gt; &lt;code&gt;C-v&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Page Up -&amp;gt; &lt;code&gt;M-v&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;ul&gt;
	&lt;li&gt;Line movement
	&lt;ul&gt;
	&lt;li&gt;Start of Line -&amp;gt; &lt;code&gt;C-a&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;End of Line -&amp;gt; &lt;code&gt;C-e&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;ul&gt;
	&lt;li&gt;Sentence movement
	&lt;ul&gt;
	&lt;li&gt;Start of Sentence -&amp;gt; &lt;code&gt;M-a&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;End of Sentence -&amp;gt; &lt;code&gt;M-e&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;ul&gt;
	&lt;li&gt;Paragraph movement
	&lt;ul&gt;
	&lt;li&gt;Start of Paragraph -&amp;gt; &lt;code&gt;M-{&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;End of Paragraph -&amp;gt; &lt;code&gt;M-}&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;ul&gt;
	&lt;li&gt;Other
	&lt;ul&gt;
	&lt;li&gt;Start of File/Buffer -&amp;gt; &lt;code&gt;M-&amp;lt;&lt;/code&gt; &lt;/li&gt;
	&lt;li&gt;End of File/Buffer -&amp;gt; &lt;code&gt;M-&amp;gt;&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;h1&gt;Search and Search &amp;#38; Replace&lt;/h1&gt;
	&lt;h2&gt;Searching/Replacing&lt;/h2&gt;
	&lt;ul&gt;
	&lt;li&gt;Incremental Search forward -&amp;gt; &lt;code&gt;C-s&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Incremental Search backward -&amp;gt; &lt;code&gt;C-r&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Incremental Search forward with regular expressions -&amp;gt; &lt;code&gt;search-forward-regexp&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Incremental Search backward with regular expressions -&amp;gt; &lt;code&gt;search-backward-regexp&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Replace some string -&amp;gt; &lt;code&gt;replace-string&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Replace using regular expressions -&amp;gt; &lt;code&gt;replace-regexp&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;h1&gt;Text Surgery&lt;/h1&gt;
	&lt;ul&gt;
	&lt;li&gt;Deleting/Killing
	&lt;ul&gt;
	&lt;li&gt;Delete char forward -&amp;gt; &lt;code&gt;C-d&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Delete char backward -&amp;gt; &lt;code&gt;&amp;lt;Backspace&amp;gt;&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Kill word forward -&amp;gt; &lt;code&gt;M-d&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Kill word backward -&amp;gt; &lt;code&gt;M-&amp;lt;Backspace&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Kill to end of line -&amp;gt; &lt;code&gt;C-k&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Kill to end of sentence -&amp;gt; &lt;code&gt;M-k&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;ul&gt;
	&lt;li&gt;Transpose (switch elements)
	&lt;ul&gt;
	&lt;li&gt;Transpose chars -&amp;gt; &lt;code&gt;C-t&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Transpose words -&amp;gt; &lt;code&gt;M-t&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Transpose lines -&amp;gt; &lt;code&gt;C-x C-t&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;ul&gt;
	&lt;li&gt;Case-operations
	&lt;ul&gt;
	&lt;li&gt;Capitalize word -&amp;gt; &lt;code&gt;M-c&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Uppercase word -&amp;gt; &lt;code&gt;M-u&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Lowercase word -&amp;gt; &lt;code&gt;M-l&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Text-completion -&amp;gt; &lt;code&gt;M-/&lt;/code&gt; (repeat to cycle through possible completions)&lt;/li&gt;
	&lt;/ul&gt;
	&lt;ul&gt;
	&lt;li&gt;New-Lines
	&lt;ul&gt;
	&lt;li&gt;New line -&amp;gt; &lt;code&gt;&amp;lt;Return&amp;gt;&lt;/code&gt; or &lt;code&gt;C-m&lt;/code&gt; (insert a CR before the cursor)&lt;/li&gt;
	&lt;li&gt;Open new Line -&amp;gt; &lt;code&gt;C-o&lt;/code&gt; (insert a CR after the cursor)&lt;/li&gt;
	&lt;li&gt;New line and indent -&amp;gt; &lt;code&gt;C-j&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;I like to format my text so that no lines are longer than 78
characters. Either I use the minor mode &lt;code&gt;auto-fill-mode&lt;/code&gt; or I use
&lt;code&gt;M-q&lt;/code&gt; to re-justify (fill) the current paragraph (necessary if you edit a
paragraph after it was auto-filled).&lt;/p&gt;
	&lt;h1&gt;Cut/Copy/Paste&lt;/h1&gt;
	&lt;h2&gt;Basic commands&lt;/h2&gt;
	&lt;p&gt;Maybe you noticed that I changed the terminology of deleting a
character to killing a word. The difference is, that &amp;#8220;killed&amp;#8221; text is
put into the &lt;strong&gt;Yank-Ring&lt;/strong&gt;. From this ring, you can get your text back
(pasting, yank). The size of your yank-ring depends on your setup.&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;Yank -&amp;gt; &lt;code&gt;C-y&lt;/code&gt;, use &lt;code&gt;M-y&lt;/code&gt; to cycle through the various text-parts.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;If you&amp;#8217;ve marked some text, use &lt;code&gt;C-w&lt;/code&gt; to cut the text, or &lt;code&gt;M-w&lt;/code&gt; to
copy the text into the yank-ring:&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;Cut -&amp;gt; &lt;code&gt;C-w&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Copy -&amp;gt; &lt;code&gt;M-w&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;h2&gt;Regions&lt;/h2&gt;
	&lt;p&gt;To mark some text, use the mouse, or set a mark with &lt;code&gt;C-&amp;lt;Space&amp;gt;&lt;/code&gt; and
move the cursor to the end point of the region. The text between the
mark and the current cursor-position (also called point) is the &lt;strong&gt;region&lt;/strong&gt;.&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;Set mark -&amp;gt; &lt;code&gt;C-&amp;lt;Space&amp;gt;&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;You can jump between point and mark using &lt;code&gt;C-x C-x&lt;/code&gt;, this switches the
mark and the point, so that your region remains intact.&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;Switch point and mark -&amp;gt; &lt;code&gt;C-x C-x&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;If you&amp;#8217;ve enabled the &lt;code&gt;transient-mark-mode&lt;/code&gt; Emacs highlights the
region when you create it. As soon as you move the cursor, the region
is still there, but the highlight is gone (verify with &lt;code&gt;C-x C-x&lt;/code&gt; for example).&lt;/p&gt;
	&lt;h2&gt;Rectangles&lt;/h2&gt;
	&lt;p&gt;The mark and point also specify a rectangle over your text (upper
right and lower left edge).&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;Kill the rectangle -&amp;gt; &lt;code&gt;C-x r k&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Yank the rectangle -&amp;gt; &lt;code&gt;C-x r y&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Insert space into the rectangle -&amp;gt; &lt;code&gt;C-x r o&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Replace text of the rectangle -&amp;gt; &lt;code&gt;C-x r t&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Clear rectangle (replace with space) -&amp;gt; &lt;code&gt;C-x r c&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;There is an interesting minor mode for additional
rectangle-functionality called &lt;strong&gt;&lt;span class="caps"&gt;CUA&lt;/span&gt;&lt;/strong&gt;.&lt;/p&gt;
	&lt;h1&gt;Frames, Windows and Buffers&lt;/h1&gt;
	&lt;p&gt;Emacs has the concept of Frames, Windows and Buffers. A Frame is a
Window in the common sense, a Window is a part of the frame. For
example if you split the screen of your Emacs frame, you got two
windows within one frame.&lt;/p&gt;
	&lt;p&gt;The last concept is the Buffer, it&amp;#8217;s simply a real or virtual file
(virtual == not saved to disk).&lt;/p&gt;
	&lt;p&gt;Buffer commands:&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;Load a file (buffer) -&amp;gt; &lt;code&gt;C-x C-f&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Show loaded buffers -&amp;gt; &lt;code&gt;C-x C-b&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Switch to another buffer -&amp;gt; &lt;code&gt;C-x b&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Close a buffer -&amp;gt; &lt;code&gt;C-x k&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Save a buffer -&amp;gt; &lt;code&gt;C-x C-s&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;Frame commands:&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;Open new frame with file -&amp;gt; &lt;code&gt;C-x 5 f&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Close this frame -&amp;gt; &lt;code&gt;C-x 5 0&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Switch to other frame -&amp;gt; &lt;code&gt;C-x 5 o&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;Window commands:&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;Split window vertically -&amp;gt; &lt;code&gt;C-x 2&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Split window horizontally -&amp;gt; &lt;code&gt;C-x 3&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Close all other windows -&amp;gt; &lt;code&gt;C-x 1&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Close this window -&amp;gt; &lt;code&gt;C-x 0&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;The Minibuffer (the last line of your Emacs screen) is a buffer
itself, but has some specialities I wont go into now.&lt;/p&gt;
	&lt;h1&gt;Getting Help from Emacs&lt;/h1&gt;
	&lt;p&gt;You could fill some very big books with Emacs-specific information,
but Emacs calls itself a &amp;#8220;self-documenting&amp;#8221; editor. This means that
the documentation reflects exactly how your Emacs is configured. If
you change some key-bindings, the documentation reflects this changes
and displays the right key-combo in the help files.&lt;/p&gt;
	&lt;p&gt;Some hints on how to get going using the help-system:&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;Show information on the current mode(s) -&amp;gt; &lt;code&gt;C-h m&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Describe the command bound to the given key -&amp;gt; &lt;code&gt;C-h k&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Search for a function -&amp;gt; &lt;code&gt;C-h a&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Describe all key-bindings of the current mode(s) -&amp;gt; &lt;code&gt;C-h b&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;h1&gt;Further Information&lt;/h1&gt;
	&lt;p&gt;Steve Yegge has some intersting articles on Emacs:&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://steve.yegge.googlepages.com/effective-emacs"&gt;Effective
Emacs&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://steve-yegge.blogspot.com/2006/06/shiny-and-new-emacs-22.html"&gt;Shiny and new Emacs
22&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;&lt;span class="caps"&gt;IBM&lt;/span&gt; has some nice &lt;a href="http://www.ibm.com/developerworks/views/aix/libraryview.jsp?search_by=emacs+editing+environment"&gt;Emacs tutorials
too&lt;/a&gt;.&lt;/p&gt;
	&lt;p&gt;The &lt;a href="http://www.emacswiki.org"&gt;EmacsWiki&lt;/a&gt; is another excellent source
for Emacs related howtos, downloads and &amp;#8211; to some extend &amp;#8211; discussions.&lt;/p&gt;
	&lt;h1&gt;Wish&lt;/h1&gt;
	&lt;p&gt;I&amp;#8217;d wish that Vim and Emacs would merge. That I could take advantage
of Emacs&amp;#8217; awesome tool-support and Vim&amp;#8217;s awesome way of editing small
junks of text. I know there is Viper-mode and Vimpulse, but both are
not exactly what I want. Viper-mode is plain Vi, and Vimpulse is early
in development.&lt;/p&gt;
	&lt;p&gt;Is there a way to integrate a Vim window into Emacs without emulating
and reimplementing the features?&lt;/p&gt;
	&lt;p&gt;For the time being, I&amp;#8217;ll have to switch between the environments. Vim
as my default-editor and Emacs for special purpose editing.&lt;/p&gt;
	&lt;p&gt;&amp;#8212;&lt;br/&gt;
Emacs outshines all other editing software in approximately the same
way that the noonday sun does the stars. It is not just bigger and
brighter; it simply makes everything else vanish. &amp;#8212;Neal Stephenson&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IMHO/~4/243202995" height="1" width="1"/&gt;</description><feedburner:origLink>http://blog.interlinked.org/tutorials/emacs.html</feedburner:origLink></item><item><title>Free and Open Source Math Programs</title><link>http://feeds.feedburner.com/~r/IMHO/~3/243202996/open_source_math_programs.html</link><guid isPermaLink="false">science/open_source_math_programs@http://blog.interlinked.org</guid><dc:subject>science</dc:subject><dc:subject>science</dc:subject><dc:subject>software</dc:subject><dc:subject>math</dc:subject><dc:subject>windows</dc:subject><dc:subject>mac os x</dc:subject><dc:subject>linux</dc:subject><dc:creator>Michael</dc:creator><dc:date>2008-02-24T14:36:21+00:00</dc:date><description>&lt;p&gt;In this post I&amp;#8217;ll go through some of the most prominent math programs
available with source code.&lt;/p&gt;
	&lt;p&gt;This is by no means &amp;#8220;original&amp;#8221; work, I just collected the headlines and links
to various mathematical software projects out there. This started with an
offer of my University (Mathematica for 13 Euro), but I don&amp;#8217;t want to invest
time in a tool I won&amp;#8217;t have (free, or almost free) access to for the rest of
my life.&lt;/p&gt;
	&lt;p&gt;The programs differ in their respective foci, the main areas are
&lt;a href="http://en.wikipedia.org/wiki/Computer_algebra_system"&gt;Computer Algebra
System&lt;/a&gt;,
&lt;a href="http://en.wikipedia.org/wiki/Numerical_analysis"&gt;Numerical Analysis&lt;/a&gt;,
&lt;a href="http://en.wikipedia.org/wiki/Statistics"&gt;Statistics&lt;/a&gt; and general
purpose desktop calculators.&lt;/p&gt;
	&lt;p&gt;My current choice is &lt;em&gt;&lt;span class="caps"&gt;SAGE&lt;/span&gt;&lt;/em&gt; and &lt;em&gt;R&lt;/em&gt; for my math and statistics
needs. For simple calculations I usually use the calculator included
with the OS or some interactive programming-shell (&lt;code&gt;ghci&lt;/code&gt; or &lt;code&gt;irb&lt;/code&gt;).&lt;/p&gt;
	&lt;h2&gt;Hybrid&lt;/h2&gt;
	&lt;h3&gt;&lt;a href="http://www.sagemath.org/"&gt;&lt;span class="caps"&gt;SAGE&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
	&lt;p&gt;&lt;span class="caps"&gt;SAGE&lt;/span&gt; is the new star on the open-source math sky. Essentially it is a
&lt;span class="caps"&gt;CAS&lt;/span&gt; written in Python, but it provides interfaces to many math programs
available. This includes commercial programs like Mathematica and
Maple as well as free programs like Maxima, Octave or Singular.&lt;/p&gt;
	&lt;p&gt;From the homepage:&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;Each interface requires that the corresponding software is
installed on your computer. &lt;span class="caps"&gt;SAGE&lt;/span&gt; includes &lt;span class="caps"&gt;GAP&lt;/span&gt;, PARI, Singular, and
Maxima, but does not include Octave (very easy to install), &lt;span class="caps"&gt;MAGMA&lt;/span&gt;
(non-free), Maple (non-free), or Mathematica (non-free).&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;&lt;span class="caps"&gt;SAGE&lt;/span&gt; runs as service on your server or desktop and you use your
browser to interact with it (you can also use the command-line
interface, though). It is very well documented and gives you
access to the source code of the algorithms right within your browser.&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;Use &lt;span class="caps"&gt;SAGE&lt;/span&gt; for studying a huge range of mathematics, including
algebra, calculus, elementary to very advanced number theory,
cryptography, numerical computation, commutative algebra, group
theory, combinatorics, graph theory, and exact linear algebra.&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;The goal of the &lt;span class="caps"&gt;SAGE&lt;/span&gt; project, which started 2005, is to provide the
&lt;a href="http://www.ddj.com/linux-open-source/204702621"&gt;best mathematical software in the
world&lt;/a&gt;.&lt;/p&gt;
	&lt;p&gt;&lt;span class="caps"&gt;SAGE&lt;/span&gt; is pretty large (on my Mac it uses 722MB right after the
installation), but you can find even more (optional packages etc) at
their homepage.&lt;/p&gt;
	&lt;p&gt;It&amp;#8217;s also possible to interact with it via Texmacs or Emacs (again,
available from their download page).&lt;/p&gt;
	&lt;p&gt;&lt;span class="caps"&gt;SAGE&lt;/span&gt; is available for Windows, Linux and Mac &lt;span class="caps"&gt;OS X&lt;/span&gt;.&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.sagemath.org/"&gt;Homepage&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.sagemath.org/download.html"&gt;Download&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="https://www.sagenb.org/"&gt;Online Demo&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.sagemath.org/doc/html/tut/index.html"&gt;Tutorial&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.sagemath.org/documentation.html"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.flickr.com/photos/sagescreenshots/sets/72157603532209437/"&gt;Screenshots&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;h2&gt;Computer Algebra System&lt;/h2&gt;
	&lt;h3&gt;&lt;a href="http://maxima.sourceforge.net/"&gt;Maxima&lt;/a&gt;&lt;/h3&gt;
	&lt;blockquote&gt;
	&lt;p&gt;Maxima is a system for the manipulation of symbolic and numerical
expressions, including differentiation, integration, Taylor series,
Laplace transforms, ordinary differential equations, systems of linear
equations, polynomials, and sets, lists, vectors, matrices, and
tensors. Maxima yields high precision numeric results by using exact
fractions, arbitrary precision integers, and arbitrarily precision
floating point numbers. Maxima can plot functions and data in two and
three dimensions.&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;Maxima is very mature and stood the test of time. It started in 1982
and is &amp;#8220;free&amp;#8221; since 1998.&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://maxima.sourceforge.net/"&gt;Homepage&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://maxima.sourceforge.net/download.shtml"&gt;Download&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://maxima.sourceforge.net/docs.shtml"&gt;Documentation/Tutorial&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://maxima.sourceforge.net/screenshots.shtml"&gt;Screenshots&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;Maxima is included in &lt;span class="caps"&gt;SAGE&lt;/span&gt;.&lt;/p&gt;
	&lt;h3&gt;&lt;a href="http://savannah.nongnu.org/projects/axiom/"&gt;Axiom&lt;/a&gt;&lt;/h3&gt;
	&lt;blockquote&gt;
	&lt;p&gt;Axiom is a general purpose Computer Algebra system. It is useful
for doing mathematics by computer and for research and development of
mathematical algorithms. It defines a strongly typed, mathematically
correct type hierarchy. It has a programming language and a built-in
compiler.&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://page.axiom-developer.org/"&gt;Homepage&lt;/a&gt; or at &lt;a href="http://savannah.nongnu.org/projects/axiom/"&gt;Savannah&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://page.axiom-developer.org/axiom-website/download.html"&gt;Download&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://page.axiom-developer.org/axiom-website/documentation.html"&gt;Documentation/Tutorial&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://page.axiom-developer.org/axiom-website/screenshots.html"&gt;Screenshots&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;h3&gt;&lt;a href="http://yacas.sourceforge.net/homepage.html"&gt;Yacas&lt;/a&gt;&lt;/h3&gt;
	&lt;blockquote&gt;
	&lt;p&gt;&lt;span class="caps"&gt;YACAS&lt;/span&gt; is an easy to use, general purpose Computer Algebra System,
a program for symbolic manipulation of mathematical expressions. It
uses its own programming language designed for symbolic as well as
arbitrary-precision numerical computations. The system has a library
of scripts that implement many of the symbolic algebra operations; new
algorithms can be easily added to the library. &lt;span class="caps"&gt;YACAS&lt;/span&gt; comes with
extensive documentation (hundreds of pages) covering the scripting
language, the functionality that is already implemented in the system,
and the algorithms we used.&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://yacas.sourceforge.net/homepage.html"&gt;Homepage&lt;/a&gt; Downlaods,
 Screenshots, Tutorial, Manual and Demo are available there.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;h3&gt;&lt;a href="http://pari.math.u-bordeaux.fr/"&gt;&lt;span class="caps"&gt;PARI&lt;/span&gt;/GP&lt;/a&gt;&lt;/h3&gt;
	&lt;blockquote&gt;
	&lt;p&gt;&lt;span class="caps"&gt;PARI&lt;/span&gt;/GP is a widely used computer algebra system designed for fast
computations in number theory (factorizations, algebraic number
theory, elliptic curves&amp;#8230;), but also contains a large number of other
useful functions to compute with mathematical entities such as
matrices, polynomials, power series, algebraic numbers etc., and a lot
of transcendental functions. &lt;span class="caps"&gt;PARI&lt;/span&gt; is also available as a C library to
allow for faster computations.&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://pari.math.u-bordeaux.fr/"&gt;Homepage&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://pari.math.u-bordeaux.fr/download.html"&gt;Download&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://pari.math.u-bordeaux.fr/doc.html"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;&lt;span class="caps"&gt;PARI&lt;/span&gt;/GP is included in &lt;span class="caps"&gt;SAGE&lt;/span&gt;.&lt;/p&gt;
	&lt;h3&gt;&lt;a href="http://www.singular.uni-kl.de/"&gt;Singular&lt;/a&gt;&lt;/h3&gt;
	&lt;blockquote&gt;
	&lt;p&gt;&lt;span class="caps"&gt;SINGULAR&lt;/span&gt; is a Computer Algebra System for polynomial computations
with special emphasis on the needs of commutative algebra, algebraic
geometry, and singularity theory.&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.singular.uni-kl.de/"&gt;Homepage&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.singular.uni-kl.de/download.html"&gt;Download&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.singular.uni-kl.de/Manual/latest/index.htm"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;Singular is included in &lt;span class="caps"&gt;SAGE&lt;/span&gt;.&lt;/p&gt;
	&lt;h3&gt;&lt;a href="http://www-gap.mcs.st-and.ac.uk/"&gt;&lt;span class="caps"&gt;GAP&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
	&lt;blockquote&gt;
	&lt;p&gt;&lt;span class="caps"&gt;GAP&lt;/span&gt; is a system for computational discrete algebra, with
particular emphasis on Computational Group Theory. &lt;span class="caps"&gt;GAP&lt;/span&gt; provides a
programming language, a library of thousands of functions implementing
algebraic algorithms written in the &lt;span class="caps"&gt;GAP&lt;/span&gt; language as well as large data
libraries of algebraic objects.&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www-gap.mcs.st-and.ac.uk/"&gt;Homepage&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www-gap.mcs.st-and.ac.uk/Download/index.html"&gt;Download&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www-gap.mcs.st-and.ac.uk/Doc/doc.html"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;&lt;span class="caps"&gt;GAP&lt;/span&gt; is included in &lt;span class="caps"&gt;SAGE&lt;/span&gt;.&lt;/p&gt;
	&lt;h3&gt;&lt;a href="http://www.math.uiuc.edu/Macaulay2/"&gt;Macaulay2&lt;/a&gt;&lt;/h3&gt;
	&lt;blockquote&gt;
	&lt;p&gt;Macaulay 2 is a software system devoted to supporting research in
algebraic geometry and commutative algebra.&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.math.uiuc.edu/Macaulay2/"&gt;Homepage&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.math.uiuc.edu/Macaulay2/Downloads/index.html"&gt;Download&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.math.uiuc.edu/Macaulay2/Book/"&gt;Book&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;h2&gt;Numerical Analysis/Computation&lt;/h2&gt;
	&lt;h3&gt;&lt;a href="http://www.gnu.org/software/octave/"&gt;Octave&lt;/a&gt;&lt;/h3&gt;
	&lt;blockquote&gt;
	&lt;p&gt;&lt;span class="caps"&gt;GNU&lt;/span&gt; Octave is a high-level language, primarily intended for
numerical computations. It provides a convenient command line
interface for solving linear and nonlinear problems numerically, and
for performing other numerical experiments using a language that is
mostly compatible with Matlab. It may also be used as a batch-oriented
language.&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.gnu.org/software/octave/"&gt;Homepage&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.gnu.org/software/octave/download.html"&gt;Download&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.gnu.org/software/octave/docs.html"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;h3&gt;&lt;a href="http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/euler/index.html"&gt;Euler&lt;/a&gt;&lt;/h3&gt;
	&lt;blockquote&gt;
	&lt;p&gt;Euler is a powerful interactive numerical laboratory. It quickly
evaluates numerical functions, visualizes results, and allows to test
and program numerical algorithms. The system can handle real, complex
and interval numbers, vectors and matrices, and additionally a long
data type for exact computation. Most routines are written in the high
level Euler language and can be modified or extended by the user.&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/euler/"&gt;Homepage&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/euler/euler_download.html"&gt;Download&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/euler/sceenshots.html"&gt;Screenshots&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;h3&gt;&lt;a href="http://www.scilab.org/"&gt;Scilab&lt;/a&gt;&lt;/h3&gt;
	&lt;blockquote&gt;
	&lt;p&gt;Scilab is a scientific software package for numerical computations
providing a powerful open computing environment for engineering and
scientific applications.&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.scilab.org/"&gt;Homepage&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.scilab.org/download/"&gt;Download&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;h2&gt;Statistics&lt;/h2&gt;
	&lt;h3&gt;&lt;a href="http://www.r-project.org/"&gt;R&lt;/a&gt;&lt;/h3&gt;
	&lt;p&gt;If you want to do some statistics there is no way around &amp;#8220;R&amp;#8221;. At least
not in the free and open-source software world.&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;R provides a wide variety of statistical (linear and nonlinear
modelling, classical statistical tests, time-series analysis,
classification, clustering, ...) and graphical techniques, and is
highly extensible.&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;I think R is a tool everyone should be familiar with, at least with the
most basic operations. Statistics is such an important every-day tool
you can immediately put to work as soon as you know something,
anything, about it.&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.r-project.org/"&gt;Homepage&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://cran.r-project.org/manuals.html"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.cyclismo.org/tutorial/R/"&gt;Tutorial&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.r-project.org/screenshots/screenshots.html"&gt;Screenshots&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.r-project.org/doc/bib/R-books.html"&gt;Books&lt;/a&gt; (currently 53 books!)&lt;/li&gt;
	&lt;/ul&gt;
	&lt;h2&gt;Command-Line/Desktop Calculator&lt;/h2&gt;
	&lt;p&gt;Sometimes you just want to calculate very simple things, for this task
a full fledged system isn&amp;#8217;t really appropriate.&lt;/p&gt;
	&lt;h3&gt;&lt;a href="http://www.gnu.org/software/bc/"&gt;bc&lt;/a&gt;&lt;/h3&gt;
	&lt;blockquote&gt;
	&lt;p&gt;bc is an arbitrary precision numeric processing language. Syntax
is similar to C, but differs in many substantial areas. It supports
interactive execution of statements. bc is a utility included in the
&lt;span class="caps"&gt;POSIX P1003&lt;/span&gt;.2/D11 draft standard.&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.gnu.org/software/bc/"&gt;Homepage&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.gnu.org/software/bc/manual/bc.html"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;bc is usually installed on any Linux/Unix system or available via its
package management.&lt;/p&gt;
	&lt;h3&gt;&amp;#8220;Other&amp;#8221; command-line/desktop calculators&lt;/h3&gt;
	&lt;p&gt;Essentially you can use any interactive shell, like Python&amp;#8217;s &lt;code&gt;python&lt;/code&gt;
or Ruby&amp;#8217;s &lt;code&gt;irb&lt;/code&gt; as well as Haskell&amp;#8217;s &lt;code&gt;ghci&lt;/code&gt; or &lt;code&gt;hugs&lt;/code&gt;.&lt;/p&gt;
	&lt;h3&gt;&lt;span class="caps"&gt;GUI&lt;/span&gt; Calculators&lt;/h3&gt;
	&lt;p&gt;Despite the included Desktop Calculators there are some very fine
products out there, here some pearls I could find:&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;Mac &lt;span class="caps"&gt;OS X&lt;/span&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://home.swiftdsl.com.au/~mattg/"&gt;Magic Number Machine&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Linux
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://qalculate.sourceforge.net/"&gt;Qualculate!&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://calcoo.sourceforge.net/"&gt;Calcoo&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Windows
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://calcoo.sourceforge.net/win/"&gt;Calcoo for Windows&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Any suggestions?&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;If nothing else, there is always &lt;a href="http://www.google.com/search?q=2%2B2*(9%5E2)"&gt;Google Calc&lt;/a&gt;.&lt;/p&gt;
	&lt;p&gt;&amp;#8212;&lt;br/&gt;
Not being able to check the code of a computer-based calculation is like not
publishing proofs for a mathematical theorem, it&amp;#8217;s ludicrous. &amp;#8212;William
Stein, author of &lt;span class="caps"&gt;SAGE&lt;/span&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IMHO/~4/243202996" height="1" width="1"/&gt;</description><feedburner:origLink>http://blog.interlinked.org/science/open_source_math_programs.html</feedburner:origLink></item><item><title>Addendum to "Time Machine for every Unix out there"</title><link>http://feeds.feedburner.com/~r/IMHO/~3/243202997/rsync_addendum.yaml.html</link><guid isPermaLink="false">tutorials/rsync_addendum.yaml@http://blog.interlinked.org</guid><dc:subject>tutorials</dc:subject><dc:subject>tutorials</dc:subject><dc:subject>rsync</dc:subject><dc:subject>backup</dc:subject><dc:subject>unix</dc:subject><dc:subject>linux</dc:subject><dc:subject>windows</dc:subject><dc:subject>Max OS X</dc:subject><dc:creator>Michael</dc:creator><dc:date>2007-12-06T10:55:36+00:00</dc:date><description>&lt;p&gt;My article about using rsync to mimic the behavior of Apple&amp;#8217;s Time Machine generated a lot of traffic, and more important, a lot of feedback.&lt;/p&gt;
	&lt;p&gt;In this article I&amp;#8217;ll summarize and try to clarify a few things.&lt;/p&gt;
	&lt;p&gt;First of all: I didn&amp;#8217;t invent any of the things I&amp;#8217;ve written in the &lt;a href="http://blog.interlinked.org/tutorials/rsync_time_machine.html"&gt;article&lt;/a&gt;! All I did was to write it up in a manner I could understand it. The rsync developer(s) included the feature(s) for a specific purpose which might be exactly what we do now. But this was obvious, I hope.&lt;/p&gt;
	&lt;h1&gt;Time Machine and Performance&lt;/h1&gt;
	&lt;p&gt;&lt;a href="http://arstechnica.com/reviews/os/mac-os-x-10-5.ars/14"&gt;Ars Technica&lt;/a&gt; has a very deep review of the new features of Leopard, including Time Machine.&lt;/p&gt;
	&lt;p&gt;Interestingly they do very much the same as I did in my script &amp;#8211; each Backup gets its own folder and there is a link to the latest.&lt;/p&gt;
	&lt;p&gt;Some readers complained that Time Machine looks only at the changed files, where my script has to look at each file on the disk. For me, the difference is negligible. Apple introduced hard-links to &lt;strong&gt;directories&lt;/strong&gt;, which saves a lot of time and a bit of space. Unfortunately this feature isn&amp;#8217;t availabel on plain Unix, but it&amp;#8217;s a neat trick!&lt;/p&gt;
	&lt;h1&gt;Restoring the Files&lt;/h1&gt;
	&lt;p&gt;Since we make full backups each time, you have your whole and complete directory structure in that Backup-directories.&lt;/p&gt;
	&lt;p&gt;Restoring a file is merely a simple &lt;code&gt;copy&lt;/code&gt; command.&lt;/p&gt;
	&lt;p&gt;Or, if you want to restore the whole filesystem, use:&lt;/p&gt;
	&lt;pre&gt;&lt;code&gt;&lt;code&gt;rsync -avz --delete host:/Backup/scurrent/ /target/&lt;/code&gt;&lt;/code&gt;&lt;/pre&gt;
	&lt;p&gt;But keep in mind that &lt;strong&gt;&amp;#8212;delete&lt;/strong&gt; removes any file which is not in the backup!&lt;/p&gt;
	&lt;h1&gt;Removing old Backups&lt;/h1&gt;
	&lt;p&gt;Another huge advantage of full backups is: &lt;em&gt;you can delete any backup you don&amp;#8217;t need anymore&lt;/em&gt;.&lt;/p&gt;
	&lt;p&gt;Of course each backup-directory takes space, if only for the hard-links and directory structure. Cleaning up the backups is a breeze: just delete the directories you don&amp;#8217;t need anymore. For example you could delete all directories older than 2 months or keep one week full, then only the monday backup. There are plenty of possibilities.&lt;/p&gt;
	&lt;h1&gt;Other Tools&lt;/h1&gt;
	&lt;p&gt;Many people suggested many interesting tools for doing backups. My argument against using such tools is that rsync is everywhere!&lt;/p&gt;
	&lt;p&gt;You find rsync in the smallest Linux distributions (like &lt;a href="http://damnsmalllinux.org/"&gt;&lt;span class="caps"&gt;DSL&lt;/span&gt;&lt;/a&gt;), on PDAs like the &lt;a href="http://www.killefiz.de/zaurus/search.php?q=rsync&amp;#38;x=0&amp;#38;y=0"&gt;Zaurus&lt;/a&gt;, on Windows using &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt; and also on Nokia&amp;#8217;s Internet Tablets.&lt;/p&gt;
	&lt;p&gt;One backup strategy for all your devices!&lt;/p&gt;
	&lt;h1&gt;Space Requirements for the Links&lt;/h1&gt;
	&lt;p&gt;Nothing in life is free, but the space used by the hardlinks for the backup is marginal. It is also dependent on the filesystem you use, ReiserFS seems to do a good job in packing more links in one cluster. But hey, these things are &lt;strong&gt;Backups&lt;/strong&gt; you throw away space anyways!&lt;/p&gt;
	&lt;h1&gt;Colon&lt;/h1&gt;
	&lt;p&gt;There is one particular problem using a colon in the script: some operating systems don&amp;#8217;t like them.&lt;/p&gt;
	&lt;p&gt;Here an updated version of the script without colons:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
 #!/bin/sh
 date=`date "+%Y-%m-%dT%H_%M_%S"`
 rsync -azPE --link-dest=PATHTOBACKUP/current $SOURCE $HOST:PATHTOBACKUP/back-$date \
 &amp;#38;&amp;#38; ssh $HOST "rm PATHTOBACKUP/current \
 &amp;#38;&amp;#38; ln -s back-$date PATHTOBACKUP/current" 
&lt;/code&gt;
&lt;/pre&gt;
	&lt;p&gt;Another slight change in the script is, that all commands are connected with &lt;code&gt;&amp;#38;&amp;#38;&lt;/code&gt;. This means the next command is only done when the previous command returned no error.&lt;/p&gt;
	&lt;p&gt;Of course, if anything messes up the &amp;#8220;current&amp;#8221; link, the script just makes another full backup without the links to the previous version.&lt;/p&gt;
	&lt;h1&gt;Extended Attributes on &lt;span class="caps"&gt;OS X&lt;/span&gt;&lt;/h1&gt;
	&lt;p&gt;One user suggested the addition of the &lt;code&gt;-E&lt;/code&gt; parameter on Mac &lt;span class="caps"&gt;OS X&lt;/span&gt;. If you use the parameter on non-OS X machines it&amp;#8217;s more or less redundant (&lt;code&gt;-a&lt;/code&gt; contains executability), but on &lt;span class="caps"&gt;OS X&lt;/span&gt; some additional information is backed up.&lt;/p&gt;
	&lt;p&gt;Just use it.&lt;/p&gt;
	&lt;h1&gt;Windows&lt;/h1&gt;
	&lt;p&gt;Some users reported success with this strategy on Windows. I&amp;#8217;m happy that we now have a unified backup strategy for all major operating systems without paying a single cent.&lt;/p&gt;
	&lt;p&gt;You have to use Cygwin to install rsync (there are binaries without the whole Cygwin on the net, &lt;a href="http://optics.ph.unimelb.edu.au/help/rsync/rsync_pc1.html"&gt;here for example&lt;/a&gt;).&lt;/p&gt;
	&lt;h1&gt;Measuring the Space Requirements&lt;/h1&gt;
	&lt;p&gt;To lookup how much space your particular backups need, simply issue &lt;code&gt;du -shc back-*&lt;/code&gt;. This prints each backup directory with its real memory usage:&lt;/p&gt;
&lt;pre&gt;
 me@myserver:Backups % du -shc back-* 
 406M back-2007-11-12T12:00:00
 6.8M back-2007-11-13T20:28:56
 189M back-2007-11-13T23:42:54
 2.6G back-2007-11-14T08:15:43
 1.8M back-2007-11-15T20:07:07
 7.9M back-2007-11-18T23:57:09
 11M back-2007-11-19T21:53:34
 2.6M back-2007-11-21T18:57:40
 2.1M back-2007-11-21T19:11:02
 11M back-2007-11-22T01:19:38
 1.9M back-2007-11-22T11:05:17
 19M back-2007-11-22T18:37:56
 7.4M back-2007-11-22T22:45:04
 8.5M back-2007-11-22T22:51:29
 9.2M back-2007-11-24T12:45:12
 4.2M back-2007-11-24T17:30:38
 11M back-2007-11-25T00:41:19
 1.9M back-2007-11-27T20:41:40
 317M back-2007-12-03T10:19:07
 12M back-2007-12-05T11:51:19
 3.6G total
 me@myserver:Backups % 
&lt;/pre&gt;
	&lt;p&gt;As you can see, the smallest backup (obviously without any changed file) requires 1.8MB.&lt;/p&gt;
	&lt;p&gt;&amp;#8212;&lt;br/&gt;
Backups are typically that last line of defense against data loss, and consequently the least granular and the least convenient to use. &amp;#8212;Yosemite Technologies&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IMHO/~4/243202997" height="1" width="1"/&gt;</description><feedburner:origLink>http://blog.interlinked.org/tutorials/rsync_addendum.yaml.html</feedburner:origLink></item><item><title>Time Machine for every Unix out there</title><link>http://feeds.feedburner.com/~r/IMHO/~3/243202998/rsync_time_machine.html</link><guid isPermaLink="false">tutorials/rsync_time_machine@http://blog.interlinked.org</guid><dc:subject>tutorials</dc:subject><dc:subject>tutorials</dc:subject><dc:subject>rsync</dc:subject><dc:subject>backup</dc:subject><dc:subject>unix</dc:subject><dc:subject>linux</dc:subject><dc:subject>Mac OS X</dc:subject><dc:creator>Michael</dc:creator><dc:date>2007-11-13T20:55:57+00:00</dc:date><description>&lt;p&gt;&lt;a href="http://rsync.samba.org"&gt;rsync&lt;/a&gt; is one of the tools that have gradually infiltrated my day to day tool-box (aside Vim and Zsh).&lt;/p&gt;
	&lt;p&gt;Using rsync it&amp;#8217;s very easy to mimic Mac &lt;span class="caps"&gt;OS X&lt;/span&gt; new feature called Time Machine. In this article I&amp;#8217;ll show how to do it, but there is still a nice &lt;span class="caps"&gt;GUI&lt;/span&gt; missing &amp;#8211; for those who like it shiny.&lt;/p&gt;
	&lt;h2&gt;What Time Machine does&lt;/h2&gt;
	&lt;p&gt;Time Machine makes a snapshot of your files every hour. The files are usually stored on a external hard drive connected to your Mac via &lt;span class="caps"&gt;USB&lt;/span&gt; or Firewire. Earlier Leopard versions (ADC preview versions) had the ability to make the backups to a remote drive (I&amp;#8217;ve heard).&lt;/p&gt;
	&lt;p&gt;So if you lose a file, or did a devastating change to one of your files, simply go back in time until you find your file or a version that&amp;#8217;s not corrupted.&lt;/p&gt;
	&lt;p&gt;Incrementally backing up all files every hour so that you can access them in reversed chronological order isn&amp;#8217;t that hard with standard Unix utilities like rsync. The only missing thing is a nice &lt;span class="caps"&gt;GUI&lt;/span&gt; for which Apple is known to be quite good at.&lt;/p&gt;
	&lt;h2&gt;Making full backups in no time every hour&lt;/h2&gt;
	&lt;p&gt;You can use this method to make a backup every hour or every ten minutes if you like. There are many many features you can tune or configure to your own taste &amp;#8211; excluding files that are larger than 1GB for example.&lt;/p&gt;
	&lt;p&gt;So, here the command to make the backup:&lt;/p&gt;
	&lt;pre&gt;&lt;code&gt;rsync -aP --link-dest=PATHTO/$PREVIOUSBACKUP $SOURCE $CURRENTBACKUP&lt;/code&gt;&lt;/pre&gt;
	&lt;p&gt;Lets go through the parameters step by step.&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;code&gt;-a&lt;/code&gt; means Archive and includes a bunch of parameters to recurse directories, copy symlinks as symlinks, preserve permissions, preserve modification times, preserve group, preserve owner, and preserve device files. You usually want that option for all your backups.&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;-P&lt;/code&gt; allows rsync to continue interrupted transfers and show a progress status for each file. This isn&amp;#8217;t really necessary but I like it.&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;--link-dest&lt;/code&gt; this is a neat way to make full backups of your computers without losing much space. rsync links unchanged files to the previous backup (using hard-links, see below if you don&amp;#8217;t know hard-links) and only claims space for changed files. This only works if you have a backup at hand, otherwise you have to make at least one backup beforehand.&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;PATHTO/$PREVIOUSBACKUP&lt;/code&gt; is the path to the previous backup for linking. Note: if you delete this directory, &lt;strong&gt;no other backup is harmed&lt;/strong&gt; because rsync uses &lt;strong&gt;hard-links&lt;/strong&gt; and the operating system (or filesystem) takes care of releasing space if no link points to that region anymore.&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;$SOURCE&lt;/code&gt; is the directory you&amp;#8217;d like to backup.&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;$CURRENTBACKUP&lt;/code&gt; is the directory to which you&amp;#8217;d like to make the backup. This should be a &lt;strong&gt;non-existing directory&lt;/strong&gt;.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;As said earlier, rsync has many many features. To exclude files over a certain size for example, use the option &lt;code&gt;--max-size&lt;/code&gt; (unfortunately this is not available on the rsync version shipped with Mac &lt;span class="caps"&gt;OS X&lt;/span&gt; Leopard). The man page or the &lt;a href="http://rsync.samba.org/documentation.html"&gt;documentation&lt;/a&gt; can give you plenty of ideas in this direction.&lt;/p&gt;
	&lt;p&gt;So much for the theory of the most important command for our purpose. Here a simple script that makes an incremental backup every time you call it:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
 #!/bin/sh
 date=`date "+%Y-%m-%dT%H:%M:%S"`
 rsync -aP --link-dest=$HOME/Backups/current /path/to/important_files $HOME/Backups/back-$date
 rm $HOME/Backups/current
 ln -s back-$date $HOME/Backups/current
&lt;/code&gt;
&lt;/pre&gt;
	&lt;p&gt;The script creates a file called &amp;#8220;back&amp;#8221; appended by the current date and time, for example &lt;code&gt;back-2007-11-13T22:03:32&lt;/code&gt; which contains the &lt;strong&gt;full backup&lt;/strong&gt;. Then there is a symbolic link called &amp;#8220;current&amp;#8221; which points to the most recent directory. This directory-link is used for the &lt;code&gt;--link-dest&lt;/code&gt; parameter.&lt;/p&gt;
	&lt;p&gt;You should look at the &lt;code&gt;--exclude&lt;/code&gt; parameter (or better, &lt;code&gt;--exclude-from=&lt;/code&gt; parameter) and learn how to exclude certain files or directories from the backup (you shouldn&amp;#8217;t backup your backup for example).&lt;/p&gt;
	&lt;p&gt;The script above only works on the local machine because making links on a remote machine needs some extra work. But not much:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
 #!/bin/sh
 date=`date "+%Y-%m-%dT%H:%M:%S"`
 rsync -azP --link-dest=PATHTOBACKUP/current $SOURCE $HOST:PATHTOBACKUP/back-$date
 ssh $HOST "rm PATHTOBACKUP/current &amp;#38;&amp;#38; ln -s back-$date PATHTOBACKUP/current" 
&lt;/code&gt;
&lt;/pre&gt;
	&lt;p&gt;To get that working you either use a public/private key authentication scheme or something else to avoid typing in your password. Another possibility is, of course, to mount the remote file-system on the local computer using the above script.&lt;/p&gt;
	&lt;p&gt;On my setup the script takes about 6 seconds to synchronize 46968 files and 29GB &amp;#8211; this takes 20MB for the file structure (with no actual files to transfer of course). But afterwards, I have a complete backup of my system in a new directory.&lt;/p&gt;
	&lt;p&gt;On a much bigger setup (1.2 million files and 50GB of data) the backup takes about 30 minutes and takes about 3GB of space (just for links!), so it isn&amp;#8217;t exactly &lt;strong&gt;free&lt;/strong&gt;, but very convenient.&lt;/p&gt;
	&lt;p&gt;The space needed for the backup is determined by the shape of your directory structure. On the larger setup I have lots of Maildirs and a very deep directory structure so it takes much more space than my home-directory backup above. 3GB is quite a lot, but 20MB doesn&amp;#8217;t hurt.&lt;/p&gt;
	&lt;h2&gt;Advanced &lt;code&gt;rsync&lt;/code&gt; parameters&lt;/h2&gt;
	&lt;p&gt;Additional to the parameters described above, I usually employ a combination of these parameters in my backup:&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;code&gt;--delete&lt;/code&gt; and &lt;code&gt;--delete-excluded&lt;/code&gt; this tells rsync to remove files from my backups either if they are gone on my local machine, or if I decided to exclude them from my backup.&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;--exclude-from=FILE&lt;/code&gt; the file specified here is a simple list of directories of files (one per line) which should &lt;strong&gt;not&lt;/strong&gt; be backed up. My &lt;code&gt;Trash&lt;/code&gt; folder oder some &lt;code&gt;.cache&lt;/code&gt; folders are candidates for this file.&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;-P&lt;/code&gt; is used to give more information on how far the backup is, and how many files are to be backed up. Additional it could resume an interrupted transfer (which doesn&amp;#8217;t apply here because we create a blank backup each time we call the script).&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;-x&lt;/code&gt; this one is &lt;strong&gt;important&lt;/strong&gt; because it prohibits rsync to go beyond the local filesystem. For example if you backup you Linux-root partition, you should not include the /proc directory because rsync will get stuck in it. &lt;code&gt;-x&lt;/code&gt; excludes all mounted filesystems from the backup which is probably what you want in most cases.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;h2&gt;Hard-Links&lt;/h2&gt;
	&lt;p&gt;Each file in a directory is a link to the actual data on your hard-disk. The file-system keeps track of how many links to a area point, and only if the last link is deleted, the whole area gets deleted (in contrast to soft-links, these are pointers to the file-name, not the contents).&lt;/p&gt;
	&lt;p&gt;Here an illustration of two backups with three files each. &lt;code&gt;File1&lt;/code&gt; and &lt;code&gt;File2&lt;/code&gt; are the &lt;em&gt;same&lt;/em&gt; in both backups, only &lt;code&gt;File3&lt;/code&gt; changed between &lt;code&gt;Backup1&lt;/code&gt; and &lt;code&gt;Backup2&lt;/code&gt;. So in &lt;code&gt;Backup2&lt;/code&gt;, &lt;code&gt;File3 (changed)&lt;/code&gt; has to point to a different area than &lt;code&gt;File3&lt;/code&gt; in &lt;code&gt;Backup1&lt;/code&gt;.&lt;/p&gt;
	&lt;p&gt;&lt;img src="http://blog.interlinked.org/static/images/hardlinks.png" alt="" /&gt;&lt;/p&gt;
	&lt;p&gt;&lt;span class="caps"&gt;BTW&lt;/span&gt;, there is a &lt;a href="http://code.google.com/p/flyback/"&gt;nice project for Linux&lt;/a&gt; out there which provides the same functionality as Time Machine including a nice &lt;span class="caps"&gt;GUI&lt;/span&gt; which is also based on &lt;strong&gt;&lt;code&gt;rsync&lt;/code&gt;&lt;/strong&gt; and the procedure presented here.&lt;/p&gt;
	&lt;h2&gt;The End&lt;/h2&gt;
	&lt;p&gt;Credit: The initial idea for this approach came from &lt;a href="http://www.mikerubel.org/computers/rsync_snapshots/"&gt;Mike Rubel &amp;#8211; rsync snapshots&lt;/a&gt;.&lt;/p&gt;
	&lt;p&gt;Also interesting if you have to cope with Windows: &lt;a href="http://www.softlab.ntua.gr/~ttsiod/backup.html"&gt;Optimal remote backups with rsync over Samba&lt;/a&gt;.&lt;/p&gt;
	&lt;p&gt;There are quite a few approaches out there which more or less do the same, but rsync is available on virtually every Unix out there (even the &lt;a href="http://damnsmalllinux.org/"&gt;&lt;span class="caps"&gt;DSL&lt;/span&gt;&lt;/a&gt; with its 50MB footprint includes rsync). So using other tools might be more convenient, but I&amp;#8217;ll stick with the omnipresent rsync.&lt;/p&gt;
	&lt;p&gt;rsync offers the possibility to store only the differences to the previous backup (using &lt;code&gt;--compare-dest&lt;/code&gt; which should point to a full-backup instead of &lt;code&gt;--link-dest&lt;/code&gt;). It then doesn&amp;#8217;t make links to the unchanged files, it just leaves them out. This way you get an incremental backup without the &amp;#8220;directory-overhead&amp;#8221; of the &lt;code&gt;--link-dest&lt;/code&gt; approach. &lt;strong&gt;But&lt;/strong&gt; you have to be &lt;strong&gt;extremely&lt;/strong&gt; cautious which one of older backups you delete because the newer backups just don&amp;#8217;t contain some of these files (think of full-backups as checkpoints)! Using the &lt;code&gt;--link-dest&lt;/code&gt; you can delete all backups but the last and you still got all the files, so I&amp;#8217;m happy to pay 20MB per backup for this safety.&lt;/p&gt;
	&lt;p&gt;&amp;#8212;&lt;br/&gt;
The universe tends toward maximum irony. Don&amp;#8217;t push it. &amp;#8212;&lt;a href="http://jwz.livejournal.com/801607.html"&gt;&lt;span class="caps"&gt;JWZ&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IMHO/~4/243202998" height="1" width="1"/&gt;</description><feedburner:origLink>http://blog.interlinked.org/tutorials/rsync_time_machine.html</feedburner:origLink></item><item><title>My Mac OS X Setup</title><link>http://feeds.feedburner.com/~r/IMHO/~3/243202999/mac_setup.html</link><guid isPermaLink="false">tutorials/mac_setup@http://blog.interlinked.org</guid><dc:subject>tutorials</dc:subject><dc:subject>tutorials</dc:subject><dc:subject>mac os x</dc:subject><dc:subject>setup</dc:subject><dc:creator>Michael</dc:creator><dc:date>2007-11-04T18:04:03+00:00</dc:date><description>&lt;p&gt;Installing Mac &lt;span class="caps"&gt;OS X&lt;/span&gt; on a Mac is a breeze, yet I usually do two things after the installation to improve stability.&lt;/p&gt;
	&lt;h2&gt;Hibernation/Safe Sleep&lt;/h2&gt;
	&lt;p&gt;The newer Macs come with a feature called &amp;#8220;Hibernation&amp;#8221; or &lt;a href="http://docs.info.apple.com/article.html?artnum=302477"&gt;Safe Sleep&lt;/a&gt;. Every Mac owner knows that you can put your Mac to sleep and wake it any time you want. In contrast to some (almost?) all other major operating systems this just works. The sleep mode still powers the &lt;span class="caps"&gt;RAM&lt;/span&gt;, so you still need some power. Now imagine you put your MacBook (Pro) to sleep and you run out of battery. This is where Hibernation comes to play.&lt;/p&gt;
	&lt;p&gt;Hibernation writes the contents of your &lt;span class="caps"&gt;RAM&lt;/span&gt; to a file on disk, an in case of total power loss, it restores the contents of your memory from that file -&amp;gt; nothing is lost.&lt;/p&gt;
	&lt;p&gt;Unfortunately writing several gigabytes to disk takes some time, and I experienced hard crashes when I interrupt this process, for example by opening the Laptop shortly after I&amp;#8217;ve closed it.&lt;/p&gt;
	&lt;p&gt;My solution &amp;#8211; giving up the fallback option &amp;#8211; is to disable Hibernation at all:&lt;/p&gt;
	&lt;pre&gt;&lt;code&gt;sudo pmset -a hibernatemode 0&lt;/code&gt;&lt;/pre&gt;
	&lt;p&gt;The pmset utility offers some more options (Hibernation only on battery etc&amp;#8230;).&lt;/p&gt;
	&lt;h2&gt;Wake on Bluetooth&lt;/h2&gt;
	&lt;p&gt;The default setting for Bluetooth and Power Management is to allow Bluetooth devices to wake the computer. For example you can press a button of your Bluetooth Keyboard or Mouse to activate your computer.&lt;/p&gt;
	&lt;p&gt;In my opinion this feature isn&amp;#8217;t that hot on a Laptop. I once put my Mac into my bag and accidently pushed a button of my Keyboard. The computer came to live, but had no chance at all to cool itself -&amp;gt; it ran pretty hot when I took it out of my bag&amp;#8230; .&lt;/p&gt;
	&lt;p&gt;Since this accident I always disable &amp;#8220;Wake on Bluetooth&amp;#8221; because I wake my Mac by opening the lid, not by pressing some button.&lt;/p&gt;
	&lt;p&gt;These two options increased the stability of my machine quite significantly, and I don&amp;#8217;t miss them in any way, although &amp;#8220;Hibernation&amp;#8221; would be nice &amp;#8211; just in case&amp;#8230; .&lt;/p&gt;
	&lt;p&gt;&lt;img src="http://blog.interlinked.org/static/images/wake_on_bluetooth.png" alt="" /&gt;&lt;/p&gt;
	&lt;p&gt;&amp;#8212;&lt;br/&gt;
Boom. &amp;#8212;Steve Jobs&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IMHO/~4/243202999" height="1" width="1"/&gt;</description><feedburner:origLink>http://blog.interlinked.org/tutorials/mac_setup.html</feedburner:origLink></item><item><title>Apple, Apple Care, MacBook Pro, and Mac OS X Leopard</title><link>http://feeds.feedburner.com/~r/IMHO/~3/243203000/apple_care.html</link><guid isPermaLink="false">reviews/apple_care@http://blog.interlinked.org</guid><dc:subject>reviews</dc:subject><dc:subject>reviews</dc:subject><dc:subject>apple</dc:subject><dc:subject>apple care</dc:subject><dc:subject>macbook pro</dc:subject><dc:subject>leopard</dc:subject><dc:creator>Michael</dc:creator><dc:date>2007-11-01T15:15:11+00:00</dc:date><description>&lt;p&gt;About one year ago I bought a second generation MacBook Pro. At first everything was fine and I didn&amp;#8217;t encounter any weird sounds or screen flickers known from previous models. Unfortunately after a few weeks, it started to make some weird sound sometimes when I open it (or switch it on).&lt;/p&gt;
	&lt;p&gt;The noise vanished a few seconds after starting the computer but it still bothered me, so I brought it to an Apple Service center. Three repairs later, the noise was still there (the technician also heard it &amp;#8211; not only me), so I called Apple Care.&lt;/p&gt;
	&lt;p&gt;At first they said &amp;#8220;it&amp;#8217;s the usual operating sound of these machines&amp;#8221;. I was tempted to trust them, but I started a small research on the Internet. It turned out, that there is indeed a sound (issued by the &lt;span class="caps"&gt;CPU&lt;/span&gt;) which is considered normal, but my particular one wasn&amp;#8217;t included here.&lt;/p&gt;
	&lt;p&gt;So I called Apple Care again presenting my new findings and giving a very detailed description of my problem. Due to the unsuccessful repairs they offered me to replace the whole thing.&lt;/p&gt;
	&lt;p&gt;After a week or so I received a brand new MacBook Pro, not the second generation model, but a &lt;strong&gt;third generation&lt;/strong&gt; MacBook Pro including Leopard.&lt;/p&gt;
	&lt;h2&gt;Leopard&lt;/h2&gt;
	&lt;p&gt;The new Mac &lt;span class="caps"&gt;OS X&lt;/span&gt; is a fine step forward. At first it isn&amp;#8217;t very different from Tiger, only some minor user interface tweaks here and there.&lt;/p&gt;
	&lt;p&gt;At a closer look they have improved many details and introduced some very new features (Time Machine and Quick Look for example). I won&amp;#8217;t go into the details here, other sites are much better suited for this. But Time Machine is very nice for backup purposes and offers some kind of &lt;strong&gt;versioning file system&lt;/strong&gt;, Quick Look was one of these features I thought &amp;#8220;nice, but not for me&amp;#8221; until I got a PowerPoint presentation. I don&amp;#8217;t have PowerPoint installed on my system, but Quick Look could open it without a hassle &amp;#8211; nice!&lt;/p&gt;
	&lt;p&gt;Oh, yes &amp;#8211; Leopard seems to be more responsive to me (faster if you like), especially Spotlight got a real performance boost.&lt;/p&gt;
	&lt;h2&gt;Third Generation MacBook Pro&lt;/h2&gt;
	&lt;p&gt;The new &lt;span class="caps"&gt;MBP&lt;/span&gt; has a &lt;span class="caps"&gt;LED&lt;/span&gt; backlit display which helps to increase the battery life time of the notebook (and lower the environmental hazard) together with Intel&amp;#8217;s new Santa Rosa chipset which can independently regulate the &lt;span class="caps"&gt;CPU&lt;/span&gt; cores. Apple claims that these models can run up to 6 hours on battery. Well usually these numbers aren&amp;#8217;t that realistic (you have to shut off Bluetooth, &lt;span class="caps"&gt;WLAN&lt;/span&gt; and set the brightness to the lowest level to get near them), but two movies with medium brightness and sound via the internal speakers are absolutely no problem (about 4-4.5 hours). That&amp;#8217;s pretty good for a 15.4 inch widescreen laptop!&lt;/p&gt;
	&lt;p&gt;At first I was annoyed by the brightness adjustment feature, it turns the brightness down if the surrounding light is dimmed, and up as soon as the environment gets brighter. It&amp;#8217;s only annoying when you see the change, but the eye is more relaxed and working on the laptop is more comfortable (turning the feature off is no problem either).&lt;/p&gt;
	&lt;h2&gt;Boot Camp&lt;/h2&gt;
	&lt;p&gt;Since I like to play a game every now and then, I thought I could try installing Windows using Boot Camp.&lt;/p&gt;
	&lt;p&gt;The installation was quite easy. I installed Windows Vista Business because my student edition of XP didn&amp;#8217;t work (they are altered editions of the standard XP editions). The Boot Camp drivers allow nearly the same features as Mac &lt;span class="caps"&gt;OS X&lt;/span&gt; has (brightness adjustment, volume, sleep when lid is closed etc.). Vista also runs surprisingly fast (I disabled certain services like SuperFetch and the Indexer), but it uses very much space, more than I am willing to spend on a 20 GB partition&amp;#8230; maybe I&amp;#8217;ll give XP another try sometime.&lt;/p&gt;
	&lt;h2&gt;Conclusion&lt;/h2&gt;
	&lt;p&gt;Altogether I am very pleased with the outcome of my noise problems on my notebook. Apple was kind enough to replace the whole machine eleven months after my purchase and the new machine simply rocks.&lt;/p&gt;
	&lt;p&gt;Almost all hardware manufacturers have problems &amp;#8211; whether it&amp;#8217;s &lt;span class="caps"&gt;IBM&lt;/span&gt;/Lenovo, Dell or Apple. The difference in &amp;#8211; my opinion &amp;#8211; lies in the service. I&amp;#8217;m not saying that other companies wouldn&amp;#8217;t replace a faulty product, but replacing it after more than 90% of the warranty have passed is exceptional, isn&amp;#8217;t it?&lt;/p&gt;
	&lt;p&gt;Well, not being able to repair an issue on three repairs is also exceptional (but can I blame Apple for independent service centers?).&lt;/p&gt;
	&lt;p&gt;The only other issue with expensive hardware was with my &lt;span class="caps"&gt;IBM T86 TFT&lt;/span&gt; monitor. I bought it on an internet auction (private seller, no bill or guarantee card etc). I had some problems with it, so I called &lt;span class="caps"&gt;IBM&lt;/span&gt; if there is a possibility to repair it. It turned out that the monitor had four years of warranty left and I was eligible for their rapid-replacement service (a carrier brings me a new one, and I send back the old one). Again, service matters, but you pay for it &amp;#8211; the &lt;span class="caps"&gt;MBP&lt;/span&gt; costs about 2000 Euro, you can get 15,4 inch laptops as low as 500 Euro too, do you think these companies would ever replace the whole thing after 11 months because of some sound which doesn&amp;#8217;t affect the usability of the device at all?&lt;/p&gt;
	&lt;p&gt;&amp;#8212;&lt;br/&gt;
Have you tried turning it off and on again?&amp;#8212;IT Crowd answering machine&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IMHO/~4/243203000" height="1" width="1"/&gt;</description><feedburner:origLink>http://blog.interlinked.org/reviews/apple_care.html</feedburner:origLink></item><item><title>XML as human interface and DSLs</title><link>http://feeds.feedburner.com/~r/IMHO/~3/243203001/human_interface.html</link><guid isPermaLink="false">misc/human_interface@http://blog.interlinked.org</guid><dc:subject>misc</dc:subject><dc:subject>misc</dc:subject><dc:subject>XML</dc:subject><dc:subject>ANTLR</dc:subject><dc:subject>quotes</dc:subject><dc:creator>Michael</dc:creator><dc:date>2007-10-30T22:58:41+00:00</dc:date><description>&lt;p&gt;While reading &amp;#8220;The Definitive &lt;a href="http://www.antlr.org/"&gt;&lt;span class="caps"&gt;ANTLR&lt;/span&gt;&lt;/a&gt; Reference&amp;#8221; by &lt;a href="http://www.cs.usfca.edu/~parrt/"&gt;Terence Parr&lt;/a&gt; I encountered this quote. I&amp;#8217;m a bit sceptic about &lt;span class="caps"&gt;XML&lt;/span&gt; beyond its use of data exchange, so the quote has completely won me over for the book.&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;p&gt;Don&amp;#8217;t be afraid to build a human-readable configuration file (I implore everyone to please stop using &lt;span class="caps"&gt;XML&lt;/span&gt; as a human interface!) or to build domain-specific languages to make yourself more efficient. Designing new languages and building translators for existing languages, when appropriate, is the hallmark of a sophisticated developer. &amp;#8212;Terence Parr, The Definitive &lt;span class="caps"&gt;ANTLR&lt;/span&gt; Reference, Page 23.&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;&amp;#8212;&lt;br/&gt;
Being an expert in &lt;span class="caps"&gt;XML&lt;/span&gt; is like being an expert in comma-separated values. &amp;#8212;Terence Parr&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IMHO/~4/243203001" height="1" width="1"/&gt;</description><feedburner:origLink>http://blog.interlinked.org/misc/human_interface.html</feedburner:origLink></item><item><title>Please Leopard, don't Suck</title><link>http://feeds.feedburner.com/~r/IMHO/~3/243203002/please_leopard_dont_suck.html</link><guid isPermaLink="false">misc/please_leopard_dont_suck@http://blog.interlinked.org</guid><dc:subject>misc</dc:subject><dc:subject>misc</dc:subject><dc:subject>mac os x</dc:subject><dc:subject>apple</dc:subject><dc:creator>Michael</dc:creator><dc:date>2007-10-20T19:58:41+00:00</dc:date><description>&lt;p&gt;Apple&amp;#8217;s next generation operating system is nearing its release date. Time
to face the truth &amp;#8211; is it as awesome as Steve told us?&lt;/p&gt;
	&lt;p&gt;Since I&amp;#8217;m a Mac user (despite my Vista adventures), I can only repeat what
the brave people of &lt;a href="http://www.geekculture.com/joyoftech/"&gt;The Joy of Tech&lt;/a&gt;
published in September: &lt;strong&gt;Please Leopard, don&amp;#8217;t suck!&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://www.geekculture.com/joyoftech/joyarchives/1012.html"&gt;&lt;img src="http://blog.interlinked.org/static/images/pleaseleoparddontsuck.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;Tiger is already far better than Vista &amp;#8211; it does the small things so much
better than all Windows versions together. Of course on a competitive market
these &amp;#8220;features&amp;#8221; don&amp;#8217;t count. But for me as user these are the features I
really really love on Mac &lt;span class="caps"&gt;OS X&lt;/span&gt;.&lt;/p&gt;
	&lt;p&gt;Here my list of &lt;em&gt;these things make &lt;span class="caps"&gt;OS X&lt;/span&gt; the better operating system&lt;/em&gt;:&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;span class="caps"&gt;OS X&lt;/span&gt; always prints in the right order &amp;#8211; on Windows I often had to reverse the pages.&lt;/li&gt;
	&lt;li&gt;I can print to &lt;span class="caps"&gt;PDF&lt;/span&gt; in almost all situations.&lt;/li&gt;
	&lt;li&gt;Pressing Shift+Cmd+4 I can make screenshots of a part of my screen (press the spacebar to make pictures of whole windows).&lt;/li&gt;
	&lt;li&gt;For certain tasks I&amp;#8217;m simply so much faster on the (sane) command-line than by clicking through myriads of dialogs (but both ways are possible).&lt;/li&gt;
	&lt;li&gt;Unix! &amp;#8216;nuff said.&lt;/li&gt;
	&lt;li&gt;Taste &amp;#8211; yes, I know, this word was stressed a lot in combination with &amp;#8220;Apple&amp;#8221;, but it&amp;#8217;s simply true &amp;#8211; compare Windows to &lt;span class="caps"&gt;OS X&lt;/span&gt;. OS X isn&amp;#8217;t just a conglomerate of desktop effects, but a fine-tuned composition of feedback-mechanisms. It&amp;#8217;s like candy, but you can&amp;#8217;t get sick by eating to much of it.&lt;/li&gt;
	&lt;li&gt;Innovation &amp;#8211; being so much smaller than MS, Apple has to put in considerable effort into their products, but &amp;#8211; and this is what I like about them &amp;#8211; they don&amp;#8217;t suffer &lt;a href="http://en.wikipedia.org/wiki/Featuritis"&gt;featuritis&lt;/a&gt; (indeed they had a big &lt;a href="http://en.wikipedia.org/wiki/Copland_%28operating_system%29"&gt;disaster&lt;/a&gt; because of featuritis in the nineties, but they learned their lessons well).&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;Well, the list got a bit esoteric at some point, but many many things &amp;#8220;just work&amp;#8221;. Of course Apple is all but perfect, their &amp;#8220;closed-system&amp;#8221; policy is dangerous and very annoying. Doing things they don&amp;#8217;t want you to do (for good or bad reason) is very hard (try to keep a Macbook running while the lid is closed, for example).&lt;/p&gt;
	&lt;p&gt;Anyway, closed systems also have their advantages, and if you don&amp;#8217;t like it, you can always switch to some other operating system on your Intel Mac. Windows is easily installed on a Mac, and for Linux there are some guides found on the net (depending on your actual hardware).&lt;/p&gt;
	&lt;p&gt;At some point I didn&amp;#8217;t want to care about operating systems anymore (Linux was great, but very time consuming), I wanted something that &amp;#8220;just worked&amp;#8221; (which ruled out Windows). &lt;span class="caps"&gt;OS X&lt;/span&gt; came to the rescue &amp;#8211; and here I am several years later, more happy with my OS than ever.&lt;/p&gt;
	&lt;p&gt;&amp;#8212;&lt;br/&gt;
Please Leopard, don&amp;#8217;t suck!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IMHO/~4/243203002" height="1" width="1"/&gt;</description><feedburner:origLink>http://blog.interlinked.org/misc/please_leopard_dont_suck.html</feedburner:origLink></item><item><title>Windows Vista has bad Behaviour</title><link>http://feeds.feedburner.com/~r/IMHO/~3/243203003/windows_vista_bad_behaviour.html</link><guid isPermaLink="false">reviews/windows_vista_bad_behaviour@http://blog.interlinked.org</guid><dc:subject>reviews</dc:subject><dc:subject>reviews</dc:subject><dc:subject>windows vista</dc:subject><dc:subject>microsoft</dc:subject><dc:subject>tuning</dc:subject><dc:creator>Michael</dc:creator><dc:date>2007-10-05T18:15:11+00:00</dc:date><description>&lt;p&gt;Vista constantly accesses my hard drive, here is how to do the exorcism (no,
not the format-the-drive exorcism).&lt;/p&gt;
	&lt;p&gt;One thing I notice whenever I start Windows Vista (I usually rely on Linux)
is that it always does &lt;strong&gt;something&lt;/strong&gt; on my harddrive. I didn&amp;#8217;t know what it was
doing, so I started to investigate.&lt;/p&gt;
	&lt;p&gt;To keep it short, there are three things to disable to keep your harddisk from
working permanently.&lt;/p&gt;
	&lt;p&gt;First, I disabled the &amp;#8220;Indexing Service&amp;#8221; which was an obvious candidate for
accessing my drive(s). Unfortunately it wasn&amp;#8217;t the only process digging on
my harddrive.&lt;/p&gt;
	&lt;p&gt;The second service I disabled was the &amp;#8220;System Restore&amp;#8221; which was suggested
&lt;a href="http://www.tomshardware.co.uk/forum/236463-34-vista-grinding-hard-drive"&gt;here&lt;/a&gt;.&lt;/p&gt;
	&lt;p&gt;This still didn&amp;#8217;t work out, so my quest wasn&amp;#8217;t finished yet. The last process
I disabled was &amp;#8220;Superfetch&amp;#8221;. This actually did the trick. I don&amp;#8217;t know what it
is supposed to do, but the OS didn&amp;#8217;t suffer as far as I can tell.&lt;/p&gt;
	&lt;p&gt;I&amp;#8217;ll leave the three processes disabled because I didn&amp;#8217;t recognize a negative
impact (well, the Index-Service might be important to some people).&lt;/p&gt;
	&lt;p&gt;&amp;#8212;&lt;br/&gt;
If something&amp;#8217;s expensive to develop, and somebody&amp;#8217;s not going to get paid, it won&amp;#8217;t get developed. So you decide: Do you want software to be written, or not?&amp;#8212;Bill Gates&lt;br/&gt;&lt;br/&gt;
Why, oh why didn&amp;#8217;t they choose otherwise?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IMHO/~4/243203003" height="1" width="1"/&gt;</description><feedburner:origLink>http://blog.interlinked.org/reviews/windows_vista_bad_behaviour.html</feedburner:origLink></item><item><title>Linux configuration</title><link>http://feeds.feedburner.com/~r/IMHO/~3/243203004/linux.html</link><guid isPermaLink="false">tutorials/linux@http://blog.interlinked.org</guid><dc:subject>tutorials</dc:subject><dc:subject>tutorials</dc:subject><dc:subject>keyboard</dc:subject><dc:subject>mouse</dc:subject><dc:subject>nvidia</dc:subject><dc:subject>linux</dc:subject><dc:subject>startup time</dc:subject><dc:subject>boot time</dc:subject><dc:creator>Michael</dc:creator><dc:date>2007-09-01T13:42:12+00:00</dc:date><description>&lt;p&gt;This weekend I tried to get my new keyboard (Microsoft Ergonomic Keyboard
4000) and my Logitech &lt;span class="caps"&gt;MX1000&lt;/span&gt; Laser mouse to work properly. The Keyboard has
many extra-keys I didn&amp;#8217;t bother to count, and the mouse has 12 buttons which 
can be very useful at times.&lt;/p&gt;
	&lt;p&gt;Almost accidently I solved a bugging performance problem with the Firefox browser.
It was incredibly slow when opening Google Spreadsheets, well the whole system
was incredibly slow while loading the spreadsheet&amp;#8230; .&lt;/p&gt;
	&lt;h1&gt;Configuring the Microsoft Ergonomic Keyboard 4000 and the &lt;span class="caps"&gt;MX1000&lt;/span&gt; Laser mouse&lt;/h1&gt;
	&lt;p&gt;Most of the information I used to get my new keyboard working (except of 6 keys) came
from the &lt;a href="http://gentoo-wiki.com/HOWTO_Microsoft_Natural_Ergonomic_Keyboard_4000"&gt;Gentoo-Wiki&lt;/a&gt; 
and the &lt;a href="http://ubuntuforums.org/showthread.php?t=229559"&gt;Ubuntu-Forum&lt;/a&gt;.&lt;/p&gt;
	&lt;p&gt;What you need is the&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.6.tar.bz2"&gt;Linux Kernel 2.6.22-6&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://ubuntuforums.org/attachment.php?attachmentid=36547&amp;#38;d=1182884449"&gt;MS Ergonomic Keyboard 4k Patch 0.5.1&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;Make sure that you get the right version of the patch for your Kernel (in case that 2.6.22 is outdated).&lt;/p&gt;
	&lt;p&gt;Extract the Kernel, patch it (&lt;code&gt;patch -p1 &amp;lt; hid.patch&lt;/code&gt;) and compile it. I assume you&amp;#8217;ve got some experience 
compiling a Kernel (just follow the instructions at the &lt;a href="http://ubuntuforums.org/showthread.php?t=229559"&gt;Ubuntu-Forum&lt;/a&gt;).&lt;/p&gt;
	&lt;p&gt;Now for the configuration, I didn&amp;#8217;t follow the Gentoo-Wiki guide and didn&amp;#8217;t hack my xkb configuration because
I couldn&amp;#8217;t see any advantages&amp;#8230; it seems that the &amp;#8220;evdev&amp;#8221; XkbModel does the right thing (if you don&amp;#8217;t
set the Model to evdev, the keys are really messed up).&lt;/p&gt;
	&lt;p&gt;I used the Gnome Keyboard-Shortcuts program to assign functionality to the keys. The keys I couldn&amp;#8217;t get to work are
the special keys 1, 2, 3, 4, 5, Fav, and Zoom-In (Zoom-In is recognized by X, but is already assigned). Since I use
GMail for mail I assigned the Mail-button to &lt;code&gt;firefox "http://www.gmail.com"&lt;/code&gt;.&lt;/p&gt;
	&lt;p&gt;The mouse is equally simple, follow the &lt;a href="http://blog.blackdown.de/2006/01/15/updated-logitech-mx1000-configuration/"&gt;instructions here&lt;/a&gt;.&lt;/p&gt;
Here the /etc/X11/xorg.conf config (relevant parts): 
&lt;pre&gt;
Section "InputDevice" 
 Identifier "Keyboard Ergo. 4000 1" 
 Driver "evdev" 
 Option "Protocol" "evdev" 
 Option "Device" "/dev/input/event1" 
 Option "CoreKeyboard" 
 Option "XkbRules" "xorg" 
 Option "XkbModel" "evdev" 
 Option "XkbLayout" "us" 
EndSection
Section "InputDevice" 
 Identifier "Keyboard Ergo. 4000 2" 
 Driver "evdev" 
 Option "Protocol" "evdev" 
 Option "Device" "/dev/input/event2" 
 Option "XkbRules" "xorg" 
 Option "XkbModel" "evdev" 
 Option "XkbLayout" "us" 
EndSection
Section "InputDevice" 
 Identifier "MX1000" 
 Driver "evdev" 
 Option "CorePointer" 
 Option "Device" "/dev/input/event0" 
 Option "Buttons" "12" 
 Option "Resolution" "800" 
EndSection
[...]
Section "ServerLayout" 
 Identifier "Default Layout" 
 Screen "Default Screen" 0 0
 InputDevice "Keyboard Ergo. 4000 1" "CoreKeyboard" 
 InputDevice "Keyboard Ergo. 4000 2" "SendCoreEvents" 
 InputDevice "MX1000" 
EndSection
&lt;/pre&gt;
The udev rules to fix the keyboard to event1 and event2 (/etc/udev/rules.d/10-nek4k.rules, the &lt;span class="caps"&gt;UID&lt;/span&gt; should not differ from yours):
&lt;pre&gt;
KERNEL=="event*",SYSFS{modalias}=="usb:v045Ep00DBd0173dc00dsc00dp00ic03isc01ip01", MODE="0644", NAME="input/event1" 
KERNEL=="event*",SYSFS{modalias}=="usb:v045Ep00DBd0173dc00dsc00dp00ic03isc00ip00", MODE="0644", NAME="input/event2" 
&lt;/pre&gt;
The udev rules for the mouse (/etc/udev/rules.d/11-mx1000.rules):
&lt;pre&gt;
KERNEL=="event*",SYSFS{modalias}=="usb:v046DpC50Ed2500dc00dsc00dp00ic03isc01ip02", MODE="0644", NAME="input/event0" 
&lt;/pre&gt;
The ~/.xbindkeysrc configuration I use simply activates the &amp;#8220;Forward&amp;#8221; &amp;#8220;Backward&amp;#8221; functionality (thumb buttons):
&lt;pre&gt;
# Backward and Forward buttons
"xvkbd -text "\[Alt_L]\[Left]"" 
 m:0x10 + b:8
"xvkbd -text "\[Alt_L]\[Right]"" 
 m:0x10 + b:9
&lt;/pre&gt;
This maps the mouse button 8 to &lt;code&gt;Alt-Left&lt;/code&gt;, and button 9 to &lt;code&gt;Alt-Right&lt;/code&gt;. Remember to start xbindkeys at the
start of you session (for example add it to &lt;code&gt;.gnomerc&lt;/code&gt; or even better to &lt;code&gt;.xprofile&lt;/code&gt;).
To rearrange the mouse buttions how I like them, I use a Xmodmap file (/etc/X11/Xmodmap):
&lt;pre&gt;
!MX1000
pointer = 1 10 3 4 5 7 6 8 9 2 11 12 14 13
&lt;/pre&gt;
This rearranges the second button (middle button on the scroll-wheel) to the thumb button, and reverses the tilt-buttons 
of the scroll-wheel. This could also be in &lt;code&gt;.xmodmaprc&lt;/code&gt;.
	&lt;p&gt;Use &lt;code&gt;xev&lt;/code&gt; to find out which number any button has (works for the keyboard too).&lt;/p&gt;
	&lt;h1&gt;Performance issues with Firefox&lt;/h1&gt;
	&lt;p&gt;I noticed severe performance issues with Firefox each time I opened a Google Spreadsheet. The interesting thing was that
Xorg took 100% of the &lt;span class="caps"&gt;CPU&lt;/span&gt;, not Firefox itself. I resolved the issue more or less accidently: I installed the binary 
&lt;a href="http://www.nvidia.com/object/unix.html"&gt;NVidia driver&lt;/a&gt; which gave the whole system a real performance boost.&lt;/p&gt;
	&lt;h1&gt;Bootup Performance&lt;/h1&gt;
	&lt;p&gt;The next thing I attacked was the boot-time. First I disabled many services I didn&amp;#8217;t use. Usually I create a folder called
&lt;code&gt;disabled&lt;/code&gt; within the runlevel directories (/etc/rcS.d and /etc/rc2.d) and move the services I don&amp;#8217;t use (or don&amp;#8217;t know I use).&lt;/p&gt;
	&lt;p&gt;Using a coll utility called &lt;a href="http://www.bootchart.org/"&gt;BootChart&lt;/a&gt; (stores it&amp;#8217;s charts in &lt;code&gt;/var/log/bootchart/&lt;/code&gt;) 
I found out that a big chunk of my startup time is taken by getting my IP by &lt;span class="caps"&gt;DHCP&lt;/span&gt;. I changed my configuration to 
a static IP, so I could reduce the startup time by 10 seconds.&lt;/p&gt;
	&lt;p&gt;My chart currently shows a lot of time (and I/O access) is coming from &lt;code&gt;modprobe&lt;/code&gt;, I wonder if compiling the Kernel
with all necessary drivers included into the Kernel would give me even less startup time&amp;#8230; Maybe I&amp;#8217;ll try that
sometime too :-).&lt;/p&gt;
	&lt;p&gt;So, now my Ubuntu setup seems quite nice, unfortunately I edited a lot of files in the process, which are easily lost
so this is more or less a tutorial for my future-me to get the stuff working again.&lt;/p&gt;
	&lt;p&gt;&amp;#8212;&lt;br/&gt;
It&amp;#8217;s also perhaps the most stupid Unix design idea of all times. Unix
is really nice and well done, but think about this a bit: &amp;#8216;For every
file that is read from the disk, lets do a &amp;#8230; write to the disk! And,
for every file that is already cached and which we read from the cache
... do a write to the disk!&amp;#8212;&lt;a href="http://kerneltrap.org/node/14148"&gt;Linus Torvalds about atime&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/IMHO/~4/243203004" height="1" width="1"/&gt;</description><feedburner:origLink>http://blog.interlinked.org/tutorials/linux.html</feedburner:origLink></item></channel>
</rss>
