<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>commandliners</title>
	
	<link>http://commandliners.com</link>
	<description># killall -9 X</description>
	<pubDate>Sun, 01 Nov 2009 17:52:55 +0000</pubDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/commandliners" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Vim. Editing multiple files</title>
		<link>http://feedproxy.google.com/~r/commandliners/~3/WpSvzbaygFU/</link>
		<comments>http://commandliners.com/2009/11/vim-editing-multiple-files/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 17:52:55 +0000</pubDate>
		<dc:creator>n0str0m0</dc:creator>
		
		<category><![CDATA[shell]]></category>

		<category><![CDATA[bufdo]]></category>

		<category><![CDATA[buffer]]></category>

		<category><![CDATA[edit]]></category>

		<category><![CDATA[tab]]></category>

		<category><![CDATA[tabdo]]></category>

		<category><![CDATA[viewport]]></category>

		<category><![CDATA[vim]]></category>

		<category><![CDATA[windo]]></category>

		<guid isPermaLink="false">http://commandliners.com/?p=1275</guid>
		<description><![CDATA[In previous issues, we have edited one file at a time. We did this because there were other points of interest at that time. However, Vim can  handle more than one file at a time using several different techniques including buffers, viewports and tabs last one, since Vim 7. In this issue we take [...]]]></description>
			<content:encoded><![CDATA[<p>In previous issues, we have edited one file at a time. We did this because there were other points of interest at that time. However, Vim can  handle more than one file at a time using several different techniques including buffers, viewports and tabs last one, since Vim 7. In this issue we take a look at these handy mechanisms that will speed up your work.</p>
<p><span style="text-decoration: underline;"><strong>Buffers</strong></span><br />
We can think of a buffer as a place inside Vim where a file is loaded. In the following example, I will use a couple of files:</p>
<pre><code>$ cat file1 file2
This is file 1
This is file 2
$ vim file1
</code></pre>
<pre><code>
This is file 1
~
~
~
~
~
~
~
~
~
</code></pre>
<p>To see file2, we use the <strong>:e</strong> command to load and <em>edit</em> the new file:</p>
<pre><code>
~
~
~
~
:e file2 [ENTER]
</code></pre>
<p>Hint: you can use TAB to autocomplete file names and commands</p>
<pre><code>
This is file 2
~
~
~
~
~
~
~
~
~
</code></pre>
<p>Vim is now showing <em>file2</em>, but what happened with <em>file1</em>? It is still there, loaded into the first buffer. We can return to it using the <em>buffer previous</em> command, <strong>:bp</strong></p>
<pre><code>
This is file 1
~
~
~

</code></pre>
<p>What if we want to move to <em>file2</em>? <em>buffer next</em>, <strong>:bn</strong>. In fact, if you do it twice, you will get <em>file1</em> again.<br />
This is because buffers are circularly linked. Like this:</p>
<pre>

 ---------------------------- bn ----------------------------&gt;
file 1 &lt;--bp/bn---&gt; file 2 &lt;---bp/bn---&gt; file 3 &lt;--bp/bn---&gt; ...&lt;---&gt; file N
&lt;------------------------ bp ----------------------------</pre>
<p>It is useful to know each buffer&#8217;s contents. You can do this with the <strong>:buffers</strong> command. </p>
<pre><code>
~
~
~
~
:buffers
  1 %a   "file1"                    line 1
  2      "file2"                        line 0
  3      "file3"                        line 0
  4      "file4"                        line 0
  5      "file5"                        line 0
  6      "file6"                        line 0
</code></pre>
<p>Imagine you are in the third buffer and you want to edit the 45th of a total of 100 files. In this case, you do not really want to use the <strong>:bn</strong> or <strong>:bp</strong> approach but the <strong>:buffer number</strong> command:</p>
<pre><code>

~
~
~
~
:buffer 45 [ENTER]
</code></pre>
<p>This command sends you to the exact buffer. One restriction to take into account when moving from one buffer to another is that you should save your work before leaving the current buffer. If you do not do it, you will see a message like the one below:</p>
<pre><code>E37: No write since last change (add ! to override)</code></pre>
<p>as when trying to quit Vim without saving.<br />
To override this restriction (if you really want to do it), use a <em>bang</em>: <strong>:bn!</strong>. The content of the modified buffer will not be lost, it is a just a warning. However, it is a good habit to always save before leaving a buffer.<br />
Every time you edit a file, it is loaded into a buffer even if you do it invoking Vim with several file names. For instance, if you start Vim like this:</p>
<pre><code>vim file1 file2 file3</code></pre>
<p>Vim will load the files into three different buffers (check it out with the <strong>:buffers</strong> command.</p>
<p><span style="text-decoration: underline;"><strong>Viewports</strong></span><br />
A viewport can be imagined as a <em>window</em> inside Vim. Basically Vim splits the <em>visual area</em> into several parts either vertically or horizontally. We can use the <strong>:sp</strong> (split) or the <strong>:vsp</strong> (vertical split) with or without a file name. This is what appears after invoking Vim and executing the <strong>:sp</strong> command:</p>
<pre><code>
~
~
~
~
~
~
~
[No Name]                                                     0,0-1          All

~
~
~
~
~
~
[No Name]                                                     0,0-1          All
</code></pre>
<p>Pretty cool, isn&#8217;t it? You can jump from one viewport to another using Ctrl-w-w (this is, <strong>Control-w</strong> and then <strong>w</strong> again). When Vim is showing several viewports, all the actions take place at the specific viewport in which you are working. For instance, if you search a term, the search is limited to that viewport.<br />
You can start Vim with several viewports using the <strong>-o</strong> and <strong>-O</strong> flags. The former splits the window horizontally, the latter does it vertically (forgive my use of screenshots but <strong>for once</strong> I guess they are illustrative :-) ):<br />
<code> </code></p>
<pre>$ vim -o make.conf sysctl.list</pre>
<p><img class="alignnone size-medium wp-image-1447" src="http://commandliners.com/wp-content/uploads/2009/10/horizontal-300x208.png" alt="horizontal" width="300" height="208" /></p>
<p>A viewport can be split again into more viewports. That is nice, but you can end up with something similar to the screenshot below, so do not be too enthusiastic creating viewports ;) :</p>
<p><img class="alignnone size-medium wp-image-1448" src="http://commandliners.com/wp-content/uploads/2009/10/mess-300x208.png" alt="mess" width="300" height="208" /></p>
<p>Of course, in each viewport, the complete buffer list is available. This is a global list for each Vim session. The default layout of the viewports may well not satisfy your needs. In that case you can use the <em>movement commands</em> using uppercase letters preceded by <strong>Ctrl-w</strong>. These commands move the viewport in which they are applied. For example, if we have two vertical viewports and we are positioned at the left one, typing <strong>Ctrl-w L</strong> moves the viewport to the right and the right one to the left.</p>
<p><span style="text-decoration: underline;"><strong>Tabs</strong></span><br />
Since Vim 7, there is a new way to edit multiple files. Tabs work like in many other applications (e.g. web browsers). To create a new tab, use &#8220;<strong>:tabnew</strong>&#8220;. You can use <b>Ctrl-Up</b> and <b>Ctrl-Down</b> to move through the tabs.</p>
<p>I know what you are asking yourself and the answer is <i>yes</i>: every tab has access to the global buffer list and it can be split into several viewports. Thousands of possibilities at hand!</p>
<p><img class="alignnone size-medium wp-image-1465" src="http://commandliners.com/wp-content/uploads/2009/10/tab1-300x208.png" alt="tab1" width="300" height="208" /></p>
<p><img class="alignnone size-medium wp-image-1466" src="http://commandliners.com/wp-content/uploads/2009/10/tab2-300x208.png" alt="tab2" width="300" height="208" /></p>
<p>There are a lot of commands to help you dealing with tabs. Some of them are <b>:tabNext</b>, <b>:tabprevious</b>, <b>:tabfirst</b> and <b>:tablast</b> to move through the tabs. <b>:tabclose</b> to close the current tab and <b>:tabs</b> to obtain a list of tabs.</p>
<p><u><b>Being efficient</b></u><br />
Editing multiple files using buffers, viewports and tabs is OK. Having several files open at the same time, it is easy to move through them, etc. But what if you want to do something for all files at the same time? The family of commands <b>[buf/win/tab]do</b> do the magic. They apply an action to all the files in the list of buffers, viewports or tabs. For example:</p>
<p><code>
<pre>~
~
~
~
~
~
~
:bufdo :%s/file/archive/g | w!</pre>
<p></code></p>
<p>The command above replaces all the occurrences of <b>file</b> by <b>archive</b> (do not worry if you do not understand the command, we will visit the <i>search and replace</i> topic in another issue).<br />
Other interesting command:<br />
<code>
<pre>:bufdo !tar rvf package.tar %</pre>
<p></code><br />
Creates a tar file named <i>package.tar</i> containing all the files loaded into the buffers</p>
<p><u><b>Conclusion</b></u><br />
Although this has not been an in depth tutorial about buffers, viewports and tabs, it should be sufficient to help you manage your files under Vim efficiently. As a programmer, I find these features extremely useful. I usually have my .h and .c/.cpp files open in two viewports so I can see both the declaration and the definition of the classes at the same time, for example. <br />
Use these features for a while and you will realize how easy and efficient your daily work can become.</p>
<p>Enjoy!</p>
<p><u>Vim Sheet (IV)</u></p>
<ul>
<li>:e Edit a new file (and load it into a new buffer)
<li>:bp, :bn Move to the previous/next buffer
<li>:buffer <i>number</i> Move to the specified buffer
<li>:buffers, :tabs Show the list of buffers/tabs
<li>:sp, :vsp Split the current viewport horizontally/vertically
<li>Ctrl-w w Move to the <i>next</i> window
<li>Ctrl-w H/J/K/L Move the current viewport in the specified direction
<li>:tabnew Create a new tab
<li>Ctrl-Up, Ctrl-Down Move to the next/previous tab
<li>:tabNext, :tabprevious, :tabfirst, :tablast Movements through the tab list
<li>:bufdo, :windo, :tabdo <i>action</i> Apply <i>action</i> on all the specified objects
</ul>
<img src="http://feeds.feedburner.com/~r/commandliners/~4/WpSvzbaygFU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://commandliners.com/2009/11/vim-editing-multiple-files/feed/</wfw:commentRss>
		<feedburner:origLink>http://commandliners.com/2009/11/vim-editing-multiple-files/</feedburner:origLink></item>
		<item>
		<title>Pstat</title>
		<link>http://feedproxy.google.com/~r/commandliners/~3/HNnwJwr7JjI/</link>
		<comments>http://commandliners.com/2009/10/pstat/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 21:42:14 +0000</pubDate>
		<dc:creator>n0str0m0</dc:creator>
		
		<category><![CDATA[shell]]></category>

		<category><![CDATA[FreeBSD]]></category>

		<category><![CDATA[pstat]]></category>

		<guid isPermaLink="false">http://commandliners.com/?p=1409</guid>
		<description><![CDATA[pstat is a command line utility for obtaining system statistics.
When invoked with -s it shows swap space information. When used with -f it shows statistics on open files.
Below is an example showing information about both open files and swap use:
 
$ pstat -T
6052/12328 files
0M/128M swap space
pstat is part of the FreeBSD&#8217;s base system
Enjoy!
]]></description>
			<content:encoded><![CDATA[<p><code>pstat</code> is a command line utility for obtaining system statistics.<br />
When invoked with <strong>-s</strong> it shows swap space information. When used with <strong>-f</strong> it shows statistics on open files.<br />
Below is an example showing information about both open files and swap use:<br />
<code> </code></p>
<pre>$ pstat -T
6052/12328 files
0M/128M swap space</pre>
<p><code>pstat</code> is part of the FreeBSD&#8217;s base system<br />
Enjoy!</p>
<img src="http://feeds.feedburner.com/~r/commandliners/~4/HNnwJwr7JjI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://commandliners.com/2009/10/pstat/feed/</wfw:commentRss>
		<feedburner:origLink>http://commandliners.com/2009/10/pstat/</feedburner:origLink></item>
		<item>
		<title>Vim. Copy &amp; Paste</title>
		<link>http://feedproxy.google.com/~r/commandliners/~3/vv_AVkGWgbU/</link>
		<comments>http://commandliners.com/2009/10/vim-copy-paste/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 07:00:56 +0000</pubDate>
		<dc:creator>n0str0m0</dc:creator>
		
		<category><![CDATA[shell]]></category>

		<category><![CDATA[copy]]></category>

		<category><![CDATA[editor]]></category>

		<category><![CDATA[paste]]></category>

		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://commandliners.com/?p=1274</guid>
		<description><![CDATA[Copy &#38; Paste are two of the most important operations when writing a text. It is easy to know why: you save a lot of time.
Vim handles copy &#38; paste powerfully and gracefully. In Vim you can yank (copy), cut and paste text objects. There are two basic ways for selecting text: either using the [...]]]></description>
			<content:encoded><![CDATA[<p>Copy &amp; Paste are two of the most important operations when writing a text. It is easy to know why: you save a lot of time.<br />
Vim handles copy &amp; paste powerfully and gracefully. In Vim you can <em>yank</em> (copy), cut and paste text objects. There are two basic ways for selecting text: either using the <em>normal</em> vim commands or going into <em>visual mode</em>.<br />
Let us see all of this with some examples:</p>
<pre><code>This is a <strong>s</strong>ample text
</code></pre>
<p>(Bold letters indicate the cursor position as in the previous issues.)</p>
<p>Now type: <code>yw</code> followed by <code>ESC o</code><br />
As you can expect, you have just <em><strong>y</strong>anked a <strong>w</strong>ord</em> and opened a new line below the current one. Now, paste the copied text: in command mode, type <code>p</code></p>
<pre><code>This is a <strong>s</strong>ample text
sample
</code></pre>
<p>Easy, right?</p>
<p>You can do the same thing going into Visual mode (pressing <em>v</em> or <em>V</em>). Once you are in this mode, use  <em>h, j, k, l</em> to move around and mark the selection area. When you are done, end with <code>y</code>.</p>
<p>The same procedure is used for cutting. Just replace the <em>y</em> command with the <em>d</em> command. What if you want to paste the selection above the current line? Use <em>P</em> when pasting the selection instead of <em>p</em>.<br />
Another <em>shortcut</em>: use <code>yy</code> to yank a whole line (remember you can always use modifiers, so you can do something like <code>2yy</code> to yank two lines).</p>
<p><span style="text-decoration: underline;">Using registers</span><br />
This has been easy so far. Let us be more efficient. In vim, you can use several registers to put text into.<br />
It is as easy as doing this:<code>"{register}{operation}</code>. For instance, assuming we have already selected some text, we can do: <code>"ry</code><br />
And the selected text will be put into the <em>r</em> register.</p>
<p>In the following example, the word &#8220;bluetooth&#8221; is selected.</p>
<pre><code>Everything is better with <strong>bluetooth</strong>.
</code></pre>
<p>Now, type: <code>"ry</code> to copy the text into &#8220;r&#8221; register.</p>
<pre><code>Everything is better with <strong>bluetooth</strong>.        ESC o

</code></pre>
<p>And now, we paste the text with: <code>"rp</code></p>
<pre><code>Everything is better with <strong>bluetooth</strong>.
bluetooth
</code></pre>
<p>You can inspect the contents of these registers going into command line mode and typing <code>registers</code>. E.g:</p>
<pre><code>:registers[ENTER]
</code></pre>
<pre><code>
:registers
--- Registers ---
""   bluetooth
"0   This is a test^JThis is another line^J
"1   Everything is better with bluetooth^Jbluetooth^J
"2   ^JThis is another line^JThis is a test^JThis is another line^J^J^J^J^JThis is a test^JThis is another line^J
"3   ^J
"4   ^J
"5   ^J
"6   ^J
"7   ^J
"8   ^J
"9   biscuit^J
"b   cookie
"f   bluetooth
"g   I'm blind^JS
"r   bluetooth
"-   test
".
"/   throw
</code></pre>
<p>Obviously, when you use the same register to cut or copy new text, the previous content is replaced with the new one. But what happens when you use the same register name but using the uppercase letter? Vim <em>appends</em> the new text to the content of the register. As in the example below:</p>
<pre><code><strong>T</strong>his line is interesting.
This is not.
This is another interesting line.
This is completely useless.
</code></pre>
<p>If we want to copy only the interesting lines, we can do the following:V &#8220;fy 2j V &#8220;Fy j o ESC p.<br />
Let us analyze that sequence: First we go into visual line mode and copy the text into the <strong>f</strong> register. Then we move to the next interesting line and do the same, but this time we use the <strong>F</strong> register character, so that we append the second line to the <strong>f</strong> buffer preserving the previous content. Then, we open a new line below the last one and paste on it the content of the <strong>f</strong> register.</p>
<p>I know the sequence can seem overwhelming, but you rest assured that it will become second-nature to your fingers once you have used those commands for few days. As an exercise it could be interesting to inspect the content of the registers before and after appending some text (using the <em>:registers</em> command).</p>
<p>One very special register is <em>*</em>. It is used to copy from/to the system&#8217;s clipboard. It can be used to paste in Vim some text copied from gEdit. It is used as the other registers.</p>
<p>As always, use these features as much as possible to get used to them.</p>
<p>Enjoy!</p>
<p><span style="text-decoration: underline;">Vim Sheet (III)</span></p>
<ul>
<li> y: copy text. (yw copies a word, for example)</li>
<li>yy: copy this line</li>
<li>d: cuts the content and puts it into the clipboard</li>
<li>p: paste the content of the clipboard</li>
<li>&#8221; register y: yanks the selected text into <em>register</em>. Example: &#8220;ty</li>
<li>&#8221; register p : pastes the content of the register.</li>
<li> &#8221; REGISTER y: adds the selection to the contents of the register (it does not delete the previous content)</li>
</ul>
<img src="http://feeds.feedburner.com/~r/commandliners/~4/vv_AVkGWgbU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://commandliners.com/2009/10/vim-copy-paste/feed/</wfw:commentRss>
		<feedburner:origLink>http://commandliners.com/2009/10/vim-copy-paste/</feedburner:origLink></item>
		<item>
		<title>Vim. Moving around</title>
		<link>http://feedproxy.google.com/~r/commandliners/~3/qeBn6ia_52Y/</link>
		<comments>http://commandliners.com/2009/09/vim-moving-around/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 06:00:14 +0000</pubDate>
		<dc:creator>n0str0m0</dc:creator>
		
		<category><![CDATA[shell]]></category>

		<category><![CDATA[cursor]]></category>

		<category><![CDATA[editor]]></category>

		<category><![CDATA[moving]]></category>

		<category><![CDATA[page]]></category>

		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://commandliners.com/?p=1265</guid>
		<description><![CDATA[Vim is not a mouse driven program. With other editors, you use the mouse to place the cursor at the desired position. This seems  to be fine. However, you do not realize how faster you can move using a command approach as in Vim.
In Vim, you move around the text using different commands, that [...]]]></description>
			<content:encoded><![CDATA[<p>Vim is not a mouse driven program. With other editors, you use the mouse to place the cursor at the desired position. This seems  to be fine. However, you do not realize how faster you can move using a command approach as in Vim.</p>
<p>In Vim, you move around the text using different commands, that is, keystrokes while you are in command mode. At the beginning this may result confusing or even seem a waste of time. However, once you get used to it, you will never leave it and you find it to be faster than any other method.</p>
<p><span style="text-decoration: underline;">Basic movements</span></p>
<ul>
<li> h (left)</li>
<li> j (down)</li>
<li> k (up)</li>
<li> l (right)</li>
</ul>
<p>In most modern implementations of Vim, you can use the arrow keys to move as you normally do with other applications. However this option is not always available, mostly when you are using Vim remotely and the communication program gets confused or something. The standard keys will always work so you had  better get used to them. My advice is that from now on, you use these keys exclusively.</p>
<p>Most of the commands can be repeated automatically just specifying how many times you want to repeat it:</p>
<p><em>ESC6j</em> moves the cursor six lines downwards.</p>
<p>Moving one character at a time is not really efficient. A better approach is to move word by word. Here are some of the  commands to do this:</p>
<ul>
<li>w (word) move at the beginning of the next word</li>
<li>W (Word) the same but it &#8220;understands&#8221; special characters</li>
<li>e (end) put the cursor at the end of the next word</li>
<li>b (back) put the cursor at the beginning of the previous word</li>
</ul>
<p>Let us see an example. Bold letters indicate the cursor position.</p>
<pre><code><strong>T</strong>his is a text sample
w
This <strong>i</strong>s a text sample
W
This is <strong>a</strong> text sample
e
This is  a tex<strong>t</strong> sample
b
This is a <strong>t</strong>ext sample
b
This is <strong>a</strong> text sample
</code></pre>
<p>Let us see what happens with words including special characters:</p>
<pre><code>This word <strong>h</strong>as different/special characters.
w
This word has <strong>d</strong>ifferent/special characters.
w
This word has different<strong>/</strong>special characters.
b
This word has <strong>d</strong>ifferent/special characters.
W
This word has different/special <strong>c</strong>haracters.
B
This word has <strong>d</strong>ifferent/special characters.
E
This word has different/specia<strong>l</strong> characters.
</code></pre>
<p>As you can see, the capital version of the normal commands do the right thing with these <em>special</em> words.</p>
<p>Vim knows about more text objects (e.g. lines) and because of this, you can tell him to go to the beginning or the end of the line:</p>
<ul>
<li>0 move to the beginning of the line</li>
<li> ^ move to the first non-blank character of the line</li>
<li>$ move to the end of the line</li>
</ul>
<p>Four other useful commands are the following, intended for placing the cursor at the first occurrence of a certain character in a line:</p>
<ul>
<li> f places the cursor at the first occurrence of the character</li>
<li> F the same, backwards</li>
<li> t places the cursor <em>before</em> the first occurrence of the character</li>
<li> T the same, backwards</li>
</ul>
<p>Some examples for these commands:</p>
<pre><code><strong>T</strong>his is another test
fo
This is an<strong>o</strong>ther test
Fi
This <strong>i</strong>s another test
to
This is a<strong>n</strong>other test
Th
Th<strong>i</strong>s is another test
</code></pre>
<p>The &#8220;g&#8221; family of commands are used to &#8220;goto&#8221; a specific place in the file.</p>
<ul>
<li> gg goes to the beginning of the file</li>
<li> G goes to the end.</li>
<li> numberG goes to the specific line (e.g. 5G goes to line 5)</li>
</ul>
<p>Another equivalent method for the last one is: <em>ESC:numberENTER</em></p>
<p>In addition, if you want to move forward and backwards one page at a time, you can use Ctrl-f and Ctrl-b respectively; or if you just want to move half-page at a time: Ctrl-d Ctrl-u. Of course the Page Up and Page Down keys of most of the keyboards work fine too, but it is preferable to use the proper commands.</p>
<p>These commands are sufficient to make a good use of Vim&#8217;s movement facilities. Use them as much as you can.</p>
<p><span style="text-decoration: underline;">Vim Sheet (II)</span></p>
<ul>
<li>h, j, k, l: move the cursor</li>
<li>w, W, e, b: move at the begin/end of the next/previous word</li>
<li>0, ^, $: move to the beginning/end of line.</li>
<li>f, F, t, T: find a character forward/backwards</li>
<li>g, G: go to a line number</li>
<li>Ctrl-f/b/d/u: move page forward/backwards.</li>
</ul>
<p>Enjoy!</p>
<img src="http://feeds.feedburner.com/~r/commandliners/~4/qeBn6ia_52Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://commandliners.com/2009/09/vim-moving-around/feed/</wfw:commentRss>
		<feedburner:origLink>http://commandliners.com/2009/09/vim-moving-around/</feedburner:origLink></item>
		<item>
		<title>Creating RSA keys</title>
		<link>http://feedproxy.google.com/~r/commandliners/~3/0OMXR8FR5bU/</link>
		<comments>http://commandliners.com/2009/09/creating-rsa-keys/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 06:00:26 +0000</pubDate>
		<dc:creator>rafacas</dc:creator>
		
		<category><![CDATA[security]]></category>

		<category><![CDATA[cat]]></category>

		<category><![CDATA[openssl]]></category>

		<category><![CDATA[PEM]]></category>

		<category><![CDATA[RSA]]></category>

		<guid isPermaLink="false">http://commandliners.com/?p=1349</guid>
		<description><![CDATA[RSA is an algorithm for public-key cryptography. Its advantage is that it does not require the initial exchange of secret keys unlike symmetric key algorithms. Each user has a pair of keys, one for encryption (the public key) and another one for decryption (the private key). The private key is kept in secret while the [...]]]></description>
			<content:encoded><![CDATA[<p><strong>RSA</strong> is an algorithm for <a href="http://en.wikipedia.org/wiki/Public-key_cryptography">public-key cryptography</a>. Its advantage is that it does not require the initial exchange of secret keys unlike symmetric key algorithms. Each user has a pair of keys, one for encryption (<em>the public key</em>) and another one for decryption (<em>the private key</em>). The private key is kept in secret while the public key may be widely distributed.</p>
<p><em>OpenSSL</em> is usually the tool used for creating an RSA key pair (the public and private ones). </p>
<pre><code>$ openssl genrsa -out key.pem 1024
Generating RSA private key, 1024 bit long modulus
............................................++++++
.....++++++
e is 65537 (0x10001)
</code></pre>
<p>This command creates a <em>1024</em>-bit key pair and stores it in a file called <em>keys.pem</em>. Let us see the content:</p>
<pre><code>$ cat key.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDGtQRh3WBg1ENpD8QEOGKzUHOv7Fu9bbDct8dWdCYg5mthFX35
XX/gnFrAEmrHpY1/HfZFDkowGUAatxq943o6wBZYVT8T5whkToH6ragOyM7xr7oD
gwnYRDdLMDfXuKC4x04wD1QKO/JGH94dGZB39bNHG+i4SG60lJNCZdiVtQIDAQAB
AoGAYbDFAsgvhetVaOWTXO/LtpSrC6aMQ8kV1q2TlvFrfWlLCWPjlyFcqTS1eRCU
5qqBsiks1i58UsFXPssenpSjljjKXN09Pa9s4k3osmIm0FWh77Fn6ddiddvv3n0A
QVcAf4PeGwE8RyoBxkXmaK0G3JJEN2D6Ue9vJm7ODZ3d0NECQQDphmExZdmiF5GV
2cvou6gjAngVteFgDCvhK3xCqdmIaz3he2TWRlMsJicOZmrXCZR/IRLJuSsKUBTm
XXdY05C/AkEA2dTKfXzIpSeZx0jN2ETUQi1uCdOb5a6XVBhXvYr0gDhaKO7dqU/A
/bztdbuXylU7rf3mGOboaOux6FWqqoiCiwJBAKdEJ43YZCBkPVVWYWXcNDyPYjA6
zKmdTjjEiwa83iGGnxZI6htI1/5Bfawk09Ye+IxuxiRTS27hmXa/7+Jh98UCQQDW
2YrfOrSsMOL8LFLbfQfePfDKwGyDnjCkQV5JFUUTMoG63d7DoGY53p5YAS814dt7
QXIyHY4d7lsLTXOHwB0BAkEA6MseICM41X0NaAsB4xFtMt4vBtv4OfIVUiPdeI8p
bmhKkzUdphWPWsVUTEim42zDHLLPwhEItPxVgk58/Bv3YA==
-----END RSA PRIVATE KEY-----
</code></pre>
<p>If you add the <code>-des|-des3|-idea</code> option, the private key will be encrypted with the chosen cypher. If this option is used a passphrase will be asked for.</p>
<pre><code>$ openssl genrsa -des3 -out keydes3.pem 1024
Generating RSA private key, 1024 bit long modulus
..++++++
....................................++++++
e is 65537 (0x10001)
Enter pass phrase for keydes3.pem:
Verifying - Enter pass phrase for keydes3.pem:
</code></pre>
<p>Now, you have a private key encrypted with the DES3 cypher in a file called <em>keydes3.pem</em>:</p>
<pre><code>$ cat keydes3.pem
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,90A0901B038FDB04

Y2Vuba/ALHPffCMFU2uEk/mF43DEuKBuFek/wSPxaacm1r2tjSmwgyCNluxYqLhD
huZX986L4MjEKNFkrKWvuTaw9xZbObUNz7KhUC1KrMjhOXzr/zA9NKDs/DvfJaGw
DQLJYx6acqlWToxJoi2on3oBZj7SdOAkqrnT2RaLWCRyMPgsXrJFc+pYIgSeIQ48
OT0lZpZYgw0uTuEaPvSF1QxkJ6rewseSuXz4OPipSYYVcSM7n3DpXiTeci2Dq8q8
Bl1HP/VcQG5wzB+VACJa3KZqqrEiVZU8DaFlFN2Ir4AEiqNomNzij+XgYOdZzVrA
FYmjGbtNC3vGS1x0YFqsRjGmkuKjI+EioCj5fN7S2TkfSFK+tRjEFtHhHihaGOz+
m6mHbu8tErue1wqNqprJ9KdjTSrP4yR0hAfQF4bjqrpe4ExqvBLODw2TUz03ld6y
mBr7J16MEfg+wb22lt5wyX59uUxNdsu4j6H/Vgg/TmACuADNzWx9Hst6cmVQbuN3
VXfDCP5G79UiihLIug/C+uswiAUA6jluh787NjowA8QXuMYRmTECeKHWezZuf+sQ
x9n0gMWMS9HQdg7gFRNc+Hg0JeW8YBGcYzDdQVXvPrgI30apKDidFf9jjLXaQQoq
OZVq0QC60XHF6UG9/nSoGj7VPAkj9b0+4lzBLCRikebrRQhLhBGsCy30J3WrGzei
UGGjeR4mPiZ6gG41MEQFZhr1Wy6I44f3Eln4qdaUDPhnusp0lv1QM5U41IgrVS6+
fnY2DivXaHil2Rl/GLz1GT7N60fqtK5g+wUeZGAmuodjGR3GGuGHog==
-----END RSA PRIVATE KEY-----
</code></pre>
<p>As a matter of curiosity the symbols shown during the creation indicate its progress. RSA private key generation essentially involves the generation of two prime numbers. A <strong>.</strong> (dot) represents each number which has passed an initial sieve test, <strong>+</strong> means a number has passed a single round of the Miller-Rabin primality test. A <strong>newline</strong> means that the number has passed all the prime tests (the actual number depends on the key size).</p>
<p>I have used the .pem extension because <strong>PEM</strong> is the default format in which the keys are stored. It consists of an ASN1 DER encoded form (compatible with the PKCS#1 RSAPrivateKey or SubjectPublicKeyInfo format) base64 encoded with additional header and footer lines. There are two other common formats: <strong>DER</strong> and <strong>NET</strong>.</p>
<p>To output the public part of a private key:</p>
<pre><code>$ openssl rsa -in key.pem -pubout -out pubkey.pem
writing RSA key
</code></pre>
<p>This way you get the public key in a file called pubkey.pem:</p>
<pre><code>$ cat pubkey.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGtQRh3WBg1ENpD8QEOGKzUHOv
7Fu9bbDct8dWdCYg5mthFX35XX/gnFrAEmrHpY1/HfZFDkowGUAatxq943o6wBZY
VT8T5whkToH6ragOyM7xr7oDgwnYRDdLMDfXuKC4x04wD1QKO/JGH94dGZB39bNH
G+i4SG60lJNCZdiVtQIDAQAB
-----END PUBLIC KEY-----
</code></pre>
<p>If you want to delve into RSA, you might want to view the modulus, exponent and prime key values:</p>
<pre><code>$ openssl rsa -in keydes3.pem -noout -text
Enter pass phrase for keydes3.pem:
Private-Key: (1024 bit)
modulus:
    00:b0:ec:02:82:c2:c7:db:45:fd:34:df:bc:6a:bf:
    c1:cf:71:c9:07:87:64:b2:cb:ee:76:82:de:1a:a9:
    67:a3:7d:e0:31:d1:5b:ec:7e:34:3a:6e:a8:9b:74:
    c7:1d:70:52:bf:6a:a2:f1:d3:03:01:98:86:bc:83:
    dd:7f:2b:a6:18:ef:8e:f8:2b:6a:44:7d:33:6e:c5:
    e1:ba:85:b0:9c:e1:ae:52:ff:14:0b:ed:30:98:52:
    c5:e9:fd:82:00:40:dd:85:80:ca:f6:7d:48:74:56:
    5b:7e:5e:a4:4f:62:d3:60:f6:a1:7d:2d:66:2c:06:
    31:93:1d:69:bb:68:84:87:61
publicExponent: 65537 (0x10001)
privateExponent:
    00:99:88:66:71:65:69:1c:bf:b3:09:b4:73:85:4b:
    dd:7c:11:69:7c:50:21:b2:0b:c9:68:2d:0f:63:a1:
    c9:5f:96:f7:fd:23:8b:1b:43:36:3d:d3:14:1c:bc:
    0d:a3:5d:7b:61:c3:bf:9e:0e:19:58:c4:2d:80:e1:
    0a:51:b6:e6:4e:e1:84:03:bb:ae:91:58:c3:fc:e1:
    a7:7d:69:4a:34:3c:e1:c8:ff:95:2e:69:bc:0e:4e:
    0f:b7:8b:a3:e7:c7:9c:43:01:0c:84:db:16:d9:58:
    91:02:12:75:38:83:0e:b9:ed:13:0b:00:80:07:a4:
    09:14:25:91:63:72:4d:a0:b1
prime1:
    00:e0:9c:c6:5a:de:23:b9:4a:7c:9b:43:46:93:d1:
    91:e2:40:db:64:70:9d:3a:64:b5:56:16:0c:55:8e:
    89:92:5c:cd:bb:77:e5:08:f7:3b:9c:41:76:6b:f0:
    67:ae:48:38:9f:2a:6e:b9:ce:e3:14:08:ad:fe:c1:
    b0:57:a5:6e:bd
prime2:
    00:c9:a5:2a:ff:21:28:f4:c0:67:9c:42:b1:c9:df:
    f4:4f:a0:5b:e4:85:6f:a1:6c:89:4e:d8:04:d1:e4:
    47:6a:87:75:3d:a6:55:36:ab:5c:9f:63:be:c9:7a:
    9a:ae:d8:0b:2b:7f:36:5e:e8:54:56:9c:6e:b4:ee:
    d7:eb:64:c7:75
exponent1:
    00:80:21:af:1d:e3:1f:29:f2:8e:06:dc:68:04:a7:
    46:bb:75:18:32:c1:f3:4f:7e:67:db:c6:14:1f:32:
    82:d4:55:d0:9f:23:14:2a:fb:2e:ac:42:c3:d5:6b:
    7d:19:f4:e5:28:17:42:b7:08:88:8d:c3:2d:ce:e8:
    9b:3a:44:8b:59
exponent2:
    0f:db:9f:70:05:09:95:85:f4:20:03:d6:bb:8b:93:
    49:17:d1:62:3d:64:34:0b:b7:18:ae:40:62:c9:53:
    1c:7b:9e:aa:c4:83:fb:12:aa:ec:16:0a:11:0a:45:
    53:ee:c5:a2:1c:15:08:8d:b8:e4:3e:d5:2e:01:82:
    95:8e:8d:69
coefficient:
    00:bb:60:d9:2e:14:9c:18:76:e7:ed:c8:0f:de:b6:
    ff:a3:ae:c2:6f:da:7b:b3:5c:61:22:5d:45:50:2a:
    38:75:28:d4:75:5b:12:ba:04:48:73:b7:a3:8d:44:
    74:24:2d:71:0e:fa:c3:e2:cc:9a:3f:e4:22:ed:ab:
    13:e8:0d:79:98
</code></pre>
<p>As you can see, when you proccess encrypted RSA keys (as we did with <em>keydes3.pem</em>), you will have to enter the passphrase.</p>
<p>For more info, <code>man openssl</code>, <code>man genrsa</code> and <code>man rsa</code>.</p>
<img src="http://feeds.feedburner.com/~r/commandliners/~4/0OMXR8FR5bU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://commandliners.com/2009/09/creating-rsa-keys/feed/</wfw:commentRss>
		<feedburner:origLink>http://commandliners.com/2009/09/creating-rsa-keys/</feedburner:origLink></item>
		<item>
		<title>Listing all service status</title>
		<link>http://feedproxy.google.com/~r/commandliners/~3/ZhmlFNq52ZA/</link>
		<comments>http://commandliners.com/2009/09/listing-all-service-status/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 09:21:14 +0000</pubDate>
		<dc:creator>rafacas</dc:creator>
		
		<category><![CDATA[cmd]]></category>

		<category><![CDATA[shell]]></category>

		<category><![CDATA[red hat]]></category>

		<category><![CDATA[service]]></category>

		<guid isPermaLink="false">http://commandliners.com/?p=1243</guid>
		<description><![CDATA[# service --status-all
anacron (pid 2435) is running...
atd (pid  2405) is running...
auditd (pid  1777) is running...
Avahi daemon is running
cpuspeed is stopped
crond (pid  2385) is running...
cupsd (pid  2424) is running...
dnsmasq is stopped
hald (pid 2129) is running...
httpd is stopped
[...]

Runs all init scripts (located in /etc/init.d), in  alphabetical  order,  with the status [...]]]></description>
			<content:encoded><![CDATA[<pre><code># service --status-all
anacron (pid 2435) is running...
atd (pid  2405) is running...
auditd (pid  1777) is running...
Avahi daemon is running
cpuspeed is stopped
crond (pid  2385) is running...
cupsd (pid  2424) is running...
dnsmasq is stopped
hald (pid 2129) is running...
httpd is stopped
[...]
</code></pre>
<p>Runs all init scripts (located in <code>/etc/init.d</code>), in  alphabetical  order,  with the <strong>status</strong> option.<br />
Note: Only in Red Hat and redhat-like distros (Fedora, Mandriva,&#8230;).</p>
<img src="http://feeds.feedburner.com/~r/commandliners/~4/ZhmlFNq52ZA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://commandliners.com/2009/09/listing-all-service-status/feed/</wfw:commentRss>
		<feedburner:origLink>http://commandliners.com/2009/09/listing-all-service-status/</feedburner:origLink></item>
		<item>
		<title>IM from the command line</title>
		<link>http://feedproxy.google.com/~r/commandliners/~3/cHT1D3THiVk/</link>
		<comments>http://commandliners.com/2009/09/im-from-the-command-line/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 08:00:01 +0000</pubDate>
		<dc:creator>n0str0m0</dc:creator>
		
		<category><![CDATA[network]]></category>

		<category><![CDATA[shell]]></category>

		<category><![CDATA[fich]]></category>

		<category><![CDATA[FreeBSD]]></category>

		<category><![CDATA[IM]]></category>

		<category><![CDATA[pidgin]]></category>

		<guid isPermaLink="false">http://commandliners.com/?p=1134</guid>
		<description><![CDATA[% cd /usr/ports/net-im/finch; make install clean

The above installs finch. It is an ncurses based instant messaging client, part of the pidgin suite. Though it can be a little tough at the beginning, it is a good alternative if you do not have a graphical interface. Below I show two screenshots. Use Alt-w to move between [...]]]></description>
			<content:encoded><![CDATA[<pre><code>% cd /usr/ports/net-im/finch; make install clean
</code></pre>
<p>The above installs finch. It is an ncurses based instant messaging client, part of the <a href="http://www.pidgin.im/">pidgin</a> suite. Though it can be a little tough at the beginning, it is a good alternative if you do not have a graphical interface. Below I show two screenshots. Use Alt-w to move between windows.</p>
<p style="text-align: center;"><img class="size-full wp-image-1338 aligncenter" src="http://commandliners.com/wp-content/uploads/2009/09/shot1.png" alt="finch1" width="311" height="240" /></p>
<p style="text-align: center;"><img class="size-medium wp-image-1339 aligncenter" src="http://commandliners.com/wp-content/uploads/2009/09/shot3-300x231.png" alt="finch2" width="300" height="231" /></p>
<p>Enjoy!</p>
<img src="http://feeds.feedburner.com/~r/commandliners/~4/cHT1D3THiVk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://commandliners.com/2009/09/im-from-the-command-line/feed/</wfw:commentRss>
		<feedburner:origLink>http://commandliners.com/2009/09/im-from-the-command-line/</feedburner:origLink></item>
		<item>
		<title>How to verify MD5 or SHA-1 digests</title>
		<link>http://feedproxy.google.com/~r/commandliners/~3/XttEo7B95Z4/</link>
		<comments>http://commandliners.com/2009/09/how-to-verify-md5-or-sha-1-digests/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 08:00:58 +0000</pubDate>
		<dc:creator>rafacas</dc:creator>
		
		<category><![CDATA[security]]></category>

		<category><![CDATA[bsd]]></category>

		<category><![CDATA[digest]]></category>

		<category><![CDATA[fingerprint]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[md5]]></category>

		<category><![CDATA[openssl]]></category>

		<category><![CDATA[osx]]></category>

		<category><![CDATA[sha1]]></category>

		<category><![CDATA[solaris]]></category>

		<guid isPermaLink="false">http://commandliners.com/?p=1320</guid>
		<description><![CDATA[MD5 and SHA-1 are cryptographic hash functions. They are deterministic procedures that take an arbitrary block of data as input and return a fixed-size bit string, the hash value (called message digest or fingerprint as well).
Verifying MD5 or SHA-1 digest is highly recommended when you download new software for your system.
In most of Linux distros [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Md5">MD5</a> and <a href="http://en.wikipedia.org/wiki/Sha-1">SHA-1</a> are cryptographic hash functions. They are deterministic procedures that take an arbitrary block of data as input and return a fixed-size bit string, the <em>hash value</em> (called <em>message digest</em> or <em>fingerprint</em> as well).</p>
<p>Verifying MD5 or SHA-1 digest is highly recommended when you download new software for your system.</p>
<p>In most of <strong>Linux</strong> distros the <code>md5sum</code> and <code>sha1sum</code> commands are available:</p>
<pre><code>$ md5sum ubuntu-9.04-desktop-i386.iso
66fa77789c7b8ff63130e5d5a272d67b  ubuntu-9.04-desktop-i386.iso
$ sha1sum ubuntu-9.04-desktop-i386.iso
19aabf327fdbde9e66db54dc04e3a83b92f70280  ubuntu-9.04-desktop-i386.iso
</code></pre>
<p><strong>Solaris</strong> (even version 10) doesn’t ship either with <code>md5sum</code> or <code>sha1sum</code> installed. However you can use <code>digest</code>:</p>
<pre><code>% /usr/bin/digest -a md5 GNUgcc.3.4.4.SPARC.64bit.Solaris.10.pkg.tgz
498c344fe2839631bb7cf4b869b7b830
% /usr/bin/digest -a sha1 GNUgcc.3.4.4.SPARC.64bit.Solaris.10.pkg.tgz
a8da8247900dd06a7000fd0e6d41f834d6ab3e40
</code></pre>
<p>And in <strong>Mac OS X</strong>, openssl is the appropriate tool:</p>
<pre><code>$ openssl md5 svnX_0.9.13.dmg
MD5(svnX_0.9.13.dmg)= 90c95c92fb466b2252f1694bf544a05d
$ openssl sha1 svnX_0.9.13.dmg
SHA1(svnX_0.9.13.dmg)= a6909991e4cf7422e52bae050f7c69975baf595e
</code></pre>
<img src="http://feeds.feedburner.com/~r/commandliners/~4/XttEo7B95Z4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://commandliners.com/2009/09/how-to-verify-md5-or-sha-1-digests/feed/</wfw:commentRss>
		<feedburner:origLink>http://commandliners.com/2009/09/how-to-verify-md5-or-sha-1-digests/</feedburner:origLink></item>
		<item>
		<title>Refreshing bash configuration</title>
		<link>http://feedproxy.google.com/~r/commandliners/~3/flBhBa-t6iA/</link>
		<comments>http://commandliners.com/2009/09/refreshing-bash-configuration/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 12:49:52 +0000</pubDate>
		<dc:creator>rafacas</dc:creator>
		
		<category><![CDATA[cmd]]></category>

		<category><![CDATA[shell]]></category>

		<category><![CDATA[bash]]></category>

		<category><![CDATA[bashrc]]></category>

		<category><![CDATA[configuration]]></category>

		<guid isPermaLink="false">http://commandliners.com/?p=1317</guid>
		<description><![CDATA[After writting some changes in the .bashrc file, you can reload it running this command:
$ source ~/.bashrc
or the even simpler
$ . ~/.bashrc
]]></description>
			<content:encoded><![CDATA[<p>After writting some changes in the .bashrc file, you can reload it running this command:</p>
<pre><code>$ source ~/.bashrc</code></pre>
<p>or the even simpler</p>
<pre><code>$ . ~/.bashrc</code></pre>
<img src="http://feeds.feedburner.com/~r/commandliners/~4/flBhBa-t6iA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://commandliners.com/2009/09/refreshing-bash-configuration/feed/</wfw:commentRss>
		<feedburner:origLink>http://commandliners.com/2009/09/refreshing-bash-configuration/</feedburner:origLink></item>
		<item>
		<title>Being repetitive</title>
		<link>http://feedproxy.google.com/~r/commandliners/~3/jKiEI6AT0TU/</link>
		<comments>http://commandliners.com/2009/09/being-repetitive/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 08:25:55 +0000</pubDate>
		<dc:creator>n0str0m0</dc:creator>
		
		<category><![CDATA[shell]]></category>

		<category><![CDATA[repeat]]></category>

		<category><![CDATA[yes]]></category>

		<guid isPermaLink="false">http://commandliners.com/?p=1260</guid>
		<description><![CDATA[yes confirms forever by showing y continuously. If followed by a parameter, it repeats the parameter.
$ yes
y
y
y
y
y
^C
$
It is useful when you are sure what you are doing. For instance, if you want to delete a set of write protected files:
$ yes &#124; rm file_proctected*.txt
Enjoy!
]]></description>
			<content:encoded><![CDATA[<p><code>yes</code> confirms forever by showing <b>y</b> continuously. If followed by a parameter, it repeats the parameter.</p>
<pre><code>$ yes
y
y
y
y
y
^C
$</code></pre>
<p>It is useful when you are sure what you are doing. For instance, if you want to delete a set of write protected files:</p>
<pre><code>$ yes | rm file_proctected*.txt</code></pre>
<p>Enjoy!</p>
<img src="http://feeds.feedburner.com/~r/commandliners/~4/jKiEI6AT0TU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://commandliners.com/2009/09/being-repetitive/feed/</wfw:commentRss>
		<feedburner:origLink>http://commandliners.com/2009/09/being-repetitive/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.892 seconds -->
