<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:planet="http://planet.intertwingly.net/" xmlns:indexing="urn:atom-extension:indexing" indexing:index="no"><access:restriction xmlns:access="http://www.bloglines.com/about/specs/fac-1.0" relationship="deny"/>
  <title>Planet Arch Linux</title>
  <updated>2012-02-12T23:43:25Z</updated>
  <generator uri="http://intertwingly.net/code/venus/">Venus</generator>
  <author>
    <name>Aaron Griffin</name>
    <email>aaron@archlinux.org</email>
  </author>
  <id>http://planet.archlinux.org/atom.xml</id>
  <link href="http://planet.archlinux.org/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://planet.archlinux.org" rel="alternate"/>

  <entry xml:lang="en">
    <id>http://allanmcrae.com/?p=1408</id>
    <link href="http://allanmcrae.com/2012/02/the-great-pacman-bug-hunt-of-2012/" rel="alternate" type="text/html"/>
    <title>The Great Pacman Bug Hunt of 2012</title>
    <summary>This is a story about a recent issue discovered in pacman, the Arch Linux package manager, and the difficulties we had hunting it down… The story is long, but so was the process of finding the bug. It all started on a warm summer’s night (in my timezone and location… – it was probably cold [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>This is a story about a recent issue discovered in <a href="http://www.archlinux.org/pacman/"><tt>pacman</tt></a>, the Arch Linux package manager, and the difficulties we had hunting it down…  The story is long, but so was the process of finding the bug.</p>
<p>It all started on a warm summer’s night (in my timezone and location… – it was probably cold and daytime for the other main pacman developers) with the reporting of <a href="https://bugs.archlinux.org/task/27805">FS#27805</a>: “[pacman] seg faults when removing firefox”.  Of course, my initial reaction was “bull shit” as we all know there are no bugs in the <tt>pacman</tt> code.  But this was only a couple of weeks since pacman-4.0 was moved into the Arch Linux <tt>[core]</tt> repo so there was an ever so slight possibility it was real.</p>
<p>Luckily for us, the user reporting the bug was very helpful and installed a version of pacman with debugging symbols and gave us a full backtrace.  It was very clear where the segfault was occuring:</p>
<p><code>#0 0xf7fbd4e7 in _alpm_pkg_cmp (p1=0x8128aa0, p2=0x0) at package.c:644</code></p>
<p>That function is called in the package removal process when we check that a file that is going to be removed with a package is not also owned by another package (which would require someone using -Sf when they should not).  If the package in the local database is the same as the one being removed, we do not need to run this check, and hence the test.  As you can see above, for some reason <tt>_alpm_pkg_cmp</tt> is being passed a null pointer as the package from the local database and KABOOM!</p>
<p>So the question was, how do we get a null value for the package from our local database?  Given <tt>pacman</tt> runs through the list of local packages on each package removal, this null entry must have been generated on the removal of the previous package.  Here is a bit of background on how package information is stored in <tt>pacman</tt>.  Package information is stored in a hash table that also provides access to the data as a linked list.  This provides us with fast look-up by a package’s name but also allows us to loop through the (generally sorted) package list.  Now the hash table code is fairly new (first introduced in <tt>pacman-3.5</tt>) and the removal of items from a hash with collision resolution done by linear probing is not straight forward, so there could be a bug. Dan pointed his finger my way as I wrote the original hash table code and I pointed my finger his way as he made optimizations to the removal part.  But it turns out that both of us were not thinking too hard.  It is the list that is being corrupted and that has items removed using code that has been around for years.  Despite that, the whole hash table and linked list removal code got an in depth review and no issues were found.</p>
<p>We were stumped. Looking at the the debug output from <tt>pacman</tt>, we could see that a file that actually did not exist on the system was being “removed” right before the crash, but that is not uncommon and appeared to be handled correctly so was unlikely to be the cause.  So back to the reporter to see if we could get more information to replicate.  He was very helpful and provided us with a copy of his local package database.  We created a chroot with exactly the same packages and had no luck replicating.  The user even provided us with a complete copy of his chroot where the error was occurring, but again there was no luck replicating.  It must be something specific to that users system.  Right?  Well, even re-extracting the tarball of the chroot the user provided us onto his own system made the bug go away.  All in all, a great candidate for being “not a bug”….</p>
<p>Until on another warm summers evening, while being my usual extremely helpful self on IRC, someone mentioned they were getting a segfault while removing packages.  A bug report was <a href="https://bugs.archlinux.org/task/28195">filed</a> and, again, the user was extremely helpful and the backtrace provided was exactly the same.  A core dump showed us there was definitely something wrong with the linked list.  Well…  bugger!  This bug appears real.  Again the red-herring of the removal of a non-existent file was shown in the debug log, but it would be very, very strange for that to break the linked list of package information so was ruled out.</p>
<p>It was time to find a reproducer!  So I created a chroot and set this script running:</p>
<p><code>ret=0<br/>
while (( ! ret )); do<br/>
  pkg=$(pacman -Sql extra | shuf -n1)<br/>
  pacman -S --noconfirm $pkg<br/>
  pacman -R --noconfirm -s $pkg<br/>
  ret=$?<br/>
done</code></p>
<p>Within five minutes I could replicate the segfault.  (It turns out I was very lucky as I ran the same script again for over four hours and did not strike the issue.)  Now it was time to get debugging!</p>
<p>The first thing I did was print some debugging info in the linked list node removal code, but for some reason the node removal just before the segfault did not print anything.  I was only printing information when removing a node from the middle of the list (because that is where the package causing this issue was located), but just to be sure I also added debug statements for the case of removing the head and tail nodes.  And then <tt>pacman</tt> told me it was removing a node from the end of the list…  “Why do you think that package is a the end of the list <tt>pacman</tt>?”, I asked.  “Because the head node’s <tt>prev</tt> entry tells me it IS the end of the list”, replied <tt>pacman</tt>.  “Oh, crap”, I said. “So it does!”  Something was clearly wrong here.</p>
<p>It was time to investigate all removal operations on that list.  So I printed the entire linked list before and after each package removal and found the error actually occurred before the removal operation even started.  The initial list of the local database passed to the removal operation was already broken with the pointer to the tail entry not pointing to the tail.  That was good to know as we had thoroughly reviewed the removal code and not found any issues.</p>
<p>This lead me to believe that the error must occur when reading in the local database.  Next step: print out the linked list at the end of reading in the local database.  But that was completely fine.  So somewhere between reading in the local database and using it, things got broken.  And, what do we do with the local database between reading it in and removing items from it?  The only place where we modify the local database between those points is when it gets sorted by the package names.  Sure enough, the pointer to the tail of the linked list is good going into the sort and bad coming out.</p>
<p>This limited the error to two functions: <tt>alpm_list_msort</tt> or <tt>alpm_list_mmerge</tt>. These implement a <a href="http://en.wikipedia.org/wiki/Merge_sort">merge sort</a>. Essentially <tt>alpm_list_msort</tt> recursively calls itself, dividing the list up into smaller pieces until it can not be divided any further and they are then they are merged in sorted order by <tt>alpm_list_mmerge</tt>. I had just started staring at the code when I saw something that seemed too obvious for such a hard to track down bug.  My exact words on IRC were “I think I can fix this…”.  And sure enough I could.</p>
<p>It turns out that when <tt>alpm_list_msort</tt> split a list into two, it did not set the pointer to the tail nodes in the two new lists correctly (or at all…).  So a <a href="http://projects.archlinux.org/pacman.git/commit/?id=fcbae69f">two line</a> addition and we have the bug fixed.  It turns out this bug had been present since the start of <a href="http://projects.archlinux.org/pacman.git/commit/?id=61670172">2007</a>.  So I am still slightly amazed that we did not see it before now and when it did appear that we got a second report of it so quickly.</p>
<p>And why could we not reproduce the issue even with a copy of a chroot where it was occurring?  It is entirely dependent on the order the directory entries are returned from the disk.  This determined which package was pointed to as the “tail” of the sorted package list.  The package incorrectly referred to as the tail had to be removed during a removal operation, and also not be the last package removed, to expose the bug.  Given most systems will have many hundreds of packages on them and removal operations tend to involve one or a few packages, this is a fairly rare occurrence.  But even if it occurred only a fraction of a percent of removal operations, I think we should have ran into this bug before now. I guess more people probably did experience the issue, but then could not immediately replicate and did not experience the issue again so did not report it.</p>
<p>And that is the end of the story of one of the most frustrating bugs I have ever managed to track down. A big thank you to the two users who installed versions of pacman with debug symbols and provided us backtraces, coredumps and entire chroots!  Without their help, we would probably still be not entirely convinced that the bug was real and it would still be hiding away in the pacman source code.</p></div>
    </content>
    <updated>2012-02-09T14:55:44Z</updated>
    <category term="Pacman"/>
    <author>
      <name>Allan</name>
    </author>
    <source>
      <id>http://allanmcrae.com</id>
      <link href="http://allanmcrae.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://allanmcrae.com" rel="alternate" type="text/html"/>
      <subtitle>One day this will feature a witty tagline…</subtitle>
      <title>Allan McRae</title>
      <updated>2012-02-12T23:43:05Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>tag:www.archlinux.org,2012-02-07:/news/minimum-kernel-requirement-2632/</id>
    <link href="http://www.archlinux.org/news/minimum-kernel-requirement-2632/" rel="alternate" type="text/html"/>
    <title>Minimum kernel requirement 2.6.32</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Allan McRae wrote:</p>
<p>From the glibc-2.15-5 package, the minimum required kernel version will
be increased from 2.6.27 to 2.6.32.  This reflects the oldest kernel
version still receiving updates upstream.</p></div>
    </summary>
    <updated>2012-02-07T10:24:13Z</updated>
    <author>
      <name>Allan McRae</name>
    </author>
    <source>
      <id>http://www.archlinux.org/news/</id>
      <link href="http://www.archlinux.org/news/" rel="alternate" type="text/html"/>
      <link href="http://www.archlinux.org/feeds/news/" rel="self" type="application/rss+xml"/>
      <subtitle>The latest and greatest news from the Arch Linux distribution.</subtitle>
      <title>Arch Linux: Recent news updates</title>
      <updated>2012-02-07T10:43:02Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://linuxtidbits.wordpress.com/?p=1793</id>
    <link href="http://linuxtidbits.wordpress.com/2012/02/06/the-a-to-b-of-mp3s/" rel="alternate" type="text/html"/>
    <title>The A to B of MP3s</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Being content with GUI ripping software was something that didn’t happen to me using Linux. I had expected my music player software to handle the task but I can’t remember any that did (not remembering to me is the same as working poorly I’m discovering). As for stand-alone rippers I haven’t heard any that were [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1793&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://openclipart.org/detail/27648/music-icon-by-minduka"><img alt="" class="alignright size-full wp-image-1788" src="http://linuxtidbits.files.wordpress.com/2012/02/minduka_music_icon-150.png?w=474" title="Minduka_Music_icon-150"/></a></p>
<p>Being content with GUI ripping software was something that didn’t happen to me using Linux.  I had expected my music player software to handle the task but I can’t remember any that did (not remembering to me is the same as working poorly I’m discovering).  As for stand-alone rippers I haven’t heard any that were notable.  Because I’m a big fan of software being efficient and to the point (do one thing and do it well) I was a bit nonplussed when I began wondering how I was going to import my CDs to MP3s.  A good number of tasks that I had regularly done through the GUI, I discovered are better done through the command line and though I haven’t tested every MP3-related application this looks like it may be true for them as well.  Here’s a complete-<i>ish</i> guide to ripping, organizing, repairing, and volume normalizing an audio collection well, done mostly through the CLI.</p>
<blockquote><p><strong>Rip. Mix. Burn.</strong> – Apple’s risky, sale-pitch returning to the technology scene in 2001.</p></blockquote>
<p><strong>Rip</strong></p>
<p>RipIT is program that can do just about anything that a GUI version to do.  It’s default options will be good enough for most cases (running <code><strong>ripit</strong></code> is all that is needed).  Having a greater amount of control however can save time in the end.  A wrapper script can be created to help with this:</p>
<p>The script below defines:</p>
<ul>
<li>The ripping preset (extreme here because storage space isn’t an issue).</li>
<li>The directory creation template.  RipIT goes online and gets the album tag information which can be used organize directories by tag (here the common <code>"$artist/$album"</code> is used”).</li>
<li>Looping (prompts when for new CD when ripping is done)</li>
<li>Ripping priority so RipIT plays nice with other programs.</li>
<li>Query the MusicBrainz music database instead as it is usually more accurate (editor approval required).</li>
<li>The Audio sub-directory to rip it (my Audio directory is divided as such: <code># ls ~/Audio/ Audiobooks  Music  Others  Podcasts</code>)</li>
</ul>
<pre><font face="monospace"><font color="#585858">#!/bin/bash</font>
<font color="#585858"># ripcd - Rip CDs with given presets (requires cd-discid, sendmail )</font>

<font color="#585858"># Audio directory</font>
<font color="#00AF00">aud_dir</font>=~/Audio

<font color="#585858"># Sub-directory selection</font>
<font color="#8700AF">printf</font> <font color="#8700AF">"</font><font color="#5F5FAF">Select directory to rip disk to:</font><font color="#5F87FF"><b>\n</b></font><font color="#8700AF">"</font>
<font color="#8700AF">select </font>aud_sub_dir <font color="#8700AF">in</font> <font color="#8700AF">"</font><font color="#008700">$aud_dir</font><font color="#8700AF">"</font>/*/
  <font color="#8700AF">do</font>
    <font color="#8700AF">test</font> <font color="#8700AF">-n</font> <font color="#8700AF">"</font><font color="#008700">$aud_sub_dir</font><font color="#8700AF">"</font> <font color="#8700AF">&amp;&amp;</font> <font color="#8700AF">break</font>
    <font color="#8700AF">echo</font><font color="#5F5FAF"> </font><font color="#8700AF">"</font><font color="#5F5FAF">Select 1, or 2...</font><font color="#8700AF">"</font>
  <font color="#8700AF">done</font>

<font color="#585858"># RipIT variables</font>
<font color="#00AF00">preset</font>=extreme  <font color="#585858"># MP3 encoding quality: extreme 256 kbps, Variable Bit Rate</font>
<font color="#8700AF">[</font> <font color="#8700AF">"</font><font color="#008700">$aud_sub_dir</font><font color="#8700AF">"</font> <font color="#8700AF">==</font> <font color="#5F5FAF">"~/Audio/Audiobooks/"</font> <font color="#8700AF">]</font> &amp;&amp; <font color="#00AF00">preset</font>=64 <font color="#585858"># 64 kbps for Audiobook</font>
<font color="#00AF00">dirtemplate</font>=<font color="#8700AF">'</font><font color="#5F5FAF">"$artist/$album"</font><font color="#8700AF">'</font>        <font color="#585858"># artist directory, sub-directory album</font>
<font color="#00AF00">playlist</font>=1                            <font color="#585858"># playlist creation (1 on, 0 off)</font>
<font color="#00AF00">loop</font>=1                                <font color="#585858"># loop RipIT for multiple CDs</font>
<font color="#00AF00">nicerip</font>=15                            <font color="#585858"># priority of RipIT</font>
<font color="#00AF00">coverpath</font>=/tmp/coverart.jpg           <font color="#585858"># coverart to embed in MP3s</font>
<font color="#8700AF">if </font><font color="#8700AF">[</font> <font color="#8700AF">-f</font> <font color="#8700AF">"</font><font color="#008700">$coverpath</font><font color="#8700AF">"</font> <font color="#8700AF">]</font><font color="#8700AF">;</font> <font color="#8700AF">then</font>          <font color="#585858"># option to add to embed coverart in MP3</font>
                                      <font color="#585858"># (appears to not work at this time)</font>
  <font color="#00AF00">covercmd</font>=<font color="#8700AF">"</font><font color="#5F5FAF">--coverart 1 --coverpath </font><font color="#8700AF">"</font><font color="#008700">$coverpath</font><font color="#8700AF">""</font>
<font color="#8700AF">fi</font>
<font color="#585858">#nointeraction="--nointeraction"       # use first CDDB entry and rip w/o prompt</font>

<font color="#585858"># RipIT variables for MusicBrainz database (if selected)</font>
<font color="#8700AF">read</font> <font color="#5F87FF"><b>-p</b></font> <font color="#8700AF">"</font><font color="#5F5FAF">Use MusicBrainz database? (y/n): </font><font color="#8700AF">"</font> yn
  <font color="#8700AF">case</font> <font color="#008700">$yn</font> <font color="#8700AF">in</font>
    <font color="#5F87FF"><b>[</b></font>Yy<font color="#5F87FF"><b>]</b></font>* <font color="#8700AF">)</font> <font color="#00AF00">mbname</font>=<font color="#8700AF">"</font><font color="#5F5FAF">Username</font><font color="#8700AF">"</font>            <font color="#585858"># MusicBrainz username (for submissions)</font>
            <font color="#00AF00">mbpass</font>=<font color="#8700AF">"</font><font color="#008700">$(</font><font color="#5F87FF"><b>password</b></font><font color="#008700">)</font><font color="#8700AF">"</font>  <font color="#585858"># Password</font>
            <font color="#00AF00">mb</font>=<font color="#8700AF">"</font><font color="#5F5FAF">--mb --mbname </font><font color="#8700AF">"</font><font color="#008700">$mbname</font><font color="#8700AF">"</font><font color="#5F5FAF"> --mbpass </font><font color="#8700AF">"</font><font color="#008700">$mbpass</font><font color="#8700AF">""</font><font color="#8700AF">;;</font>
  <font color="#8700AF">esac</font>

<font color="#585858"># Rip CD</font>
ripit                               <font color="#8700AF">\</font>
  <font color="#5F87FF"><b>--preset</b></font> <font color="#008700">$preset</font> <font color="#5F87FF"><b>--vbrmode</b></font> new    <font color="#8700AF">\</font>
  <font color="#5F87FF"><b>--outputdir</b></font> <font color="#8700AF">"</font><font color="#008700">$aud_sub_dir</font><font color="#8700AF">"</font>        <font color="#8700AF">\</font>
  <font color="#5F87FF"><b>--dirtemplate</b></font> <font color="#008700">$dirtemplate</font>        <font color="#8700AF">\</font>
  <font color="#5F87FF"><b>--playlist</b></font> <font color="#008700">$playlist</font>              <font color="#8700AF">\</font>
  <font color="#5F87FF"><b>--loop</b></font> <font color="#008700">$loop</font>                      <font color="#8700AF">\</font>
  <font color="#5F87FF"><b>--nicerip</b></font> <font color="#008700">$nicerip</font>                <font color="#8700AF">\</font>
  <font color="#008700">$covercmd</font>                         <font color="#8700AF">\</font>
  <font color="#008700">$nointeraction</font>                    <font color="#8700AF">\</font>
  <font color="#008700">$mb</font>
</font>
</pre>
<p><strong>Normalize</strong></p>
<p>Normalizing audio means to adjust the volume of audio files to a standard level.  This is often a good idea as average volumes levels per album usually differ to some degree.  A great program called <code>mp3gain</code> can do this easily.  I created a script for this that first normalizes by type (either Music collection, or Audiobook collection… since there are usually differing recording standards for each), then normalize relative to other albums in that catagory.  Here’s the script:</p>
<pre><font face="monospace"><font color="#585858">#!/bin/bash</font>
<font color="#585858"># normalize-audio - defines normalization levels in mp3s album-specifically</font>

<font color="#00AF00">audio_dir</font>=~/Audio                       <font color="#585858"># Audio directory</font>
<font color="#00AF00">sub_dir_inc</font>=<font color="#008700">(</font><font color="#5F87FF"><b>Audiobooks Music Podcasts</b></font><font color="#008700">)</font> <font color="#585858"># Sub-directories good to keep seperate</font>

<font color="#8700AF">cd</font> <font color="#8700AF">"</font><font color="#008700">$audio_dir</font><font color="#8700AF">"</font>
<font color="#8700AF">for </font>d <font color="#8700AF">in</font> <font color="#8700AF">"</font><font color="#008700">${</font><font color="#008700">sub_dir_inc</font><font color="#008700">[</font>@<font color="#008700">]</font><font color="#008700">}</font><font color="#8700AF">"</font>; <font color="#8700AF">do</font>
  <font color="#585858"># -a keep gain even relative to albums, -k lower to not clip, -T modify orgin</font>
  <font color="#585858"># -d adjust volume by decibel amount (volume low on PSP)</font>
  <font color="#8700AF">find</font> <font color="#8700AF">"</font><font color="#008700">$d</font><font color="#8700AF">"</font> -name <font color="#8700AF">"</font><font color="#5F5FAF">*.mp3</font><font color="#8700AF">"</font> -<font color="#8700AF">exec</font> mp3gain <font color="#8700AF">-a</font> <font color="#8700AF">-k</font> <font color="#8700AF">-T</font> <font color="#8700AF">-d</font> 2 <font color="#8700AF">"</font><font color="#5F5FAF">{}</font><font color="#8700AF">"</font> <font color="#5F87FF"><b>\;</b></font>
<font color="#8700AF">done</font>
</font>
</pre>
<p><strong>Repair</strong></p>
<p>Lame is used by RipIT for encoding of the audio files and does a very good job of it, occasionally though I’ve found it to make a mistake.  For these MP3s, previous rips, and for MP3s that have been previously downloaded it is good idea to check them and see if they are in good shape.  An excellent tool called <a href="http://mp3diags.sourceforge.net/" target="_blank">MP3 Diags</a> can test MP3s and fix common problems.  Repairing MP3s I’ve discovered makes inter-operability between different players play nice.  MP3 Diags also includes a very nice (though basic) tag editor.</p>
<p>And that will do it.</p>
<p>G2… out</p>
<br/>  <a href="http://feeds.wordpress.com/1.0/gocomments/linuxtidbits.wordpress.com/1793/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/linuxtidbits.wordpress.com/1793/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/linuxtidbits.wordpress.com/1793/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/linuxtidbits.wordpress.com/1793/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/linuxtidbits.wordpress.com/1793/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/linuxtidbits.wordpress.com/1793/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/linuxtidbits.wordpress.com/1793/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/linuxtidbits.wordpress.com/1793/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/linuxtidbits.wordpress.com/1793/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/linuxtidbits.wordpress.com/1793/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/linuxtidbits.wordpress.com/1793/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/linuxtidbits.wordpress.com/1793/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/linuxtidbits.wordpress.com/1793/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/linuxtidbits.wordpress.com/1793/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1793&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2012-02-07T03:39:51Z</updated>
    <category term="Command Line"/>
    <category term="Linux"/>
    <category term="Music"/>
    <category term="Script"/>
    <category term="ripit"/>
    <author>
      <name>Todd Partridge (Gen2ly)</name>
    </author>
    <source>
      <id>http://linuxtidbits.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/5ad9566326fdd6b7f4e8af74375a3cac?s=96&amp;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</logo>
      <link href="http://linuxtidbits.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://linuxtidbits.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://linuxtidbits.wordpress.com/osd.xml" rel="search" title="Linux Tidbits" type="application/opensearchdescription+xml"/>
      <link href="http://linuxtidbits.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Every letter has its place</subtitle>
      <title>Linux Tidbits</title>
      <updated>2012-02-12T23:43:18Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>tag:www.archlinux.org,2012-02-05:/news/libpnglibtiff-rebuilds-move-from-testing/</id>
    <link href="http://www.archlinux.org/news/libpnglibtiff-rebuilds-move-from-testing/" rel="alternate" type="text/html"/>
    <title>libpng/libtiff rebuilds move from [testing]</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Ionuț Mircea Bîru wrote:</p>
<p>Recent releases of libpng and libtiff have required a rebuild of all
packages that depend on them; these have just been moved from [testing]
to the main repos. As usual, remember to fully update your system and
check your unofficial packages (especially the cairo-* packages from
AUR) for required rebuilds.</p>
<p>The update might output messages similar to:</p>
<pre><code>g_module_open() failed for /usr/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so:
libpng14.so.14: cannot open shared object file: No such file or directory
</code></pre>
<p>These can be safely ignored if you use our official cairo package;
otherwise you may need to reinstall librsvg.</p></div>
    </summary>
    <updated>2012-02-05T11:43:39Z</updated>
    <author>
      <name>Ionuț Mircea Bîru</name>
    </author>
    <source>
      <id>http://www.archlinux.org/news/</id>
      <link href="http://www.archlinux.org/news/" rel="alternate" type="text/html"/>
      <link href="http://www.archlinux.org/feeds/news/" rel="self" type="application/rss+xml"/>
      <subtitle>The latest and greatest news from the Arch Linux distribution.</subtitle>
      <title>Arch Linux: Recent news updates</title>
      <updated>2012-02-07T10:43:02Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>http://blog.falconindy.com/articles/optmizing-bootup-with-mkinitcpio.html</id>
    <link href="http://blog.falconindy.com/articles/optmizing-bootup-with-mkinitcpio.html" rel="alternate" type="text/html"/>
    <title>Optimizing Bootup With mkinitcpio</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Recently, I’ve seen a bunch of questions to the tune of “how do I cut back on the number of modules in my initramfs?” To be brutally honest, this is sort of an annoying question. In general, the type of person who asks this question doesn’t understand what the autodetect hook is doing and fails to realize that it’s doing a 90% effective job of exactly this. lsinitcpio would have happily shown you exactly what’s on the image. In addition, this sort of mindless pruning doesn’t really cut back on boot time (stop using xz compression!) and only serves to remove functionality from your initramfs. In case you’re still bent on doing this the manual way, I’ll outline what’s involved.</p>
<h2>What’s it take to boot?</h2>
<p>Perhaps surprisingly little. In the simplest case, mounting your root partition requires drivers for:</p>
<ul>
	<li>storage bus (<span class="caps">PATA</span>, <span class="caps">SATA</span>, <span class="caps">SCSI</span>, etc)</li>
	<li>block device</li>
	<li>filesystem</li>
</ul>
<p>For purposes of simplicity, I’ll ignore things like mdadm, lvm, and crypto stacks. With only 3 modules (plus dependencies), the kernel is able to discover your storage bus, create a block device for the drives attached, and understand the underlying filesystem. It’s really that simple. In my case, if I didn’t have these boiled into my kernel, it’d be simply: ahci, sd_mod, and ext4.</p>
<h2>How do I know what I need?</h2>
<p>There’s a variety of tools at your disposal to figure this out. For starters, ‘mkinitcpio -M’ will scan your <span class="caps">PCI</span> bus and probe your root filesystem, returning a tidy list of modules, sans dependencies. You can be almost sure that you’ll find your answers in this list. This isn’t very useful though. You might not recognize these modules by name. So, take a look at something like ‘lspci -vk’. In particular, search for something like <span class="caps">SATA</span> or <span class="caps">PATA</span> in the output.</p>
<pre><code>
00:1f.2 SATA controller: Intel Corporation 82801JI (ICH10 Family) SATA AHCI Controller
        Subsystem: ASUSTeK Computer Inc. P5Q Deluxe Motherboard
        Flags: bus master, 66MHz, medium devsel, latency 0, IRQ 66
        I/O ports at 9c00 [size=8]
        I/O ports at 9880 [size=4]
        I/O ports at 9800 [size=8]
        I/O ports at 9480 [size=4]
        I/O ports at 9400 [size=32]
        Memory at f7dfc000 (32-bit, non-prefetchable) [size=2K]
        Capabilities: [80] MSI: Enable+ Count=1/16 Maskable- 64bit-
        Capabilities: [70] Power Management version 3
        Capabilities: [a8] SATA HBA v1.0
        Capabilities: [b0] PCI Advanced Features
        Kernel driver in use: ahci
</code>
</pre>
<p>This looks promising! It even tells you ‘ahci’ is in use. Add that to the pile. You might have a motherboard with both <span class="caps">PATA</span> and <span class="caps">SATA</span> connectors. Make sure you grab the driver for both. We can confirm which one is in use soon enough.</p>
<p>Figuring out your needed block device driver is actually not guaranteed to be straightforward. We can employ the use of udevadm to knowledgeably walk around sysfs, and in particular, walk up the chain from our root device to the <span class="caps">PCI</span> backplane. Assuming /dev/sda1 is your root device, check out the following:</p>
<pre><code>
$ udevadm info --attribute-walk -n /dev/sda1 | grep 'DRIVERS=="[^"]'
    DRIVERS=="sd"
    DRIVERS=="ahci"
</code>
</pre>
<p>This gives us confirmation that we chose wisely with ahci, and it points out ‘sd’. Based on what ‘mkinitcpio -M’ tells us, we can make an educated guess that this is the ‘sd_mod’ driver. Add that to the pile.</p>
<p>For your filesystem driver, it should literally be the name of the filesystem in use. There’s a few exceptions — reiser4 being one of them. Chances are if it’s not a 1:1 match, you’re already familiar with this particular gotcha.</p>
<h2>Alternative brute force method</h2>
<p>There’s another way of doing this with a bit less guessing involved. Simply make sure that your initramfs image is properly setup to boot (make sure it has udev and drivers for your keyboard), and reboot, appending ‘break=postmount’ to your kernel commandline. When you arrive at the rootfs shell prompt, run ‘lsmod’. Ignoring anything like usb input drivers, that’s what you need to boot. You’ll, of course, also see module dependencies listed. Modules like ahci use libahci for functionality shared elsewhere, and ext4 uses mbcache and jbd2.</p>
<h2>Trim the fat</h2>
<p>With your module list ready to go, it’s time to tear apart mkinitcpio.conf. Since you’re explicitly finding and loading modules, you’re going to be very light on hooks. Based on the above, you could put together the following config:</p>
<pre><code>
#
# /etc/mkinitcpio.conf
#

MODULES="ahci sd_mod ext4"
BINARIES="fsck fsck.ext4"
HOOKS="base"
</code>
</pre>
<p>And that’s it. We don’t need udev, since anything in the <span class="caps">MODULES</span> variable will be explicitly loaded. mkinitcpio is also kind enough to do dependency resolution for us. I still advise you to keep (or add?) fsck to your image, as checking your filesystem before it’s even mounted is greatly beneficial. I’ll leave it as an exercise to the reader to figure out additional modules for things like: usb keyboards or raid/lvm root devices.</p>
<p>For your maiden voyage, I highly recommend creating a separate image in case you’ve forgotten something.</p>
<pre><code>
# mkinitcpio -g /boot/initramfs-linux-tiny.img
</code>
</pre>
<p>Either add another entry to your bootloader, or feel free to modify it on the fly at bootup. If this image isn’t sufficient and init won’t mount your root, go back through sysfs another time and check your work. Pick through the output of ‘mkinitcpio -M’ and check over what the modules do with ‘modinfo’. The description may not be very useful, but the path within the module directory can be very telling.</p>
<p>That’s pretty much all there is to it. A little bit of understanding about your hardware and some familiarity with the common kernel modules can go a long way.</p></div>
    </summary>
    <updated>2012-02-04T08:00:00Z</updated>
    <author>
      <name>Dave Reisner</name>
    </author>
    <source>
      <id>http://blog.falconindy.com/</id>
      <link href="http://blog.falconindy.com/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/Ls/etcMore" rel="self" type="application/rss+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <title>ls /etc/ | more (Dave Reisner)</title>
      <updated>2012-02-05T02:13:15Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://kmkeen.com/autocrostic/2012-02-03-11-00-04-555.html</id>
    <link href="http://kmkeen.com/autocrostic/2012-02-03-11-00-04-555.html" rel="alternate" type="text/html"/>
    <title>AutoCrostic</title>
    <summary>A tool for a very specific sort of word puzzle.</summary>
    <updated>2012-02-03T11:00:04Z</updated>
    <source>
      <id>http://kmkeen.com</id>
      <author>
        <name>Kyle Keen</name>
      </author>
      <link href="http://kmkeen.com" rel="alternate" type="text/html"/>
      <link href="http://kmkeen.com/rss.xml" rel="self" type="application/rss+xml"/>
      <subtitle>Kyle Keen hacking life, hardware and software.</subtitle>
      <title>kmkeen.com</title>
      <updated>2012-02-12T23:43:15Z</updated>
    </source>
  </entry>

  <entry>
    <id>https://bbs.archlinux.org/viewtopic.php?id=134553</id>
    <link href="https://bbs.archlinux.org/viewtopic.php?id=134553" rel="alternate" type="text/html"/>
    <title>2012.01-1 archboot "2k12-R1" ISO hybrid image released</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Hi Arch community,</p><p>Arch Linux (archboot creation tool) 2012.01-1, "2k12-R1" has been released.<br/>To avoid confusion, this is not an official arch linux iso release!</p><p>Homepage and for more information on archboot:<br/><a href="http://wiki.archlinux.org/index.php/Archboot">http://wiki.archlinux.org/index.php/Archboot</a></p><p>Summary:<br/>- pacman4 introduction, new LTS 3.0.x kernel and uefi shell</p><p>Hybrid image file and torrent is provided, which include<br/>i686 and x86_64 core repository. Please check md5sum before using it.</p><p>Hybrid image file is a standard CD-burnable image and also a raw disk image.<br/>    - Can be burned to CD(RW) media using most CD-burning utilities.<br/>    - Can be raw-written to a drive using 'dd' or similar utilities.<br/>      This method is intended for use with USB thumb drives.</p><p>Please get it from your favorite arch linux mirror:<br/><a href="https://downloads.archlinux.de/iso/archboot/2012.01/">https://downloads.archlinux.de/iso/archboot/2012.01/</a><br/>&lt;yourmirror&gt;/iso/archboot/2012.01/</p><p>/boot for PXE/Rescue files are provided here:<br/><a href="https://downloads.archlinux.de/iso/archboot/2012.01/boot">https://downloads.archlinux.de/iso/arch … 12.01/boot</a><br/>&lt;yourmirror&gt;/iso/archboot/2012.01/boot</p><br/><p>Changelog:</p><p>GENERAL:<br/>- kernel 3.2.1 / LTS kernel 3.0.17<br/>- pacman 4.0.1 usage<br/>- RAM recommendations: 512 MB</p><p>Kernel changes:<br/>- bump to latest 3.2.x series and bump lts to latest 3.0.x series</p><p>Removed features:<br/>- None</p><p>Environment changes:<br/>- added pacman4<br/>- bumped lts kernel<br/>- added kmod insted of module-init-tools<br/>- synced with latest mkinitcpio changes<br/>- added uefi shell</p><p>hwdetect changes:<br/>- added fsck hook<br/>- added shutdown hook</p><p>setup changes:<br/>- adopt pacman4 changes<br/>- adopt lts kernel changes<br/>- added btrfs compression option<br/>- allow btrfs on lts kernel<br/>- added separate /usr detection<br/>- fixed manual mounting of install media<br/>- try to detect (using dmidecode) whether the UEFI boot has occured in a Mac </p><p>quickinst changes:<br/>- adopt pacman4 changes<br/>- adopt lts kernel changes</p><p>Further documentation can be found on-disk and on the wiki.<br/>Have fun!</p><p>greetings<br/>tpowa</p></div>
    </summary>
    <updated>2012-01-28T07:35:21Z</updated>
    <author>
      <name>tpowa</name>
      <uri>https://bbs.archlinux.org/profile.php?id=1232</uri>
    </author>
    <source>
      <id>https://bbs.archlinux.org/index.php</id>
      <link href="https://bbs.archlinux.org/extern.php?action=feed&amp;fid=24&amp;type=atom&amp;order=posted&amp;show=10" rel="self" type="application/atom+xml"/>
      <link href="https://bbs.archlinux.org/index.php" rel="alternate" type="text/html"/>
      <title>Arch Linux Forums / Announcements, Package &amp; Security Advisories</title>
      <updated>2012-01-28T07:35:21Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://allanmcrae.com/?p=1399</id>
    <link href="http://allanmcrae.com/2012/01/disabling-junk-filtering-with-hotmail/" rel="alternate" type="text/html"/>
    <title>Disabling Junk Filtering With Hotmail</title>
    <summary>What many people do not realize is that my archlinux.org email address is really just an alias for a Hotmail account. That’s right… I do my Linux development with a Hotmail address! Deal with it… I am not changing. Recently I got annoyed at the Webmail extension for Thunderbird as it breaks every time the [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>What many people do not realize is that my archlinux.org email address is really just an alias for a Hotmail account.   That’s right…  I do my Linux development with a Hotmail address!  Deal with it… I am not changing.</p>
<p>Recently I got annoyed at the Webmail extension for Thunderbird as it breaks every time the Hotmail site makes a change or a new version of Thunderbird is released (so generally not the extension authors fault).  The final straw was when attachments were only being partially downloaded, which I only noticed when some photos I was sent had black bars on them.  Then I checked my WordPress backups that are automatically emailed to me and, sure enough, I could not open the zip file because it was corrupt.</p>
<p>Fortunately, your Hotmail emails can be retrieved by POP3 and this had become an option for me as my work no longer blocks that port.  Unfortunately, that only downloads emails in your Inbox and not your Junk folder.  That should be easy to work around…  Just turn of Hotmail’s junk filtering.  Right?  Well, no…  Hotmail has two junk email settings – “Standard” and “Exclusive” – and neither of these is equivalent to “Off”.  The “Standard” filter manages to catch about half of the spam I receive and a bunch of valid emails from mailing lists I am subscribed to.  I could log into Hotmail every so often and flag the valid emails as not junk (annoying), but Hotmail will delete anything in your Junk folder after ten days (really annoying…).</p>
<p>How to work around this crap? I found in Hotmail’s options there is a item to set up “Rules for sorting new messages”.  It appears if an email matches one of these rules, the rule is enacted without running the spam filter.  So the spam filter can be disabled by adding the following rule:  Move messages to Inbox if sender’s address contains “@”.</p>
<p>That means I am now receiving all of my emails.  So, if you send me an email and I do not respond, it is now definitely because I am ignoring you.</p></div>
    </content>
    <updated>2012-01-26T10:31:54Z</updated>
    <category term="General Rant"/>
    <author>
      <name>Allan</name>
    </author>
    <source>
      <id>http://allanmcrae.com</id>
      <link href="http://allanmcrae.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://allanmcrae.com" rel="alternate" type="text/html"/>
      <subtitle>One day this will feature a witty tagline…</subtitle>
      <title>Allan McRae</title>
      <updated>2012-02-12T23:43:05Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://godane.wordpress.com/?p=444</id>
    <link href="http://godane.wordpress.com/2012/01/24/slitaz-tank-2012-01-24-release/" rel="alternate" type="text/html"/>
    <title>slitaz-tank 2012-01-24 release</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Its been 4 months since i last release a iso. Here is my torrent iso: http://people.slitaz.org/~godane/slitaz-tank-2012-01-24.torrent Iso is 367mb. Kernel is update to 3.2.1. Also of other updates are in iso also. I sadly don’t know all of them. root password is root tux password is tux Login in as root and use local-mirror on [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=godane.wordpress.com&amp;blog=5495455&amp;post=444&amp;subd=godane&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Its been 4 months since i last release a iso. Here is my torrent iso: <a href="http://people.slitaz.org/~godane/slitaz-tank-2012-01-24.torrent">http://people.slitaz.org/~godane/slitaz-tank-2012-01-24.torrent</a></p>
<p>Iso is 367mb. Kernel is update to 3.2.1. Also of other updates are in iso also. I sadly don’t know all of them.</p>
<p>root password is root<br/>
tux password is tux</p>
<p>Login in as root and use local-mirror on in command line to use my local mirror sites. I added support for piratebox.lan these last few days.</p>
<p>I hope this helps. </p>
<p>PS Please download and seed this. Heck I don’t even know if deluge is going to willing to seed so please hang in there.</p>
<br/>  <a href="http://feeds.wordpress.com/1.0/gocomments/godane.wordpress.com/444/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/godane.wordpress.com/444/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/godane.wordpress.com/444/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/godane.wordpress.com/444/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/godane.wordpress.com/444/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/godane.wordpress.com/444/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/godane.wordpress.com/444/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/godane.wordpress.com/444/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/godane.wordpress.com/444/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/godane.wordpress.com/444/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/godane.wordpress.com/444/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/godane.wordpress.com/444/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/godane.wordpress.com/444/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/godane.wordpress.com/444/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=godane.wordpress.com&amp;blog=5495455&amp;post=444&amp;subd=godane&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2012-01-24T10:56:45Z</updated>
    <category term="release"/>
    <category term="slitaz"/>
    <category term="slitaz-modular"/>
    <author>
      <name>godane</name>
    </author>
    <source>
      <id>http://godane.wordpress.com</id>
      <logo>http://s2.wp.com/i/buttonw-com.png</logo>
      <link href="http://godane.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://godane.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://godane.wordpress.com/osd.xml" rel="search" title="Godane's Development Blog" type="application/opensearchdescription+xml"/>
      <link href="http://godane.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Just another WordPress.com weblog</subtitle>
      <title>Godane's Development Blog</title>
      <updated>2012-02-12T23:43:21Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>tag:www.archlinux.org,2012-01-23:/news/arch-linux-fosdem-2012/</id>
    <link href="http://www.archlinux.org/news/arch-linux-fosdem-2012/" rel="alternate" type="text/html"/>
    <title>Arch Linux @ FOSDEM 2012</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Dieter Plaetinck wrote:</p>
<p>The <a href="http://fosdem.org">FOSDEM</a> conference takes place on 4/5 February in Brussels, Belgium and our attendance this year is bigger than ever.
On the <a href="https://wiki.archlinux.org/index.php/FOSDEM">list of Archers coming</a> we find developers Роман Кирилич (Roman Kyrylych), Tom Gundersen, Thomas Bächler, Jan Steffens, Pierre Schmitz and myself.</p>
<p>We're putting together meetups on Friday afternoon, evening and Saturday evening.  Our program is not definitive yet, so to stay up to date (or make suggestions) check the <a href="https://wiki.archlinux.org/index.php/FOSDEM#2012">wiki page</a> or the <a href="http://mailman.archlinux.org/pipermail/arch-events/2012-January/000443.html">meetups thread</a> on the <a href="http://mailman.archlinux.org/mailman/listinfo/arch-events">arch-events mailing list</a>.</p>
<p>Hope to see you there!</p></div>
    </summary>
    <updated>2012-01-23T13:37:22Z</updated>
    <author>
      <name>Dieter Plaetinck</name>
    </author>
    <source>
      <id>http://www.archlinux.org/news/</id>
      <link href="http://www.archlinux.org/news/" rel="alternate" type="text/html"/>
      <link href="http://www.archlinux.org/feeds/news/" rel="self" type="application/rss+xml"/>
      <subtitle>The latest and greatest news from the Arch Linux distribution.</subtitle>
      <title>Arch Linux: Recent news updates</title>
      <updated>2012-02-07T10:43:02Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>tag:www.archlinux.org,2012-01-21:/news/kmod-replaces-module-init-tools/</id>
    <link href="http://www.archlinux.org/news/kmod-replaces-module-init-tools/" rel="alternate" type="text/html"/>
    <title>kmod replaces module-init-tools</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Dave Reisner wrote:</p>
<p>With module-init-tools being declared a dead project by its current maintainer, a new project has stepped up to take its place: kmod. This is intended to be a drop-in replacement, though deprecated functionality in module-init-tools has not been reimplemented.</p>
<p>If, upon upgrade, pacman moves <code>/etc/modprobe.d/modprobe.conf</code> to a .pacsave, you should move it back. This file, and any other config read by module-init-tools, is still read by kmod. However, the kmod package will no longer include a blank config file. You'll find the same (if not more) documentation in the manpages and --help output for the binaries.</p></div>
    </summary>
    <updated>2012-01-21T20:18:01Z</updated>
    <author>
      <name>Dave Reisner</name>
    </author>
    <source>
      <id>http://www.archlinux.org/news/</id>
      <link href="http://www.archlinux.org/news/" rel="alternate" type="text/html"/>
      <link href="http://www.archlinux.org/feeds/news/" rel="self" type="application/rss+xml"/>
      <subtitle>The latest and greatest news from the Arch Linux distribution.</subtitle>
      <title>Arch Linux: Recent news updates</title>
      <updated>2012-02-07T10:43:02Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://archlinux.me/dusty/?p=551</id>
    <link href="http://archlinux.me/dusty/2012/01/20/learning-hg-as-a-git-user/" rel="alternate" type="text/html"/>
    <title>Learning hg as a git user</title>
    <summary>As my friend, Jason Chu recently noted, I am primarily a git user who has discovered a need to understand and use Mercurial. I am trying to refrain from judgment on Mercurial, as I’m easily bored by bikeshed discussions and holy wars. I have a pragmatic “use what you like and let me use what [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>As my friend, Jason Chu <a href="http://xentac.net/2012/01/19/the-real-difference-between-git-and-mercurial.html">recently noted</a>, I am primarily a git user who has discovered a need to understand and use Mercurial. I am trying to refrain from judgment on Mercurial, as I’m easily bored by bikeshed discussions and holy wars. I have a pragmatic “use what you like and let me use what I like” philosophy, but when you are interacting with other people’s code, you occasionally have to use what they like.</p>
<p>I have read several articles that I do not intend to link to discussing the differences, and cheat sheets of hg equivalents of common git commands. These are utterly useless. Mercurial and git have different design philosophies, as Jason noted, even though the end result of their usage is much the same. If you’re comfortable with git, and interested in learning Mercurial, you may find my own eureka moment helpful.</p>
<p><strong><code>hg commit</code> is not the same as <code>git commit</code>.</strong></p>
<p>Most comparisons of git and hg do not notice this distinction, but I was really puzzled by how hg could be more powerful than Subversion and supposedly equally powerful to my beloved git until I came to this realization.</p>
<p>In git, when you make a commit, you are creating local history that can be easily changed, modified, or ratified. You can rebase over those changes as many times as you like. You can use git commit –amend to change the commit or add changes to it. The history is not remotely considered “permanent” until you push it to a public repo, and even then, there are times when it is acceptable to rewrite it.</p>
<p>Conversely, in hg, when you commit, you are doing what the word actually says: committing. You are saying “this commit looks the way I want it to, I am finished with it.” You may not be pushing the commit to a remote repo any time soon, you may not be publishing it, but you have written in sandstone that this commit is complete.</p>
<p>I say written in sandstone, rather than stone because there are a variety of hg commands and extensions that allow local history editing, rebasing, and rollbacks. I haven’t learned how fluid these extensions are compared to equivalent history modification in git, but the feeling I am getting is that such changes would be considered much more invasive in hg than in git. History editing is a third party extension; this says to me “not officially supported” (as compared to built-in extensions like Mercurial queues). Mercurial typically desires us to think of a commit as an object that is permanently in the history. Many of the other slightly-deeper-than-cosmetic differences between the two systems seem to stem from this same basic difference.</p>
<p>In git, I have gotten quite used to coding first, and then creating an appropriate history later. There are numerous other potential workflows with git, but that’s the one I like. At first, I thought this was impossible or very difficult with Mercurial. However, when I realized that “commit” falls somewhere <em>between</em> the commands “commit” and “push” in git, things started to fall into place.</p>
<p>Mercurial has a powerful tool called queues that allow you to manipulate history to your heart’s content before you call commit. I’ve been using these effectively to create a workflow that I am comfortable with. It’s not the same as what I’d do in git, not remotely, but the overall outcome is similar.</p>
<p>A related basic understanding that is a little better documented than the difference between <code>hg commit</code> and <code>git commit</code> is the following:</p>
<p><strong><code>hg branch</code> is not the same as <code>git branch</code>.</strong></p>
<p>Once again, <code>hg branch</code> lies somewhere between <code>git branch</code> and <code>git push origin</code>. When you call <code>hg branch</code>, you are stating an intent that the branch will be public. In git, you can have as many unpublished branches as you want. In Mercurial, this behavior is better achieved by the use of bookmarks, although I’ve found that Mercurial queues are easier to work with.</p>
<p>There are many tutorials for new hg users coming from a svn background, and a few tutorials for those coming from a git background. If you are hoping to learn Mercurial effectively, I suggest avoiding most of those options. It is much better to study Mercurial from the perspective of a programmer who hasn’t seen version control before. Such coders don’t exist (I hope!), but this attitude allows you to learn how the new system should be used, not how to make it behave like a system you are previously used to.</p>
<p>For mercurial basics, I strongly recommend <a href="http://hginit.com/">http://hginit.com/</a>, an irreverent and entertaining tutorial on the simpler concepts.</p>
<p>I had a lot of trouble understanding hg queues until I read <a href="http://hgbook.red-bean.com/read/managing-change-with-mercurial-queues.html">the hg book chapter on the topic</a>  I intend to read the entire red-bean book at some point, as it appears to be much more coherent than the official Mercurial documentation. Now that I’ve been playing with hg queues for a day or so, I have come to understand that they can cover several common git tasks that appear to be missing from hg, including stashing, rebase -i, and similar. The key takeaway is you don’t commit your queues until you are quite certain you want them to become permanent history.</p>
<p>I haven’t yet figured out just when to choose hg queues over hg bookmarks, but a good read for getting used to hg bookmarks can be found <a href="http://blingcode.blogspot.com/2010/12/working-in-git-to-working-in-mercurial.html">here</a>.</p>
<p>I strongly recommend enabling the <a href="http://mercurial.selenic.com/wiki/HgkExtension">hgk extension</a> Just add the following to your ~/.hgrc. This will enable an <code>hg view</code> command that is more similar to <code>gitk</code> than it should be, considering the basic differences between branches in the two systems. </p>
<pre>[extensions]
hgk =
mq =
bookmarks =
</pre>
<p>(The second line is for enabling hg queues and third enables bookmarks.)</p>
<p>Overall, I suspect that I will always prefer git to hg. However, unlike subversion, I think Mercurial does supply me with tools I need to work effectively. Different tools from git, but effective nonetheless.</p>
<p>One beef I have with both git and Mercurial is that they violate the “one best way to do things” principle which makes learning, communicating about, and deciding how to use them more complicated than it needs to be.</p></div>
    </content>
    <updated>2012-01-20T16:32:29Z</updated>
    <category term="Uncategorized"/>
    <category term="git"/>
    <category term="mercurial"/>
    <author>
      <name>dusty</name>
    </author>
    <source>
      <id>http://archlinux.me/dusty</id>
      <link href="http://archlinux.me/dusty/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://archlinux.me/dusty" rel="alternate" type="text/html"/>
      <subtitle>A little more of everything, please</subtitle>
      <title>Dusty's Diverse Domain</title>
      <updated>2012-01-20T17:13:18Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://linuxtidbits.wordpress.com/?p=1762</id>
    <link href="http://linuxtidbits.wordpress.com/2012/01/20/bash-script-templates/" rel="alternate" type="text/html"/>
    <title>Bash Script Templates</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">The basic and expanded templates I use to begin most of my bash scripts: template-basic #!/bin/bash # scriptname - description of script scrpt=${0##*/}  # script name # Display usage if no parameters given if [[ -z "$@" ]]; then   echo " $scrpt &lt;input&gt; - description"   exit fi # Text color variables txtund=$(tput sgr 0 1)          # Underline txtbld=$(tput bold)             # Bold bldred=${txtbld}$(tput setaf 1) #  red bldblu=${txtbld}$(tput setaf 4) #  blue bldwht=${txtbld}$(tput setaf 7) #  white txtrst=$(tput [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1762&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://linuxtidbits.files.wordpress.com/2011/12/shellscript.png"><img alt="" class="alignright wp-image-1666" height="32" src="http://linuxtidbits.files.wordpress.com/2011/12/shellscript.png?w=32&amp;h=32" title="shellscript" width="32"/></a>The basic and expanded templates I use to begin most of my bash scripts:</p>
<p><strong>template-basic</strong></p>
<pre style="overflow: auto; width: auto; border: solid #c8c8c8; background-color: #dddddf; font-size: 1em; white-space: pre; border-width: .1em .1em .1em .8em; padding: .2em .6em;"><font face="monospace"><font color="#585858">#!/bin/bash</font>
<font color="#585858"># scriptname - description of script</font>

<font color="#00AF00">scrpt</font>=<font color="#008700">${</font><font color="#008700">0</font><font color="#8700AF">##</font>*/<font color="#008700">}</font>  <font color="#585858"># script name</font>

<font color="#585858"># Display usage if no parameters given</font>
<font color="#8700AF">if </font><font color="#5F87FF"><b>[[</b></font> <font color="#8700AF">-z</font> <font color="#8700AF">"</font><font color="#008700">$@</font><font color="#8700AF">"</font> <font color="#5F87FF"><b>]]</b></font><font color="#8700AF">;</font> <font color="#8700AF">then</font>
  <font color="#8700AF">echo</font><font color="#5F5FAF"> </font><font color="#8700AF">"</font><font color="#5F5FAF"> </font><font color="#008700">$scrpt</font><font color="#5F5FAF"> &lt;input&gt; - description</font><font color="#8700AF">"</font>
  <font color="#8700AF">exit</font>
<font color="#8700AF">fi</font>

<font color="#585858"># Text color variables</font>
<font color="#00AF00">txtund</font>=<font color="#008700">$(</font><font color="#5F87FF"><b>tput sgr </b></font>0<font color="#5F87FF"><b> </b></font>1<font color="#008700">)</font>          <font color="#585858"># Underline</font>
<font color="#00AF00">txtbld</font>=<font color="#008700">$(</font><font color="#5F87FF"><b>tput bold</b></font><font color="#008700">)</font>             <font color="#585858"># Bold</font>
<font color="#00AF00">bldred</font>=<font color="#008700">${</font><font color="#008700">txtbld</font><font color="#008700">}</font><font color="#008700">$(</font><font color="#5F87FF"><b>tput setaf </b></font>1<font color="#008700">)</font> <font color="#585858">#  red</font>
<font color="#00AF00">bldblu</font>=<font color="#008700">${</font><font color="#008700">txtbld</font><font color="#008700">}</font><font color="#008700">$(</font><font color="#5F87FF"><b>tput setaf </b></font>4<font color="#008700">)</font> <font color="#585858">#  blue</font>
<font color="#00AF00">bldwht</font>=<font color="#008700">${</font><font color="#008700">txtbld</font><font color="#008700">}</font><font color="#008700">$(</font><font color="#5F87FF"><b>tput setaf </b></font>7<font color="#008700">)</font> <font color="#585858">#  white</font>
<font color="#00AF00">txtrst</font>=<font color="#008700">$(</font><font color="#5F87FF"><b>tput sgr0</b></font><font color="#008700">)</font>             <font color="#585858"># Reset</font>
<font color="#00AF00">info</font>=<font color="#008700">${</font><font color="#008700">bldwht</font><font color="#008700">}</font>*<font color="#008700">${</font><font color="#008700">txtrst</font><font color="#008700">}</font>        <font color="#585858"># Feedback</font>
<font color="#00AF00">pass</font>=<font color="#008700">${</font><font color="#008700">bldblu</font><font color="#008700">}</font>*<font color="#008700">${</font><font color="#008700">txtrst</font><font color="#008700">}</font>
<font color="#00AF00">warn</font>=<font color="#008700">${</font><font color="#008700">bldred</font><font color="#008700">}</font>*<font color="#008700">${</font><font color="#008700">txtrst</font><font color="#008700">}</font>
<font color="#00AF00">ques</font>=<font color="#008700">${</font><font color="#008700">bldblu</font><font color="#008700">}</font>?<font color="#008700">${</font><font color="#008700">txtrst</font><font color="#008700">}</font>

</font></pre>
<p><strong>template</strong></p>
<pre style="overflow: auto; width: auto; border: solid #c8c8c8; background-color: #dddddf; font-size: 1em; white-space: pre; border-width: .1em .1em .1em .8em; padding: .2em .6em;"><font face="monospace"><font color="#585858">#!/bin/bash</font>
<font color="#585858"># scriptname - description of script</font>

<font color="#00AF00">scrpt</font>=<font color="#008700">${</font><font color="#008700">0</font><font color="#8700AF">##</font>*/<font color="#008700">}</font>  <font color="#585858"># script name</font>

<font color="#585858"># Display usage if no parameters given</font>
<font color="#8700AF">if </font><font color="#5F87FF"><b>[[</b></font> <font color="#8700AF">-z</font> <font color="#8700AF">"</font><font color="#008700">$@</font><font color="#8700AF">"</font> <font color="#5F87FF"><b>]]</b></font><font color="#8700AF">;</font> <font color="#8700AF">then</font>
  <font color="#8700AF">echo</font><font color="#5F5FAF"> </font><font color="#8700AF">"</font><font color="#5F5FAF"> </font><font color="#008700">$scrpt</font><font color="#5F5FAF"> &lt;input&gt; - description</font><font color="#8700AF">"</font>
  <font color="#8700AF">exit</font>
<font color="#8700AF">fi</font>

<font color="#585858"># Text color variables</font>
<font color="#00AF00">txtred</font>=<font color="#8700AF">'</font><font color="#5F5FAF">\e[0;31m</font><font color="#8700AF">'</font>       <font color="#585858"># red</font>
<font color="#00AF00">txtgrn</font>=<font color="#8700AF">'</font><font color="#5F5FAF">\e[0;32m</font><font color="#8700AF">'</font>       <font color="#585858"># green</font>
<font color="#00AF00">txtylw</font>=<font color="#8700AF">'</font><font color="#5F5FAF">\e[0;33m</font><font color="#8700AF">'</font>       <font color="#585858"># yellow</font>
<font color="#00AF00">txtblu</font>=<font color="#8700AF">'</font><font color="#5F5FAF">\e[0;34m</font><font color="#8700AF">'</font>       <font color="#585858"># blue</font>
<font color="#00AF00">txtpur</font>=<font color="#8700AF">'</font><font color="#5F5FAF">\e[0;35m</font><font color="#8700AF">'</font>       <font color="#585858"># purple</font>
<font color="#00AF00">txtcyn</font>=<font color="#8700AF">'</font><font color="#5F5FAF">\e[0;36m</font><font color="#8700AF">'</font>       <font color="#585858"># cyan</font>
<font color="#00AF00">txtwht</font>=<font color="#8700AF">'</font><font color="#5F5FAF">\e[0;37m</font><font color="#8700AF">'</font>       <font color="#585858"># white</font>
<font color="#00AF00">bldred</font>=<font color="#8700AF">'</font><font color="#5F5FAF">\e[1;31m</font><font color="#8700AF">'</font>       <font color="#585858"># red    - Bold</font>
<font color="#00AF00">bldgrn</font>=<font color="#8700AF">'</font><font color="#5F5FAF">\e[1;32m</font><font color="#8700AF">'</font>       <font color="#585858"># green</font>
<font color="#00AF00">bldylw</font>=<font color="#8700AF">'</font><font color="#5F5FAF">\e[1;33m</font><font color="#8700AF">'</font>       <font color="#585858"># yellow</font>
<font color="#00AF00">bldblu</font>=<font color="#8700AF">'</font><font color="#5F5FAF">\e[1;34m</font><font color="#8700AF">'</font>       <font color="#585858"># blue</font>
<font color="#00AF00">bldpur</font>=<font color="#8700AF">'</font><font color="#5F5FAF">\e[1;35m</font><font color="#8700AF">'</font>       <font color="#585858"># purple</font>
<font color="#00AF00">bldcyn</font>=<font color="#8700AF">'</font><font color="#5F5FAF">\e[1;36m</font><font color="#8700AF">'</font>       <font color="#585858"># cyan</font>
<font color="#00AF00">bldwht</font>=<font color="#8700AF">'</font><font color="#5F5FAF">\e[1;37m</font><font color="#8700AF">'</font>       <font color="#585858"># white</font>
<font color="#00AF00">txtund</font>=<font color="#008700">$(</font><font color="#5F87FF"><b>tput sgr </b></font>0<font color="#5F87FF"><b> </b></font>1<font color="#008700">)</font>  <font color="#585858"># Underline</font>
<font color="#00AF00">txtbld</font>=<font color="#008700">$(</font><font color="#5F87FF"><b>tput bold</b></font><font color="#008700">)</font>     <font color="#585858"># Bold</font>
<font color="#00AF00">txtrst</font>=<font color="#8700AF">'</font><font color="#5F5FAF">\e[0m</font><font color="#8700AF">'</font>          <font color="#585858"># Text reset</font>

<font color="#585858"># Feedback indicators</font>
<font color="#00AF00">info</font>=<font color="#008700">${</font><font color="#008700">bldwht</font><font color="#008700">}</font>*<font color="#008700">${</font><font color="#008700">txtrst</font><font color="#008700">}</font>
<font color="#00AF00">pass</font>=<font color="#008700">${</font><font color="#008700">bldblu</font><font color="#008700">}</font>*<font color="#008700">${</font><font color="#008700">txtrst</font><font color="#008700">}</font>
<font color="#00AF00">warn</font>=<font color="#008700">${</font><font color="#008700">bldred</font><font color="#008700">}</font>!<font color="#008700">${</font><font color="#008700">txtrst</font><font color="#008700">}</font>

<font color="#585858"># Indicator usage</font>
<font color="#8700AF">echo</font><font color="#5F5FAF"> -e </font><font color="#8700AF">"</font><font color="#008700">${</font><font color="#008700">info</font><font color="#008700">}</font><font color="#5F5FAF"> </font><font color="#8700AF">"</font>
<font color="#8700AF">echo</font><font color="#5F5FAF"> -e </font><font color="#8700AF">"</font><font color="#008700">${</font><font color="#008700">pass</font><font color="#008700">}</font><font color="#5F5FAF"> </font><font color="#8700AF">"</font>
<font color="#8700AF">echo</font><font color="#5F5FAF"> -e </font><font color="#8700AF">"</font><font color="#008700">${</font><font color="#008700">warn</font><font color="#008700">}</font><font color="#5F5FAF"> </font><font color="#8700AF">"</font></font></pre>
<br/>  <a href="http://feeds.wordpress.com/1.0/gocomments/linuxtidbits.wordpress.com/1762/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/linuxtidbits.wordpress.com/1762/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/linuxtidbits.wordpress.com/1762/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/linuxtidbits.wordpress.com/1762/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/linuxtidbits.wordpress.com/1762/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/linuxtidbits.wordpress.com/1762/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/linuxtidbits.wordpress.com/1762/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/linuxtidbits.wordpress.com/1762/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/linuxtidbits.wordpress.com/1762/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/linuxtidbits.wordpress.com/1762/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/linuxtidbits.wordpress.com/1762/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/linuxtidbits.wordpress.com/1762/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/linuxtidbits.wordpress.com/1762/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/linuxtidbits.wordpress.com/1762/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1762&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2012-01-20T13:10:58Z</updated>
    <category term="Linux"/>
    <author>
      <name>Todd Partridge (Gen2ly)</name>
    </author>
    <source>
      <id>http://linuxtidbits.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/5ad9566326fdd6b7f4e8af74375a3cac?s=96&amp;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</logo>
      <link href="http://linuxtidbits.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://linuxtidbits.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://linuxtidbits.wordpress.com/osd.xml" rel="search" title="Linux Tidbits" type="application/opensearchdescription+xml"/>
      <link href="http://linuxtidbits.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Every letter has its place</subtitle>
      <title>Linux Tidbits</title>
      <updated>2012-02-12T23:43:18Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://archlinux.me/dusty/?p=543</id>
    <link href="http://archlinux.me/dusty/2012/01/19/my-first-blackberry-2/" rel="alternate" type="text/html"/>
    <title>My first Blackberry</title>
    <summary>I don’t often post reviews of hardware. However, RIM is getting a bad rap lately, and all the cool kids are using Android or IPhone these days. I have been severely disappointed with the three Android phones I’ve had to date, and I have had too many bad experiences with touch keyboards to take the [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I don’t often post reviews of hardware. However, RIM is getting a bad rap lately, and all the cool kids are using Android or IPhone these days. I have been severely disappointed with the three Android phones I’ve had to date, and I have had too many bad experiences with touch keyboards to take the IPhone seriously. That left me with a choice between a Nokia Windows device or a Blackberry. I purchased the Blackberry Curve 9360. I wasn’t expecting much, but having used it, I don’t think I’ll ever go back.</p>
<p>From all the market hype, I expected the Blackberry to be inferior to Android. My expectations were therefore blown away. This is hands down, the best device I have ever used. Unlike Android, everything just works, and there are no force closes. The battery lasts a good 2.5 days under normal usage, compared to less than a day on my Android devices. RIM has put a LOT of thought into their OS design, and everything just flows. This phone is a joy to use, instead of an irritant.</p>
<p>The Curve doesn’t have a touch screen, but I never miss it. I’m willing to say, in fact, that the trackpad is a superior method of input for serious usage. Granted, a touch screen is great for mobile games, but I don’t waste time with that sort of thing. While pinch to zoom action on maps and images is quite pretty, on my Android phones it tended to be flaky and annoying (I’ve heard this is not the case on iPhones). One click zooming on my blackberry is more effective. </p>
<p>Actually, I did miss the touch screen when using my web browser at first. Trying to use the trackpad as a mouse was irritating until I increased the sensitivity. Now that the cursor moves as far and fast as I expect it to, I’d say that the interaction is about comparable to touching links and buttons. The touch action is more intuitive overall, but I used to find under Android’s browser that 1 time in 3 the phone would activate a different link from what I had thought I touched. The trackpad pointer never does this. The tradeoff leaves me sitting on the fence; either method works, but neither is optimal.</p>
<p>Of course, there are Blackberry devices with touchscreensI originally wanted to get a Torch 9810 to get the best of both worlds. I doubt I will do that when I upgrade, simply because I’ve unexpectedly proven to myself that the touch screen is not the wonderful idea that Steve Jobs told us it was.</p>
<p>The Blackberry OS 7 is extremely responsive, even though the Curve hardware specifications are modest compared to high power Androids, or even higher power Blackberries. I never have to wait for text to show up on the screen or for activities to complete. The tools that Blackberry is known for, namely messaging and email are even more pleasant to use than I had been led to expect.</p>
<p>The Blackberry market app is a bit of a disappointment. It doesn’t seem to find apps that I know exist, and I normally find it easier to search google on the phone and install an OTA link than to download through the market. Another annoyance is that you need to perform a Windows-like reboot whenever you install new apps. However, this is a rare task for me; I have never been one to download a lot of apps. On my Androids, I tended to replace the stock apps with sexier ones from the Android market (The Go dev team’s contacts, messaging, launcher, and other tools are particularly nice). I feel no need to do this under Blackberry; the stock apps are too good to replace. I have heard there is a lack of selection of Blackberry apps, but I personally haven’t missed it. To be honest, the argument that Android has a much bigger selection of apps in its market is severely watered down when you realize that many of these are fart sound boards or sexy lady wallpaper collections.</p>
<p>The Curve’s camera takes very clear still pictures. The flash is small, but indoor shots seem to be high quality. Digital camera technology is pretty much a solved problem these days; I doubt that any one phone is going to outperform another in this regard. I haven’t bothered with the video camera, so I don’t know how it compares.</p>
<p>Call quality is definitely clearer on this phone than any other device I’ve ever used, including landlines. I have no idea what sort of noise cancellation or other technology is involved, or if the towers in this area have been improved since I last used them. I know they’ve been updated to 4G, but I don’t know how that is expected to affect call quality. I like that the phone usage is a single button press; it highlights that the dialer is not just another app on the phone. I’ve had Android get stuck in another app when trying to answer an incoming call. This doesn’t happen with the Blackberry; calls take priority.</p>
<p>All the reviewers that say they are far superior to any other hardware manufacturer’s keyboard are understating the truth. In just a couple weeks of usage, I am already more accurate than I have been on any soft or hard keyboard on the Android devices I’ve had. I’m also quite a bit faster. Typing an e-mail on a soft Android keyboard used to be annoying enough that I’d wait until I was sitting at my computer. The two Android hardware keyboards were much better, but I could easily write entire book chapters on this phone if I wanted to. The keys are easy to press and give a satisfying click on each keystroke. The keys seem deceptively small, but are easy to locate and press. It took a bit of practice to get used to the keyboard. I was dissatisfied at first, but if you use a BlackBerry phone for more than a day, the learning curve is gone. Compared to the three months I spent trying to learn a soft Android keyboard, this is exceptional!</p>
<p>One other thing I like about the phone is that it acquires a wireless connection in almost no time at all. My ancient laptop takes a couple minutes to connect to a WPA protected network, and my Android phones have all been equally slow. But the Blackberry, for some reason, can do it in no time at all.</p>
<p>I don’t want to be sounding too harsh on Android. If you like Android or like Google’s offerings, than by all means, stick with it. However, if you’re like me, and stumped for a good alternative, don’t let the negative media attention RIM has received fool you. This is a high quality piece of hardware running a high quality collection of software.</p></div>
    </content>
    <updated>2012-01-19T22:53:28Z</updated>
    <category term="Uncategorized"/>
    <category term="android"/>
    <category term="Blackberry"/>
    <category term="mobile"/>
    <author>
      <name>dusty</name>
    </author>
    <source>
      <id>http://archlinux.me/dusty</id>
      <link href="http://archlinux.me/dusty/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://archlinux.me/dusty" rel="alternate" type="text/html"/>
      <subtitle>A little more of everything, please</subtitle>
      <title>Dusty's Diverse Domain</title>
      <updated>2012-01-20T17:13:18Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://allanmcrae.com/?p=1393</id>
    <link href="http://allanmcrae.com/2012/01/xenoblade-chronicles-a-completionists-nightmare/" rel="alternate" type="text/html"/>
    <title>Xenoblade Chronicles – A Completionist’s Nightmare</title>
    <summary>Caution: Spoilers follow! If you are looking for a good game and like JRPG’s, then you can not go past Xenoblade Chronicles. Well, you can if you live in North America where it still has not been released yet and will not be released until April… Now you know how it feels to live in [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><b>Caution:</b> Spoilers follow!</p>
<p>If you are looking for a good game and like JRPG’s, then you can not go past <a href="http://en.wikipedia.org/wiki/Xenoblade_Chronicles">Xenoblade Chronicles</a>.  Well, you can if you live in North America where it still has not been released yet and will not be released until April…  Now you know how it feels to live in Australia!</p>
<p>Now I have that off my chest, lets get back to the game.  Xenoblade is a game of epic scope, both in terms of the shear size of the worlds that you can explore and in terms of the number of things there are to do. And there are many, many, many things to do…  To get near “completing” the game, you will need to spend well over 100 hours, making the game quite good value for money.</p>
<p>I am not going to do a detailed review of the gameplay as those are already available elsewhere.  Instead I will cover the various elements there are to collect in the game. This is probably an unhealthy obsession of mine that started with Pokemon (Gotta Catch ‘Em All…), but is often an aspect of games that I enjoy more than the primary game itself provided it is not too monotonous.</p>
<p><b>Party Upgrades:</b> Each playable character in the game has multiple upgrades that can be found (excluding basic things like level and equipment). There are upgrades to each of the “Arts” that are used during battles, which are purchased using “AP” that you collect by defeating monsters or from other tasks in the game.  Before the Arts can be upgraded to their full potential, you need to learn the Intermediate then Advanced levels through the use of Books.  The Books for the Intermediate level can be purchased at various stores throughout the game, but the Advanced level books are only dropped by strong monsters.  At least two are dropped at a low frequency by a monster that appears only once in the game, so unless you know that beforehand, the chance of completing this upgrade is negligible.  I collected all Books but have not purchased the full upgrades yet as collecting the required amount of AP would become tedious.</p>
<p>Each character also has a set of “Skills” that are like innate abilities that improve your battle prowess.  There are learnt by collecting “SP” when defeating monsters and filling up the “skill tree”.  Each character starts with three skill trees, or sets of skills of a given type, but two additional skill trees can be earned for each character.  Enough “SP” will be earned to fill up most of the characters skill trees just by playing the game, but a couple of characters would require repetitive monster killing to complete.</p>
<p><b>Quests:</b> There are 480 quests given to you by various NPCs during the game.  Some are essential to complete in order to progress through the game, but others are just useful for gaining experience/money/items.  What is really annoying are that some quests only appear under certain conditions.  I do not mind those that are mutually exclusive (i.e. you can complete one of two quests and it really does not matter which), but those quests that only appear if you do something in a particular way (with no real indication of what that is…) are… well… I can not find a polite word to describe them.  Then there are timed quests. These become unavailable (without warning) once you reach certain points in the game.  So if you are wanting to complete “all” quests, you need to do each quest as soon as you are assigned it and spend lots of time exploring each region to make sure you have talked to everyone.  I believe I completed all possible quests for a single play-through apart from one that was unavailable as I made an “incorrect” choice during the game.</p>
<p><b>Affinity:</b> There is an “affinity” system that essentially measure how much people like each other.  Importantly from a gameplay perspective is how much the people of each region like you and how much the members of a party like each other.  How much people of a particular region like you determines the available quests and items available for trading.  This is improved by talking to the various NPC who have names and completing quests. The affinity between members of your party is improved by helping each other in battle and through the completion of quests together.  It is not a super-important area of gameplay although it does let characters use skills known by other characters and allows you to see “Heart-to-Hearts” (see below).</p>
<p><b>Region Maps:</b> There are around 20 areas (depending on how you count them) to explore during the game.  Each of these regions had a number of “Landmarks” and “Locations” for you to find to unlock the complete map to the region.  The Landmarks serve as warp-points, which avoids much mindless wandering from place-to-place.  Almost all of these would be found during normal gameplay and the remaining few during completion of quests.</p>
<p><b>Collectopaedia:</b> Each region has a list of items that can be collected throughout it.  Collecting one of each of these fills in the Collectopaedia.  Just like the Quests, there are points during the game where access to the areas becomes no longer possible (without warning…) so it is important to collect these as you go.  There is also a selection of items needed to complete this that can only be traded for, with one requiring an item to trade that can only be found by defeating the strongest monsters in the game (and is the one item I have yet to collect).  </p>
<p><b>Heart-to-Hearts:</b> These are cut away scenes showing conversations between characters that are supposed to provide extra insight to their inner thoughts…  You get to chose various answers that direct the outcome of these conversations, although I never actually read the text so I have no idea how much your choice mattered.  What I did notice was that the “acting” during these interactions was horrible.</p>
<p><b>Unique Monsters:</b> Now this is a fun part of the game!  There are 157 “unique” monsters in the game.  Some are truly unique in that they only appear once during a particular quest, but others consistently respawn.  There are five of these monsters that have levels higher than your characters maximum level and it is these five I have left to beat (although I have not attempted them yet…).</p>
<p><b>Achievements:</b> The game keeps track of your “achievements” as you progress through the game.  These are separated into two types, Trials and Records.  There are 50 Trials that basically cover working through all the collections above so if you are going to complete those then the Trials will get completed too.  The 150 Records involve things like defeating a certain type of enemy a given number of times, using a given type attack a certain number of times, raising Skill and Arts to maximum levels and collecting crystals and crafting them into gems (an area of the game that is full of mystery as far as I am concerned…).  Many of these fall into the tedious repetition category so I still have about 30 to complete.</p>
<p>That is a lot of stuff to do…  As I said above, it will take substantially more than 100 hours if you want to do all of this.  But I say it is definitely time well spent.</p></div>
    </content>
    <updated>2012-01-19T12:58:43Z</updated>
    <category term="Games"/>
    <author>
      <name>Allan</name>
    </author>
    <source>
      <id>http://allanmcrae.com</id>
      <link href="http://allanmcrae.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://allanmcrae.com" rel="alternate" type="text/html"/>
      <subtitle>One day this will feature a witty tagline…</subtitle>
      <title>Allan McRae</title>
      <updated>2012-02-12T23:43:05Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>tag:www.archlinux.org,2012-01-16:/news/pacman-4-moves-to-core/</id>
    <link href="http://www.archlinux.org/news/pacman-4-moves-to-core/" rel="alternate" type="text/html"/>
    <title>pacman 4 moves to [core]</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Dave Reisner wrote:</p>
<p>Pacman 4 has landed in <code>[core]</code>! Thanks to 24 contributors producing 893 commits, you'll find many <a href="http://projects.archlinux.org/pacman.git/tree/NEWS" title="NEWS">new features</a>. The one explicitly worth calling out is PGP signing. However, until the last few details regarding database signing and keyring distribution are ironed out, this is disabled in pacman's default config. If you're interested trying out package verification, please refer to the documentation on the wiki about <a href="https://wiki.archlinux.org/index.php/Pacman-key" title="pacman-key">pacman-key</a> or <a href="http://allanmcrae.com/2011/12/pacman-package-signing-4-arch-linux/" title="pacman-package-signing">Allan's blog post</a>.</p>
<p>As always, please make sure to merge your pacnew files!</p></div>
    </summary>
    <updated>2012-01-16T21:55:23Z</updated>
    <author>
      <name>Dave Reisner</name>
    </author>
    <source>
      <id>http://www.archlinux.org/news/</id>
      <link href="http://www.archlinux.org/news/" rel="alternate" type="text/html"/>
      <link href="http://www.archlinux.org/feeds/news/" rel="self" type="application/rss+xml"/>
      <subtitle>The latest and greatest news from the Arch Linux distribution.</subtitle>
      <title>Arch Linux: Recent news updates</title>
      <updated>2012-02-07T10:43:02Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://linuxtidbits.wordpress.com/?p=1749</id>
    <link href="http://linuxtidbits.wordpress.com/2012/01/13/syntax-highlighting-in-blog-posts-with-vim/" rel="alternate" type="text/html"/>
    <title>Syntax Highlighting in Blog Posts with Vim</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Update: Reader Elder Marco has pointed out that WordPress.com does have support for syntax highlighting of source code built-in (which I had never heard of before) that might be a preferred alternative for some. An example of both is below. Vim is a great all-around editor. It also does very good at syntax highlighting. With [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1749&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
</p><div style="overflow: auto; width: auto; border: solid #bab363; background-color: #faf7d8; font-size: 1em; color: #4f4c2a; border-width: .1em .8em; padding: .3em .6em;"><strong>Update: </strong>Reader Elder Marco has pointed out that WordPress.com does have <a href="http://en.support.wordpress.com/code/posting-source-code/" target="_blank">support</a> for syntax highlighting of source code built-in (which I had never heard of before) that might be a preferred alternative for some.  An example of both is below.</div>
<p/>
<p/>
<p><a href="http://bobthecow.deviantart.com/art/Vim-dock-icon-57482936"><img align="right" class="com" src="http://linuxtidbits.files.wordpress.com/2008/02/vim-128.png?w=474" style="border-width: 0;"/></a>Vim is a great all-around editor.  It also does very good at syntax highlighting.  With the plugin “TOhtml” included with Vim it’s easy to put that highlighting into a blog post.  I created a <code>scrptblog</code> script that when run on another script will produce a file defining the syntax highlighting in HTML code.  From there it can be pasted into the blog post.</p>
<p><strong><code>scrptblog</code> example:</strong></p>
<pre><font face="monospace"><font color="#585858">#!/bin/bash</font>
<font color="#585858"># scrptblog - Create HTML code from Vim syntax highlighting (for use in coloring</font>
<font color="#585858"># scripts)</font>

<font color="#00AF00">filename</font>=<font color="#008700">$@</font>
<font color="#00AF00">background</font>=light
<font color="#00AF00">colorscheme</font>=beauty256
<font color="#00AF00">scrpt</font>=<font color="#008700">${</font><font color="#008700">0</font><font color="#8700AF">##</font>*/<font color="#008700">}</font>  <font color="#585858"># script name</font>

<font color="#585858"># Display usage if no parameters given</font>
<font color="#8700AF">if </font><font color="#5F87FF"><b>[[</b></font> <font color="#8700AF">-z</font> <font color="#8700AF">"</font><font color="#008700">$@</font><font color="#8700AF">"</font> <font color="#5F87FF"><b>]]</b></font><font color="#8700AF">;</font> <font color="#8700AF">then</font>
  <font color="#8700AF">echo</font><font color="#5F5FAF"> </font><font color="#8700AF">"</font><font color="#5F5FAF"> </font><font color="#008700">$scrpt</font><font color="#5F5FAF"> &lt;filename&gt; - create HTML code from Vim syntax highlighting</font><font color="#8700AF">"</font>
  <font color="#8700AF">exit</font>
<font color="#8700AF">fi</font>

<font color="#585858"># Syntax highlighting to HTML export</font>
vim <font color="#5F87FF"><b>-f</b></font>  +<font color="#8700AF">"</font><font color="#5F5FAF">syntax on</font><font color="#8700AF">"</font>                  <font color="#8700AF">\</font>
        +<font color="#8700AF">"</font><font color="#5F5FAF">set background=</font><font color="#008700">$background</font><font color="#8700AF">"</font> <font color="#8700AF">\</font>
        +<font color="#8700AF">"</font><font color="#5F5FAF">colorscheme </font><font color="#008700">$colorscheme</font><font color="#8700AF">"</font>   <font color="#8700AF">\</font>
        +<font color="#8700AF">"</font><font color="#5F5FAF">let html_use_css = 0</font><font color="#8700AF">"</font>       <font color="#8700AF">\</font>
        +<font color="#8700AF">"</font><font color="#5F5FAF">let html_no_pre = 1</font><font color="#8700AF">"</font>        <font color="#8700AF">\</font>
        +<font color="#8700AF">"</font><font color="#5F5FAF">let html_number_lines = 0</font><font color="#8700AF">"</font>  <font color="#8700AF">\</font>
        +<font color="#8700AF">"</font><font color="#5F5FAF">TOhtml</font><font color="#8700AF">"</font>                     <font color="#8700AF">\</font>
        +<font color="#8700AF">"</font><font color="#5F5FAF">x</font><font color="#8700AF">"</font>                          <font color="#8700AF">\</font>
        +<font color="#8700AF">"</font><font color="#5F5FAF">q</font><font color="#8700AF">"</font> <font color="#008700">$filename</font>

<font color="#585858"># Clean up HTML code</font>
tidy <font color="#5F87FF"><b>-utf8</b></font> <font color="#5F87FF"><b>-f</b></font> /dev/null <font color="#5F87FF"><b>--wrap</b></font> <font color="#5F87FF"><b>-m</b></font> <font color="#008700">$filename</font>.html

<font color="#585858"># Delete the HTML meta page information.</font>
<font color="#8700AF">sed</font> <font color="#5F87FF"><b>-i</b></font> <font color="#8700AF">'</font><font color="#5F5FAF">1,/body bgcolor=/d</font><font color="#8700AF">'</font> <font color="#008700">$filename</font>.html

<font color="#585858"># Remove line breaks (needed for some things like blog posts)</font>
<font color="#8700AF">sed</font> <font color="#5F87FF"><b>-i</b></font> <font color="#8700AF">'</font><font color="#5F5FAF">s|&lt;br&gt;||g</font><font color="#8700AF">'</font> <font color="#008700">$filename</font>.html

<font color="#585858"># Remove the closing HTML tags</font>
<font color="#8700AF">sed</font> <font color="#5F87FF"><b>-i</b></font> <font color="#8700AF">'</font><font color="#5F5FAF">s~&lt;/body[^&gt;]*&gt;~~g</font><font color="#8700AF">'</font> <font color="#008700">$filename</font>.html
<font color="#8700AF">sed</font> <font color="#5F87FF"><b>-i</b></font> <font color="#8700AF">'</font><font color="#5F5FAF">s~&lt;/html[^&gt;]*&gt;~~g</font><font color="#8700AF">'</font> <font color="#008700">$filename</font>.html

<font color="#585858"># Add preformatting tabs &lt;pre&gt; and &lt;/pre&gt;</font>
<font color="#8700AF">sed</font> <font color="#5F87FF"><b>-i</b></font> <font color="#8700AF">'</font><font color="#5F5FAF">1 i &lt;pre&gt;</font><font color="#8700AF">'</font> <font color="#008700">$filename</font>.html
<font color="#8700AF">sed</font> <font color="#5F87FF"><b>-i</b></font> <font color="#8700AF">'</font><font color="#5F5FAF">$ a &lt;/pre&gt;</font><font color="#8700AF">'</font> <font color="#008700">$filename</font>.html

<font color="#585858"># Remove trailing blank lines</font>
<font color="#8700AF">while </font><font color="#8700AF">[</font> <font color="#8700AF">"</font><font color="#008700">$(</font><font color="#8700AF">tail</font><font color="#5F87FF"><b> -n </b></font>1<font color="#5F87FF"><b> </b></font><font color="#008700">$filename</font><font color="#5F87FF"><b>.html</b></font><font color="#008700">)</font><font color="#8700AF">"</font> <font color="#8700AF">==</font> <font color="#5F5FAF">"\n"</font> <font color="#8700AF">]</font><font color="#8700AF">;</font><font color="#8700AF"> </font><font color="#8700AF">do</font>
  <font color="#8700AF">sed</font> <font color="#8700AF">-i</font> <font color="#8700AF">'</font><font color="#5F5FAF">$d</font><font color="#8700AF">'</font> <font color="#008700">$filename</font>.html
<font color="#8700AF">done</font>

<font color="#585858"># Delete newline of last &lt;font&gt; line for better formatting</font>
<font color="#8700AF">sed</font> <font color="#5F87FF"><b>-i</b></font> <font color="#8700AF">'</font><font color="#5F5FAF">:a;N;$!ba;s/\(.*\)\n/\1/</font><font color="#8700AF">'</font> <font color="#008700">$filename</font>.html
<font color="#8700AF">sed</font> <font color="#5F87FF"><b>-i</b></font> <font color="#8700AF">'</font><font color="#5F5FAF">:a;N;$!ba;s/\(.*\)\n/\1/</font><font color="#8700AF">'</font> <font color="#008700">$filename</font>.html

<font color="#585858"># Delete final newline</font>
perl <font color="#5F87FF"><b>-i</b></font> <font color="#5F87FF"><b>-e</b></font> <font color="#8700AF">'</font><font color="#5F5FAF">local $/; $_ = &lt;&gt;; s/\n$//; print</font><font color="#8700AF">'</font> <font color="#008700">$filename</font>.html</font>
</pre>
<p><strong>WordPress built-in syntax highlight support example:</strong></p>
<p/><pre class="brush: css;">#!/bin/bash
# scrptblog - Create HTML code from Vim syntax highlighting (for use in coloring
# scripts)

filename=$@
background=light
colorscheme=beauty256
scrpt=${0##*/}  # script name

# Display usage if no parameters given
if [[ -z "$@" ]]; then
  echo " $scrpt &lt;filename&gt; - create HTML code from Vim syntax highlighting"
  exit
fi

# Syntax highlighting to HTML export
vim -f  +"syntax on"                  \
        +"set background=$background" \
        +"colorscheme $colorscheme"   \
        +"let html_use_css = 0"       \
        +"let html_no_pre = 1"        \
        +"let html_number_lines = 0"  \
        +"TOhtml"                     \
        +"x"                          \
        +"q" $filename

# Clean up HTML code
tidy -utf8 -f /dev/null --wrap -m $filename.html

# Delete the HTML meta page information.
sed -i '1,/body bgcolor=/d' $filename.html

# Remove line breaks (needed for some things like blog posts)
sed -i 's|&lt;br&gt;||g' $filename.html

# Remove the closing HTML tags
sed -i 's~&lt;/body[^&gt;]*&gt;~~g' $filename.html
sed -i 's~&lt;/html[^&gt;]*&gt;~~g' $filename.html

# Add preformatting tabs &lt;pre&gt; and &lt;/pre&gt;
sed -i '1 i &lt;pre&gt;' $filename.html
sed -i '$ a &lt;/pre&gt;' $filename.html

# Remove trailing blank lines
while [ "$(tail -n 1 $filename.html)" == "\n" ]; do
  sed -i '$d' $filename.html
done

# Delete newline of last &lt;font&gt; line for better formatting
sed -i ':a;N;$!ba;s/\(.*\)\n/\1/' $filename.html
sed -i ':a;N;$!ba;s/\(.*\)\n/\1/' $filename.html

# Delete final newline
perl -i -e 'local $/; $_ = &lt;&gt;; s/\n$//; print' $filename.html</pre><p/>
<br/>  <a href="http://feeds.wordpress.com/1.0/gocomments/linuxtidbits.wordpress.com/1749/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/linuxtidbits.wordpress.com/1749/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/linuxtidbits.wordpress.com/1749/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/linuxtidbits.wordpress.com/1749/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/linuxtidbits.wordpress.com/1749/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/linuxtidbits.wordpress.com/1749/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/linuxtidbits.wordpress.com/1749/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/linuxtidbits.wordpress.com/1749/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/linuxtidbits.wordpress.com/1749/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/linuxtidbits.wordpress.com/1749/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/linuxtidbits.wordpress.com/1749/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/linuxtidbits.wordpress.com/1749/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/linuxtidbits.wordpress.com/1749/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/linuxtidbits.wordpress.com/1749/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1749&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2012-01-14T02:23:32Z</updated>
    <category term="Linux"/>
    <category term="Script"/>
    <author>
      <name>Todd Partridge (Gen2ly)</name>
    </author>
    <source>
      <id>http://linuxtidbits.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/5ad9566326fdd6b7f4e8af74375a3cac?s=96&amp;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</logo>
      <link href="http://linuxtidbits.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://linuxtidbits.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://linuxtidbits.wordpress.com/osd.xml" rel="search" title="Linux Tidbits" type="application/opensearchdescription+xml"/>
      <link href="http://linuxtidbits.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Every letter has its place</subtitle>
      <title>Linux Tidbits</title>
      <updated>2012-02-12T23:43:18Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://archlinux.me/dusty/?p=510</id>
    <link href="http://archlinux.me/dusty/2012/01/08/pyjaco-in-a-real-app-todos-with-local-storage/" rel="alternate" type="text/html"/>
    <title>Pyjaco in a real app: Todos with local storage</title>
    <summary>I didn’t get the memo, but there appears to be a movement to demonstrate emerging web technologies with a simple todo list application, much as hello world is used to introduce programming languages. In my last post, I introduced using jQuery with Pyjaco, the PYthon JAvascript COmpiler. Since then, I’ve made several contributions to the [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I didn’t get the memo, but there appears to be a movement to demonstrate emerging web technologies with a simple todo list application, much as hello world is used to introduce programming languages.</p>
<p>In my <a href="http://archlinux.me/dusty/2011/12/27/pyjaco-and-jquery/">last post</a>, I introduced using jQuery with <a href="http://pyjaco.org/">Pyjaco</a>, the PYthon JAvascript COmpiler. Since then, I’ve made several <a href="https://github.com/buchuki/pyjaco">contributions</a> to the project and have been involved in diverse discussions with Pyjaco developers regarding the current and future status of the project. This post goes further by acting as a tutorial for writing a basic todos app using Pyjaco.</p>
<p>Pyjaco is alpha software. It is hard to write valid code, and harder to debug. I’ve managed to both lock up Firefox and hard crash it while using the Pyjaco library.</p>
<p>On the positive side, Pyjaco is under active, rapid development. The head developer, <a href="https://github.com/chrivers/">Christian Iversen</a> is extremely responsive to both questions about Pyjaco, and to code contributions. This is a project with a lot of potential, and I see it as the current best bet for Python programmers hoping to avoid javascript one day in the future.</p>
<p>In spite of the hiccups, it is possible to generate a working javascript app using just Pyjaco. Here’s how.</p>
<p>Let’s start:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family: monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> pyjados
<span style="color: #7a0874; font-weight: bold;">cd</span> pyjados
virtualenv2 venv <span style="color: #660033;">--distribute</span> <span style="color: #660033;">--no-site-packages</span>
<span style="color: #7a0874; font-weight: bold;">source</span> venv<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>activate
pip <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #c20cb9; font-weight: bold;">git</span>+https:<span style="color: #000000; font-weight: bold;">//</span>buchuki<span style="color: #000000; font-weight: bold;">@</span>github.com<span style="color: #000000; font-weight: bold;">/</span>buchuki<span style="color: #000000; font-weight: bold;">/</span>pyjaco.git<span style="color: #000000; font-weight: bold;">@</span>run_script</pre></div></div>

<p>First we create a directory to work in and install a virtualenv. Pyjaco does not currently work with python 3, so in Arch Linux, I use the virtualenv2 command. We then activate the virtualenv and install the pyjaco package. Here I am installing from my personal fork, as it contains some changes for generating the built-in standard library that have not yet been merged upstream. You should normally install directly from chrivers’s git repository using <code>pip install git+git://github.com/chrivers/pyjaco.git</code>.</p>
<p>Now let’s create a basic HTML 5 page with jQuery loaded:</p>
<pre>&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;PyJaco Todo List Example&lt;/title&gt;
    &lt;script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"&gt;&lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;h1&gt;PyJaco Todo List Example&lt;/h1&gt;
  &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>We can load this in our web browser using a file:// URL. This is the only HTML page in our app, and it can be refreshed to load our changes as we work.</p>
<p>Pyjaco doesn’t simply translate Python into Javascript. Rather, it creates a basic standard library of Python-like objects that are utilized in the compiled javascript code. I wasn’t too keen on this idea when I first heard it, as it introduces a dependency that currently weighs in at 65K before minification and compression. While this is not a terribly heavy library, there are efforts under way to shrink the builtins or to dynamically generate it to contain only those builtins that your code actually touches. At any rate, we need to ensure this library is available to our code. First we generate the library:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family: monospace;">pyjs.py <span style="color: #660033;">--builtins</span>=generate <span style="color: #660033;">--output</span>=py-builtins.js</pre></div></div>

<p><code>pyjs.py</code> is the name of the pyjaco command. It is expected to be renamed to pyjaco in the future. The <code>--builtins=generate</code> option tells pyjaco to generate the standard library, while the <code>--output</code> flag provides the filename for the new library file:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family: monospace;">$ <span style="color: #c20cb9; font-weight: bold;">ls</span>
index.html  py-builtins.js  venv</pre></div></div>

<p>We then need to load this library in the head of our html file. Let’s also load the future <code>pyjados.js</code> script at this time:</p>
<pre>  &lt;head&gt;
    &lt;title&gt;PyJaco Todo List Example&lt;/title&gt;
    &lt;script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="py-builtins.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="pyjados.js"&gt;&lt;/script&gt;
  &lt;/head&gt;
</pre>
<p>Now, before we start coding the Python file that will be compiled to Javascript, I want to discuss what I consider to be the most confusing aspect of Pyjaco development. There are basically two types of variables in Pyjaco, Javascript variables, and Python variables. Javascript variables refer to “normal” variables that you would call in Javascript. These include <code>alert</code>, <code>window</code>, <code>document</code> and the like, as well as variables in third-party Javascript libraries, such as the ubiquitous <code>jQuery</code>. Further, any attributes on those objects are also Javascript variables, and the return value of any methods will also be Javascript variables.</p>
<p>Python variables, on the other hand, refer to any variables that you define in your Python source code. If you create a dict or a list, for example, it will be compiled to a list or dict object from the standard library we just generated. In the compiled script, of course these Python variables are represented by Javascript objects, but from the point of view of a Pyjaco coder, it is important to keep the two types of files separate. Almost all the bugs I have encountered in my Pyjaco code have been caused by confusing the two types of variables.</p>
<p>The distinction between python and javascript variables introduces a couple of complications to writing Pyjaco compatible python code. First we need to flag all of our Javascript variables using a decorator on methods that access them. Second, we need to explicitly convert our variables between Javascript and Python any time we access one from the other. I’m told that this conversion can — and one day will — be done automatically by the pyjaco multiplexer, but in the meantime, we need to make it explicit. We do this by using two javascript functions supplied with the standard library we just generated, appropriately named <code>js()</code> and <code>py()</code>. You will see examples of these shortly.</p>
<p>When I finally figured out the distinction, my first thought was, “ok, let’s prefer to always work with python variables.” Therefore, in my initialization code, I tried <code>jQ=py(jQuery)</code>. Unfortunately, jQuery is a rather large object, and the <code>py</code> function apparently recursively converts all attributes from javascript to python. I ended up with a stack overflow.</p>
<p>Now, let’s create our first python code and watch it compile to Javascript. Name the file <code>pyjados.py</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family: monospace;"><span style="color: #ff7700; font-weight: bold;">def</span> setup<span style="color: black;">(</span><span style="color: black;">)</span>:
    <span style="color: #ff7700; font-weight: bold;">print</span> <span style="color: #483d8b;">"Pyjados Hello World"</span>
 
jQuery<span style="color: black;">(</span>js<span style="color: black;">(</span>setup<span style="color: black;">)</span><span style="color: black;">)</span><span style="color: #66cc66;">;</span></pre></div></div>

<p>First we write a python function named <code>setup</code>. This function is a python object. <code>jQuery</code> is a javascript object that expects a javascript object as input. Therefore, we wrap <code>setup</code> in a <code>js()</code> call and pass the result into the jQuery function. jQuery will now run <code>setup</code> when <code>document.ready</code> is fired.</p>
<p>Now we compile the code using the following command inside our activated virtualenv:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family: monospace;">pyjs.py <span style="color: #660033;">--watch</span> pyjados.py <span style="color: #660033;">--output</span> pyjados.js</pre></div></div>

<p>You’ll notice the command doesn’t exit. That is the <code>--watch</code> option at work. If you now make a change to <code>pyjados.py</code> and save it, it will automatically recompile it. The output file <code>pyjados.js</code> is regenerated each time. This is the file we included in our html file. So now, open that html file in a web browser using a <code>file://</code> url. Make sure the Javascript console is displayed and reload the page. You should see the words “Pyjados Hello World” printed on the console. Pyjaco automatically compiles <code>print</code> statements into <code>console.log</code> output.</p>
<p>Before we start implementing our Todo list, let’s look at an example of accessing a javascript variable inside a function. Change <code>setup.py</code> to utilize <code>alert</code>, as follows:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family: monospace;"> 
@JSVar<span style="color: black;">(</span><span style="color: #483d8b;">"alert"</span><span style="color: black;">)</span>
<span style="color: #ff7700; font-weight: bold;">def</span> setup<span style="color: black;">(</span><span style="color: black;">)</span>:
    alert<span style="color: black;">(</span>js<span style="color: black;">(</span><span style="color: #483d8b;">"Pyjados Hello Alert"</span><span style="color: black;">)</span>
 
jQuery<span style="color: black;">(</span>js<span style="color: black;">(</span>setup<span style="color: black;">)</span><span style="color: black;">)</span><span style="color: #66cc66;">;</span></pre></div></div>

<p>Did you look closely at that code? There is a missing close bracket on the alert line. You’ll see the syntax error in your console where pyjs.py is watching the compiled code. Add the bracket and let it automatically recompile itself:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family: monospace;"> 
@JSVar<span style="color: black;">(</span><span style="color: #483d8b;">"alert"</span><span style="color: black;">)</span>
<span style="color: #ff7700; font-weight: bold;">def</span> setup<span style="color: black;">(</span><span style="color: black;">)</span>:
    alert<span style="color: black;">(</span>js<span style="color: black;">(</span><span style="color: #483d8b;">"Pyjados Hello Alert"</span><span style="color: black;">)</span><span style="color: black;">)</span>
 
jQuery<span style="color: black;">(</span>js<span style="color: black;">(</span>setup<span style="color: black;">)</span><span style="color: black;">)</span><span style="color: #66cc66;">;</span></pre></div></div>

<p>Let’s analyze this snippet. First, notice how we told the compiler that <code>alert</code> is a Javascript variable when used inside <code>setup()</code>.  This is a bit odd, since the JSVar decorator is never actually imported into the namespace. This is a bit of magic in the Pyjaco compiler, just pretend it has been imported.</p>
<p>Second, notice that since <code>alert</code> has been flagged as a JSVar, it must accept a Javascript variable. However, the string “Pyjados Hello Alert” is a Python variable. Therefore, we convert it using <code>js()</code> as we pass it into the <code>alert</code> call.</p>
<p>Now let’s prepare to create some working todo-list code. Start by adding a form for submitting todos and a list to render the todos to the html body:</p>
<pre>  &lt;body&gt;
    &lt;h1&gt;PyJaco Todo List Example&lt;/h1&gt;
    &lt;form id="add_todo_form"&gt;
      &lt;input type="text" id="add_box" placeholder="Add Todo", autofocus="autofocus"&gt;
      &lt;button id="add_button"&gt;Add Todo&lt;/button&gt;
    &lt;/form&gt;
    &lt;ul id="todo_items"&gt;&lt;/ul&gt;
  &lt;/body&gt;
</pre>
<p>Nothing too exciting here. Note the ids on the elements, since we’ll be utilizing these from Pyjaco using jQuery selectors.</p>
<p>Now back into the python file. Let’s create a class to manage the various todo elements:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family: monospace;"><span style="color: #ff7700; font-weight: bold;">class</span> TodosApp:
    @JSVar<span style="color: black;">(</span><span style="color: #483d8b;">"jQuery"</span>, <span style="color: #483d8b;">"js_add_form"</span><span style="color: black;">)</span>
    <span style="color: #ff7700; font-weight: bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">(</span><span style="color: #008000;">self</span><span style="color: black;">)</span>:
        js_add_form = jQuery<span style="color: black;">(</span>js<span style="color: black;">(</span><span style="color: #483d8b;">"#add_todo_form"</span><span style="color: black;">)</span><span style="color: black;">)</span>
        js_add_form.<span style="color: black;">submit</span><span style="color: black;">(</span>js<span style="color: black;">(</span><span style="color: #008000;">self</span>.<span style="color: black;">add_todo</span><span style="color: black;">)</span><span style="color: black;">)</span>
 
    <span style="color: #ff7700; font-weight: bold;">def</span> add_todo<span style="color: black;">(</span><span style="color: #008000;">self</span>, event<span style="color: black;">)</span>:
        <span style="color: #ff7700; font-weight: bold;">print</span> <span style="color: #483d8b;">"form submitted"</span>
        <span style="color: #ff7700; font-weight: bold;">return</span> js<span style="color: black;">(</span><span style="color: #008000;">False</span><span style="color: black;">)</span>
 
<span style="color: #ff7700; font-weight: bold;">def</span> setup<span style="color: black;">(</span><span style="color: black;">)</span>:
    todo_app = TodosApp<span style="color: black;">(</span><span style="color: black;">)</span>
 
jQuery<span style="color: black;">(</span>js<span style="color: black;">(</span>setup<span style="color: black;">)</span><span style="color: black;">)</span><span style="color: #66cc66;">;</span></pre></div></div>

<p>The <code>__init__</code> function hooks up the form’s submit button to a method on the object. Notice that we need to flag not just <code>jQuery</code>, but also <code>js_add_form</code> as a javascript variable. Pyjaco does not (currently) know that a javascript variable is returned when calling a method on an existing javascript variable. I like to add the <code>js_</code> prefix to variable names to help remind myself that this is a javascript variable.</p>
<p>In an ideal world, we could convert this variable to a Python variable using <code>py()</code>, but as noted earlier, calling <code>py</code> on a jQuery object results in a stack overflow or browser crash.</p>
<p>Also pay attention to the way we wrap the <code>self.add_todo</code> method name in a <code>js()</code> call when we pass it into the <code>submit</code> handler. The <code>submit</code> method is a javascript function expecting a javascript object.</p>
<p>The <code>def add_todo</code> method has its single parameter flagged as a <code>@JSVar</code>, since the method is being called internally by jQuery when the event occurs. We also wrap the <code>False</code> return value (to prevent event propogation on the submit handler) in a <code>js()</code> call so that jQuery recognizes it as a javascript <code>false</code> rather than a (true) object named <code>False</code>.</p>
<p>Try the code. Ensure the compiler recompiled it, and reload the html file. Enter some characters into the text box and use the <code>Enter</code> key or the <code>Add Todo</code> button to submit the form. The words <code>form submitted</code> should be displayed in the javascript console.</p>
<p>Now let’s actually store and render a newly added todo. The todos are stored in memory in a python dict object. Initialize this object by adding the following two lines of code to the end of <code>__init__</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family: monospace;">    <span style="color: #008000;">self</span>.<span style="color: black;">todos</span> = <span style="color: black;">{</span><span style="color: black;">}</span>
    <span style="color: #008000;">self</span>.<span style="color: black;">next_id</span> = <span style="color: #ff4500;">1</span></pre></div></div>

<p>And rewrite <code>add_todo</code> as follows as well as a new method named <code>render</code></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family: monospace;">    @JSVar<span style="color: black;">(</span><span style="color: #483d8b;">"event"</span>, <span style="color: #483d8b;">"js_add_box"</span><span style="color: black;">)</span>
    <span style="color: #ff7700; font-weight: bold;">def</span> add_todo<span style="color: black;">(</span><span style="color: #008000;">self</span>, js_event<span style="color: black;">)</span>:
        js_add_box = jQuery<span style="color: black;">(</span>js<span style="color: black;">(</span><span style="color: #483d8b;">"#add_box"</span><span style="color: black;">)</span><span style="color: black;">)</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">todos</span><span style="color: black;">[</span><span style="color: #008000;">self</span>.<span style="color: black;">next_id</span><span style="color: black;">]</span> = py<span style="color: black;">(</span>js_add_box.<span style="color: black;">val</span><span style="color: black;">(</span><span style="color: black;">)</span><span style="color: black;">)</span>
        js_add_box.<span style="color: black;">val</span><span style="color: black;">(</span><span style="color: #483d8b;">''</span><span style="color: black;">)</span>
        js_add_box.<span style="color: black;">focus</span><span style="color: black;">(</span><span style="color: black;">)</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">next_id</span> += <span style="color: #ff4500;">1</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">render</span><span style="color: black;">(</span><span style="color: black;">)</span>
        <span style="color: #ff7700; font-weight: bold;">return</span> js<span style="color: black;">(</span><span style="color: #008000;">False</span><span style="color: black;">)</span>
 
    @JSVar<span style="color: black;">(</span><span style="color: #483d8b;">"js_todo_items"</span><span style="color: black;">)</span>
    <span style="color: #ff7700; font-weight: bold;">def</span> render<span style="color: black;">(</span><span style="color: #008000;">self</span><span style="color: black;">)</span>:
        js_todo_items = jQuery<span style="color: black;">(</span>js<span style="color: black;">(</span><span style="color: #483d8b;">"#todo_items"</span><span style="color: black;">)</span><span style="color: black;">)</span>
        js_todo_items.<span style="color: black;">html</span><span style="color: black;">(</span><span style="color: #483d8b;">""</span><span style="color: black;">)</span>
        <span style="color: #ff7700; font-weight: bold;">for</span> <span style="color: #008000;">id</span>, todo <span style="color: #ff7700; font-weight: bold;">in</span> <span style="color: #008000;">sorted</span><span style="color: black;">(</span><span style="color: #008000;">self</span>.<span style="color: black;">todos</span>.<span style="color: black;">items</span><span style="color: black;">(</span><span style="color: black;">)</span><span style="color: black;">)</span>:
            js_todo_items.<span style="color: black;">append</span><span style="color: black;">(</span>js<span style="color: black;">(</span><span style="color: #483d8b;">'&lt;li&gt;%s&lt;/li&gt;'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">(</span><span style="color: #008000;">id</span>, todo<span style="color: black;">)</span><span style="color: black;">)</span><span style="color: black;">)</span></pre></div></div>

<p>Note that the <code>todos</code> dict is a Python object, so when we insert the value of the <code>js_add_box</code> into it, we must convert it from a javascript object using <code>py()</code>. Also note how, because we are writing in a python function, manipulating the python value <code>self.next_id</code> requires no conversion, and calling the python function <code>self.render</code> is also clean.</p>
<p>In the render function itself, I think it’s pretty cool that string formatting using % is supported by pyjaco (as an aside, the str.format method introduced in python 2.6 is not yet available) and that the python <code>sorted()</code> function is available. Note also how we can loop over <code>items()</code> on the <code>self.todos</code> dictionary just as if we were using a normal python dictionary.</p>
<p>Now let’s add the ability to complete todos. Let’s start by adding a template string as a class variable, and use that string inside the render function. This illustrates that pyjaco supports class variables:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family: monospace;"><span style="color: #ff7700; font-weight: bold;">class</span> TodosApp:
    list_item_template = <span style="color: #483d8b;">"""&lt;li&gt;
    %(text)s
    &lt;/li&gt;"""</span></pre></div></div>

<p>and we change the for loop in <code>render</code> to:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family: monospace;">        <span style="color: #ff7700; font-weight: bold;">for</span> <span style="color: #008000;">id</span>, todo <span style="color: #ff7700; font-weight: bold;">in</span> <span style="color: #008000;">sorted</span><span style="color: black;">(</span><span style="color: #008000;">self</span>.<span style="color: black;">todos</span>.<span style="color: black;">items</span><span style="color: black;">(</span><span style="color: black;">)</span><span style="color: black;">)</span>:
            js_todo_items.<span style="color: black;">append</span><span style="color: black;">(</span>js<span style="color: black;">(</span>TodosApp.<span style="color: black;">list_item_template</span> <span style="color: #66cc66;">%</span> <span style="color: black;">{</span>
                <span style="color: #483d8b;">"id"</span>: <span style="color: #008000;">id</span>,
                <span style="color: #483d8b;">"text"</span>: todo<span style="color: black;">}</span><span style="color: black;">)</span><span style="color: black;">)</span></pre></div></div>

<p>Reload the page again and notice how checkboxes have been displayed beside each todo. The next step is to make clicking these boxes actually complete the todos. We add a couple lines to our <code>__init__</code> method to connect a live click event to the checkbox items, which now looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family: monospace;">    @JSVar<span style="color: black;">(</span><span style="color: #483d8b;">"jQuery"</span>, <span style="color: #483d8b;">"js_add_form"</span>, <span style="color: #483d8b;">"js_checkbox"</span><span style="color: black;">)</span>
    <span style="color: #ff7700; font-weight: bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">(</span><span style="color: #008000;">self</span><span style="color: black;">)</span>:
        js_add_form = jQuery<span style="color: black;">(</span>js<span style="color: black;">(</span><span style="color: #483d8b;">"#add_todo_form"</span><span style="color: black;">)</span><span style="color: black;">)</span>
        js_add_form.<span style="color: black;">submit</span><span style="color: black;">(</span>js<span style="color: black;">(</span><span style="color: #008000;">self</span>.<span style="color: black;">add_todo</span><span style="color: black;">)</span><span style="color: black;">)</span>
        js_checkbox = jQuery<span style="color: black;">(</span>js<span style="color: black;">(</span><span style="color: #483d8b;">"input[type=checkbox]"</span><span style="color: black;">)</span><span style="color: black;">)</span>
        js_checkbox.<span style="color: black;">live</span><span style="color: black;">(</span><span style="color: #483d8b;">"click"</span>, js<span style="color: black;">(</span><span style="color: #008000;">self</span>.<span style="color: black;">complete_todo</span><span style="color: black;">)</span><span style="color: black;">)</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">todos</span> = <span style="color: black;">{</span><span style="color: black;">}</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">next_id</span> = <span style="color: #ff4500;">1</span></pre></div></div>

<p>Don’t forget to add <code>js_checkbox</code> to the <code>JSVar</code> decorator.</p>
<p>The <code>complete_todo</code> method looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family: monospace;">    @JSVar<span style="color: black;">(</span><span style="color: #483d8b;">"event"</span>, <span style="color: #483d8b;">"jQuery"</span>, <span style="color: #483d8b;">"todo_item"</span><span style="color: black;">)</span>
    <span style="color: #ff7700; font-weight: bold;">def</span> complete_todo<span style="color: black;">(</span><span style="color: #008000;">self</span>, event<span style="color: black;">)</span>:
        todo_item = jQuery<span style="color: black;">(</span>event.<span style="color: black;">target</span><span style="color: black;">)</span>.<span style="color: black;">parent</span><span style="color: black;">(</span><span style="color: black;">)</span>
        <span style="color: #008000;">id</span> = <span style="color: #008000;">int</span><span style="color: black;">(</span>py<span style="color: black;">(</span>todo_item.<span style="color: black;">attr</span><span style="color: black;">(</span><span style="color: #483d8b;">"id"</span><span style="color: black;">)</span><span style="color: black;">)</span><span style="color: black;">[</span><span style="color: #ff4500;">5</span>:<span style="color: black;">]</span><span style="color: black;">)</span>
        <span style="color: #ff7700; font-weight: bold;">del</span> <span style="color: #008000;">self</span>.<span style="color: black;">todos</span><span style="color: black;">[</span><span style="color: #008000;">id</span><span style="color: black;">]</span>
        todo_item.<span style="color: black;">delay</span><span style="color: black;">(</span><span style="color: #ff4500;">1500</span><span style="color: black;">)</span>.<span style="color: black;">fadeOut</span><span style="color: black;">(</span><span style="color: #483d8b;">"slow"</span><span style="color: black;">)</span></pre></div></div>

<p>The first line is using exclusively javascript arguments, and returns the <code>&lt;li&gt;</code> element containing the checkbox that was clicked. The <code>id =</code> line converts the javascript string id attribute of this element (which looks like “<code>todo_5</code>“, as defined in <code>list_item_template</code>) into the python integer id of the todo. The remaining lines simply remove that todo from the internal list and from the DOM, after a 1.5 second delay.</p>
<p>In fact, we now have a fully functional todo list that allows adding todos and checking them off. Now, as a bonus, let’s try hooking this up to the HTML 5 <code>localStorage</code> object so that the list is maintained across page reloads. We start by adding a <code>store()</code> method to our class:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family: monospace;">    @JSVar<span style="color: black;">(</span><span style="color: #483d8b;">"localStorage"</span>, <span style="color: #483d8b;">"JSON"</span><span style="color: black;">)</span>
    <span style="color: #ff7700; font-weight: bold;">def</span> store<span style="color: black;">(</span><span style="color: #008000;">self</span><span style="color: black;">)</span>:
        localStorage.<span style="color: black;">setItem</span><span style="color: black;">(</span><span style="color: #483d8b;">"todolist"</span>, JSON.<span style="color: black;">stringify</span><span style="color: black;">(</span>js<span style="color: black;">(</span><span style="color: #008000;">self</span>.<span style="color: black;">todos</span><span style="color: black;">)</span><span style="color: black;">)</span><span style="color: black;">)</span></pre></div></div>

<p>The main line of code is easiest to read from the inside out. First we convert the <code>self.todos</code> dict to a normal javascript object using the <code>js()</code> function. Then we call <code>JSON.stringify</code> on this object to create a string suitable for insertion into <code>localStorage</code>.</p>
<p>Now add this call to the end of the two methods that manipulate the todo list, <code>add_todo</code> and <code>complete_todo</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family: monospace;">        <span style="color: #008000;">self</span>.<span style="color: black;">store</span><span style="color: black;">(</span><span style="color: black;">)</span></pre></div></div>

<p>.</p>
<p>Refresh the page, add a couple todos, and inspect the <code>localStorage</code> object in your console. You should see the stringified dict in the <code>todolist</code> value.</p>
<p>Now all we have to do is ensure the <code>self.todos</code> dict is loaded from <code>localStorage</code> when the app is initialized. Add the following to the end of the <code>__init__</code> method (make sure to add <code>js_stored_todos</code> to the <code>JSVars</code> decorator):</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family: monospace;">        js_stored_todos = localStorage.<span style="color: black;">getItem</span><span style="color: black;">(</span><span style="color: #483d8b;">"todolist"</span><span style="color: black;">)</span>
 
        <span style="color: #ff7700; font-weight: bold;">if</span> js_stored_todos:
            stored_dict = <span style="color: #008000;">dict</span><span style="color: black;">(</span>py<span style="color: black;">(</span>JSON.<span style="color: black;">parse</span><span style="color: black;">(</span>js_stored_todos<span style="color: black;">)</span><span style="color: black;">)</span><span style="color: black;">)</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">todos</span> = <span style="color: #008000;">dict</span><span style="color: black;">(</span><span style="color: black;">[</span><span style="color: black;">(</span><span style="color: #008000;">int</span><span style="color: black;">(</span>i<span style="color: black;">)</span>, stored_dict<span style="color: black;">[</span>i<span style="color: black;">]</span><span style="color: black;">)</span> <span style="color: #ff7700; font-weight: bold;">for</span> i <span style="color: #ff7700; font-weight: bold;">in</span> stored_dict.<span style="color: black;">keys</span><span style="color: black;">(</span><span style="color: black;">)</span><span style="color: black;">]</span><span style="color: black;">)</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">next_id</span> = <span style="color: #008000;">max</span><span style="color: black;">(</span><span style="color: #008000;">self</span>.<span style="color: black;">todos</span>.<span style="color: black;">keys</span><span style="color: black;">(</span><span style="color: black;">)</span><span style="color: black;">)</span> + <span style="color: #ff4500;">1</span>
 
        <span style="color: #008000;">self</span>.<span style="color: black;">render</span><span style="color: black;">(</span><span style="color: black;">)</span></pre></div></div>

<p>Note that calling <code>py()</code> on the output of <code>JSON.parse</code> creates a python object, not a python dict. The code is therefore wrapped in a call to <code>dict()</code>, which converts the object to a dictionary.</p>
<p>Unfortunately, the resultant dict contains keys that are strings, whereas our original dict used integer keys. So a pure-python list comprehension is used to convert the dictionary to one with integer keys. This line is a bit hard to read, but I wanted to include it to demonstrate that Pyjaco can parse list comprehensions. Finally, we set <code>self.next_id</code> using the python <code>max()</code> call, which Pyjaco also automatically translates into javascript.</p>
<p>Try it out. Load the pyjados HTML file, add some todos, check a few of them off, then close and reload the web browser. Your todos will be stored!</p>
<p>I hope you’ve enjoyed this introduction to Pyjaco. It is a nice tool with a lot of potential. Currently, I find writing Pyjaco code to be approximately equally tedious to writing Javascript code. However, I feel that as I learn the ins and outs of Pyjaco, and as the developers continue to refine and improve the compiler, Pyjaco may one day be a perfectly viable alternative to writing pure Javascript or to the rather too Ruby-esque, but otherwise excellent Coffeescript.</p></div>
    </content>
    <updated>2012-01-08T22:15:26Z</updated>
    <category term="Uncategorized"/>
    <category term="pyjaco"/>
    <category term="python"/>
    <category term="todos"/>
    <category term="web development"/>
    <author>
      <name>dusty</name>
    </author>
    <source>
      <id>http://archlinux.me/dusty</id>
      <link href="http://archlinux.me/dusty/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://archlinux.me/dusty" rel="alternate" type="text/html"/>
      <subtitle>A little more of everything, please</subtitle>
      <title>Dusty's Diverse Domain</title>
      <updated>2012-01-20T17:13:18Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://dieter.plaetinck.be/thailand_berlin_velocity_nyc_ghent_metal</id>
    <link href="http://dieter.plaetinck.be/thailand_berlin_velocity_nyc_ghent_metal.html" rel="alternate" type="text/html"/>
    <title>Thailand, Berlin Velocity EU, NYC, Ghent and more metal</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I've been meaning to write about a lot of stuff in separate posts, but they kept getting delayed, so I'll just briefly share everything in one post.
</p><h3>Thailand</h3>
In July I did a 3-week group journey through Thailand arranged by <a href="http://www.explorado.be">Explorado</a>, but organized by ("outsourced to") the 2 guides of <a href="http://www.rootsofasia.com/">roots of Asia</a>, who did <a href="http://www.rootsofasia.com/get-to-know-us/feedback.html">an amazing job</a>.
The whole concept was exploring "the real Thailand" by means of <i>Eco-tourism</i>.  We've been in Bangkok (twice), Chiang Mai city, a mountain village in the province of Chiang Mai, through the jungle, at a fisherman village in Phuket and at the tropical island of Koh Pha ngan.
The latter was at the end of the trip and was timed perfectly to get some deserved rest in a more touristy (although not too busy) area, but the majority of the trip was spent far away from the typical touristy areas so we could be submerged in honest, authentic Thai culture and visit authentic locations, often we were at locations where seeing a group of white folks is not common.
We've been at unique authentic temples, stayed with various locals and hill tribes, shared meals with them, took the same transport they did (at one point an entire village collected their bikes so we could borrow them to do a bike trip through rice fields and some of the most beautiful lakes I've ever seen).  We've had plenty of beautiful moments during those 3 weeks.  Like visiting the home of one of the local Thai who built his entire house out of clay, by himself and some friends, or visiting the ancient temple where our guide got married, in a forest in the hills, it was the most beautiful temple of the entire trip, but no other tourists go there because it's not really known (and should probably be kept that way).  Or going to a bar in Chiang Mai city (one evening on my own, the next I brought a fellow traveler) to have some good times with some locals.
The Eco-conscious part of the travel means:
<ul>
<li>green travel (minimize impact on the environment, "leave no trace").  Other than taking the plane over there and back we did a pretty good job, we've used public buses, night trains, biodegradable soap, etc</li>
<li>local foods (no import, minimal packaging, wrap in banana leaves, etc)</li>
<li>supporting Eco-conscious projects (like <a href="http://www.elephantnaturepark.org/">elephant nature park</a>, which is an entire volunteer-based reserve to give mistreated elephants (which has been a big problem in Thailand) a better life, where we washed and fed elephants)</li>
</ul>
This has been a great experience, and although I found the culture in the South disgustingly based on profiting from tourists, and the cities are too polluted and dirty, I've seen cultures so respectful of nature and each other, living by values I've been trying to apply at home - but being frowned upon in our western society because we're so brainwashed by consumerism, which was beautiful and heartwarming.
<br/>

<img height="150px" src="http://dieter.plaetinck.be/files/thailand_elephant.jpg"/>
<img height="150px" src="http://dieter.plaetinck.be/files/thailand_tree.jpg"/>
<img height="150px" src="http://dieter.plaetinck.be/files/thailand_tribe.jpg"/>
<img height="150px" src="http://dieter.plaetinck.be/files/thailand_gekko.jpg"/>
<img height="150px" src="http://dieter.plaetinck.be/files/thailand_boat.jpg"/>
<img height="150px" src="http://dieter.plaetinck.be/files/thailand_emblem.jpg"/>
<img height="150px" src="http://dieter.plaetinck.be/files/thailand_hangmat.jpg"/>
<br/><a href="https://www.facebook.com/media/set/?set=a.10150511397165279.397476.627030278&amp;type=1&amp;l=2e7844ab2b">Photo album</a>

<h3>Berlin</h3>
<img alt="Berlin Velocity EU conference" height="150px" src="http://dieter.plaetinck.be/files/berlin_velocity.jpg" style="float: left; margin: 0 5px 0 0;"/>
<img alt="Berlin Reichstag building" height="150px" src="http://dieter.plaetinck.be/files/berlin_reichstag.jpg" style="float: left; margin: 0 5px 0 0;"/>
I've been in Berlin for the first <a href="http://velocityconf.com/velocityeu/">Velocity conference in the EU</a>, which was quite good.  The best part was probably the "Velocity Birds of feather" (whatever that means) unconference the day before at <a href="http://betahaus.de">betahaus</a>, which was great for meeting some folks such as the <a href="http://www.soundcloud.com">soundcloud.com</a> guys (which BTW, is the site we host our music on), although lots more interesting folks attended the conference itself (and it was packed).
Berlin itself was nice too.  Lots of history (Berlin wall, world war(s)), lots of impressive architecture (old and new), very cheap (albeit mediocre in quality) food, lots of Italian food, a bit cold though.

<h3 style="clear: left;">New York city</h3>
<img alt="Brooklyn bridge" height="150px" src="http://dieter.plaetinck.be/files/brooklyn_bridge.jpg" style="float: left; margin: 0 5px 0 0;"/>
<img alt="Manhattan harbor" height="150px" src="http://dieter.plaetinck.be/files/manhattan_harbor.jpg" style="float: left; margin: 0 5px 0 0;"/>
I'm still recovering from the awesome time I just had in NYC. I've been way more busy over there than I anticipated. I should have stayed 2 or 3 weeks instead of 1 :).  I've met various locals (one of whom who'd love to become a city guide as 2nd job because she just loves showing people around, so that just turned out great!). I didn't go for the typical touristy things (I skipped things like the WTC memorial, empire state building, statue of liberty, to the extent you can skip them, as they are very visible from pretty much all over the place).
Instead, I wanted to get a feel of the real city and the people inhabiting it.  I've seen parts of Queens, central and North-West Brooklyn, lots of areas (but not enough) in Manhattan and even Staten Island, been to a rock concert, comedy, improv and cabaret shows, the movies, more bars than I can count and mostly ate out with company (just as real new yorkers do, of course, though for breakfast that feels a bit weird).  I even went shopping (not mall-shopping, but groceries in the supermarket, the Williamsburg Foodtown - that's what it's called - clerk advised me to enjoy every last second in the US, phrased in a way as if any other place in the world sucks in comparison, which is ridiculous, but turns out I followed his advice anyway) because I stayed at an apartment in Williamsburg, I also had 2 roommates, with whom I ironically couldn't spend as much time as I wanted to as I was so busy meeting up with all those other people, I also visited the Etsy and Vimeo offices (both are awesome) and met up with Dave Reisner (who is one of our latest Arch Linux devs, and who lives in NJ, but don't tell anyone) and who forgot to show me around in the Google office ;-)  And I realize some of the past sentences are a bit long and busy but that's one of the things I learned at New York I guess.  For one week, I almost lived like a real New Yorker, and it was interesting (but exhausting).

<h3 style="clear: left;">Move to Ghent</h3>
<img alt="Ghent, bridge of Sint-Michiels" height="150px" src="http://dieter.plaetinck.be/files/ghent_bridge.jpg" style="float: left; margin: 0 5px 0 0;"/>
<img alt="Ghent, coupure" height="150px" src="http://dieter.plaetinck.be/files/ghent_coupure.jpg" style="float: left; margin: 0 5px 0 0;"/>
Enough about the trips.  Back to daily life.  I moved to the city of <a href="http://en.wikipedia.org/wiki/Ghent">Ghent</a>.  Riding by bike to work every day along the scenic <a href="http://nl.wikipedia.org/wiki/Coupure_%28Gent%29">Coupure</a> is fun.
I am quite proud to say nearly all of my stuff in this apartment is second hand and I've been lucky to receive some free stuff as well (thanks Bram!).  Not (only) because I'm <span style="text-decoration: line-through;">cheap</span> money conscious but I like to give things a second life instead of buying something new, lowering the impact on the environment. Even if it doesn't look too well, as long as it's functional.  And this is exactly one of those values I mentioned above which is often not understood in our Western society but I was pleased to find out this philosophy is the standard in large parts of Thai culture.

<h3 style="clear: left;">Death metal</h3>
<img alt="Promo shoot" height="150px" src="http://dieter.plaetinck.be/files/li_promoshoot.jpg" style="float: left; margin: 0 5px 0 0;"/>
<img alt="Live @ Frontline, Ghent" height="150px" src="http://dieter.plaetinck.be/files/li_frontline.jpg" style="float: left; margin: 0 5px 0 0;"/>
We've done 3 gigs (which had great reception, luckily) and we've got planned a few already for 2012, one of which will be at the <a href="https://www.facebook.com/pages/From-Rock-Till-Core/141364465969247">From Rock Till Core festival</a> in Merelbeke.
We also did a semi-professional <a href="http://www.lightbulbinferno.com/album_promoshoot_summer_2011">photo-shoot</a>, and I made a <a href="http://www.lightbulbinferno.com/">website</a> (you can tell I'm not a designer).
<br style="clear: left;"/>
<br/>
<br/>
That wraps up 2011 for me. Good times.. Happy new year everybody!</div>
    </summary>
    <updated>2012-01-08T17:10:00Z</updated>
    <source>
      <id>http://dieter.plaetinck.be</id>
      <author>
        <name>Dieter Plaetinck</name>
        <email>dieter@plaetinck.be</email>
      </author>
      <link href="http://dieter.plaetinck.be" rel="alternate" type="text/html"/>
      <link href="http://dieter.plaetinck.be/rss.xml?feed=rss2" rel="self" type="application/rss+xml"/>
      <rights>Copyright 2007-2010 Dieter Plaetinck</rights>
      <subtitle>Web blog of Dieter Plaetinck (aka Dieter_be)</subtitle>
      <title>Dieter on the web</title>
      <updated>2012-01-08T19:45:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://linuxtidbits.wordpress.com/?p=1729</id>
    <link href="http://linuxtidbits.wordpress.com/2012/01/06/ubuntu-oneiric-final-touches/" rel="alternate" type="text/html"/>
    <title>Ubuntu Oneiric: Final Touches</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Note: A month ago I meant to write this article but experienced hardware issues. I wrote that in places that Oneiric was slow… I was wrong. Apologize for any inconvenience. Here are some edits, additions, and subtractions that help complete the feel of the of Ubuntu’s 11.10 Oneiric desktop. Note that a couple modifications are [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1729&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
</p><div style="width: auto; border: solid #637dba; background-color: #d8e2fa; font-size: .9em; color: #2a354f; border-width: .1em .8em; padding: .3em .6em;"><strong>Note: </strong>A month ago I meant to write this article but experienced hardware issues.  I <a href="http://linuxtidbits.wordpress.com/2011/10/24/ubuntu-oneiric-initial-musings/" target="_blank">wrote</a> that in places that Oneiric was slow… I was wrong.  Apologize for any inconvenience.</div>
<p/>
<p><a href="http://linuxtidbits.files.wordpress.com/2012/01/ubuntu-final-touches-150.png"><img alt="" class="alignright size-full wp-image-1730" src="http://linuxtidbits.files.wordpress.com/2012/01/ubuntu-final-touches-150.png?w=474" title="Ubuntu Final Touches-150"/></a>Here are some edits, additions, and subtractions that help complete the feel of the of Ubuntu’s 11.10 Oneiric desktop.  Note that a couple modifications are made only for performance reasons for use with an older computer.</p>
<p><strong><u>Installing</u></strong></p>
<p>When installing Ubuntu, it is still recommended to do a clean (fresh) install of Ubuntu.  Ubuntu/Debian engineers primarily focus resources on the install route therefore making it the recommended method.</p>
<p><strong><u><font size="+1">Home folder on a dedicated partition</font></u></strong></p>
<p><em>“How we work can be almost as important as what we do.”</em></p>
<p>Putting application preferences back together can be a lengthy process.  A good work flow can dramatically improve productivity.  Putting settings and documents on a dedicated partition will allow them to be easily built on from install to install.  In Linux, configurations rarely ever cause problems.  The <a href="http://partedmagic.com/" target="_blank">Parted Magic Maintenance CD</a> is a good tool to start with that can help with the process.  More on how to do this can be found <a href="https://help.ubuntu.com/community/Partitioning/Home/Moving#" target="_blank">here</a>.</p>
<p>When doing a clean install with a dedicated home partition, the partition needs to be defined during installation being sure to have it remain <em>unformatted</em>:</p>
<p><a href="http://linuxtidbits.files.wordpress.com/2012/01/04-amalgamated.png"><img alt="" class="alignleft size-full wp-image-1737" height="146" src="http://linuxtidbits.files.wordpress.com/2012/01/04-amalgamated.png?w=474&amp;h=146" title="04 Amalgamated" width="474"/></a></p>
<p><strong><u><font size="+1">Tools</font></u></strong></p>
<p>For future reference here is a <a href="http://ubuntuforums.org/showthread.php?p=7680189#post7680189" target="_blank">package management helper script</a>.  It makes common package management related tasks easier to execute (and remember).</p>
<p>If planning to stick around with Linux, learn Vim.  Vim is an excellent command line editor.  Learning Vim can save time and be pleasurable to use (here to edit configuration files).  More about Vim can be found <a href="https://wiki.archlinux.org/index.php/Vim" target="_blank">here</a>.</p>
<p><strong><u><font size="+1">Hardware Setup</font></u></strong></p>
<p>The first detail to focus on after installing Ubuntu is to get all hardware up and running.  Ubuntu does good at discovering/setting up hardware but it isn’t able to do everything.  First, the Additional Drivers control panel in System Settings may have hardware needed to be installed (some hardware setup requires user confirmation and is done here).  After this, testing all devices and peripherals is recommended.  It may in the end be necessary to visit the manufacturers website and download drivers.  In most cases though to get the hardware working, information is usually available on the <a href="https://help.ubuntu.com/" target="_blank">wiki</a>.</p>
<p><strong><u><font size="+1">Desktop Preferences</font></u></strong></p>
<p>A number of options can be made to make a more efficient desktop; these programs will be needed to make the edits:</p>
<pre>sudo apt-get install dconf-tools gconf-editor</pre>
<p><strong>Remove Unnecessary Startup Applications</strong></p>
<p>To restore the ability to edit the Startup Applications do:</p>
<pre>mkdir -p ~/.config/autostart
cd ~/.config/autostart
cp /etc/xdg/autostart/*.desktop .
sed -i "s/NoDisplay=true/NoDisplay=false/g" *.desktop</pre>
<p>To save resources, select what is needed in Startup Applications.  If not needed, Ubuntu One, Desktop Sharing, and Check Hardware Drivers can be removed.  Removing Update Notifier too can save a good bit or resources if willing to update manually.  To complete Update Notifier disabling:</p>
<pre>dconf write /com/ubuntu/update-notifier/auto-launch false
sudo apt-get remove apt-xapian-index  # actually an old Synaptic plugin remnant</pre>
<p><strong>Launcher</strong></p>
<p>The Launcher with a couple edits can become more able to streamline the workspace.</p>
<p>Disable Auto-hide:</p>
<p>To have the Launcher always visible (usually recommended) do:</p>
<pre>dconf write /com/canonical/unity-2d/launcher/use-strut true</pre>
<p>Remove Multiple Desktops/Workspaces:</p>
<p>Save space on the Launcher if not using the multiple desktops feature:</p>
<pre>gconftool-2 -s /apps/metacity/general/num_workspaces --type int 1
sudo cp /usr/share/unity-2d/launcher/Launcher.qml{,.bck}
sudo sed -i '/items.appendModel(workspaces)/d' /usr/share/unity-2d/launcher/Launcher.qml</pre>
<p>This edit is temporary and will need to be run again when the <strong>unity-2d-launcher</strong> package is updated.</p>
<p>Add Show Desktop:</p>
<p>The ability to show the desktop can be done with the <strong>Super + D</strong> keypress (thats usually the Windows key) but to have the icon available on the Launcher an Xorg server interface tool will be needed:</p>
<pre>sudo apt-get install xdotool</pre>
<p>Create the <code>.desktop</code> so it can be pinned to the launcher:</p>
<pre>echo "[Desktop Entry]
Name=Show Desktop
Exec=xdotool key --delay 300 super+d
Icon=desktop
Terminal=false
Type=Application
StartupNotify=false" &gt;&gt;   ~/.local/share/applications/show-desktop.desktop</pre>
<p>Open the file manager and drag the <code>.desktop</code> to the Launcher:</p>
<pre>nautilus ~/.local/share/applications/</pre>
<p><strong>Numlock Enabled on Login</strong></p>
<p>Because the numberpad exists on most keyboards and since it’s primary use is for doing calculations having the Numlock on by default is usually is the preferred option:</p>
<pre>sudo apt-get install numlockx
sudo sed -i 's|^exit 0.*$|# Numlock enable\n[ -x /usr/bin/numlockx ] \&amp;\&amp; numlockx on\n\nexit 0|' /etc/rc.local</pre>
<p><strong>Turn Off Resume from Sleep Lock</strong></p>
<p>More obstruction than protection for some the resume from sleep lock can be disabled:</p>
<pre>gsettings set org.gnome.desktop.lockdown disable-lock-screen 'true'</pre>
<p><strong>File Manager Possibilities</strong></p>
<p>Once the behavior is adapted to this feature can save time; however this behavior can be persistent: to streamline workflow consider using a single-click for files in the file manager/desktop.  Set this in the <b>File Manager</b> under &gt; <b>Edit</b> &gt; <b>Preferences</b> &gt; <b>Behavior</b> &gt; <b>Single click</b>.  For a slight speedup in the file manager, lower the preview values (Nautilus &gt; <b>Edit</b> &gt; <b>Pref</b> &gt; <b>Preview</b> &gt; <b>No text icons</b>, <b>Thumbs for smaller file sizes</b>, and <b>Count number</b>).</p>
<p><strong>Application Indicators</strong></p>
<p><strong>Application indicators</strong> are the feedback icons in the menu bar on the top right.  Here are some edits/considerations (changes to <strong>application indicators</strong> area don’t take effect until Logout/Login).</p>
<p>Switch Users Unneeded:</p>
<p>For single-user computer or if the feature is never used, save space by disabling the Switch Users indicator:</p>
<pre>dconf write /apps/indicator-session/user-show-menu false</pre>
<p>Google Web Mail:</p>
<p>Because of its’ efficient use of space and it’s connectivity possibilities the web interface of Google mail is preferred over email programs by a good number of people.  There is an <strong>application indicator</strong> to notify of new Gmail email called <strong>gm-notify</strong>:</p>
<pre>sudo apt-get install gm-notify</pre>
<p><strong>gm-notify</strong> can be configured additionally to play a sound when new mail arrives, check <code>/usr/lib/libreoffice/basis3.4/share/gallery/sounds/curve.wav</code> ia a possibility.</p>
<p>Other Indicators:</p>
<p>Additional <strong>application indicators</strong> can be found at <a href="http://askubuntu.com/questions/30334/list-of-application-indicators" target="_blank">Ask Ubuntu</a>.</p>
<p><strong>Laptop Touches</strong></p>
<p>For regular laptop users the thought of limiting the touchpad from accidental scrolling and mouse click tapping is kept in the front of the mind.  Consider using two-finger scrolling and disabling touchpad tapping instead.</p>
<p><strong>Firefox Security</strong></p>
<p>If on the Internet a lot, it’s a good idea to protect the application that primarily accesses it.  There is a nice script written by Ignorant Guru that puts Firefox in a sandbox.  To learn more read <a href="http://ubuntuforums.org/showthread.php?t=1398659&amp;" target="_blank">here</a>.  First install the <a href="http://igurublog.wordpress.com/downloads/ppa/" target="_blank">PPA</a> then install the script through the package manager:</p>
<pre>sudo apt-get update
sudo apt-get install sandfox</pre>
<p>The script is most productive in protecting from Adobe Flash security holes.  A perk of the script is that it allows Flash preferences to be saved; a disadvantage is this allows a security hole.  To plug the hole change the preference directories to read-only only by root:</p>
<pre>cd ~
rm -rf .adobe .macromedia
sudo mkdir .adobe .macromedia
sudo chmod ugo-wx .adobe .macromedia</pre>
<p>Then bind the folders read-only in the script:</p>
<pre>sed -i 's_^hide=/home/\\$user/.adobe.*$_bindro=/home/\\$user/.adobe      # bind folder read-only_g' /usr/bin/sandfox
sed -i 's_^hide=/home/\\$user/.macromedia.*$_bindro=/home/\\$user/.macromedia # bind folder read-only_g' /usr/bin/sandfox</pre>
<p>After this, the Sandfox package could be put on hold to prevent it from updating (thereby preserving changes made to the script):</p>
<pre>echo sandfox hold | sudo dpkg --set-selections</pre>
<p><strong><u>Under the Hood</u></strong></p>
<p>A few options on the system-level can help improve performance and help unexpected delays.</p>
<p><strong>No Timestamping on File Access</strong></p>
<p>Since Linuxs’ early days the kernel behavior has been to re-date a files’ timestamp every time a file is accessed.  This reasoning goes back to its’ server days when users were more interested in knowing when a file was accessed rather then when it was edited (written to).  For desktop users however the expected behavior is for the timestamp of a file to be when it was last edited.  Tagging the option <code>noatime</code> to the filesystem will give the expected behavior, also this option additionally improves system performance by saving a number of writes to the disk.  See more on this <a href="http://linuxtidbits.wordpress.com/2011/12/12/a-beautiful-fstab/" target="_blank">here</a>.</p>
<p><strong>Swap Value</strong></p>
<p>For computers with plenty of memory available (1 Gigabyte will be enough for most uses), lowering <a href="https://wiki.archlinux.org/index.php/Swap#Swappiness" target="_blank">swap priority</a> can help improve performance.  To change immediately do:</p>
<pre>sudo sysctl -w vm.swappiness=20
sudo sysctl -w vm.vfs_cache_pressure=50</pre>
<p>And to have it as this value used regularly add the values to <code>/etc/sysctl.conf</code>:</p>
<pre>vm.swappiness=20
vm.vfs_cache_pressure=50</pre>
<p><strong>Match Filesystem Check Times</strong></p>
<p>If more than one partition is used, having filesystem check times run at the same time will cause less number of unexpected boot delays.  This can be done with <strong>tune2fs</strong> (Ubuntus’ default value is 33 mounts and six months):</p>
<pre>sudo tune2fs -c 33 -C 0 -i 6m -T now /dev/partition1
sudo tune2fs -c 33 -C 0 -i 6m -T now /dev/partition2</pre>
<p><strong><u>Other Programs</u></strong></p>
<p>Other useful programs are these (most are additional command line utilities that come in useful down the road):</p>
<pre>sudo apt-get install cd-discid curl dos2unix dnsmasq epiphany-browser gdebi gimp gparted imagemagick inkscape iotop irssi lame librsvg2-bin links mp3gain msmtp openjdk-6-jre p7zip pdftk ppa-purge pwgen realpath ripit ruby tree unrar vim xclip</pre>
<p>Vims is set up well as is, but to make it even better use a more-optioned configuration:</p>
<pre>sudo mv /etc/vim/vimrc{,.bak}
sudo cp /usr/share/vim/vim73/vimrc_example.vim /etc/vim/vimrc</pre>
<p>Being on the Internet a good deal a Domain Name Server address cache/query daemon can help a lot with improving web browser load times, particularly during busy hours (the NetworkManager connection will need to be re-established afterward for changes to take effect):</p>
<pre>sudo sed -i 's:^#listen-address=:listen-address=127.0.0.1:g' /etc/dnsmasq.conf
sudo sed -i 's:^#prepend domain:prepend domain:' /etc/dhcp/dhclient.conf
sudo service dnsmasq restart</pre>
<p><strong><u>Extrenui</u></strong></p>
<ul>
<li><a href="http://linuxtidbits.wordpress.com/2011/10/05/stiffsticky-buttons-on-a-touchpad/" target="_blank">Missed Touchpad Button Clicks</a> – fix for a touchpad button that missed clicks regularly.</li>
<li><a href="http://linuxtidbits.wordpress.com/2008/02/28/ad-blocker-not-required-hosts-file/" target="_blank">Hosts File Help</a> – Only really a good idea for aging computers that can’t process complex ad-laden webpages.</li>
<li>Root Required – If around Linux for a bit eventually the root account will have to be used.  To work in a familiar environment when it root link common home settings: <code>sudo ln -s ~/.{bashrc,profile,vimrc,vim} /root</code></li>
</ul>
<p><strong><u>Editors’ Opinion</u></strong></p>
<p>I’m happy with my setup.  Originally I had thought I’d go straight to Gnome 3 Fallback but I’ve stuck with Unity and I like the simplicity of it; plus it runs well.  With a desktop setup like this, I’m beginning to feel productive.  Thanks to Linux and Ubuntu engineers that made this possible.</p>
<p><strong><u>Links</u></strong></p>
<ul>
<li><a href="http://www.linuxbsdos.com/2011/04/09/gnome-3-from-an-end-users-perspective/" target="_blank">Gnome 3 (Shell) Perspective</a></li>
<li><a href="http://www.omgubuntu.co.uk/2011/10/gnome-shell-ubuntu-11-10-guide/" target="_blank">Gnome 3 Installation</a></li>
</ul>
<p><a href="http://linuxtidbits.files.wordpress.com/2012/01/screenshot-at-2012-01-05-125943.png"><img alt="" class="alignleft size-full wp-image-1735" height="266" src="http://linuxtidbits.files.wordpress.com/2012/01/screenshot-at-2012-01-05-125943.png?w=474&amp;h=266" title="Screenshot at 2012-01-05 12:59:43" width="474"/></a></p>
<br/>  <a href="http://feeds.wordpress.com/1.0/gocomments/linuxtidbits.wordpress.com/1729/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/linuxtidbits.wordpress.com/1729/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/linuxtidbits.wordpress.com/1729/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/linuxtidbits.wordpress.com/1729/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/linuxtidbits.wordpress.com/1729/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/linuxtidbits.wordpress.com/1729/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/linuxtidbits.wordpress.com/1729/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/linuxtidbits.wordpress.com/1729/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/linuxtidbits.wordpress.com/1729/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/linuxtidbits.wordpress.com/1729/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/linuxtidbits.wordpress.com/1729/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/linuxtidbits.wordpress.com/1729/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/linuxtidbits.wordpress.com/1729/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/linuxtidbits.wordpress.com/1729/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1729&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2012-01-06T21:41:42Z</updated>
    <category term="Linux"/>
    <category term="Ubuntu"/>
    <author>
      <name>Todd Partridge (Gen2ly)</name>
    </author>
    <source>
      <id>http://linuxtidbits.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/5ad9566326fdd6b7f4e8af74375a3cac?s=96&amp;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</logo>
      <link href="http://linuxtidbits.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://linuxtidbits.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://linuxtidbits.wordpress.com/osd.xml" rel="search" title="Linux Tidbits" type="application/opensearchdescription+xml"/>
      <link href="http://linuxtidbits.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Every letter has its place</subtitle>
      <title>Linux Tidbits</title>
      <updated>2012-02-12T23:43:18Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>tag:www.archlinux.org,2012-01-02:/news/users-of-unofficial-kernels-must-enable-devtmpfs-support/</id>
    <link href="http://www.archlinux.org/news/users-of-unofficial-kernels-must-enable-devtmpfs-support/" rel="alternate" type="text/html"/>
    <title>Users of unofficial kernels must enable devtmpfs support</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Tom Gundersen wrote:</p>
<p>As of udev-176, the Arch Linux userspace tools will no longer be able to boot kernels without devtmpfs support.</p>
<p>The official Arch kernels (<code>kernel26-lts</code> and <code>linux</code>) have both had devtmpfs support for a long time, so only people who compile their own kernels are potentially affected by this change.</p>
<p>More information about the kernel options required by udev is available in the udev <a href="http://git.kernel.org/?p=linux/hotplug/udev.git;a=blob_plain;f=README">README</a>.</p></div>
    </summary>
    <updated>2012-01-02T19:52:04Z</updated>
    <author>
      <name>Tom Gundersen</name>
    </author>
    <source>
      <id>http://www.archlinux.org/news/</id>
      <link href="http://www.archlinux.org/news/" rel="alternate" type="text/html"/>
      <link href="http://www.archlinux.org/feeds/news/" rel="self" type="application/rss+xml"/>
      <subtitle>The latest and greatest news from the Arch Linux distribution.</subtitle>
      <title>Arch Linux: Recent news updates</title>
      <updated>2012-02-07T10:43:02Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://allanmcrae.com/?p=1388</id>
    <link href="http://allanmcrae.com/2012/01/secure-wordpress-administration-for-free/" rel="alternate" type="text/html"/>
    <title>Secure WordPress Administration For Free</title>
    <summary>Many months ago I noticed that I logged into my blog over plain HTTP and thought to myself that I really must do something about that one day. And that day is… well… a couple of days ago! I honestly was never really too concerned about logging in insecurely as the chances of anyone actually [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Many months ago I noticed that I logged into my blog over plain HTTP and thought to myself that I really must do something about that one day.  And that day is… well… a couple of days ago!  I honestly was never really too concerned about logging in insecurely as the chances of anyone actually wanting to gain access to this blog and being in a position to exploit the insecure login is minimal.  My guess would be that the majority of self-managed WordPress installs are administered over plain HTTP.</p>
<p>So apart from general apathy, what kept me from fixing this?  Cost was probably the main issue…  Any cost for a SSL certificate would not be particularly justified in my case.  I also did not want to use a self-signed certificate as I find the security warnings that all web browsers give about untrusted certificates annoying enough to not want them on my site.  That also rules out the free SSL certificates from CAcert, as the CAcert root certificate is not included by most browsers by default.</p>
<p>Then I saw a post somewhere about the free certificates given out by <a href="https://www.startssl.com/?app=1">StartSSL</a>.  The price is right and the root certificate is commonly included so all seems good.  There is not much actual validation that goes on to get one of these – my email and domain name were “verified” by sending emails… – so they would not be good for any site where trust is actually needed (such as anything where any personal and financial data are being collected).</p>
<p>Once validated, all I had to do was provide a <a href="http://en.wikipedia.org/wiki/Certificate_signing_request">CSR</a> and they provided me the certificate.  My webhost then uploaded that certificate and broke everything!  The HTTPS version of my site was giving the error “ssl_error_rx_record_too_long”, which is actually quite uninformative as it covers a wide range of actual issues, and the HTTP version for some reason lost all access to files even thought they were clearly still there when I checked.  This took me a few hours to notice as I had to wait for the DNS entries to propagate, so the issue was reported at 5pm on Friday the 30th of December…  I really thought my website would be down until the 3nd of January when the support desk reopened, but everything was fixed a few hours later.  So good service given what I pay, but the whole issue could have been avoided with a simple check at their end once the SSL certificate was installed.</p>
<p>Once you have your SSL certificate installed and ready to go, making WordPress enforce SSL usage for all administration tasks is simple.  Simply add the following to your <tt>wp-config.php</tt> file:</p>
<p><code>define('FORCE_SSL_ADMIN', true);</code></p>
<p>Now all your blog administration is secure(ish). The final thing to do was to check whether browsing my website using HTTPS worked…   No, it did not!  I was getting messages about the site only being partially encrypted.  A quick search showed I serve all my images using the full URL rather than a relative one.  I did this because a certain Linux distribution’s Planet feed did not show images otherwise (or at least that was the case a long time ago – I have not tested lately).  I could go through and adjust all my image links to use HTTPS, or just disable HTTPS access to my website.  I chose the latter as nothing on my site is that important that it needs to be encrypted and I thought it would be the quicker option…   Several hours later and this is the rule you need to add to your <tt>.htaccess</tt> file to achieve this:</p>
<p><code>RewriteCond %{ENV:HTTPS} on [NC]<br/>
RewriteRule !^wp-(admin/|login.php|includes/|content/)(.*)$ http://allanmcrae.com%{REQUEST_URI} [R,L]</code></p>
<p>The only real trick there is that the WordPress login and administration interface uses files from the <tt>wp-includes</tt> and <tt>wp-contents</tt> directories so they need to be excluded from the <tt>RewriteRule</tt>.</p>
<p>So… remember how I said self-signed certificates were annoying as all visitors to the site would get a warning.  Well, now I force HTTP usage, that whole argument is irrelevant as only I would see the SSL certificate when I access the administration interface.  But I at least have the option of serving parts of the site over HTTPS using a recognized certificate if I ever feel the need.</p></div>
    </content>
    <updated>2012-01-02T00:23:27Z</updated>
    <category term="WebSite"/>
    <author>
      <name>Allan</name>
    </author>
    <source>
      <id>http://allanmcrae.com</id>
      <link href="http://allanmcrae.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://allanmcrae.com" rel="alternate" type="text/html"/>
      <subtitle>One day this will feature a witty tagline…</subtitle>
      <title>Allan McRae</title>
      <updated>2012-02-12T23:43:05Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-7294570488493010234.post-8779123095135271461</id>
    <link href="http://bashlnx.blogspot.com/2011/12/buoni-propositi-per-il-2012.html" rel="alternate" type="text/html"/>
    <title>Buoni propositi per il 2012</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div><div>Prendo spunto dal <a href="http://ugaciaka.wordpress.com/2009/11/28/i-have-a-plan/">post di ugaciaka</a> per scrivere i miei buoni propositi per il 2012:<br/><br/><ul><li>Tanto per iniziare conto di laurearmi entro la fine dell'anno; mi farò chiamare Dottore e riattaccherò il telefono a chi mi chiede perché non si vedono i video su facebook.</li></ul><ul><li>Scriverò almeno un'applicazione per Android; opensource, e magari riesco pure a pagarmi le spese minori.</li></ul><ul><li>Continuerò a tenermi stretta la mia ragazza; e chi ti molla.</li></ul><ul><li>Varie ed eventuali :)</li></ul><br/>Felice anno nuovo a tutti!</div></div><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/7294570488493010234-8779123095135271461?l=bashlnx.blogspot.com" width="1"/></div></div>
    </summary>
    <updated>2011-12-31T12:43:00Z</updated>
    <category scheme="http://www.blogger.com/atom/ns#" term="italian"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="me"/><geo:lat xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">40.202698</geo:lat><geo:long xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">18.303547</geo:long>
    <author>
      <name>Andrea Scarpino</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7294570488493010234</id>
      <category term="Arch Linux Italia"/>
      <category term="packages"/>
      <category term="italian"/>
      <category term="KDE"/>
      <category term="kde-unstable"/>
      <category term="me"/>
      <category term="wallpapers"/>
      <category term="srcpac"/>
      <category term="tools"/>
      <category term="software"/>
      <category term="GNU/Linux"/>
      <category term="tips"/>
      <category term="N900"/>
      <category term="howto"/>
      <category term="awesome"/>
      <category term="script"/>
      <category term="repoman"/>
      <category term="plugins"/>
      <category term="Arch Linux"/>
      <category term="hardware"/>
      <category term="UniBA"/>
      <category term="Maemo"/>
      <author>
        <name>Andrea Scarpino</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://bashlnx.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://bashlnx.blogspot.com/feeds/posts/default/?alt=rss" rel="self" type="application/rss+xml"/>
      <subtitle>A blog about a GNU/Linux user</subtitle>
      <title>bash's blog</title>
      <updated>2012-02-06T06:43:08Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://archlinux.me/dusty/?p=492</id>
    <link href="http://archlinux.me/dusty/2011/12/27/pyjaco-and-jquery/" rel="alternate" type="text/html"/>
    <title>pyjaco and jQuery</title>
    <summary>After giving up on CoffeeScript, I decided to play around with Pyjaco the Python to Javascript Compiler. While the code is readable, there is very little in the way of end-user documentation. I hope to address this with this blog post. The Pyjaco examples all embed generated javascript in an html page. I needed a [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>After <a href="http://archlinux.me/dusty/2011/12/27/i-cant-use-coffeescript/">giving up</a> on CoffeeScript, I decided to play around with <a href="http://pyjaco.org/">Pyjaco</a> the Python to Javascript Compiler.</p>
<p>While the code is readable, there is very little in the way of end-user documentation. I hope to address this with this blog post. The Pyjaco examples all embed generated javascript in an html page. I needed a way to generate an external Javascript file as I would include in an HTML file. I also wanted to find out if I could use Pyjaco with jQuery.</p>
<p>The first step was to install a development version of Pyjaco:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family: monospace;"><span style="color: #c20cb9; font-weight: bold;">git</span> clone https:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>chrivers<span style="color: #000000; font-weight: bold;">/</span>pyjaco.git</pre></div></div>

<p>Pyjaco normally requires a generated Javascript file mapping Python builtins to Javascript to be included with the created Javascripts. This must be generated:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family: monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> pyjaco
python2 generate_library.py
<span style="color: #c20cb9; font-weight: bold;">cp</span> py-builtins.js ~<span style="color: #000000; font-weight: bold;">/</span>pyjaco_test <span style="color: #666666; font-style: italic;"># directory for my new page</span></pre></div></div>

<p>The next step was to create an HTML file that included jquery, the py-builtins.js script above, and a yet-to be defined javascript file named clicker.js that will be generated from a yet-to-be-defined python file. I also add a couple of DOM elements (a heading and paragraph) that are to be manipulated via jQuery:</p>
<p>
&lt;!DOCTYPE html&gt;<br/>
&lt;html&gt;<br/>
	&lt;head&gt;<br/>
    &lt;script type=”text/javascript” src=”jquery-1.6.4.min.js”&gt;&lt;/script&gt;<br/>
    &lt;script type=”text/javascript” src=”py-builtins.js”&gt;&lt;/script&gt;<br/>
    &lt;script type=”text/javascript” src=”clicker.js”&gt;&lt;/script&gt;<br/>
  &lt;/head&gt;<br/>
&lt;body&gt;<br/>
  &lt;h1&gt;Click me&lt;/h1&gt;<br/>
  &lt;p id=”when_clicked”&gt;&lt;/p&gt;<br/>
&lt;/body&gt;<br/>
&lt;/html&gt;
</p>
<p>
That’s the easy part. Writing python code that compiles to correct Javascript is the hard part. Pyjaco doesn’t currently provide very useful compile-time errors, and it also does not yet map javascript errors back to the input python.
</p>
<p>
There are (at least) two ways to compile python code in Pyjaco. The first, which is used in the Pyjaco examples, and appears to be the preferred method at this time is to create a custom <code>main()</code> method that uses various <code>pyjaco.Compiler</code> methods to combine the functions into a string of text. See <a href="https://github.com/chrivers/pyjaco/tree/devel/examples">https://github.com/chrivers/pyjaco/tree/devel/examples</a> for three examples.
</p>
<p>
However, I was looking to have a complete python file that compiles to a complete javascript file. Pyjaco supports this as well, using the provided pyjs.py script. It took some investigating to understand how to reference javascript variables inside python functions. Decorator syntax is used to expose the variables for <code>jQuery</code>, <code>Math.random</code>, and <code>Math.floor</code> in the following example. The mystifying bit is that because we will be compiling this file to javascript as a string, it is not necessary (or possible) to import the <code>JSVar</code> decorator, as was done in the Pyjaco examples linked above.
</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family: monospace;"><span style="color: #808080; font-style: italic;"># clicker.py</span>
@JSVar<span style="color: black;">(</span><span style="color: #483d8b;">"jQuery"</span><span style="color: black;">)</span>
<span style="color: #ff7700; font-weight: bold;">def</span> ready<span style="color: black;">(</span><span style="color: black;">)</span>:
    jQuery<span style="color: black;">(</span><span style="color: #483d8b;">'h1'</span><span style="color: black;">)</span>.<span style="color: black;">click</span><span style="color: black;">(</span>on_click<span style="color: black;">)</span>
 
@JSVar<span style="color: black;">(</span><span style="color: #483d8b;">"jQuery"</span>, <span style="color: #483d8b;">"Math.random"</span>, <span style="color: #483d8b;">"Math.floor"</span><span style="color: black;">)</span>
<span style="color: #ff7700; font-weight: bold;">def</span> on_click<span style="color: black;">(</span><span style="color: black;">)</span>:
    <span style="color: #ff7700; font-weight: bold;">if</span> jQuery<span style="color: black;">(</span><span style="color: #483d8b;">'#when_clicked'</span><span style="color: black;">)</span>.<span style="color: black;">html</span><span style="color: black;">(</span><span style="color: black;">)</span>:
        r = Math.<span style="color: black;">floor</span><span style="color: black;">(</span>Math.<span style="color: #dc143c;">random</span><span style="color: black;">(</span><span style="color: black;">)</span> <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">255</span><span style="color: black;">)</span>
        g = Math.<span style="color: black;">floor</span><span style="color: black;">(</span>Math.<span style="color: #dc143c;">random</span><span style="color: black;">(</span><span style="color: black;">)</span> <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">255</span><span style="color: black;">)</span>
        b = Math.<span style="color: black;">floor</span><span style="color: black;">(</span>Math.<span style="color: #dc143c;">random</span><span style="color: black;">(</span><span style="color: black;">)</span> <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">255</span><span style="color: black;">)</span>
        color = <span style="color: #483d8b;">"rgb(%d, %d, %d)"</span> <span style="color: #66cc66;">%</span><span style="color: black;">(</span>r,g,b<span style="color: black;">)</span>
        jQuery<span style="color: black;">(</span><span style="color: #483d8b;">'#when_clicked'</span><span style="color: black;">)</span>.<span style="color: black;">attr</span><span style="color: black;">(</span><span style="color: #483d8b;">'style'</span>, <span style="color: #483d8b;">'background-color: '</span> + color<span style="color: black;">)</span>
    <span style="color: #ff7700; font-weight: bold;">else</span>:
        jQuery<span style="color: black;">(</span><span style="color: #483d8b;">'#when_clicked'</span><span style="color: black;">)</span>.<span style="color: black;">html</span><span style="color: black;">(</span><span style="color: #483d8b;">"you clicked it!"</span><span style="color: black;">)</span>
 
jQuery<span style="color: black;">(</span>ready<span style="color: black;">)</span></pre></div></div>

<p>
Notice that I’m using the jQuery function instead of the $ alias, since $ is not a valid variable name in Python. This is a rather odd looking mix of Python and Javascript functions, but it works.
</p>
<p>
I had to repeat the compile and test step a few times before coming up with the above file. The script can be compiled using the pyjs.py that comes with the pyjaco source distribution (and, thanks to a <a href="https://github.com/chrivers/pyjaco/commit/5737f701d59c229d62f25734260fccb23722a67d">simple patch</a> I submitted, will come with the binary distribution in the next release.) Here’s how the script is run:
</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family: monospace;">python2 ~<span style="color: #000000; font-weight: bold;">/</span>code<span style="color: #000000; font-weight: bold;">/</span>pyjaco<span style="color: #000000; font-weight: bold;">/</span>pyjs.py <span style="color: #660033;">-N</span> <span style="color: #660033;">--output</span> clicker.js clicker.py</pre></div></div>

<p>
The -N option tells pyjs not to generate the builtin library that we created manually in the first step.
</p>
<p>
This translation step creates a <code>clicker.js</code> file that looks like this:
</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family: monospace;"><span style="color: #003366; font-weight: bold;">var</span> ready <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
    <span style="color: #003366; font-weight: bold;">var</span> __kwargs <span style="color: #339933;">=</span> __kwargs_get<span style="color: #009900;">(</span>arguments<span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> __varargs <span style="color: #339933;">=</span> __varargs_get<span style="color: #009900;">(</span>arguments<span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> $v1 <span style="color: #339933;">=</span> Array.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">slice</span>.<span style="color: #660066;">call</span><span style="color: #009900;">(</span>arguments<span style="color: #009900;">)</span>.<span style="color: #660066;">concat</span><span style="color: #009900;">(</span>js<span style="color: #009900;">(</span>__varargs<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    jQuery<span style="color: #009900;">(</span><span style="color: #3366CC;">"h1"</span><span style="color: #009900;">)</span>.<span style="color: #660066;">click</span><span style="color: #009900;">(</span>on_click<span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">return</span> None<span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
<span style="color: #003366; font-weight: bold;">var</span> on_click <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
    <span style="color: #003366; font-weight: bold;">var</span> __kwargs <span style="color: #339933;">=</span> __kwargs_get<span style="color: #009900;">(</span>arguments<span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> __varargs <span style="color: #339933;">=</span> __varargs_get<span style="color: #009900;">(</span>arguments<span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> $v2 <span style="color: #339933;">=</span> Array.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">slice</span>.<span style="color: #660066;">call</span><span style="color: #009900;">(</span>arguments<span style="color: #009900;">)</span>.<span style="color: #660066;">concat</span><span style="color: #009900;">(</span>js<span style="color: #009900;">(</span>__varargs<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">(</span>bool<span style="color: #009900;">(</span>jQuery<span style="color: #009900;">(</span><span style="color: #3366CC;">"#when_clicked"</span><span style="color: #009900;">)</span>.<span style="color: #660066;">html</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #339933;">===</span> <span style="color: #003366; font-weight: bold;">True</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
        <span style="color: #003366; font-weight: bold;">var</span> r <span style="color: #339933;">=</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">(</span><span style="color: #009900;">(</span>Math.<span style="color: #660066;">random</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #339933;">*</span> <span style="color: #009900;">(</span><span style="color: #CC0000;">255</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #003366; font-weight: bold;">var</span> g <span style="color: #339933;">=</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">(</span><span style="color: #009900;">(</span>Math.<span style="color: #660066;">random</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #339933;">*</span> <span style="color: #009900;">(</span><span style="color: #CC0000;">255</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #003366; font-weight: bold;">var</span> b <span style="color: #339933;">=</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">(</span><span style="color: #009900;">(</span>Math.<span style="color: #660066;">random</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #339933;">*</span> <span style="color: #009900;">(</span><span style="color: #CC0000;">255</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #003366; font-weight: bold;">var</span> color <span style="color: #339933;">=</span> str<span style="color: #009900;">(</span><span style="color: #3366CC;">'rgb(%d, %d, %d)'</span><span style="color: #009900;">)</span>.<span style="color: #660066;">PY</span>$__mod__<span style="color: #009900;">(</span>tuple<span style="color: #009900;">(</span><span style="color: #009900;">[</span>r<span style="color: #339933;">,</span> g<span style="color: #339933;">,</span> b<span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        jQuery<span style="color: #009900;">(</span><span style="color: #3366CC;">"#when_clicked"</span><span style="color: #009900;">)</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">(</span><span style="color: #3366CC;">"style"</span><span style="color: #339933;">,</span> <span style="color: #009900;">(</span><span style="color: #3366CC;">"background-color: "</span><span style="color: #009900;">)</span> <span style="color: #339933;">+</span> <span style="color: #009900;">(</span>color<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">{</span>
        jQuery<span style="color: #009900;">(</span><span style="color: #3366CC;">"#when_clicked"</span><span style="color: #009900;">)</span>.<span style="color: #660066;">html</span><span style="color: #009900;">(</span><span style="color: #3366CC;">"you clicked it!"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>
<span style="color: #000066; font-weight: bold;">return</span> None<span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
jQuery<span style="color: #009900;">(</span>ready<span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre></div></div>

<p>
I find this rather unfortunately difficult to read. There is code for argument parsing that would not have been needed if I had hand-written javascript. Further the use of “mock” python builtins makes the javascript look less javascripty. However, the original python file looks much more readable than an equivalent javascript one would. I am hopeful that improvements to pyjaco will cause it to generate more readable javascript with less extraneous code.
</p>
<p>
The entire example can be found <a href="https://github.com/buchuki/pyjaco/tree/documentation/examples/jquery">on my github fork</a>
</p>
<p>
<a href="https://github.com/chrivers">Christian Iversen</a> is actively working on Pyjaco right now. I am excited about this project and hope that further community involvement will help it evolve into a practical and useful tool. I intend my next patch to be an autocompile tool that monitors files in one directory for change and outputs .js files in another directory, one of CoffeeScript’s killer features. I am also considering a port to Python 3.</p></div>
    </content>
    <updated>2011-12-27T22:53:36Z</updated>
    <category term="Uncategorized"/>
    <category term="javascript"/>
    <category term="jquery"/>
    <category term="pyjaco"/>
    <category term="python"/>
    <author>
      <name>dusty</name>
    </author>
    <source>
      <id>http://archlinux.me/dusty</id>
      <link href="http://archlinux.me/dusty/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://archlinux.me/dusty" rel="alternate" type="text/html"/>
      <subtitle>A little more of everything, please</subtitle>
      <title>Dusty's Diverse Domain</title>
      <updated>2012-01-20T17:13:18Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://archlinux.me/dusty/?p=489</id>
    <link href="http://archlinux.me/dusty/2011/12/27/i-cant-use-coffeescript/" rel="alternate" type="text/html"/>
    <title>I can’t use CoffeeScript</title>
    <summary>I had some space between wrapping up my last contract on December 20, and starting my new job on January 16. I decided it was finally time to build a simple task management system, something I’ve attempted to do and never finished several times before. I currently use RememberTheMilk, which is a lovely service, but [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I had some space between wrapping up my last contract on December 20, and starting my new job on January 16. I decided it was finally time to build a simple task management system, something I’ve attempted to do and never finished several times before. I currently use RememberTheMilk, which is a lovely service, but I don’t like paying them for mobile access. Further, even though I trust this small company, I see no reason to share intimate information about the tasks I accomplish every day with them. My long term goal is to pull as much of my personal data out of the cloud as I possibly can. This project is a step towards that goal.</p>
<p>There are numerous open source task manager apps out there that I’m sure would suit my not-too-exotic tastes. However, I also wanted to take this opportunity to learn a bunch of new technologies for an offline-enabled and mobile-enabled web application.</p>
<p>Therefore, I’ve spent most of my vacation time so far researching some technologies I haven’t had a chance to explore in the past year. <a href="http://jquerymobile.com">JQuery Mobile</a> was at the top of the list. I think it’s a lovely framework and I expect to continue using it.</p>
<p>I also wanted to try out CoffeeScript, as I’ve always hated writing Javascript, and I wanted to use some sort of client-side ORM for localstorage. I looked at backbone.js, but was more attracted to <a href="http://spinejs.com">Spine.js</a>. I have spent three days studying and playing with these two technologies. I am still undecided about Spine.js, but I have come to the conclusion that CoffeeScript is not for me.</p>
<p>I understand all the hype around the project. JavaScript really does suck. And CoffeeScript does suck less, it has pretty language features and it is much more succinct than JavaScript. I can imagine a lot of people being really excited about CofeeScript, especially Ruby and PERL programmers, and possibly even php programmers.</p>
<p>But not Python programmers. I tried to learn Ruby several times, and each time I was left with a foul taste in my mouth. It’s not a bad language, it just doesn’t fit in well with my personal philosophy. My personal philosophy happens to coincide almost exactly with the <a href="http://c2.com/cgi/wiki?PythonPhilosophy">Zen Of Python</a>. I chose Python because it matched my philosophy… not the other way around.</p>
<p>Like Ruby and PERL, CoffeeScript violently violates what I consider the most important rule of Python: “There should be one — and preferably only one — obvious way to do it.” I’m not going to argue why this is a good idea, I understand that some programmers prefer the “even if I don’t understand it, I can write code that will probably work” paradigm that Ruby promotes.</p>
<p>The simple truth is, writing CoffeeScript leaves me feeling like I’ve done something dirty, no less dirty than writing JavaScript. There is no incentive for me to add a layer of complexity (the CoffeeScript to JavaScript compile step) to my code when I know my code is going to be “ugly” either way.</p>
<p>CoffeeScript is a wonderful idea. It’s far better than JavaScript. It’s just not good enough. Luckily, the Python community is already working on pythonic answers, including the evilly poorly documented <a href="http://pyjaco.org/about">pyjaco</a> and the less-than-well maintained <a href="http://www.allbuttonspressed.com/blog/django/2010/07/PyvaScript-Pythonic-syntax-for-your-browser">pyvascript</a> and <a href="http://pyjs.org/">pyjamas</a> projects. I hope one of these or a new upstart will soon gain community momentum so frontend development is no longer painful.</p></div>
    </content>
    <updated>2011-12-27T17:45:22Z</updated>
    <category term="Uncategorized"/>
    <category term="coffeescript"/>
    <category term="javascript"/>
    <category term="offline"/>
    <category term="python"/>
    <category term="todos"/>
    <author>
      <name>dusty</name>
    </author>
    <source>
      <id>http://archlinux.me/dusty</id>
      <link href="http://archlinux.me/dusty/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://archlinux.me/dusty" rel="alternate" type="text/html"/>
      <subtitle>A little more of everything, please</subtitle>
      <title>Dusty's Diverse Domain</title>
      <updated>2012-01-20T17:13:18Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://archlinux.me/dusty/?p=486</id>
    <link href="http://archlinux.me/dusty/2011/12/27/internet-privacy-for-dummies/" rel="alternate" type="text/html"/>
    <title>Internet Privacy for Dummies</title>
    <summary>I know my recent blog entries have tended towards rants on Internet privacy. It blows my mind that more people aren’t worried about it. I’m not one to repost links on my blog, my readers know I prefer to have new content as much as possible. But this link is a wonderful summary of why [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I know my recent blog entries have tended towards rants on Internet privacy. It blows my mind that more people aren’t worried about it.</p>
<p>I’m not one to repost links on my blog, my readers know I prefer to have new content as much as possible. But this link is a wonderful summary of why normal people should be worried about privacy, and it’s outlined in a way that your mother can understand:</p>
<p><a href="http://donttrack.us/">http://donttrack.us/</a></p>
<p>It doesn’t go as far as I would like (Facebook tracking is an even more serious offence), but it’s a good start for people who need to understand why privacy should be taken seriously.</p>
<p>This link is an advertisement for the duckduckgo search engine. I personally have switched from <a href="http://scroogle.org/">Scroogle</a> to <a href="http://startingpage.com/">Starting Page</a>. It is billed as the worlds most private search engine and has apparently been independently verified by a third party. However, Duck Duck Go may be a viable alternative as well.</p>
<p>My friend <a href="http://pyther.net/">Matthew</a> did not like the RequestPolicy plugin that I recommended because it required too much interaction to make sites work. He found the <a href="http://www.ghostery.com/">Ghostery</a> plugin which works for most web browsers and does an exceptional job of removing most data trackers without any user interaction. I love this plugin! I’ve been using it for a month or so now and have experienced no broken websites. I trust it enough to put it on my family’s web browsers without them experiencing any breakage. Protecting their privacy will indirectly protect mine.</p>
<p>I am still being tracked on my mobile phone browser. If anyone can recommend a similar plugin for Blackberry or Android browsers, I would appreciate it.</p>
<p>I’ve started using bookmarks and search bookmarks a lot more often again. I had gotten in the habit of using the omni-bar for everything. Now instead of Googling the weather in some city, I search Weather Underground directly. Instead of searching google for a word definition, I search m.dictionary.com directly (the mobile site has a cleaner interface than their main one). Instead of searching for a site I had stumbled across in the past, I bookmark the site the first time I see it so I can request it without letting any search engines know I was looking for it.</p></div>
    </content>
    <updated>2011-12-27T17:18:53Z</updated>
    <category term="Uncategorized"/>
    <category term="privacy"/>
    <author>
      <name>dusty</name>
    </author>
    <source>
      <id>http://archlinux.me/dusty</id>
      <link href="http://archlinux.me/dusty/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://archlinux.me/dusty" rel="alternate" type="text/html"/>
      <subtitle>A little more of everything, please</subtitle>
      <title>Dusty's Diverse Domain</title>
      <updated>2012-01-20T17:13:19Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://linuxtidbits.wordpress.com/?p=1713</id>
    <link href="http://linuxtidbits.wordpress.com/2011/12/26/western-digital-my-book-essential-external-hard-drive-on-linux/" rel="alternate" type="text/html"/>
    <title>Western Digital My Book Essential External Hard Drive on Linux</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I decided to sell my desktop computer and use my laptop exclusively, I had no need to keep another computer and since I was only using it for doing backups I decided it would be better to save some space. I choose to get a Western Digital because they have been so reliable to me [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1713&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://linuxtidbits.files.wordpress.com/2011/12/harddrive-150.png"><img alt="" class="alignright size-full wp-image-1709" src="http://linuxtidbits.files.wordpress.com/2011/12/harddrive-150.png?w=474" title="harddrive-150"/></a>I decided to sell my desktop computer and use my laptop exclusively, I had no need to keep another computer and since I was only using it for doing backups I decided it would be better to save some space.</p>
<p>I choose to get a Western Digital because they have been so reliable to me in the past.  Of the external hard drives available at Wal-Mart it initially appeared not the be the best value.  A Seagate right next to it was also a terabtye in storage capacity but also had USB 3.0 capability for only $15 dollars more.  The WD Essentials has only USB 2.0 and I know that 3.0 is supposed to be considerable faster than 2.0.  However, for me, my laptop is only USB 1.0 so this didn’t factor into it; also, because I am only using this for backups, time isn’t much of a factor and I prefer to have the reliability of the Western Digital name.</p>
<p><a href="http://linuxtidbits.files.wordpress.com/2011/12/wdmybookessential.png"><img alt="" class="alignleft size-full wp-image-1711" src="http://linuxtidbits.files.wordpress.com/2011/12/wdmybookessential.png?w=474" title="wdmybookessential"/></a>The My Book Essential HD has a capacity meter on the front to display how full the disk is.  I learned though, unfortunately, that this only works through the Windows driver and using the NTFS file system.  Because I’m going to be using this for backups on Linux with ext4 this feature isn’t available.</p>
<p>Since I have a Windows system installed I retrospectively learned that it is a good idea to install the driver/software for the drive there to setup the drive for only the reason so that I could disable the VCD.  The Virtual CD Drive is a built-in memory chip that registers to the operating system as a regular CD drive.  On it it contains the driver/software installer and manual.  As far as the driver/software goes its nicer than I’ve seen of other hardware’s software, it was lightweight, easy to use, and with no frills.  For Linux though the driver/software is unecessary as it is automatically recognized and working out of the box.  I disabled the VCD drive with the Windows software though to keep the VCD from popping up when I loaded my Linux desktop.</p>
<p>I ran a S.M.A.R.T. conveyance test and extended test on it then did a thorough badblocks write test that took about 24 hours… all tests passed.</p>
<p>Formatting to ext4, the drive works perfectly in Linux without any additional configuration (besides <code>noatime</code>.  I’ve been using the hard drive the last couple of months and I’m real happy with it: it’s small, quiet, and has done it’s job without a hitch.</p>
<br/>  <a href="http://feeds.wordpress.com/1.0/gocomments/linuxtidbits.wordpress.com/1713/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/linuxtidbits.wordpress.com/1713/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/linuxtidbits.wordpress.com/1713/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/linuxtidbits.wordpress.com/1713/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/linuxtidbits.wordpress.com/1713/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/linuxtidbits.wordpress.com/1713/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/linuxtidbits.wordpress.com/1713/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/linuxtidbits.wordpress.com/1713/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/linuxtidbits.wordpress.com/1713/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/linuxtidbits.wordpress.com/1713/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/linuxtidbits.wordpress.com/1713/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/linuxtidbits.wordpress.com/1713/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/linuxtidbits.wordpress.com/1713/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/linuxtidbits.wordpress.com/1713/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1713&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2011-12-26T16:46:22Z</updated>
    <category term="Linux"/>
    <category term="external hard drives"/>
    <category term="linux desktop"/>
    <author>
      <name>Todd Partridge (Gen2ly)</name>
    </author>
    <source>
      <id>http://linuxtidbits.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/5ad9566326fdd6b7f4e8af74375a3cac?s=96&amp;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</logo>
      <link href="http://linuxtidbits.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://linuxtidbits.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://linuxtidbits.wordpress.com/osd.xml" rel="search" title="Linux Tidbits" type="application/opensearchdescription+xml"/>
      <link href="http://linuxtidbits.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Every letter has its place</subtitle>
      <title>Linux Tidbits</title>
      <updated>2012-02-12T23:43:18Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://linuxtidbits.wordpress.com/?p=1685</id>
    <link href="http://linuxtidbits.wordpress.com/2011/12/22/display-size-dpi-and-text-size-an-interesting-diy/" rel="alternate" type="text/html"/>
    <title>Display Size, DPI, and Text Size… an interesting DIY</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I just got a new monitor to be able to use as an external monitor for my laptop. While I was setting it up I noticed that the monitors display size wasn’t correctly detected. The Xorg server does a good job auto-configuring however this caught my eye: $ xdpyinfo | grep -B2 resolution dimensions: 1920x1080 [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1685&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://linuxtidbits.files.wordpress.com/2011/12/preferences-desktop-display-150.png"><img alt="" class="alignright size-full wp-image-1686" src="http://linuxtidbits.files.wordpress.com/2011/12/preferences-desktop-display-150.png?w=474" title="preferences-desktop-display-150"/></a>I just got a new monitor to be able to use as an external monitor for my laptop.  While I was setting it up I noticed that the monitors display size wasn’t correctly detected.  The Xorg server does a good job auto-configuring however this caught my eye:</p>
<pre>$ xdpyinfo | grep -B2 resolution
  dimensions:    1920x1080 pixels (508x286 millimeters)
  resolution:    96x96 dots per inch</pre>
<p>The monitor I got is a 21.5″ monitor so I figured the DPI was off.  I decided to calculate it myself (this is a square pixel monitor):</p>
<pre>res_horz=1920
res_vert=1080
res_diag=$(echo "scale=5;sqrt($res_horz^2+$res_vert^2)" | bc)
siz_diag=21.5
siz_horz=$(echo "scale=5;($siz_diag/$res_diag)*$res_horz*25.4" | bc)
siz_vert=$(echo "scale=5;($siz_diag/$res_diag)*$res_vert*25.4" | bc)

echo "$siz_horz"x"$siz_vert"
475.48800x267.46200</pre>
<p>Also there are online DPI Calculators ([<a href="http://members.ping.de/~sven/dpi.html" target="_blank">1</a>] [<a href="http://pxcalc.com/" target="_blank">2</a>]) and xrandr:</p>
<pre>em_ds_h=$(xrandr | grep VGA-0 | rev | cut -d " " -f 3 | rev | sed 's/mm//')
em_ds_v=$(xrandr | grep VGA-0 | rev | cut -d " " -f 1 | rev | sed 's/mm//')
em_ds="$em_ds_h"x"$em_ds_v"

echo $em_ds
477x268</pre>
<p>My discovered value and theirs are a couple millimeters off overall so I just used theirs.  I created a configuration to define the display size to the the Xorg server.  A basic configuration to <a href="https://wiki.archlinux.org/index.php/Xorg#Display_Size_and_DPI" target="_blank">define display size</a> can be done like this:</p>
<p><code>
</code></p><pre><code>cat /usr/share/X11/xorg.conf.d/90-monitor-disp-size.conf
Section "Monitor"
  Identifier "&lt;default monitor&gt;"
  DisplaySize 477 268
EndSection</code></pre><code>
</code><p><code/></p>
<p>Ubuntu uses <code>/usr/share/X11/xorg.conf.d/</code> Arch Linux and some other use <code>/etc/X11/xorg.conf.d/</code> (better choice I think).  However this won’t work on the external monitor.  So I expanded on it (more than it probably needed to be) by defining both monitors and related sections:</p>
<pre>Section "Monitor"
  Identifier    "Internal - Pavilion Laptop"
  DisplaySize    304.5 228.6
EndSection

Section "Monitor"
  Identifier    "External - Samsung Syncmaster SA350"
  VendorName    "Samsung"
  ModelName     "SA300/SA350"
  DisplaySize    476 267.7
EndSection

Section "Device"
  Identifier    "ATI Radeon Mobility IGP 330M"
  Option        "Monitor-VGA-0"  "External - Samsung Syncmaster SA350"
  Option        "Monitor-LVDS"   "Internal - Pavilion Laptop"
EndSection

Section "Screen"
  Identifier    "Default Screen"
  Monitor       "Internal - Pavilion Laptop"
EndSection

Section "ServerLayout"
  Identifier    "Default Layout"
  Screen        "Default Screen"
EndSection</pre>
<p>I added <code>VendorName</code> and <code>ModelName</code> but I’m not sure they uniquely define the monitor so that the Xorg server acknowledges them.  The <code>VendorName</code> I believe is just for reference, <code>ModelName</code> can usually be discovered by doing:</p>
<pre>grep "Monitor name" /var/log/Xorg.0.log</pre>
<p><b>Monitor-VGA-0</b> and <b>Monitor-LVDS</b> define the ports and hence by reference should uniquely define the monitor (<code>xrandr -q</code> shows them and both are found in the Xorg log).</p>
<p>After a bit of research I discovered that there is a good amount of history concerning the Xorg server having a bit of trouble in not being able to correctly discover the display size.  I believe this may be related to some drivers.  I’ve <a href="https://bbs.archlinux.org/viewtopic.php?pid=1030929#p1030929" target="_blank">been told</a> the open-source ATI driver have had problems and read in some other places of other people who have had similar issues.  Defining the display size in the configuration and telling the Xorg server not to use the auto-detected value can be done by adding this to the Devices section (for Nvidia drivers use: <code>Option "UseEDID" "FALSE"</code>): </p>
<pre>  Option        "NoDDC"</pre>
<p>Unfortunately, this didn’t work either and left me completely at a loss.  Unsure how to go further to define display size in the the Xorg server configuration I decided to define it through <strong>xrandr</strong>.</p>
<p>xrandr has an option to define the display size with the <code>--fbmm</code> option:</p>
<pre>xrandr --output VGA-0 --auto -fbmm 476x267.7</pre>
<p><code>--auto</code> uses the default/preferred mode of the monitor.</p>
<p>My purpose became to have a script that if the external monitor is present it will be enabled with the correct display size and then disable the laptop monitor; if an external monitor is not detected the laptop monitor is enabled with the correct display size.  xrandr looks to detect the display size accurately so that value was used.  Because the script detects the display size and uses the preferred display mode it should work for other that would like to do the same thing.</p>
<p>Also, I also added a section for Gnome’s text scaling.  Gnome assumes monitors are 96 DPI for multiple monitor setups which makes fonts will look small on a lot of newer monitors (higher DPI monitors).  I found out though that when this is adjusted corrently that the scaled font size is slightly larger than my personal preference would be.  In the script I adjusted it to be a little less (see variables <code>em_text_scale_adj</code> and <code>im_text_scale_adj</code> in script).</p>
<p/><pre class="brush: plain;">#!/bin/bash
# externalmonitor - toggle between laptop and external monitor

# Laptop and external monitor relays (ports)
int_mon="LVDS"    # Pavilion ze5570 1024x768
ext_mon="VGA-0"   # Samsung SA350   1920x1080

# Discover if external monitor is connected
em_test=$(xrandr | grep $ext_mon | grep " connected")

# Enable external monitor if present and disable laptop monitor, else vice versa
if [ -n "$em_test" ]; then
  # External monitor definitions:
  # physical screen size from xrandr (xorg detection isn't right)
  xrandr --output $ext_mon --auto  # monitor must be on to get display size
  em_ds_h=$(xrandr | grep $ext_mon | rev | cut -d " " -f 3 | rev | sed 's/mm//')
  em_ds_v=$(xrandr | grep $ext_mon | rev | cut -d " " -f 1 | rev | sed 's/mm//')
  em_ds="$em_ds_h"x"$em_ds_v"
  xrandr --output $int_mon --off --output $ext_mon --auto --fbmm $em_ds
else
  # physical screen size from xrandr (xorg detection isn't right)
  xrandr --output LVDS --auto     # monitor must be on to get display size
  im_ds_h=$(xrandr | grep $int_mon | rev | cut -d " " -f 3 | rev | sed 's/mm//')
  im_ds_v=$(xrandr | grep $int_mon | rev | cut -d " " -f 1 | rev | sed 's/mm//')
  im_ds="$im_ds_h"x"$im_ds_v"
  xrandr --output LVDS --auto --fbmm $im_ds
fi

# Text scaling: font scaling correction depending on DPI (adjusted here because
# Gnome considers every monitor 96 DPI for multi-monitors setups (makes 
# multiple monitors have the same text sizes).  Detection assumes square pixels.
if [ -n "$em_test" ]; then
  # horizontal resolution (using preferred [xrandr --auto]); , to calculate DPI.
  em_res_h=$(xrandr | awk "/$em_ds_h/,/\+$/" | grep +$ | awk '{print $1}' | \
             cut -d x -f 1)
  # dpi
  em_dpi=$(echo "scale=3;($em_res_h*25.4)/$em_ds_h" | bc)
  em_txt_scale=$(echo "scale=4;$em_dpi/96" | bc)
  em_txt_scale=$(scale=3;echo "$em_txt_scale * 0.955" | bc)     # fonts too big
  gsettings set org.gnome.desktop.interface text-scaling-factor $em_txt_scale
else
  # horizontal resolution
  im_res_h=$(xrandr | awk "/$im_ds_h/,/\+$/" | grep +$ | awk '{print $1}' | \
             cut -d x -f 1)
  # dpi
  im_dpi=$(echo "scale=3;($im_res_h*25.4)/$im_ds_h" | bc)
  im_txt_scale=$(echo "scale=4;$im_dpi/96" | bc)
  im_txt_scale=$(scale=3;echo "$im_txt_scale * 0.955" | bc)     # fonts too big
  gsettings set org.gnome.desktop.interface text-scaling-factor $im_txt_scale
fi</pre><p/>
<p>To have the script automatically run on login place it as <code>~/.config/autostart/externalmonitor.desktop</code>:</p>
<pre>[Desktop Entry]
Type=Application
Exec=/home/USERNAME/SCRIPT-DIRECTORY/externalmonitor
Icon=gnome-display-properties
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=External Monitor Configure
Comment=Enable external monitor if connected and disable laptop monitor, otherwise enable laptop monitor (also sets text scaling value).</pre>
<p>I can’t tell you what a pleasant experience it is to have a display that is comfortable to look at.</p>
<br/>  <a href="http://feeds.wordpress.com/1.0/gocomments/linuxtidbits.wordpress.com/1685/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/linuxtidbits.wordpress.com/1685/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/linuxtidbits.wordpress.com/1685/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/linuxtidbits.wordpress.com/1685/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/linuxtidbits.wordpress.com/1685/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/linuxtidbits.wordpress.com/1685/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/linuxtidbits.wordpress.com/1685/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/linuxtidbits.wordpress.com/1685/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/linuxtidbits.wordpress.com/1685/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/linuxtidbits.wordpress.com/1685/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/linuxtidbits.wordpress.com/1685/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/linuxtidbits.wordpress.com/1685/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/linuxtidbits.wordpress.com/1685/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/linuxtidbits.wordpress.com/1685/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1685&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2011-12-22T18:28:05Z</updated>
    <category term="Linux"/>
    <author>
      <name>Todd Partridge (Gen2ly)</name>
    </author>
    <source>
      <id>http://linuxtidbits.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/5ad9566326fdd6b7f4e8af74375a3cac?s=96&amp;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</logo>
      <link href="http://linuxtidbits.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://linuxtidbits.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://linuxtidbits.wordpress.com/osd.xml" rel="search" title="Linux Tidbits" type="application/opensearchdescription+xml"/>
      <link href="http://linuxtidbits.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Every letter has its place</subtitle>
      <title>Linux Tidbits</title>
      <updated>2012-02-12T23:43:18Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>http://www.toofishes.net/blog/unstated-coding-style/</id>
    <link href="http://www.toofishes.net/blog/unstated-coding-style/" rel="alternate" type="text/html"/>
    <title>Unstated coding style</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Programming style is definitely a project-to-project, author-to-author thing. Rarely do two projects share the exact same style unless the original authors are the same; even then, having consistency within a single project is sometimes a mythical goal that never quite gets achieved unless the maintainers keep a watchful eye on all incoming code.</p>
<p>Some projects try hard to document some sort of standard. For a few examples, we have the <a href="http://www.gnu.org/prep/standards/standards.html">GNU Coding Standards</a>, the <a href="http://www.kernel.org/doc/Documentation/CodingStyle">Linux kernel coding style</a> document, and the project I work most on, pacman, has a <a href="http://www.archlinux.org/pacman/HACKING.html">HACKING</a> file documenting a few style guidelines.</p>
<p>However, this blog post isn't going to cover much of the typical <a href="http://en.wikipedia.org/wiki/Programming_style">programming style</a> bullet points:</p>
<ul>
<li>Indentation- width and tabs vs. spaces</li>
<li>Line length and wrapping</li>
<li>Vertical alignment- variable declarations, function prototypes</li>
<li>Whitespace within a line- after keywords, around arithmetic operators, comparison operators, assignment operators, commas, etc.</li>
<li>Brace placement in languages that need them</li>
<li>Naming conventions</li>
<li>Comment style, verbosity, and contents</li>
</ul>
<p>Instead, let's focus on a convention that is rarely stated in a coding style manifesto: arithmetic ordering.</p>
<pre><code>array[foo * 2 + 1] = 6;
value = (value &lt;&lt; 3) * 5 + 18;
</code></pre>
<p>or</p>
<pre><code>array[2 * foo + 1] = 6;
value = 18 + 5 * (value &lt;&lt; 3);
</code></pre>
<p>My gut and eyes tell me that most people use the former forms in coding rather than the latter. An argument for the second form comes with this math expression: <code>2x + 1</code> as opposed to <code>x2 + 1</code>, which no one would ever use. However, this isn't the preferred form. This is rather interesting, and my guesses are the following:</p>
<ul>
<li>Most programmers tend to put the variable on the left-hand side of comparisons: <code>a &lt; 2</code> rather than <code>2 &gt; a</code>, for example. The same logic holds here.</li>
<li>It reads better left-to-right. "<em>take foo, double it, add one</em>" rather than "<em>take two, multiply by foo, add one</em>".</li>
<li>In typed languages, having the variable rather than the constant first allows you to more quickly deduce the resulting type.</li>
</ul>
<p>Are there other implicit conventions you have come across in code? I'd love to hear them.</p></div>
    </summary>
    <updated>2011-12-22T00:03:01Z</updated>
    <category term="C"/>
    <category term="pacman"/>
    <category term="python"/>
    <author>
      <name>Dan McGee</name>
    </author>
    <source>
      <id>http://www.toofishes.net/blog/</id>
      <link href="http://www.toofishes.net/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.toofishes.net/rss/blog/" rel="self" type="application/rss+xml"/>
      <rights>Copyright (c) 2007-2012, Dan McGee</rights>
      <subtitle>The latest and greatest from my blog.</subtitle>
      <title>toofishes.net Blog</title>
      <updated>2012-01-01T11:13:06Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://kmkeen.com/jshon/2011-12-21-21-53-50-464.html</id>
    <link href="http://kmkeen.com/jshon/2011-12-21-21-53-50-464.html" rel="alternate" type="text/html"/>
    <title>Jshon</title>
    <summary>Twice as fast, 1/6th the memory</summary>
    <updated>2011-12-21T21:53:50Z</updated>
    <source>
      <id>http://kmkeen.com</id>
      <author>
        <name>Kyle Keen</name>
      </author>
      <link href="http://kmkeen.com" rel="alternate" type="text/html"/>
      <link href="http://kmkeen.com/rss.xml" rel="self" type="application/rss+xml"/>
      <subtitle>Kyle Keen hacking life, hardware and software.</subtitle>
      <title>kmkeen.com</title>
      <updated>2012-02-12T23:43:15Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>tag:www.archlinux.org,2011-12-20:/news/filesystem-upgrade-manual-intervention-required/</id>
    <link href="http://www.archlinux.org/news/filesystem-upgrade-manual-intervention-required/" rel="alternate" type="text/html"/>
    <title>filesystem upgrade - manual intervention required</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Tom Gundersen wrote:</p>
<p>When upgrading to <code>filesystem-2011.12</code> there will be a conflict with <code>/etc/mtab</code>.</p>
<p>Install the package as follows:</p>
<p><code>pacman -S filesystem --force</code></p>
<p>It is strongly advised to avoid the <code>--force</code> or <code>-f</code> switch as it is not safe. However, in this particular case it is needed as deleting <code>/etc/mtab</code> manually would break pacman.</p>
<p>The reason for the conflict is that the file used to be generated at boot and hence not owned by any package. Now it is a symlink to <code>/proc/self/mounts</code> owned by <code>filesystem</code>. This change means that <code>initscripts</code> no longer requires write access to the rootfs (though other packages might).</p></div>
    </summary>
    <updated>2011-12-20T18:18:23Z</updated>
    <author>
      <name>Tom Gundersen</name>
    </author>
    <source>
      <id>http://www.archlinux.org/news/</id>
      <link href="http://www.archlinux.org/news/" rel="alternate" type="text/html"/>
      <link href="http://www.archlinux.org/feeds/news/" rel="self" type="application/rss+xml"/>
      <subtitle>The latest and greatest news from the Arch Linux distribution.</subtitle>
      <title>Arch Linux: Recent news updates</title>
      <updated>2012-02-07T10:43:02Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://linuxtidbits.wordpress.com/?p=1675</id>
    <link href="http://linuxtidbits.wordpress.com/2011/12/17/a-journey-of-fidelity-as-luck-has-it/" rel="alternate" type="text/html"/>
    <title>A Journey of Fidelity (As Luck Has It)</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">A few weeks ago, my monitor kept blanking out on me. I’d been having a couple troubles with X crashes so I attributed them to that. I had been wanting to change my partitioning scheme so I decided to just re-install and use the older version for awhile (thinking the problem came after an update). [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1675&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://linuxtidbits.files.wordpress.com/2011/12/country-side.png"><img alt="" class="alignright size-full wp-image-1676" src="http://linuxtidbits.files.wordpress.com/2011/12/country-side.png?w=474" title="country-side"/></a>A few weeks ago, my monitor kept blanking out on me.  I’d been having a couple troubles with X crashes so I attributed them to that.  I had been wanting to change my partitioning scheme so I decided to just re-install and use the older version for awhile (thinking the problem came after an update).  So I installed Windows, then started Parted Magic’s Gparted to resize the NTFS partition only to get 22 Unaccounted Clusters errors.  ‘<tt>ntfsresize</tt>‘ (which GParted uses) does a filesystem integrity check before resizing I found out.  Thinking that Windows must not have unmounted the disk cleanly on shutdown, I rebooted and forced a filesystem check… no errors.  When I went back and tried again, I got the same problem.  I learned that there are different versions of the NTFS filesystem so I reinstalled Windows again and let the Windows installer format the partition instead of Gparted which I had done previously.  When I went to resize again, I got the same problem.  Here I eventually came to the conclusion that very possibly my hard drive was failing on me.  This threw me off because my drive was only a year and a half old and because it was a Western Digital.  Nonetheless, I had to check.  So I ran a S.M.A.R.T conveyance test and then an extended test.  Both tests passed.  I knew (…Ughh!) that I’d have to run a ‘<tt>badblocks</tt>‘ test.  I ran a non-destructive test (… long wait here) and discovered I had <b>44</b> bad sectors on my hard drive.  I checked the Western Digital website (who had a very nice warranty check/RMA program) and thankfully my drive was still under warranty.  I got a replacement drive (in only two days!!), did tests this time, and installed Windows again.  When I went to resize… uggggh, I got the same problem again.  At this point, I got out an older version of Parted Magic (6.3) and everything worked… perfectly.</p>
<p>Through all this the fun part was my monitor which kept blanking out on me (its just getting old) and was only able to read the screen for about a minute at a time.</p>
<p>I got a new monitor now too and am doing good again.  It turns out that ‘<tt>ntfsresize</tt>‘ had a bug in it.  I’m not sure what version of ‘<tt>ntfsresize</tt>‘ had the bug but it’s also on the Ubuntu 11.10 install disk.  I upgraded to Parted Magic 11-11-11 and was able to resize my NTFS partition.</p>
<p>On this journey I learned is to never buy a a new drive and not test it, que sera sera.  Because of this, I wrote <a href="https://wiki.archlinux.org/index.php/Badblocks" target="_blank">badblocks</a> page on the Arch Wiki for reference.</p>
<br/>  <a href="http://feeds.wordpress.com/1.0/gocomments/linuxtidbits.wordpress.com/1675/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/linuxtidbits.wordpress.com/1675/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/linuxtidbits.wordpress.com/1675/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/linuxtidbits.wordpress.com/1675/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/linuxtidbits.wordpress.com/1675/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/linuxtidbits.wordpress.com/1675/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/linuxtidbits.wordpress.com/1675/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/linuxtidbits.wordpress.com/1675/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/linuxtidbits.wordpress.com/1675/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/linuxtidbits.wordpress.com/1675/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/linuxtidbits.wordpress.com/1675/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/linuxtidbits.wordpress.com/1675/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/linuxtidbits.wordpress.com/1675/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/linuxtidbits.wordpress.com/1675/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1675&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2011-12-17T21:40:48Z</updated>
    <category term="Linux"/>
    <author>
      <name>Todd Partridge (Gen2ly)</name>
    </author>
    <source>
      <id>http://linuxtidbits.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/5ad9566326fdd6b7f4e8af74375a3cac?s=96&amp;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</logo>
      <link href="http://linuxtidbits.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://linuxtidbits.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://linuxtidbits.wordpress.com/osd.xml" rel="search" title="Linux Tidbits" type="application/opensearchdescription+xml"/>
      <link href="http://linuxtidbits.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Every letter has its place</subtitle>
      <title>Linux Tidbits</title>
      <updated>2012-02-12T23:43:18Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://allanmcrae.com/?p=1365</id>
    <link href="http://allanmcrae.com/2011/12/pacman-package-signing-4-arch-linux/" rel="alternate" type="text/html"/>
    <title>Pacman Package Signing – 4: Arch Linux</title>
    <summary>I have previously covered the more technical aspects of the implementation of PGP signing of packages and repository databases in pacman. You can read the previous entries here: Part 1: Makepkg and Repo-add Part 2: Pacman-key Part 3: Pacman Since then, pacman-4.0 has been released and has been in the [testing] repository in Arch Linux [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I have previously covered the more technical aspects of the implementation of PGP signing of packages and repository databases in <tt>pacman</tt>. You can read the previous entries here:</p>
<ul>
<li><a href="http://allanmcrae.com/2011/08/pacman-package-signing-1-makepkg-and-repo-add/">Part 1: Makepkg and Repo-add</a></li>
<li><a href="http://allanmcrae.com/2011/08/pacman-package-signing-2-pacman-key/">Part 2: Pacman-key</a></li>
<li><a href="http://allanmcrae.com/2011/08/pacman-package-signing-3-pacman/">Part 3: Pacman</a></li>
</ul>
<p>Since then, pacman-4.0 has been released and has been in the <tt>[testing]</tt> repository in Arch Linux for a while.  That means that the signing implementation is starting to get some more widespread usage.  No major issues have been found, but there are some areas that could be improved (e.g. the handling of the lack of signatures when installing packages with <tt>-U</tt> – <a href="https://bugs.archlinux.org/task/26520">FS#26520</a> and <a href="https://bugs.archlinux.org/task/26729">FS#26729</a>).  And it has successfully detected a “bad package” in my repo… (well, not really a bad package, but a bad signature.  Lesson: do not try creating detached signatures for multiple files at once because <tt>gnupg</tt> is crap…).</p>
<p>The Arch repos have been gradually preparing for the package signature checking in pacman-4.0.  Support for uploading PGP signatures with packages was added in April and was made mandatory from the beginning of November.  As of today, 100% of the packages in the [core] repo and approximately 71% of [extra] and 45% of [community] are signed.</p>
<p>So all the components are coming together nicely.  But how does this work from a practical standpoint?  I’ll start with setting up the pacman PGP keyring and <tt>pacman.conf</tt>.</p>
<p>When first installing pacman-4.0, you should initialize your pacman keyring using <tt>pacman-key --init</tt>.  This creates the needed keyring files (<tt>pubring.gpg</tt>, <tt>secring.gpg</tt>) with the needed permissions, updates the trust database (obviously empty at this point…), and generates a basic configuration file.  It also generates the “Pacman Keychain Master Key”, which is your ultimate trust point for starting a PGP web of trust.  You may want to change the default keyserver in the configuration file (<tt>/etc/pacman.d/gnupg/gpg.conf</tt>) as some people have issues connecting to it.</p>
<p>The set-up of your <tt>pacman.conf</tt> file is somewhat a matter of personal preference, but the values I use are probably reasonable…  I have the global settings for signature checking as the default value (<tt>Optional TrustedOnly</tt>). This basically sets the need for signatures to be optional, but if they are there then the signature has to be from a trusted source. See the <tt>pacman.conf</tt> man page for more details.  For the Arch Linux repos with all packages signed, I set <tt>PackageRequired</tt> which forces packages to be signed but not databases.  (For the small <a href="http://allanmcrae.com/2011/06/the-allanbrokeit-repo-that-might-really-break-your-system/">repo</a> I provide, I use <tt>Required</tt> as both packages and databases are signed.)</p>
<p>Lets look at some output when installing a signed package:</p>
<p><code># pacman -S gcc-libs<br/>
warning: gcc-libs-4.6.2-3 is up to date -- reinstalling<br/>
resolving dependencies...<br/>
looking for inter-conflicts...<br/>
 <br/>
Targets (1): gcc-libs-4.6.2-3<br/>
 <br/>
Total Installed Size:   2.96 MiB<br/>
Net Upgrade Size:       0.00 MiB<br/>
 <br/>
Proceed with installation? [Y/n]<br/>
(1/1) checking package integrity                   [######################] 100%<br/>
error: gcc-libs: key "F99FFE0FEAE999BD" is unknown<br/>
:: Import PGP key EAE999BD, "Allan McRae ", created 2011-06-03? [Y/n] y<br/>
(1/1) checking package integrity                   [######################] 100%<br/>
error: gcc-libs: signature from "Allan McRae " is unknown trust<br/>
error: failed to commit transaction (invalid or corrupted package (PGP signature))<br/>
Errors occurred, no packages were upgraded.<br/>
</code></p>
<p>As you can see, pacman struck a package that had a signature from an unknown key.  It then asks if you would like to import that key.  Given the PGP key fingerprint matches that published in <a href="http://allanmcrae.com/about/">multiple</a> <a href="https://www.archlinux.org/developers/#allan">places</a>, importing that key seems fine.  Then <tt>pacman</tt> errors out due to that key not being trusted.  Well, that Allan guy seems reasonably trustworthy… so I could just locally sign that key using <tt>pacman-key --lsign EAE999BD</tt> and that key will now be trusted enough to install packages.</p>
<p>Validating every Arch Linux Developer’s and Trusted User’s PGP key would soon become annoying as there are a fair number of them (35 <a href="https://www.archlinux.org/developers/">devs</a> and 30 <a href="https://www.archlinux.org/trustedusers/">TUs</a> – with some overlap). To make this (a bit…) simpler, five “Master Keys” have been <a href="https://www.archlinux.org/master-keys/">provided</a> for the Arch Linux repositories.  The idea behind these keys is that all developer and TU keys are signed by these keys and you only need to import and trust these keys in order to trust all the keys used to sign packages.  These key fingerprints will be published in multiple places so that the user can have confidence in them (see the bottom of this post for a listing of the fingerprints obtained relatively independently of those listed on the Arch website).</p>
<p>To set-up your pacman keyring with these keys, you can do something like:</p>
<p><code>for key in FFF979E7 CDFD6BB0 4C7EA887 6AC6A4C2 824B18E8; do<br/>
    pacman-key --recv-keys $key<br/>
    pacman-key --lsign-key $key<br/>
    printf 'trust\n3\nquit\n' | gpg --homedir /etc/pacman.d/gnupg/ \<br/>
        --no-permission-warning --command-fd 0 --edit-key $key<br/>
done<br/>
</code></p>
<p>That will import those keys into your keyring and locally sign them.  But that is not quite enough as those keys are not used to sign packages themselves.  In order for pacman to trust PGP keys signed by the master keys you have to assign some level of trust to the master keys.  The final line gives the master keys “marginal” trust.  Note I use <tt>gpg</tt> directly rather than <tt>pacman-key</tt> as <tt>pacman-key</tt> does not understand the <tt>--command-fd</tt> option.  You could use <tt>pacman-key --edit-key</tt> if you wanted to manually type in the commands to set the trust level. By default, the PGP web of trust is set up such that if a key is signed by three keys of marginal trust, then that key will be trusted.  (We have five master keys rather than the minimal three so that we can revoke two – a worst case scenario… – and still have our packages trusted.)  Note that setting the master keys to have marginal trust serves as a further safety mechanism as multiple keys would need to be hijacked to create a key that is trusted by the pacman keyring.</p>
<p>Now that the five master keys are nicely imported into your pacman keyring, any time <tt>pacman</tt> strikes a package from the Arch Linux repos with a signature from a key it does not know, it will import the key and it will automatically be trusted.  At least that is the idea…  We are still in a transition period so not all Developer and Trusted User keys are fully signed yet by the master keys yet, but we are not too far off.  In the future we might provide a <tt>pacman-keyring</tt> package that streamlines this process a bit, or at least will save the individual downloading of each packager’s key.</p>
<p>That just leaves the signing of the databases, but that is a story for another day!</p>
<p>–<br/>
Arch Linux Master Key fingerprints:<br/>
    Allan McRae – <tt>AB19 265E 5D7D 2068 7D30  3246 BA1D FB64 FFF9 79E7</tt><br/>
    Dan McGee – <tt>27FF C476 9E19 F096 D41D  9265 A04F 9397 CDFD 6BB0</tt><br/>
    Ionuț Mircea Bîru – <tt>44D4 A033 AC14 0143 9273  97D4 7EFD 567D 4C7E A887</tt><br/>
    Pierre Schmitz – <tt>0E8B 6440 79F5 99DF C1DD  C397 3348 882F 6AC6 A4C2</tt><br/>
    Thomas Bächler – <tt>6841 48BB 25B4 9E98 6A49  44C5 5184 252D 824B 18E8</tt></p></div>
    </content>
    <updated>2011-12-17T11:54:48Z</updated>
    <category term="Arch Linux"/>
    <category term="Pacman"/>
    <author>
      <name>Allan</name>
    </author>
    <source>
      <id>http://allanmcrae.com</id>
      <link href="http://allanmcrae.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://allanmcrae.com" rel="alternate" type="text/html"/>
      <subtitle>One day this will feature a witty tagline…</subtitle>
      <title>Allan McRae</title>
      <updated>2012-02-12T23:43:05Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://archlinux.me/dusty/?p=481</id>
    <link href="http://archlinux.me/dusty/2011/12/17/you-should-be-on-facebook/" rel="alternate" type="text/html"/>
    <title>“You should be on Facebook”</title>
    <summary>As I’m preparing to leave Switzerland, a lot of my friends have tried to pressure me to join Facebook so they can keep in touch. This isn’t going to happen due to privacy concerns I’ve mentioned many times before. I’d additionally like to counter a couple arguments people keep making in Facebook’s favour. The most [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>As I’m preparing to leave Switzerland, a lot of my friends have tried to pressure me to join Facebook so they can keep in touch. This isn’t going to happen due to privacy concerns I’ve mentioned many times before. I’d additionally like to counter a couple arguments people keep making in Facebook’s favour.</p>
<p>The most commonly voiced conviction is that “Facebook is so convenient,” or in the case of certain overly excitable individuals, “Facebook is soooooooooo convenient.”</p>
<p>I really shouldn’t have to point this out, but if Facebook were truly convenient, they would provide tools to send me a message or invite me to your events even though I don’t have an account with them. One obvious way to do this would be to integrate the Facebook messaging system with e-mail. Then you’d be able to communicate with me and anybody in the world who has an e-mail address. Facebook may connect over 800 million users (depending how many of those accounts are actually bots trying to harvest your data), but e-mail is able to connect around 2 billion people, and I am one of the 1.2 billion that are not on Facebook.</p>
<p>Of course, Facebook could be even more convenient if they allowed you to keep in touch with your Grandma who doesn’t know how to use a computer. Perhaps they should also support an option for mailing a letter via conventional post.</p>
<p>There is also no reason Facebook shouldn’t allow you to invite me to events by sending e-mails to people who do not use their service. It’s not hard to implement a non-member RSVP service; I’ve done so myself for two different client projects. The fact is, Facebook is <strong>deliberately</strong> restricting these conveniences for their own benefit.</p>
<p>The second argument I often here is that if I join Facebook I’ll “get to” keep up with all my friend’s lives. It is always worded as though I am missing out on some sort of privilege or basic right.</p>
<p>This is a bit more personal than the convenience argument. The truth is, since the adoption of the Internet, it has become trivial for absolutely anybody to author absolutely anything. Written information is a basic commodity. This puts the power in the reader’s hands, instead of the author’s.</p>
<p>In short, the reader has the privilege of choosing what they will read, and whose written information they will consume. The author is not granting privileges to the reader (despite the “all rights reserved” designation we still see on formally published articles).</p>
<p>Most people are not very good authors, and I’m sorry to say, most of the information disseminated via Facebook (that is not also available elsewhere) is simply not of interest to me.</p>
<p>I’m not saying my friends aren’t interesting, nothing could be further from the truth! But I prefer personalized messages in which we discuss things that are of mutual interest. I acknowledge that most of the stuff in my life is not of interest to any one of my friends. However, for those topics, facts, or events that I know you are interested in, I am happy to spend the time crafting a message meant for your eyes only in which I discuss those things I know you will care about. I won’t discuss Canadian politics if you live in Europe. I won’t discuss complex technical topics unless you’re as fascinated by them as I am. I won’t send you links to my sketches unless you’re interested in art. I would appreciate the same care from you; please don’t send me stupid cat photos, I’m not interested. I don’t care about celebrity or even local gossip. I’m not interested in the latest viral Internet meme.</p>
<p>Google has made an effort to address both these concerns with Google Plus. They have integrated Plus with Gmail, Google Talk, and SMS services so you can still keep in touch with me even though I have deleted my Google Plus profile. The whole Circles architecture is designed to address the second issue, although in my opinion it has failed to do so.</p>
<p>In summary, as I covered in my <a href="http://archlinux.me/dusty/2011/11/13/killing-the-google-habit/">last post</a>, Facebook does not provide such “convenient” services that they are worth the extremely high value of the data they wish to take from me in payment. If you choose to restrict your personal interactions only to the portion of the population who is active on Facebook, that is your prerogative. In turn, I will choose to keep in touch with those people who are willing to use services that I find more convenient.</p></div>
    </content>
    <updated>2011-12-17T11:49:24Z</updated>
    <category term="Uncategorized"/>
    <category term="facebook"/>
    <category term="privacy"/>
    <category term="Social Media"/>
    <author>
      <name>dusty</name>
    </author>
    <source>
      <id>http://archlinux.me/dusty</id>
      <link href="http://archlinux.me/dusty/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://archlinux.me/dusty" rel="alternate" type="text/html"/>
      <subtitle>A little more of everything, please</subtitle>
      <title>Dusty's Diverse Domain</title>
      <updated>2012-01-20T17:13:19Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://linuxtidbits.wordpress.com/?p=1665</id>
    <link href="http://linuxtidbits.wordpress.com/2011/12/12/a-beautiful-fstab/" rel="alternate" type="text/html"/>
    <title>A Beautiful fstab</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I know what partitions I have and like to know what is mounted and where. To do this, I keep a tidy static filesystem file (/etc/fstab). I use labels instead of UUID’s just because they look nicer, but also because this allows me to resize them if need be. It’s hard to go wrong with [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1665&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://linuxtidbits.files.wordpress.com/2011/12/shellscript.png"><img alt="" class="alignright size-full wp-image-1666" src="http://linuxtidbits.files.wordpress.com/2011/12/shellscript.png?w=474" title="shellscript"/></a>I know what partitions I have and like to know what is mounted and where.  To do this, I keep a tidy static filesystem file (<tt><a href="https://wiki.archlinux.org/index.php/Fstab" target="_blank">/etc/fstab</a></tt>).</p>
<p>I use labels instead of UUID’s just because they look nicer, but also because this allows me to resize them if need be.  It’s hard to go wrong with UUID’s but since I know I likely won’t be putting a USB drive named ‘Windows’ or ‘Ubuntu’ in the USB port, I’m likely pretty safe.  You may have noticed too that I choose not let HAL/DBUS (is it dbus that does mounting now?) handle my Windows and Storage partitions.  I choose to do this for several reasons.  One is because when I copy files I almost always find it much quicker from the command line (i.e. <tt>cp file1 file2 ... /mnt/Storage/backups/</tt>) rather than navigate through multiple directories in the file browser.  The second reason is for security because sensitive data I don’t always want available.  The third is to protect the Windows partition.  If a crash were to happen, I find it a good inconvenience to have to boot Windows to be able to fix the NTFS volume.</p>
<p>Here it is:</p>
<pre># /etc/fstab: static file system information.

#
# temporary file systems:
proc            /proc           proc    nodev,noexec,nosuid             0 0

# internal hard disk (sda[1-4}):
LABEL=Windows   /mnt/Windows    ntfs-3g noatime,noauto,user             0 0
LABEL=Ubuntu    /               ext4    errors=remount-ro,noatime       0 1
LABEL=Home      /home           ext4    noatime                         0 2
LABEL=Swap      none            swap    defaults                        0 0

# external hard disk (sdb1)
LABEL=Storage   /mnt/Storage    ext4    noatime,noauto,user             0 3</pre>
<p><tt>noatime</tt> has been applied to save disk writes and unnecessary timestamps everytime the file is accessed, and the user option allows me to mount without superuser privileges.  For the Windows partition to be able mounted as a regular user, the NTFS-3G driver will need to be <a href="http://linuxtidbits.wordpress.com/2011/12/10/mounting-a-windows-ntfs-partition-as-a-regular-user-ubuntu/">compiled with internal FUSE support</a>.</p>
<br/>  <a href="http://feeds.wordpress.com/1.0/gocomments/linuxtidbits.wordpress.com/1665/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/linuxtidbits.wordpress.com/1665/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/linuxtidbits.wordpress.com/1665/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/linuxtidbits.wordpress.com/1665/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/linuxtidbits.wordpress.com/1665/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/linuxtidbits.wordpress.com/1665/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/linuxtidbits.wordpress.com/1665/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/linuxtidbits.wordpress.com/1665/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/linuxtidbits.wordpress.com/1665/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/linuxtidbits.wordpress.com/1665/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/linuxtidbits.wordpress.com/1665/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/linuxtidbits.wordpress.com/1665/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/linuxtidbits.wordpress.com/1665/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/linuxtidbits.wordpress.com/1665/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1665&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2011-12-12T14:28:10Z</updated>
    <category term="Linux"/>
    <author>
      <name>Todd Partridge (Gen2ly)</name>
    </author>
    <source>
      <id>http://linuxtidbits.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/5ad9566326fdd6b7f4e8af74375a3cac?s=96&amp;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</logo>
      <link href="http://linuxtidbits.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://linuxtidbits.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://linuxtidbits.wordpress.com/osd.xml" rel="search" title="Linux Tidbits" type="application/opensearchdescription+xml"/>
      <link href="http://linuxtidbits.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Every letter has its place</subtitle>
      <title>Linux Tidbits</title>
      <updated>2012-02-12T23:43:19Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://linuxtidbits.wordpress.com/?p=1652</id>
    <link href="http://linuxtidbits.wordpress.com/2011/12/10/mounting-a-windows-ntfs-partition-as-a-regular-user-ubuntu/" rel="alternate" type="text/html"/>
    <title>Mounting a Windows NTFS Partition as a Regular User (Ubuntu)</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">To be able to mount a Windows NTFS partition in Linux as a regular user (e.g. mount /dev/sda1 /mnt/Windows), rebuilding the driver with internal FUSE (Filesystem in USErspace) support is required, and then setting correct permissions is needed. Download and Compile First setting a couple variables eases the process: blddir=~/Downloads/build # A good place to [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1652&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://openclipart.org/detail/20973/icon-hard-disk-by-rg1024"><img alt="" class="alignright size-thumbnail wp-image-1653" height="109" src="http://linuxtidbits.files.wordpress.com/2011/12/rg1024_icon_hard_disk.png?w=150&amp;h=109" title="rg1024_icon_hard_disk" width="150"/></a>To be able to mount a Windows NTFS partition in Linux as a regular user (e.g. <tt>mount /dev/sda1 /mnt/Windows</tt>), rebuilding the driver with internal FUSE (Filesystem in USErspace) support is required, and then setting correct permissions is needed.</p>
<p><strong>Download and Compile</strong></p>
<p>First setting a couple variables eases the process:</p>
<pre>blddir=~/Downloads/build      # A good place to do compiling
pkgname=ntfs-3g               # The package/driver name</pre>
<p>Here the package version variables defined to match the actual extracted package source namings (why 1: gets prepended and 2ubuntu3 gets appended I’m unsure of):</p>
<pre>pkgname_ver=$(dpkg -l | grep ^[i,h]i | awk '{print $2"_"$3}' | grep $pkgname | sed 's/1://')
PKGNAME_VER=$(echo $pkgname_ver | sed 's/\(.*\)-.*/\1/')</pre>
<p>Install the compiling (building) programs and then packages need to build ntfs-3g:</p>
<pre>sudo apt-get install build-essential fakeroot dpkg-dev lynx devscripts
sudo apt-get build-dep $pkgname</pre>
<p>Create the building directories and change to it’s directory:</p>
<pre>[ ! -d "$blddir" ] &amp;&amp; mkdir -p "$blddir"
cd "$blddir"
[ ! -d "$pkgname" ] &amp;&amp; mkdir "$pkgname"
cd "$pkgname"</pre>
<p>Download the source code (which gets extracted after downloading):</p>
<pre>apt-get source "$pkgname"</pre>
<p>The source code is oddly owned by root, to make it editable change it’s permissions:</p>
<pre>sudo chown -R username:username .</pre>
<p>Entering the source code directory (required to build):</p>
<pre>cd "$PKGNAME_VER"</pre>
<p>Change the FUSE option to internal, comment the change, then compile:</p>
<pre>sed -i 's/--with-fuse=external/--with-fuse=internal/g' debian/rules
dch -i "Changed fuse option to internal in configuration rules"
dpkg-buildpackage -rfakeroot -b</pre>
<p>Replace the current NTFS-3G driver with the one just compiled with internal FUSE support:</p>
<pre>sudo gdebi ntfs-3g_2011.4.12AR.4-2ubuntu3_i386.deb</pre>
<p>And hold (freeze) the package so it doesn’t get updated with a new version on a system update:</p>
<pre>echo ntfs-3g hold | sudo dpkg --set-selections</pre>
<p>The driver will need to be set to setuid-root (there are risks doing this, read <a href="http://www.tuxera.com/community/ntfs-3g-faq/#unprivileged" target="_blank">this</a> for more information):</p>
<pre>sudo chown root $(which ntfs-3g)
sudo chmod 4755 $(which ntfs-3g)</pre>
<p>Finally, give the user the ability to be able to mount volumes:</p>
<pre>sudo gpasswd -a username disk</pre>
<p>Reboot to have the new driver loaded and the user to be put in the disk group.</p>
<p><strong>Mounting</strong></p>
<p>The <tt>fstab</tt> will need to have the right options to be able to mount as a regular user.  In my <a href="http://linuxtidbits.wordpress.com/2011/12/12/a-beautiful-fstab/" target="_blank">next post</a>, I’ll show what my <tt>fstab</tt> looks like.</p>
<p><strong>Bug Fix</strong></p>
<p>I had a problem with gcc-4.6_4.6.1 on my install.  It would error out at the beginning of a compile.  The workaround for me was to use an earlier version of GCC and then define it when compiling:</p>
<pre>sudo apt-get install gcc-4.4
CC=gcc-4.4 dpkg-buildpackage -rfakeroot -b</pre>
<p><strong>Resources</strong></p>
<ul>
<li><a href="http://www.cyberciti.biz/faq/rebuilding-ubuntu-debian-linux-binary-package/" target="_blank">Rebuilding Ubuntu/Debian Linux Binary Packages</a></li>
<li><a href="https://bbs.archlinux.org/viewtopic.php?pid=792249#p792249" target="_blank">Arch Linux forums post on user-mounting NTFS drives</a></li>
</ul>
<br/>  <a href="http://feeds.wordpress.com/1.0/gocomments/linuxtidbits.wordpress.com/1652/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/linuxtidbits.wordpress.com/1652/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/linuxtidbits.wordpress.com/1652/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/linuxtidbits.wordpress.com/1652/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/linuxtidbits.wordpress.com/1652/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/linuxtidbits.wordpress.com/1652/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/linuxtidbits.wordpress.com/1652/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/linuxtidbits.wordpress.com/1652/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/linuxtidbits.wordpress.com/1652/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/linuxtidbits.wordpress.com/1652/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/linuxtidbits.wordpress.com/1652/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/linuxtidbits.wordpress.com/1652/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/linuxtidbits.wordpress.com/1652/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/linuxtidbits.wordpress.com/1652/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1652&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2011-12-10T20:47:47Z</updated>
    <category term="Linux"/>
    <author>
      <name>Todd Partridge (Gen2ly)</name>
    </author>
    <source>
      <id>http://linuxtidbits.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/5ad9566326fdd6b7f4e8af74375a3cac?s=96&amp;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</logo>
      <link href="http://linuxtidbits.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://linuxtidbits.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://linuxtidbits.wordpress.com/osd.xml" rel="search" title="Linux Tidbits" type="application/opensearchdescription+xml"/>
      <link href="http://linuxtidbits.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Every letter has its place</subtitle>
      <title>Linux Tidbits</title>
      <updated>2012-02-12T23:43:18Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://linuxtidbits.wordpress.com/?p=1640</id>
    <link href="http://linuxtidbits.wordpress.com/2011/12/09/lpsites-record-loginpassword-websites/" rel="alternate" type="text/html"/>
    <title>Storing login/password Websites in a File</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I find that it is a good idea to update my Internet passwords from time to time. Previously to do so, I opened Firefox’s Preferences window and then went to the Saved Passwords window. From here, I’d toggle between Firefox and the Saved Passwords window, goto the sites that were listed, and change the password. [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1640&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://linuxtidbits.files.wordpress.com/2011/12/1270238965.png"><img alt="" class="alignright size-thumbnail wp-image-1646" height="150" src="http://linuxtidbits.files.wordpress.com/2011/12/1270238965.png?w=150&amp;h=150" title="1270238965" width="150"/></a>I find that it is a good idea to update my Internet passwords from time to time.  Previously to do so, I opened Firefox’s <strong>Preferences</strong> window and then went to the <strong>Saved Passwords</strong> window.  From here, I’d toggle between Firefox and the Saved Passwords window, goto the sites that were listed, and change the password.  After doing this, I decided it would be quicker if I just had them in a text file.  In the text file once I had updated the password on the website, I’d comment the line so I’d know I had done so.  For text editing, I commonly use <a href="https://wiki.archlinux.org/index.php/Vim" target="_blank">Vim</a> and it works great for this.  I created a script to make this easy.  It works like this:</p>
<pre># lplist a http://edit.yahoo.com</pre>
<p>It adds and sorts the websites:</p>
<pre>...

http://twitter.com/

http://ubuntuforums.org/

http://wordpress.com/

...</pre>
<p>The nice thing about working in the terminal too is that once the text file is opened the webpages can be opened by Ctrl clicking on them.</p>
<p>Later when I need to updated the passwords again, lplist has a <b>s</b> switch that uncomments the file:</p>
<pre># lplist s
 Uncomment pass/login websites file? (y/n):</pre>
<p>Works good for me.  Here's the script:</p>
<p/><pre class="brush: plain;">#!/bin/bash
# lplist - list of programs and websites using common password

scrpt=${0##*/}        # script name
lpfile=~/.lplist.txt  # filename of list

# Display usage if no parameters given
if [[ -z "$@" ]]; then
  echo "$scrpt &lt;option&gt; &lt;*add entry&gt; - list of programs/sites using common pw
  a | add   - add entry to list
  e | edit  - edit list
  s | sort  - sort list alphabetically
  u | uncom - uncomment list for new password"
  exit
fi

case $1 in
  # Add entry, sort, remove blank lines from list
  a | add  )  shift
              echo "$@" &gt;&gt; "$lpfile"
              sort -uV "$lpfile" -o "$lpfile"
              sed -i '/^$/d' "$lpfile"
              ;;
  # Edit list
  e | edit )  vim "$lpfile"
              ;;
  # Sort, remove blank lines from list
  s | sort )  sort -uV "$lpfile" -o "$lpfile"
              sed -i '/^$/d' "$lpfile"
              ;;
  # Uncomment lines from list
  u | uncom ) read -p " Uncomment pass/login websites file? (y/n): " uncomment
              if [ "$uncomment" = "y" ]; then
                sed -i 's/^#\([a-z,A-Z]\)/\1/g' "$lpfile"
              fi
              ;;
  # Unknown option help
  *         ) echo "Unknown option"
              ;;
esac</pre><p/>
<br/>  <a href="http://feeds.wordpress.com/1.0/gocomments/linuxtidbits.wordpress.com/1640/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/linuxtidbits.wordpress.com/1640/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/linuxtidbits.wordpress.com/1640/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/linuxtidbits.wordpress.com/1640/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/linuxtidbits.wordpress.com/1640/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/linuxtidbits.wordpress.com/1640/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/linuxtidbits.wordpress.com/1640/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/linuxtidbits.wordpress.com/1640/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/linuxtidbits.wordpress.com/1640/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/linuxtidbits.wordpress.com/1640/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/linuxtidbits.wordpress.com/1640/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/linuxtidbits.wordpress.com/1640/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/linuxtidbits.wordpress.com/1640/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/linuxtidbits.wordpress.com/1640/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1640&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2011-12-10T01:22:18Z</updated>
    <category term="Linux"/>
    <category term="Script"/>
    <author>
      <name>Todd Partridge (Gen2ly)</name>
    </author>
    <source>
      <id>http://linuxtidbits.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/5ad9566326fdd6b7f4e8af74375a3cac?s=96&amp;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</logo>
      <link href="http://linuxtidbits.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://linuxtidbits.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://linuxtidbits.wordpress.com/osd.xml" rel="search" title="Linux Tidbits" type="application/opensearchdescription+xml"/>
      <link href="http://linuxtidbits.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Every letter has its place</subtitle>
      <title>Linux Tidbits</title>
      <updated>2012-02-12T23:43:18Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.nicosphere.net/?p=2558</id>
    <link href="http://www.nicosphere.net/photoshow-web-gallery-without-sql-2558/" rel="alternate" type="text/html"/>
    <title>PhotoShow, Web gallery without SQL</title>
    <summary>When it comes to web gallery, I usually choose Piwigo, a safe choice for a stable PHP gallery. Last week, I heard about a new project, called PhotoShow, a nice looking web gallery. A demo website is available. Here a quick functionalities review. Easy installation, get latest tarball on github, or simply a git clone, [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>When it comes to web gallery, I usually choose <a href="http://piwigo.org/">Piwigo</a>, a safe choice for a
stable PHP gallery.</p><p>Last week, I heard about a new project, called <a href="http://www.photoshow-gallery.com/">PhotoShow</a>, a nice
looking web gallery. A <a href="http://www.photoshow-gallery.com/demo/">demo website</a> is available. Here a quick functionalities review.</p><ul><li>Easy installation, get latest tarball on github, or simply a git clone, set
two lines from the configuration file, and you are ready to go.</li><li>Structure based on file system  and directory, easy to manages and organizes
photos and structures.</li><li>Generate thumbnails and 800*600 images automatically with phpthumb.</li><li>Two based directories, one with real photos, one with generated ones.</li><li>Drag n’ Drop to upload and manages the website.</li><li>No SQL bases needed, it only based on the file system.</li><li>Nice looking jQuery effects.</li><li>Work fine without JavaScript.</li><li>Manage public and private albums.</li><li>Comments system.</li></ul><p><a href="http://www.nicosphere.net/wp-content/uploads/2011/12/photoshow.png" rel="lightbox[2558]"><img alt="photoshow PhotoShow, Web gallery without SQL" class="aligncenter size-full wp-image-2559" height="155" src="http://www.nicosphere.net/wp-content/uploads/2011/12/photoshow.png" title="photoshow" width="653"/></a></p><p>First, I have to warn you that PhotoShow still on a early stage of his
developpment. It seems stable enough, the project should improve quickly in a
near future, with probably some new features. So perhaps it isn’t ready for <em>production</em>, but should be fine for a personal use.</p><p>Installation and configuration are straight forward, the easiest is use <code>git
clone</code>, it would be simple to keep the gallery update with upstream by doing a <code>git pull</code>. You need to edit the <code>conf.ini</code> file, to set both photos and
generated photos pathname. Once it done, you only need to answer the form to
set your name/password account, and you’re done.o</p><div class="codecolorer-container bash railscasts" style="overflow: auto; white-space: nowrap; width: 435px;"><div class="bash codecolorer"><span style="color: #c20cb9; font-weight: bold;">git clone</span> https:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>thibaud-rohmer<span style="color: #000000; font-weight: bold;">/</span>PhotoShow.git</div></div><p>Some would appreciate the drag n’ drop system, I personally liked the
disposition of thumbnails, compact as google galleries, managed well
different size to find the optimal display, allow you to quickly see every
photos of an album.</p><p>I will keep an eye on this project for sure.</p><p>At last, the code can be found on <a href="https://github.com/thibaud-rohmer/PhotoShow">github</a>, under the GNU GPLv3.</p></div>
    </content>
    <updated>2011-12-04T12:26:47Z</updated>
    <category term="Non class&#xE9;"/>
    <category term="archlinux-en"/>
    <category term="linux-en"/>
    <author>
      <name>Nic0</name>
    </author>
    <source>
      <id>http://www.nicosphere.net</id>
      <link href="http://www.nicosphere.net/tag/archlinux-en/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://www.nicosphere.net" rel="alternate" type="text/html"/>
      <subtitle>Linux and programming blog</subtitle>
      <title>Nic0's Sphere » archlinux-en</title>
      <updated>2011-12-29T11:43:22Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://www.nicosphere.net/photoshow-web-gallery-without-sql-2558</id>
    <link href="http://www.nicosphere.net/photoshow-web-gallery-without-sql-2558" rel="alternate" type="text/html"/>
    <title>PhotoShow, Web gallery without SQL</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>When it comes to web gallery, I usually choose <a href="http://piwigo.org/">Piwigo</a>, a safe choice for a
stable PHP gallery.</p>

<p>Last week, I heard about a new project, called <a href="http://www.photoshow-gallery.com/">PhotoShow</a>, a nice
looking web gallery. A <a href="http://www.photoshow-gallery.com/demo/">demo website</a> is available. Here a quick functionalities review.</p>

<ul>
<li>Easy installation, get latest tarball on github, or simply a git clone, set
two lines from the configuration file, and you are ready to go.</li>
<li>Structure based on file system  and directory, easy to manages and organizes
photos and structures.</li>
<li>Generate thumbnails and 800*600 images automatically with phpthumb.</li>
<li>Two based directories, one with real photos, one with generated ones.</li>
<li>Drag n' Drop to upload and manages the website.</li>
<li>No SQL bases needed, it only based on the file system.</li>
<li>Nice looking jQuery effects.</li>
<li>Work fine without JavaScript.</li>
<li>Manage public and private albums.</li>
<li>Comments system.</li>
</ul>


<p><a href="http://www.nicosphere.net/img/photoshow.png"><img alt="" class="aligncenter size-full wp-image-2559" height="155" src="http://www.nicosphere.net/img/photoshow.png" title="photoshow" width="653"/></a></p>

<p>First, I have to warn you that PhotoShow still on a early stage of his
developpment. It seems stable enough, the project should improve quickly in a
near future, with probably some new features. So perhaps it isn’t ready for
<em>production</em>, but should be fine for a personal use.</p>

<p>Installation and configuration are straight forward, the easiest is use <code>git
clone</code>, it would be simple to keep the gallery update with upstream by doing a
<code>git pull</code>. You need to edit the <code>conf.ini</code> file, to set both photos and
generated photos pathname. Once it done, you only need to answer the form to
set your name/password account, and you’re done.o</p>

<div class="highlight"><pre><code class="bash">git clone https://github.com/thibaud-rohmer/PhotoShow.git
</code></pre>
</div>


<p>Some would appreciate the drag n' drop system, I personally liked the
disposition of thumbnails, compact as google galleries, managed well
different size to find the optimal display, allow you to quickly see every
photos of an album.</p>

<p>I will keep an eye on this project for sure.</p>

<p>At last, the code can be found on <a href="https://github.com/thibaud-rohmer/PhotoShow">github</a>, under the GNU GPLv3.</p></div>
    </content>
    <updated>2011-12-03T23:00:00Z</updated>
    <source>
      <id>http://www.nicosphere.net</id>
      <author>
        <name>Nicolas Paris</name>
      </author>
      <link href="http://www.nicosphere.net/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://www.nicosphere.net/" rel="alternate" type="text/html"/>
      <title>Nic0's Sphere</title>
      <updated>2012-01-02T20:20:14Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.nicosphere.net/?p=2557</id>
    <link href="http://www.nicosphere.net/manage-automatically-two-dictionaries-with-firefox-2557/" rel="alternate" type="text/html"/>
    <title>Manage automatically two dictionaries with Firefox</title>
    <summary>When your native language isn’t English, and when, like me, you spend time writing around the Internet, between comments from some news sites, blog posts and programming question-answer site, you have to deal with at least two languages, English, and whatever language you use at home. Unfortunately, I have trouble with grammar and spelling1. I [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>When your native language isn’t English, and when, like me, you spend time
writing around the Internet, between comments from some news sites, blog posts
and programming question-answer site, you have to deal with at least two
languages, English, and whatever language you use at home. Unfortunately, I have
trouble with grammar and spelling<sup id="fnref:1"><a href="http://www.nicosphere.net/tag/archlinux-en/feed/#fn:1" rel="footnote">1</a></sup>. I probably have done what everyone
else with bad spelling would do in this case, add to Firefox a spell checker.
It does what I want, but as I write across websites, I need to switch the
spell checker from French to English, certainly more often that I even
notice.</p><p>Switching of dictionaries is annoying, but not enough to really do something about
it. When you’re switching it, you think that perhaps you should try to google about it if there is
any kind of shortcut or whatever would do the trick and save you some time, but you forget as soon as you switched
the dictionary, and your mind focus on the answer/comment you’re writing. Same
thing for asking to some geek friends, quickly forgotten to ask, every time.</p><p>So I’d carry this <em>problem</em> who isn’t really one, and by chance, I found the
perfect solution for what I’m asking for. It could be obvious to some persons,
but after all, I’m not switching of dictionary for that long time ago. The
answer I found is no more that <a href="https://addons.mozilla.org/fr/firefox/addon/dictionary-switcher/">a Firefox plugin, called dictionary
switcher</a>. This plugin recognize automatically the language you are taping of, and adapt the
dictionary in function of it, few more options on it to do more precisely what you want. With a
name link that, I could find it earlier, but the thing is I didn’t toke time to
look for.</p><p>Short blog post, for a quick trick, maybe it could be useful to someone else.</p><div class="footnotes"><hr/><ol><li id="fn:1"><p>But I’m working on it, by writing some blog post! <a href="http://www.nicosphere.net/tag/archlinux-en/feed/#fnref:1" rev="footnote">↩</a></p></li></ol></div></div>
    </content>
    <updated>2011-12-03T10:04:07Z</updated>
    <category term="internet"/>
    <category term="archlinux-en"/>
    <category term="firefox"/>
    <category term="linux-en"/>
    <author>
      <name>Nic0</name>
    </author>
    <source>
      <id>http://www.nicosphere.net</id>
      <link href="http://www.nicosphere.net/tag/archlinux-en/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://www.nicosphere.net" rel="alternate" type="text/html"/>
      <subtitle>Linux and programming blog</subtitle>
      <title>Nic0's Sphere » archlinux-en</title>
      <updated>2011-12-29T11:43:22Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://www.nicosphere.net/manage-automatically-two-dictionaries-with-firefox-2557</id>
    <link href="http://www.nicosphere.net/manage-automatically-two-dictionaries-with-firefox-2557" rel="alternate" type="text/html"/>
    <title>Manage automatically two dictionaries with Firefox</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>When your native language isn’t English, and when, like me, you spend time
writing around the Internet, between comments from some news sites, blog posts
and programming question-answer site, you have to deal with at least two
languages, English, and whatever language you use at home. Unfortunately, I have
trouble with grammar and spelling<a href="http://www.nicosphere.net/tag/archlinux-en/feed/But">^1</a>. I probably have done what everyone
else with bad spelling would do in this case, add to Firefox a spell checker.
It does what I want, but as I write across websites, I need to switch the
spell checker from French to English, certainly more often that I even
notice.</p>

<p>Switching of dictionaries is annoying, but not enough to really do something about
it. When you’re switching it, you think that perhaps you should try to google about it if there is
any kind of shortcut or whatever would do the trick and save you some time, but you forget as soon as you switched
the dictionary, and your mind focus on the answer/comment you’re writing. Same
thing for asking to some geek friends, quickly forgotten to ask, every time.</p>

<p>So I’d carry this <em>problem</em> who isn’t really one, and by chance, I found the
perfect solution for what I’m asking for. It could be obvious to some persons,
but after all, I’m not switching of dictionary for that long time ago. The
answer I found is no more that <a href="https://addons.mozilla.org/fr/firefox/addon/dictionary-switcher/">a Firefox plugin, called dictionary
switcher</a>. This plugin recognize automatically the language you are taping of, and adapt the
dictionary in function of it, few more options on it to do more precisely what you want. With a
name link that, I could find it earlier, but the thing is I didn’t toke time to
look for.</p>

<p>Short blog post, for a quick trick, maybe it could be useful to someone else.</p></div>
    </content>
    <updated>2011-12-02T23:00:00Z</updated>
    <source>
      <id>http://www.nicosphere.net</id>
      <author>
        <name>Nicolas Paris</name>
      </author>
      <link href="http://www.nicosphere.net/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://www.nicosphere.net/" rel="alternate" type="text/html"/>
      <title>Nic0's Sphere</title>
      <updated>2012-01-02T20:20:14Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.nicosphere.net/?p=2555</id>
    <link href="http://www.nicosphere.net/the-missing-newsletter-of-arch-linux-2555/" rel="alternate" type="text/html"/>
    <title>The missing newsletter of Arch Linux</title>
    <summary>Most of Linux distributions comes with newsletters, a short summary of what happen around distributions and the community himself. Interestingly enough, Arch Linux doesn’t have anymore one, as far as I know. It wasn’t always like this, here a quick review of what was done so far. My apologies if any informations was inaccurate. The [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Most of Linux distributions comes with newsletters, a short summary of what
happen around distributions and the community himself. Interestingly
enough, Arch Linux doesn’t have anymore one, as far as I know. It wasn’t always like
this, here a quick review of what was done so far.</p><p>My apologies if any informations was inaccurate.</p><h2>The newsletter</h2><p>Feb 2004 – Jul 2009</p><p>As the Arch community is growing, some of you may never heard about this old
newsletter, start with weekly issue, quickly became a twice a month release,
finished as a monthly issue. The information provide was good, but as I became
an Arch user around this time, I haven’t the opportunity to read lots of them.
For information, you still can read old archives on this link.</p><p><a href="http://www.archlinux.org/static/magazine/">Arch Linux Newsletters Archives</a></p><p>I’m certainly not the only one, but I miss this newsletter.</p><h2>Arch User Magazine</h2><p>Apr 2009 – Jun 2009</p><p>Unofficial project initiate by Ghost1227, in a paper magazine style, old issues can be
grab in the same link as the Newsletters Archives. We can still read <a href="https://bbs.archlinux.org/viewtopic.php?id=68922">the
bbs thread</a> for the first released issue. Three issues was made, and it will be
merge with the official newsletter, as the author doesn’t have the time to
carry on the project as he wanted.</p><h2>Arch Linux Magazine</h2><p>Aug 2009 – Mar 2010</p><p>The official newsletter, by Kensai, and the Arch User Magazine, by Ghost1227,
will join their force together to provide a magazine available in both format
html (newsletter format) and pdf (scribus/magazine format). Here is the <a href="https://bbs.archlinux.org/viewtopic.php?id=77538">bbs
thread</a> for nostalgic, about the first released announce by Kensai. I
proudly translate issues with others French contributors in my language back this time.
Unfortunately, a lack of contribution, and certainly of time as well, ended the
magazine after 4 releases. But meanwhile, Kensai left for personal reasons.</p><h2>Rolling Release</h2><p>Sep 2010 – May 2011 (Until now?)</p><p><a href="http://rollingrelease.com/">Rolling Release</a> is an official website that aimed to succeed the Arch Linux
Magazine, as it’s an e-zine, no need to have a regular issue, or even spend
time with scribus to make a nice looking pdf. Here the <a href="https://bbs.archlinux.org/viewtopic.php?id=105236">forum announce</a> of the
official launch of the site. Technically, the website look nice, allows
comments. Even someone, jdarnold,  started for few weeks a weekly issue on this
site. The website has nice posts for a while, but hasn’t published anything
since May 2011, without any official reason that I’m aware of, other than the lack
of time I guess.</p><h2>The missing newsletter</h2><p>All this news was great informations, I’m very thankful for all the time that
contributors spends on this, on their own time. But what’s now? I know what you
think, <em>« you want one? Do It Yourself! »</em>, it’s absolutely true if I was following
Arch Linux actuality enough, and a more fluent English.</p><p>What I do know is that this kind of initiatives often come from one man, no more,
after all, Arch Linux came from a one man project as well. So, maybe if you are
close to the community, following forum or mailing list, you might consider start some kind of newsletter.
It doesn’t need to be great, long, with lots informations. Few links in a paper, with a short description, a couple of tricks or applications taken from the forum, it’s all it need to start something, I’m sure the community
would be thankful for this, well I’ll be thankful for sure.</p></div>
    </content>
    <updated>2011-12-02T09:01:40Z</updated>
    <category term="linux"/>
    <category term="archlinux-en"/>
    <category term="linux-en"/>
    <author>
      <name>Nic0</name>
    </author>
    <source>
      <id>http://www.nicosphere.net</id>
      <link href="http://www.nicosphere.net/tag/archlinux-en/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://www.nicosphere.net" rel="alternate" type="text/html"/>
      <subtitle>Linux and programming blog</subtitle>
      <title>Nic0's Sphere » archlinux-en</title>
      <updated>2011-12-29T11:43:22Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://www.nicosphere.net/the-missing-newsletter-of-arch-linux-2555</id>
    <link href="http://www.nicosphere.net/the-missing-newsletter-of-arch-linux-2555" rel="alternate" type="text/html"/>
    <title>The missing newsletter of Arch Linux</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Most of Linux distributions comes with newsletters, a short summary of what
happen around distributions and the community himself. Interestingly
enough, Arch Linux doesn’t have anymore one, as far as I know. It wasn’t always like
this, here a quick review of what was done so far.</p>

<p>y apologies if any informations was inaccurate.</p>

<h2>The newsletter</h2>

<p>Feb 2004 – Jul 2009</p>

<p>As the Arch community is growing, some of you may never heard about this old
newsletter, start with weekly issue, quickly became a twice a month release,
finished as a monthly issue. The information provide was good, but as I became
an Arch user around this time, I haven’t the opportunity to read lots of them.
For information, you still can read old archives on this link.</p>

<p><a href="http://www.archlinux.org/static/magazine/">Arch Linux Newsletters Archives</a></p>

<p>I’m certainly not the only one, but I miss this newsletter.</p>

<h2>Arch User Magazine</h2>

<p>Apr 2009 – Jun 2009</p>

<p>Unofficial project initiate by Ghost1227, in a paper magazine style, old issues can be
grab in the same link as the Newsletters Archives. We can still read <a href="https://bbs.archlinux.org/viewtopic.php?id=68922">the
bbs thread</a> for the first released issue. Three issues was made, and it will be
merge with the official newsletter, as the author doesn’t have the time to
carry on the project as he wanted.</p>

<h2>Arch Linux Magazine</h2>

<p>Aug 2009 – Mar 2010</p>

<p>The official newsletter, by Kensai, and the Arch User Magazine, by Ghost1227,
will join their force together to provide a magazine available in both format
html (newsletter format) and pdf (scribus/magazine format). Here is the <a href="https://bbs.archlinux.org/viewtopic.php?id=77538">bbs
thread</a> for nostalgic, about the first released announce by Kensai. I
proudly translate issues with others French contributors in my language back this time.
Unfortunately, a lack of contribution, and certainly of time as well, ended the
magazine after 4 releases. But meanwhile, Kensai left for personal reasons.</p>

<h2>Rolling Release</h2>

<p>Sep 2010 – May 2011 (Until now?)</p>

<p><a href="http://rollingrelease.com/">Rolling Release</a> is an official website that aimed to succeed the Arch Linux
agazine, as it’s an e-zine, no need to have a regular issue, or even spend
time with scribus to make a nice looking pdf. Here the <a href="https://bbs.archlinux.org/viewtopic.php?id=105236">forum announce</a> of the
official launch of the site. Technically, the website look nice, allows
comments. Even someone, jdarnold,  started for few weeks a weekly issue on this
site. The website has nice posts for a while, but hasn’t published anything
since May 2011, without any official reason that I’m aware of, other than the lack
of time I guess.</p>

<h2>The missing newsletter</h2>

<p>All this news was great informations, I’m very thankful for all the time that
contributors spends on this, on their own time. But what’s now? I know what you
think, <em>“you want one? Do It Yourself!”</em>, it’s absolutely true if I was following
Arch Linux actuality enough, and a more fluent English.</p>

<p>What I do know is that this kind of initiatives often come from one man, no more,
after all, Arch Linux came from a one man project as well. So, maybe if you are
close to the community, following forum or mailing list, you might consider start some kind of newsletter.
It doesn’t need to be great, long, with lots informations. Few links in a paper, with a short description, a couple of tricks or applications taken from the forum, it’s all it need to start something, I’m sure the community
would be thankful for this, well I’ll be thankful for sure.</p></div>
    </content>
    <updated>2011-12-01T23:00:00Z</updated>
    <source>
      <id>http://www.nicosphere.net</id>
      <author>
        <name>Nicolas Paris</name>
      </author>
      <link href="http://www.nicosphere.net/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://www.nicosphere.net/" rel="alternate" type="text/html"/>
      <title>Nic0's Sphere</title>
      <updated>2012-01-02T20:20:14Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://www.nicosphere.net/tyrs-0-6-0-ncurses-twitter-client-first-release-with-urwid-2553</id>
    <link href="http://www.nicosphere.net/tyrs-0-6-0-ncurses-twitter-client-first-release-with-urwid-2553" rel="alternate" type="text/html"/>
    <title>Tyrs 0.6.0, ncurses Twitter client, first release with Urwid</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Tyrs is a Twitter and Identi.ca client based on ncurses. This major release is
the first one using the <a href="http://excess.org/urwid/">urwid</a> library. It will improve greatly the user
interface.</p>

<ul>
<li>Edit a tweet: Previous release had a poorly way to edit tweet, I knew it, and
wasn’t especially proud of it and always wanted to do it again from scratch.
With urwid, it was easier to manage it. So now, it’s more like an IRC input
bar to write tweet. We can do what we usually want, such as go back with
arrow keys.</li>
<li>I had feedback as the unicode wasn’t perfect, editing a tweet with 2-bits
long Chinese characters could sometime break the application. Fortunately,
urwid has an excellent utf-8 support, so the overall management of unicode
should be improve, and shouldn’t be an issue anymore.</li>
<li>More generally, a better display with less bugs.</li>
</ul>


<p>In many way the interaction with user is improve, and in many details. This
release still in early stage of development of the urwid interface, this mean
it’s usable, but some functionalities aren’t yet implements, and will be done
soon. I always follow the <em>release early, release often</em> plan, and even
everything isn’t ready yet, I believe the improvement worth a release.</p>

<p>Some stuff that need to be done in further releases:</p>

<ul>
<li>Configuration, lot of configuration was about the display, it will be the
point of the next release.</li>
<li>Better default shortcut, I’m not so happy about the default shortcut, I’ve
started with some, and added while I was doing the implementation, but, I
guess it could be remap in much better way, even if it customizable in the
configuration file.</li>
<li>Display without boxes, as I’m not a huge fan of line, I’ll probably do three
default layout, <em>coming soon</em>.</li>
<li>Few more functionalities such as lists, information about user…</li>
</ul>


<p>If you are using Arch Linux, the installation through the <a href="https://aur.archlinux.org/packages.php?ID=48849">AUR package</a> is easy:</p>

<pre><code>yaourt -S tyrs
# Or the latest git revision
yaourt -S tyrs-git
</code></pre>

<p>You may find the latest code in the <a href="https://github.com/Nic0/tyrs">github repository</a>, and find tarballs
in the <a href="http://pypi.python.org/pypi/tyrs">pypi page</a> of the project.</p>

<p>I hope you’ll enjoy it. As usually, any feedback is much appreciated.</p></div>
    </content>
    <updated>2011-11-30T23:00:00Z</updated>
    <source>
      <id>http://www.nicosphere.net</id>
      <author>
        <name>Nicolas Paris</name>
      </author>
      <link href="http://www.nicosphere.net/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://www.nicosphere.net/" rel="alternate" type="text/html"/>
      <title>Nic0's Sphere</title>
      <updated>2012-01-02T20:20:14Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.nicosphere.net/?p=2553</id>
    <link href="http://www.nicosphere.net/tyrs-0-6-0-ncurses-twitter-client-first-release-with-urwid-2553/" rel="alternate" type="text/html"/>
    <title>Tyrs 0.6.0, ncurses Twitter client, first release with Urwid</title>
    <summary>Tyrs is a Twitter and Identi.ca client based on ncurses. This major release is the first one using the urwid library. It will improve greatly the user interface. Edit a tweet: Previous release had a poorly way to edit tweet, I knew it, and wasn’t especially proud of it and always wanted to do it [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Tyrs is a Twitter and Identi.ca client based on ncurses. This major release is
the first one using the <a href="http://excess.org/urwid/">urwid</a> library. It will improve greatly the user
interface.</p><ul><li>Edit a tweet: Previous release had a poorly way to edit tweet, I knew it, and
wasn’t especially proud of it and always wanted to do it again from scratch.
With urwid, it was easier to manage it. So now, it’s more like an IRC input
bar to write tweet. We can do what we usually want, such as go back with
arrow keys.</li><li>I had feedback as the unicode wasn’t perfect, editing a tweet with 2-bits
long Chinese characters could sometime break the application. Fortunately,
urwid has an excellent utf-8 support, so the overall management of unicode
should be improve, and shouldn’t be an issue anymore.</li><li>More generally, a better display with less bugs.</li></ul><p>In many way the interaction with user is improve, and in many details. This
release still in early stage of development of the urwid interface, this mean
it’s usable, but some functionalities aren’t yet implements, and will be done
soon. I always follow the <em>release early, release often</em> plan, and even
everything isn’t ready yet, I believe the improvement worth a release.</p><p>Some stuff that need to be done in further releases:</p><ul><li>Configuration, lot of configuration was about the display, it will be the
point of the next release.</li><li>Better default shortcut, I’m not so happy about the default shortcut, I’ve
started with some, and added while I was doing the implementation, but, I
guess it could be remap in much better way, even if it customizable in the
configuration file.</li><li>Display without boxes, as I’m not a huge fan of line, I’ll probably do three
default layout, <em>coming soon</em>.</li><li>Few more functionalities such as lists, information about user…</li></ul><p>If you are using Arch Linux, the installation through the <a href="https://aur.archlinux.org/packages.php?ID=48849">AUR package</a> is easy:</p><div class="codecolorer-container bash railscasts" style="overflow: auto; white-space: nowrap; width: 435px;"><div class="bash codecolorer">yaourt <span style="color: #660033;">-S</span> tyrs<br/> <span style="color: #666666; font-style: italic;"># Or the latest git revision</span><br/> yaourt <span style="color: #660033;">-S</span> tyrs-git</div></div><p>You may find the latest code in the <a href="https://github.com/Nic0/tyrs">github repository</a>, and find tarballs
in the <a href="http://pypi.python.org/pypi/tyrs">pypi page</a> of the project.</p><p>I hope you’ll enjoy it. As usually, any feedback is much appreciated.</p></div>
    </content>
    <updated>2011-11-30T22:33:40Z</updated>
    <category term="linux"/>
    <category term="archlinux-en"/>
    <category term="linux-en"/>
    <category term="ncurses"/>
    <category term="python-en"/>
    <category term="tyrs"/>
    <author>
      <name>Nic0</name>
    </author>
    <source>
      <id>http://www.nicosphere.net</id>
      <link href="http://www.nicosphere.net/tag/archlinux-en/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://www.nicosphere.net" rel="alternate" type="text/html"/>
      <subtitle>Linux and programming blog</subtitle>
      <title>Nic0's Sphere » archlinux-en</title>
      <updated>2011-12-29T11:43:22Z</updated>
    </source>
  </entry>

  <entry>
    <id>https://bbs.archlinux.org/viewtopic.php?id=130860</id>
    <link href="https://bbs.archlinux.org/viewtopic.php?id=130860" rel="alternate" type="text/html"/>
    <title>[kde-unstable] KDE 4.8</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Hi all,<br/>the first beta of the new KDE 4.8 major release has been released and is ready in the [<a href="https://wiki.archlinux.org/index.php/DeveloperWiki:KDE#Using_the_kde-unstable_repository">kde-unstable</a>] repository.</p><p>The kdeaccessibility and kdeutils modules have been split, but this time users will not see any changes <img alt="smile" height="15" src="https://bbs.archlinux.org/img/smilies/smile.png" width="15"/></p><p>See the <a href="http://kde.org/announcements/announce-4.8-beta1.php">KDE announcement</a> for the new features and upstream changes.</p><p>Arch Linux Changes:<br/>- new kdeplasma-addons-applets-icontasks package<br/>- new kactivities package, split from kdelibs<br/>- new kdeedu-analitza package, split from kdeedu-kalgebra<br/>- kdeedu-kalzium has libfacile support<br/>- Open GL ES is enabled in kdebase-workspace</p><p>Please read the wiki page about [kde-unstable] if you want to use these packages. Also remember that [testing] could be needed, so follow arch-dev-public.</p><p>Also, the first beta of the Calligra Suite is in [kde-unstable] since May 19th and the packages have been built to replace the KOffice suite. Please use the <a href="https://bbs.archlinux.org/viewtopic.php?id=119305">thread about Calligra</a> or our bug tracker to report the packaging bugs.</p><p>Please report any packaging bug to <a href="https://bugs.archlinux.org">https://bugs.archlinux.org</a>.<br/>KDE bugs to <a href="https://bugs.kde.org">https://bugs.kde.org</a>.</p></div>
    </summary>
    <updated>2011-11-24T16:24:19Z</updated>
    <author>
      <name>bash</name>
      <uri>https://bbs.archlinux.org/profile.php?id=12777</uri>
    </author>
    <source>
      <id>https://bbs.archlinux.org/index.php</id>
      <link href="https://bbs.archlinux.org/extern.php?action=feed&amp;fid=24&amp;type=atom&amp;order=posted&amp;show=10" rel="self" type="application/atom+xml"/>
      <link href="https://bbs.archlinux.org/index.php" rel="alternate" type="text/html"/>
      <title>Arch Linux Forums / Announcements, Package &amp; Security Advisories</title>
      <updated>2012-01-28T07:35:21Z</updated>
    </source>
  </entry>

  <entry>
    <id>https://bbs.archlinux.org/viewtopic.php?id=130747</id>
    <link href="https://bbs.archlinux.org/viewtopic.php?id=130747" rel="alternate" type="text/html"/>
    <title>2011.11-1 archboot "2k11-R7" ISO hybrid image released</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Hi Arch community,</p><p>Arch Linux (archboot creation tool) 2011.11-1, "2k11-R7" has been released.<br/>To avoid confusion, this is not an official arch linux iso release!</p><p>Homepage and for more information on archboot:<br/><a href="http://wiki.archlinux.org/index.php/Archboot">http://wiki.archlinux.org/index.php/Archboot</a></p><p>Summary:<br/>- Plain bugfix release.</p><p>Hybrid image file and torrent is provided, which include<br/>i686 and x86_64 core repository. Please check md5sum before using it.</p><p>Hybrid image file is a standard CD-burnable image and also a raw disk image.<br/>    - Can be burned to CD(RW) media using most CD-burning utilities.<br/>    - Can be raw-written to a drive using 'dd' or similar utilities.<br/>      This method is intended for use with USB thumb drives.</p><p>Please get it from your favorite arch linux mirror:<br/><a href="https://downloads.archlinux.de/iso/archboot/2011.11/">https://downloads.archlinux.de/iso/archboot/2011.11/</a><br/>&lt;yourmirror&gt;/iso/archboot/2011.11/</p><p>/boot for PXE/Rescue files are provided here:<br/><a href="https://downloads.archlinux.de/iso/archboot/2011.11/boot">https://downloads.archlinux.de/iso/arch … 11.11/boot</a><br/>&lt;yourmirror&gt;/iso/archboot/2011.11/boot</p><p>Changelog:</p><p>GENERAL:<br/>- kernel 3.1.1 / LTS kernel 2.6.32.48<br/>- pacman 3.5.4 usage<br/>- RAM recommendations: 320 MB</p><p>Kernel changes:<br/>- bump to latest 3.1 series and bump lts to latest .32 series</p><p>Removed features:<br/>- ide-blacklist hook for 3.1 series</p><p>Environment changes:<br/>- updated pacman mirrorlist<br/>- added efivars kernel module<br/>- added real kernel version names to bootmessage</p><p>hwdetect changes:<br/>- none</p><p>setup changes:<br/>- fixed manual mounting of install media<br/>- load efivars module for grub2 uefi support<br/>- fix GPT detection on bootloader menu</p><p>quickinst changes:<br/>- none</p><p>Further documentation can be found on-disk and on the wiki.<br/>Have fun!</p><p>greetings<br/>tpowa</p></div>
    </summary>
    <updated>2011-11-22T10:48:11Z</updated>
    <author>
      <name>tpowa</name>
      <uri>https://bbs.archlinux.org/profile.php?id=1232</uri>
    </author>
    <source>
      <id>https://bbs.archlinux.org/index.php</id>
      <link href="https://bbs.archlinux.org/extern.php?action=feed&amp;fid=24&amp;type=atom&amp;order=posted&amp;show=10" rel="self" type="application/atom+xml"/>
      <link href="https://bbs.archlinux.org/index.php" rel="alternate" type="text/html"/>
      <title>Arch Linux Forums / Announcements, Package &amp; Security Advisories</title>
      <updated>2012-01-28T07:35:21Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://linuxtidbits.wordpress.com/?p=1618</id>
    <link href="http://linuxtidbits.wordpress.com/2011/11/20/say-goodbye-to-swap-partition/" rel="alternate" type="text/html"/>
    <title>Say Goodbye to Swap Partition</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Update: 12/10/2011 – Having occasional bugs with uswsusp suspending improperly has unfortunately led me to revert to using the kernel method of suspending and using a swap partition. 12/01/2011 – Appreciate the comments that had good points. Post updated: first, changed swap fstab entry to show proper none mount point. Second, added two methods to [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1618&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://linuxtidbits.files.wordpress.com/2011/11/swap-icon.jpg"><img alt="" class="alignright size-full wp-image-1619" src="http://linuxtidbits.files.wordpress.com/2011/11/swap-icon.jpg?w=474" title="swap-icon"/></a></p>
<p>
</p><div style="overflow: auto; width: auto; border: solid #bab363; background-color: #faf7d8; font-size: 1em; color: #4f4c2a; border-width: .1em .8em; padding: .3em .6em;"><strong>Update: </strong><br/>
12/10/2011 – Having occasional bugs with uswsusp suspending improperly has unfortunately led me to revert to using the kernel method of suspending and using a swap partition.<p/>
<p>12/01/2011 – Appreciate the comments that had good points.  Post updated: first, changed swap <tt>fstab</tt> entry to show <em>proper</em> <b><tt>none</tt></b> mount point.  Second, added two methods to be able to use hibernation with a swap file.</p></div>
<p/>
<p/>
<p>I decided not to clutter my partitioning scheme anymore with a swap partition so from now on I’m using a swap file instead.  This shows how to do use a create and use swap file during installation.</p>
<p><b>Create the Swap File</b></p>
<p>Boot the install disk and load Linux (for Ubuntu use the ‘Try Ubuntu’ to get to a functioning environment).  Partition now (if required, GParted recommended) as it is generally easier than using the installer partitioner.  When partitioning is done open the terminal so the swap file can be created.</p>
<p>You’ll need the kernel-defined root partition name (if you don’t already know it):</p>
<pre>sudo fdisk -l | grep ^/dev</pre>
<p>To simplify tasks define the root partition as a variable.  For example, if your root partition is sda2:</p>
<pre>root_part=sda2</pre>
<p>Create the mount point and mount the partition:</p>
<pre>sudo mkdir /mnt/$root_part &amp;&amp; sudo mount /dev/$root_part /mnt/$root_part</pre>
<p>Create the swap file (this is created before doing the install so it’s at the beginning of the partition) by doing:</p>
<pre>fallocate -l 1G /mnt/$root_part/swapfile  # G = Gigabyte, M = Megabyte
chmod 600 /mnt/$root_part/swapfile
mkswap /mnt/$root_part/swapfile</pre>
<p>Unmount, then install your system:</p>
<pre>umount /mnt/$root_part</pre>
<p><b>Install your System</b></p>
<p>Install as normal.  With the installer, define the partition(s) to the desired mount point (for example, <tt>sda2</tt> to be <b><tt>/</tt></b> (root), <tt>sda3</tt> to be <b><tt>/home</tt></b>?,…).</p>
<p><b>List the Swap File</b></p>
<p>After the install has completed, the swap file information will need to be listed in the static filesystem configuration file (<tt>fstab</tt>).  </p>
<p>To do this, the partition will likely need to be mounted again:</p>
<pre>sudo mount /dev/$root_part /mnt/$root_part</pre>
<p>Add the swap file to root partition <tt>fstab</tt> file using the editor of choice (for example: <tt>gksudo gedit /mnt/$root_part/etc/fstab</tt>) and adding:</p>
<pre>/swapfile none swap defaults 0 0</pre>
<p><b>Define the Kernel Options</b></p>
<p>After the install has completed, the swap file location will need to be defined as a kernel option to the bootloader.</p>
<p>Change apparent root (to be able to update the bootloader later):</p>
<pre>for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$root_part$i; done
chroot /bin/bash /mnt/$root_part</pre>
<p>Get root parition UUID (partition Unique IDentifier):</p>
<pre>blkid | grep /dev/STORAGE-DEVICE-ROOT-PARTITION</pre>
<p>Get the swap file first block physical location on the partition by running the command (the value needed is given on the first row of the ‘physical’ column):</p>
<pre>filefrag -v /swapfile</pre>
<p>The bootloader will need the kernel options defining the swap file partition UUID and first block physical location of the swap file (resume_offset) in this form:</p>
<pre>resume=UUID=the-root-partition-UUID resume_offset=the-swap-file-physical-address</pre>
<p>These will need to be added to the configuration file.  For the original GRUB (GRUB Legacy), edit <tt>/boot/grub/menu.lst</tt> and add to the kernel line the above kernel options.  For GRUB2, edit <tt>/etc/default/grub</tt> and add the kernel options to the <tt>GRUB_CMDLINE_LINUX_DEFAULT="..."</tt> line, then:</p>
<pre>update-grub</pre>
<p>Also the initial ram filesystem (basically a device/software loader for items that need initialized during kernel boot) may need this information as well.  For Ubuntu, define the kernel options by doing:</p>
<pre>echo "resume=UUID=the-root-partition-UUID resume_offset=the-swap-file-physical-address" | sudo tee /etc/initramfs-tools/conf.d/resume
sudo update-initramfs -u</pre>
<p>Exit chroot, unmount, and reboot to new system:</p>
<pre>exit
for i in /sys /proc /dev/pts /dev; do sudo umount /mnt$root_part$i; done
umount /mnt/$root_part</pre>
<p>Test now if hibernation works.  If it doesn’t you can try to add and switch to the ‘userspace’ suspend framework instead.</p>
<p><b>Userspace Suspend/Hibernation</b></p>
<p><b><tt>uswsusp</tt></b> is a rewrite of the kernel suspend framework for use as a ‘userspace’ tool.  It generally has better support for suspending to a swap file so using it here is generally necessary.</p>
<p>Reboot into the new operating system and install <b><tt>uswsusp</tt></b>.</p>
<p>Ubuntu pre-configures <b><tt>uswsusp</tt></b> (defines the root partition, gets the swap file size, runs <tt>sudo swap-offset /swapfile</tt>, places these values in the configuration file <tt>/etc/uswsusp.conf</tt>, then creates a new initramfs) so all that needed to do is install it.  Other distributions may need to configure it.  Once installed and configured, reboot again and test.</p>
<p><b>References</b></p>
<ul>
<li><a href="https://wiki.archlinux.org/index.php/Swap" target="_blank">Arch Wiki’s Swap Page</a></li>
<li><a href="http://wiki.debian.org/Hibernation/Hibernate_Without_Swap_Partition" target="_blank">Hibernate Without Swap Partition</a></li>
<li><a href="http://ubuntuforums.org/showthread.php?t=1042946" target="_blank">HOWTO: Use swapfile instead of swap partition and have working hibernation</a></li>
</ul>
<br/>  <a href="http://feeds.wordpress.com/1.0/gocomments/linuxtidbits.wordpress.com/1618/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/linuxtidbits.wordpress.com/1618/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/linuxtidbits.wordpress.com/1618/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/linuxtidbits.wordpress.com/1618/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/linuxtidbits.wordpress.com/1618/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/linuxtidbits.wordpress.com/1618/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/linuxtidbits.wordpress.com/1618/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/linuxtidbits.wordpress.com/1618/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/linuxtidbits.wordpress.com/1618/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/linuxtidbits.wordpress.com/1618/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/linuxtidbits.wordpress.com/1618/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/linuxtidbits.wordpress.com/1618/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/linuxtidbits.wordpress.com/1618/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/linuxtidbits.wordpress.com/1618/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1618&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2011-11-20T10:12:42Z</updated>
    <category term="Linux"/>
    <author>
      <name>Todd Partridge (Gen2ly)</name>
    </author>
    <source>
      <id>http://linuxtidbits.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/5ad9566326fdd6b7f4e8af74375a3cac?s=96&amp;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</logo>
      <link href="http://linuxtidbits.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://linuxtidbits.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://linuxtidbits.wordpress.com/osd.xml" rel="search" title="Linux Tidbits" type="application/opensearchdescription+xml"/>
      <link href="http://linuxtidbits.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Every letter has its place</subtitle>
      <title>Linux Tidbits</title>
      <updated>2012-02-07T03:13:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>http://www.toofishes.net/blog/nginx-memory-usage-ssl/</id>
    <link href="http://www.toofishes.net/blog/nginx-memory-usage-ssl/" rel="alternate" type="text/html"/>
    <title>Nginx memory usage with SSL</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The Nginx <a href="http://nginx.org/en/CHANGES-1.0">changelog</a> for the 1.0.9 release (on November 1, 2011) had a single line note tucked away inside:</p>
<blockquote>
<p>*) Feature: decrease of memory consumption if SSL is used.</p>
</blockquote>
<p>It turns out two small tweaks made this possible: <a href="http://trac.nginx.org/nginx/changeset/4186/nginx">disabling SSL compression</a> and <a href="http://trac.nginx.org/nginx/changeset/4187/nginx">releasing unneeded SSL buffers</a>.</p>
<p>So why am I even blogging about this? This site surely isn't big enough to have this really make a difference, but the before and after on the graph of Nginx memory usage on the <a href="http://www.archlinux.org/">Arch Linux</a> forums and wiki server is rather astounding, a site that does only HTTPS. If you use Nginx + SSL, I'd highly recommend upgrading.</p>
<p><img alt="Nginx memory usage" src="http://www.toofishes.net/media/extra/nginx_ssl_memory_drop.png"/></p></div>
    </summary>
    <updated>2011-11-16T20:10:40Z</updated>
    <category term="linux"/>
    <category term="nginx"/>
    <author>
      <name>Dan McGee</name>
    </author>
    <source>
      <id>http://www.toofishes.net/blog/</id>
      <link href="http://www.toofishes.net/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.toofishes.net/rss/blog/" rel="self" type="application/rss+xml"/>
      <rights>Copyright (c) 2007-2012, Dan McGee</rights>
      <subtitle>The latest and greatest from my blog.</subtitle>
      <title>toofishes.net Blog</title>
      <updated>2012-01-01T11:13:06Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.nicosphere.net/?p=2536</id>
    <link href="http://www.nicosphere.net/why-i-dont-use-rss-anymore-2536/" rel="alternate" type="text/html"/>
    <title>Why I don’t use RSS anymore</title>
    <summary>Internet comes with lots of informations, of all kinds, and from all sort of sources. As information sources are growing, we trained ourselves to filter, and retrieve only a tiny part of all this flux. Everybody is familiar with RSS feeds, even computers beginners, it’s well known, even can be managed with a browser. Of [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Internet comes with lots of informations, of all kinds, and from all sort of
sources. As information sources are growing, we trained ourselves to filter,
and retrieve only a tiny part of all this flux.</p><p>Everybody is familiar with RSS feeds, even computers beginners, it’s well known,
even can be managed with a browser. Of courses, as numbers of feeds followed, we
use online services such as Google Reader or desktop-based aggregators. With some practices
we usually managed to classify all those informations into directories.</p><p>Their are restrictions using RSS, we need to choose ourselves specifics sites and blogs.
Two implications from this.</p><ul><li>I’m not interested about everything from a blog or website.</li></ul><p>Even if it’s obvious, when you are following a large amount of RSS, it quickly
become messy, and I usually only read titles, maybe few out of hundreds is
actually read. As you filter yourself, it takes time and I don’t think it’s
really productive. If news from RSS could be rated by trusted readers, it would
do the selection job for me, saves me time. That where site like Hacker News
and Reddit are good at, informations are already ranked for you. So, RSS flux
is like follow the ‘what’s new’ page from Hacker News, huge amount of unranked
information.</p><ul><li>I have information from only websites I followed.</li></ul><p>Obvious again, but the question is, do I know the subject I’m interested in to
follow right blogs? should I trust myself and my selection of website? I’m
not so sure I would, and I really think that where Twitter is good at. I
know everyone does not have the same usage, and some other don’t see the
point at all of Twitter. For me, the idea is to follow a bunch of persons that I
trust them selection of informations. After all, tweets often looks like a RSS feed
title and link. So it’s kind of the highlight on the selection of feed or
information from every persons followed. RSS reader can’t do this on is own.</p><p>Planet could be an answer about all this sharing stuff that RSS don’t have and
Twitter does. But planets is not really about ranking, almost a selection from
a specific subject. But ass the subject come wiser, it tend to be less interesting,
for example, <a href="http://blog.planet-libre.org/2011/07/04/sondage/">a pool</a> from the main French planet, who’s have large
subjects about Linux and Free stuffs, shown that in average, less that the half of
contain interest a reader. And it’s easily comprehensible, I’m not a big fan of
network/Nagios, tired of seeing the same tricks over and over, so interest of
wise planet become smaller.</p><ul><li>About Google+ and Facebook</li></ul><p>Maybe I am doing it wrong, but I thought those social networks tends to speak
about anything, I am trying to follow my interests, Arch Linux and
programming, but seems that people are more likely to speak about the last
youtube or picture seen, and about anything really. This is unlikely Twitter,
where it usually more specific. But it could be me, I’m not used to with those
networks.</p><ul><li>Conclusion</li></ul><p>Over years, I slowly left RSS as my main information source, and use more often sites like Hacker News and Reddit. The fact is I almost don’t use RSS readers
anymore. If I have to get ride off everything except one information source, I probably keep
Hacker News.</p><p>Information over the Internet is not an easy subject, it has evolve over the
years for me, and still does. I’ll be very curious if others are getting ride off RSS readers.</p></div>
    </content>
    <updated>2011-11-15T14:43:04Z</updated>
    <category term="internet"/>
    <category term="archlinux-en"/>
    <category term="linux-en"/>
    <category term="rss"/>
    <author>
      <name>Nic0</name>
    </author>
    <source>
      <id>http://www.nicosphere.net</id>
      <link href="http://www.nicosphere.net/tag/archlinux-en/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://www.nicosphere.net" rel="alternate" type="text/html"/>
      <subtitle>Linux and programming blog</subtitle>
      <title>Nic0's Sphere » archlinux-en</title>
      <updated>2011-12-29T11:43:22Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://kmkeen.com/albumbler/2011-11-13-22-39-29-192.html</id>
    <link href="http://kmkeen.com/albumbler/2011-11-13-22-39-29-192.html" rel="alternate" type="text/html"/>
    <title>Albumbler</title>
    <summary>Emacs support and vastly better MPD support.</summary>
    <updated>2011-11-13T22:39:29Z</updated>
    <source>
      <id>http://kmkeen.com</id>
      <author>
        <name>Kyle Keen</name>
      </author>
      <link href="http://kmkeen.com" rel="alternate" type="text/html"/>
      <link href="http://kmkeen.com/rss.xml" rel="self" type="application/rss+xml"/>
      <subtitle>Kyle Keen hacking life, hardware and software.</subtitle>
      <title>kmkeen.com</title>
      <updated>2012-02-12T23:43:15Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://archlinux.me/dusty/?p=476</id>
    <link href="http://archlinux.me/dusty/2011/11/13/killing-the-google-habit/" rel="alternate" type="text/html"/>
    <title>Killing the Google habit</title>
    <summary>We live in an age where information is power. It is so valuable that companies like Google and Facebook are willing to give us amazing services for free in exchange for the information we give them, both about ourselves and others. The cost of these “free” services is the information we choose to provide. Most [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>We live in an age where information is power. It is so valuable that companies like Google and Facebook are willing to give us amazing services for free in exchange for the information we give them, both about ourselves and others.</p>
<p>The cost of these “free” services is the information we choose to provide. Most of us are so eager to not spend money that we happily give away a wealth of personal details, including:</p>
<ol>
<li>every e-mail we send or receive</li>
<li>every chat message.</li>
<li>every location we want to find</li>
<li>contact details for everyone we know</li>
<li>our general relationship to every person we know (using services like Google Plus circles or Facebook groups)</li>
<li>every photo we take</li>
<li>every news article we read</li>
<li>most of the websites we visit (if Google analytics, “like this on Facebook”, “share this on Twitter”, or other trackers are enabled on the site</li>
<li>every term we search for</li>
<li>our appointments, tasks and meetings</li>
<li>our documents</li>
<li>our purchases and shopping habits</li>
</ol>
<p>In short, we now share a huge percentage of the collective information about our entire lives with various online services, and in exchange for what? Convenience, of course. Safe backup and storage. Free access from any computer with an internet connection.</p>
<p>I think we’re getting shortchanged. I don’t think most services are worth the information we sacrifice to use them. This information is extremely valuable, yet we give it away for easy methods of keeping in touch. This article is a summary of the things I am doing to keep my personal information personal. It’s not strictly a question of privacy, although that is also important. It’s more about protecting information that has value from theft by these giant corporations.</p>
<p>Facebook is the company that makes me the most nervous. I don’t trust their shady, ever changing privacy policy. Therefore, I closed my Facebook account well over a year ago, and I use the excellent Firefox plugin <a href="https://www.requestpolicy.com/">RequestPolicy</a> to prevent them from knowing which web pages i visit. As a backup, I have also customized my <a href="http://someonewhocares.org/hosts/">hosts</a> file to prevent any requests to the Facebook domain and other trackers.</p>
<p>I feel the cost of the Facebook service is too high. I am not willing to “pay” for this service with information about the sites I visit, the people I communicate, and the things I say to those people. Of course, they still have a certain amount of information about me that I cannot protect alone. People probably still tag my name in photos, link to my websites, or try to invite my e-mail address to join the service. These people are giving away the knowledge of our relationship. I can’t help that, as it takes two to keep a secret. Overall, however, I am comfortable with the relative unknown that I am to the company.</p>
<p>Amazon is another company that causes apprehension. They know my reading habits and shopping habits. Even if I don’t buy through them, I research many products on their site. Worse, Amazon provides a large chunk of computing power to numerous other websites that I use. In most cases, I likely don’t even know which sites are using AWS services. In theory, Amazon has access to data stored on those systems. In practice, I suspect the cost of mining that data is prohibitive at this time. Nevertheless, the data exists and Amazon algorithms may one day desire access to it.</p>
<p>Google is the third and largest major data collector. I trust them with a lot more of my personal data than anyone else. In some cases, their services are so useful that I am willing to pay for it with this information. In other cases, I have been unaware of just how much information I am giving them. I’ve been considering each of Google’s services in light of what I am paying for it and have come to the following conclusions:</p>
<p>Google Analytics provides me absolutely zero service in exchange for telling Google almost every site I visit. I have solved this in the same way I solved the Facebook issue: The Request Policy plugin and a modded hosts file for backup.</p>
<p>Google News is a nice service, but it’s not worth the cost of allowing Google to know every article that is of interest to me. Further, I have been allowing Google to decide which articles I should seen. Ostensibly this is in the name of convenience; I don’t have to sift through articles I am not interested in. This convenience has an added cost. I have given Google the opportunity to “warp” my view of the world by picking what windows i see into it. I don’t believe Google would maliciously hide articles from me to prevent me from knowing about that information (even though they do this in China on behalf of the government, but they have the opportunity to do so. Worse, they can easily accidentally hide articles from me that prevent my getting the whole story. Their algorithms are certainly not infallible. If I want news on a controversial subject, they may only show me the side of the story I “probably” agree with. This doesn’t allow me to make an unbiased judgment of my own.</p>
<p>Google Reader is a related tool that is not worth the cost of allowing Google to know what feeds or articles I find interesting or amusing. I have quit using Google News already and will be dropping Google Reader requests this week.</p>
<p>Gmail is an interesting question. I gave up Gmail last summer because I wasn’t comfortable with Google having access to every email I write. However, some e-mail server somewhere must necessarily have access to that information. E-mail has to be stored somewhere. I currently use Zoho mail, but intend eventually to migrate to a personally maintained e-mail server. One interesting thing about Gmail is that even though I do not use the service, Google still has access to every message I send to someone who has a Gmail address. I am willing to pay this cost for two reasons. First, it is not feasible to find other forms of communication for each of my contacts that uses Gmail. Second, the message has to be stored somewhere, and if the user receiving it trusts Gmail over some other service, that is their prerogative.</p>
<p>Google Chat has the same problem. I am in the process of moving my Google Talk contacts to a Jabber account. For the select few people I communicate with who use Jabber, Google does not have a record of our chat. However, most of my contacts are Google Chat users. I have to decide if the convenience of talking to these people through an instant message is worth the cost of allowing Google to see all those messages. For the time being, I don’t expect to change my habits.</p>
<p>I don’t think I understand the purpose of Google Plus. I’m still playing with it, but the service it offers doesn’t seem to justify letting Google see my semi-private communications. I expect to phase it out of my daily routine in a month or two. I don’t mind Google indexing my intentionally public posts, but I can just as easily make public posts on my blog. The information they obtain in the form of circles (i.e: whether I consider them a friend or coworker or acquaintance) is too valuable to give away freely.</p>
<p>Google maps is the most difficult service to walk away from. If I want the convenience of a mapping application without the cost of telling Google or some other online service my exact location, I guess I’d have to buy paper maps or a GPS that is not web enabled. My current favourite Google maps feature is the way it automatically remembers searches I made on the web when I look them up again on my Android phone. For the time being, I am willing to provide sensitive information about my location in exchange for the service Google supplies. However, I suspect I am overpaying.</p>
<p>Google search, of course, is the great big question mark. It is impossible to search the web without giving some system information about what you want to search for. Services like Scroogle can prevent Google from knowing who made the search, but that doesn’t stop Scroogle from having it.</p>
<p>I have noticed that about 40% of my searches return a Wikipedia page as the first result and that I usually click that link when it comes up. There is no need for Google to know that I searched for something on Wikipedia. I have therefore set up Wikipedia as my default search engine and created a <a href="http://hackaday.com/2009/09/23/custom-shortcuts-from-firefox-address-bar/">shortcut bookmark</a> named “g” to search <a href="http://scroogle.org/">Scroogle</a>.</p>
<p>In addition to knowing which terms I search for, Google also knows which links I click in the search results. There is a Javascript click handle on each link reporting to Google that I have clicked it. The service Google provides me in exchange for this information is custom search results based on what they think I will click. Aside from suffering from the same problems I described with Google News, this service is simply not worth the value of the information they are collecting from me. From its inception, Google was able to provide uncannily accurate search results without this extra knowledge about me. My solution? All Google searches are now routed through Scroogle.</p>
<p>Google Translate is a service that I am willing to supply with information about my inane translation requests in order to see the translations. I will continue to use this service. My French is so basic, that I don’t think Google can get much of a profile of me from it.</p>
<p>At this point, Google map’s sync with my phone, and my continued evaluation of Google Plus are the only Google services that I need to be logged into my Google account to use. I therefore expect to be staying logged out of my Google account by default by early next year. I also hope to disable my account altogether by the end of 2012.</p>
<p>One non-google service that also has a great deal of information about me is Remember The Milk. They know every task I complete. Worse, I pay them for the privilege of having this information (I have the RTM pro account in order to sync with my phone)! I intend to spend a weekend writing my own self-hosted web-based task management app that will be accessible from both phone and laptop someday soon.</p>
<p>Do you think I’m too paranoid about what Google knows about me? Consider Cory Doctorow’s short story, <a href="http://www.scroogle.org/doctorow.html">Scroogled</a>, which was written in 2007. We are a lot closer to the eventuality he describes than we were five years ago. Seems somewhat prophetic, doesn’t it?</p></div>
    </content>
    <updated>2011-11-13T10:21:56Z</updated>
    <category term="Uncategorized"/>
    <category term="google"/>
    <category term="privacy"/>
    <author>
      <name>dusty</name>
    </author>
    <source>
      <id>http://archlinux.me/dusty</id>
      <link href="http://archlinux.me/dusty/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://archlinux.me/dusty" rel="alternate" type="text/html"/>
      <subtitle>A little more of everything, please</subtitle>
      <title>Dusty's Diverse Domain</title>
      <updated>2012-01-20T17:13:19Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.nicosphere.net/?p=2534</id>
    <link href="http://www.nicosphere.net/tyrs-a-microblogging-client-based-on-ncurses-2534/" rel="alternate" type="text/html"/>
    <title>Tyrs a Microblogging Client based on Ncurses</title>
    <summary>Tyrs is a microblogging client, supporting Twitter and Status.net (identi.ca), it’s based on console using the NCurses module from Python. The release of the 0.5.0 version is a good excuse to introduce Tyrs. Tyrs aims to get a good interaction with a fairly intuitive interface that can provide support ncurses. Tyrs tries also not to [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://tyrs.nicosphere.net">Tyrs</a> is a microblogging client, supporting Twitter and Status.net
(identi.ca), it’s based on console using the <a href="http://en.wikipedia.org/wiki/Ncurses">NCurses</a> module from Python. The release of the 0.5.0 version is a good excuse to introduce Tyrs.</p><p>Tyrs aims to get a good interaction with a fairly intuitive interface that can
provide support ncurses. Tyrs tries also not to impose choices to the user by
providing a configuration file for features, display and defaults keys. You
don’t like borders, space between tweets, or colors? It’s all configurable
in an INI-like file.</p><p>It’s really for the fun I started Tyrs, as I’m not a developer. I
chose to start this project because I use it, as well as educational purpose. Moreover,
contrary to what you should believe, I am not a big Twitter user, just a little regular
user, wanting to have pleasure to write a program. The first lines are from May</p><p>The license used is GPLv3, its development is carried out on <a href="https://github.com/Nic0/tyrs">a repository on
Github</a>, the code source is also available in the <a href="http://pypi.python.org/pypi/tyrs">pypi page</a>. Tyrs is Free Software.</p><p>I first used other clients, GUI or CLI, but the CLI alternatives
doesn’t correspond specifically to my expectations. There are mainly:</p><ul><li><a href="http://www.bitlbee.org/main.php/news.r.html">BitleBee</a>, is an application to be added to IRC client such as irssi or
weechat.  I never was a big fan of bitlebee.</li><li><a href="http://www.floodgap.com/software/ttytter/">TTYtter</a>, is the application I was using before writing Tyrs. Very
complete and mature. His approach does   not include however ncurses, and
therefore, although it is easily controllable from the keyboard, it doesn’t
have the interactive that have ncurses software.</li></ul><p>Since then, I had the opportunity to discover other microblogging clients, but
generally without ncurses support. According to my tastes, I through that there
was a lack to find my favorite ncurses Twitter client, and so, fit my console application
collection that I use every days.</p><p>Here a screenshot (<a href="http://pix.toile-libre.org/upload/original/1320604662.png" rel="lightbox[2534]">full screen view</a>) to visualize what we are talking about, it isn’t my
timeline, but someone’s public timeline.</p><p><img alt="1320604662 Tyrs a Microblogging Client based on Ncurses" src="http://pix.toile-libre.org/upload/img/1320604662.png" title="Tyrs a Microblogging Client based on Ncurses"/></p><p>Let’s go a little deeper into of Tyrs with an overview of the main features.</p><ul><li>Timelines<ul><li>Home: Used to view your tweets timeline, similar to what you have on your
home page of the site.</li><li>Mention: Includes tweets containing your nickname.</li><li>Direct: Includes messages sent privately.</li><li>Favorites: Displays tweets who has been bookmarked.</li><li>Other …</li></ul></li></ul><p>The Timelines are navigable with the arrow keys or with ‘j’ and ‘k’. We
could be compared to buffers of a ncurses IRC client.</p><p>This way of separate timelines is quite close to what can be seen in the
microblogging classic clients with a graphical interface. It’s probably a
reason why the interface is intuitive even if it’s a console application.</p><ul><li>Indicator of activities</li></ul><p>As we can display only one timeline, the indicator of activity indicates
whether new notices have appeared in other timelines, this detail avoids having
to navigate between timelines only to check for new incomings. A counter can also
quantify the activity. This place can also view the timeline currently
selected. Location is at the top right.</p><ul><li><p>Standard features:</p><ul><li>OAuth authentication;</li><li>Follow / Unfollow, ie subscribe to a feed of persons;</li><li>Search for a particular keyword;</li><li>Favorites;</li><li>Direct messages;</li><li>Opening direct URLs;</li></ul></li><li><p>Various</p><ul><li>Retweets Counter: This is a detail, but after using it a
while, I must say that I am used to. The purpose is to indicate
the number of times a tweet has been relayed (retweeted). It is
therefore a possibility to visualize in real time, popularity of a status.</li><li>Support URL shortener, so far, the main services are supported ur1.ca,
bit.ly and goo.gl.</li><li>Proxy support through the configuration file. This is one of the latest
feature added.</li><li>Filter system for tweets that do not contain URLs, the system that can
filter by name. It’s a way to reduce <em>noise</em>.</li><li><em>Waterline</em> to identify the last tweet read in the last use, it is
re-adjusted if necessary by just a key strock.</li><li>View a thread to get the conversation history. The answers to a tweet are
viewable by an envelope icon (✉).</li><li>Ability to start several instances of Tyrs, passing as argument ‘-a account’.</li></ul></li></ul><p>The number of keys shortcut can be confusing at first, the most common is
displayed at the bottom of the screen, that can be switched off, and a help
screen is available by pressing ‘h’.</p><p>As mentioned in the introduction, the main idea is to leave the choice up to
the user, and most behavior is customizable through a configuration file, that
is also generated at startup to ease your first customization.</p><p>Tyrs has been translated into French and Spanish, so this may seem anecdotal,
but it isn’t for me because is a real example of what I like in free software,
opportunities for contributions and exchange of humans from all horizons, not
speaking a word of Spanish, but it’s indeed a contribution straight from
Venezuela, which is given to Tyrs. Other aids to correct my poor English thanks
to <a href="http://jasonwryan.com/">jasonwryan</a> from Arch Linux, or proposals for
patches and bug reports and the packaging for distribution, including
Frugalware. Contributions and help which are always appreciated, especially
because it’s a small project.</p><p>If I am passionate about programming, I also have another focus is to keep a
blog. I mention here is not to make an advertisement, but because I think <a href="http://www.nicosphere.net/tag/tyrs/">the
topics about Tyrs</a>(unfortunately in French) are indicative of the state of mind in which I came to write
Tyrs, Speaking of this little program is the first time early in its design,
while the feature was only able to read his instructions without being able to
to send. There are some form of narrative developments and problems sometimes
encountered in darkness, discovering ncurses for Python.</p><p>For installation, more details are on <a href="http://tyrs.nicosphere.net/reference.html">the documentation page</a>, a package is
available for Arch Linux and Frugalware, in the case of Arch Linux, you simply
do:</p><div class="codecolorer-container bash railscasts" style="overflow: auto; white-space: nowrap; width: 435px;"><div class="bash codecolorer">yaourt <span style="color: #660033;">-S</span> tyrs</div></div><p>Tyrs are mainly tested with Python 2.7, I’m not sure of the result obtained
with earlier versions of Python. However if you have this version of Python and
python-pip installed you can do:</p><div class="codecolorer-container bash railscasts" style="overflow: auto; white-space: nowrap; width: 435px;"><div class="bash codecolorer">pip <span style="color: #c20cb9; font-weight: bold;">install</span> tyrs</div></div><p>Tyrs is not perfect, far from it, as seen above, support for Python prior to
2.7 is not really tested. Another black, is editing a record, I’m really not
satisfied with the system before, I think I would see to rewrite that part
in-depth, something I wanted to do for a long time, but always rejected.
Certainly other bugs, depending of the moon  and distribution of butterflies.</p><p>I opened a thread on the <a href="https://bbs.archlinux.org/viewtopic.php?id=119588">Arch Linux Forum</a>.</p><p>Free Software often come with <a href="http://www.gnu.org/s/gsl/manual/html_node/No-Warranty.html">no warranty</a> but I did my best not to
introduce bugs. I’m interested in all returns, regardless
of the form, comments, bug reports, patches. Most important thing is I really
enjoyed write Tyrs.</p><p>Some usefull links to learn more about Tyrs:</p><ul><li><a href="http://tyrs.nicosphere.net">Project Home Page</a></li><li><a href="http://tyrs.nicosphere.net/reference.html">Project Documentation</a></li><li><a href="https://github.com/Nic0/tyrs">Project on Github</a></li><li><a href="http://pypi.python.org/pypi/tyrs">Project on Pypi</a></li></ul></div>
    </content>
    <updated>2011-11-06T21:43:19Z</updated>
    <category term="internet"/>
    <category term="archlinux-en"/>
    <category term="linux-en"/>
    <category term="tyrs"/>
    <author>
      <name>Nic0</name>
    </author>
    <source>
      <id>http://www.nicosphere.net</id>
      <link href="http://www.nicosphere.net/tag/archlinux-en/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://www.nicosphere.net" rel="alternate" type="text/html"/>
      <subtitle>Linux and programming blog</subtitle>
      <title>Nic0's Sphere » archlinux-en</title>
      <updated>2011-12-29T11:43:22Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>http://sysphere.org/~anrxc/j/archives/2011/11/06/pulling_strings/index.html</id>
    <link href="http://sysphere.org/~anrxc/j/archives/2011/11/06/pulling_strings/index.html" rel="alternate" type="text/html"/>
    <title>Pulling strings</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>

After one year of managing a network
of <a href="http://sysphere.org/~anrxc/j/archives/2010/11/17/cfengine3_bootstrap/index.html">10
servers with Cfengine</a> I'm currently building two clusters of 50
servers with Puppet (which I'm using for the first time), and have
various notes to share. With my experience I had a feeling Cfengine
just isn't right for this project, and didn't consider it
seriously. These servers are all running <em>Debian GNU/Linux</em> and
Puppet felt natural because of the
good <a href="http://packages.debian.org/search?keywords=puppet">Debian
integration</a>, and the number of users whom also produced a lot of
resources. Chef was out of the picture soon because of
the <a href="http://wiki.opscode.com/display/chef/Architecture">scary
architecture</a>; <em>CouchDB</em>, <em>Solr</em>
and <em>RabbitMQ</em>... coming from Cfengine this seemed like a bad
joke. You probably need to hire a Ruby developer when it
breaks. Puppet is somewhat better in this regard. <br/><br/>

Puppet master needs Ruby, and has a built-in file server using
<em>WEBrick</em>. My first disappointment with Puppet was
WEBrick. Though
<em>PuppetLabs</em> claim you can scale it up to 20 servers, that
proved way off, the built-in server has problems serving as little as
5 agents/servers, and you get to see many dropped connections and
failed catalog transfers. I was forced to switch to <em>Mongrel</em>
and <em>Nginx</em> as frontend very early in the project, on both
clusters. This method works much better (even
though <em>Apache+Passenger</em> is the recommended method now from
PuppetLabs), and it's not a huge complication compared to WEBrick (and
Cfengine which doesn't make you jump through any hoops). Part of the
reason for this failure is my pull interval, which is 5 minutes with a
random sleep time of up to 3 minutes to avoid harmonics (which is
still a high occurrence with these intervals and WEBrick fails
miserably). In production a customer can not wait on 30/45 minute pull
intervals to get his IP address whitelisted for a service, or some
other mundane task, it must happen within 10 minutes... but I'll come
to these kind of unrealistic ideas a little later. <br/><br/>

Unlike the Cfengine article I have no bootstrapping notes, and no
code/modules to share. By default the fresh started puppet agent will
look for a host called "puppet" and pull in what ever you defined to
bootstrap servers in your <em>manifests</em>. As for modules, I wrote
a ton of code and though I'd like to share it, my employer owns
it. But unlike Cfengine v3 there's a lot
of <a href="http://docs.puppetlabs.com/">resources out there for
Puppet</a> which can teach you everything you need to know, so I don't
feel obligated to even ask. <br/><br/>

Interesting enough, published modules would not help you get your job
done. You will have to write your own, and your team members will have
to learn how to use your modules, which also means writing a lot of
documentation. Maybe my biggest disappointment is getting
disillusioned by most Puppet advocates and DevOps prophets. I found
articles and modules most of them write, and experiences they share
have nothing to do with the real world. It's like they host servers in
a magical land where everything is done in one way and all servers are
identical. Hosting big websites and their apps is a much, much
different affair. <br/><br/>

Every customer does things differently, and I had to write custom
modules for each of them. Just between these two clusters a module
managing Apache is different, and you can abstract your code a lot but
you reach a point where you simply can't push it any more. Or if you
can, you create a mess that is unusable by your team members, and I'm
trying to make their jobs better not make them miserable. One customer
uses an <em>Isilon NAS</em>, the other has a content distribution
network, one uses Nginx as a frontend, other has chrooted web servers,
one writes logs to a NFS, other to a Syslog cluster... Now imagine
this on a scale with 2,000 customers and 3 times the servers and most
of the published infrastructure design guidelines become
laughable. Instead you find your self implementing custom solutions,
and inventing your own rules, best that you can... <br/><br/>

I'm ultimately here to tell you that the projects are in a better
state then they would be with the usual cluster management policy. My
best moment was an e-mail from a team member saying "<em>I read the
code, I now understand it</em> [Puppet]<em>. This is fucking
awesome!</em>". I knew at that moment I managed to build something
good (or good enough), despite the shortcomings I found, and with
nothing more than
using <a href="http://puppetlabs.com/">PuppetLabs</a>
resources. Actually, that is not completely honest. Because I did buy
and read the
book <a href="http://www.amazon.com/Pro-Puppet-James-Turnbull/dp/1430230576/">Pro
Puppet</a> which contains an excellent chapter on using <em>Git</em>
for collaboration on modules between sysadmins and developers, with
proper implementation of development, testing and production
(Puppet)environments.

</p></div>
    </summary>
    <updated>2011-11-05T23:17:09Z</updated>
    <category term="work, code, books"/>
    <author>
      <name>anrxc</name>
    </author>
    <source>
      <id>http://sysphere.org/~anrxc/j</id>
      <author>
        <name>anrxc</name>
      </author>
      <link href="http://sysphere.org/~anrxc/j/rss.xml" rel="self" type="application/rss+xml"/>
      <link href="http://sysphere.org/~anrxc/j" rel="alternate" type="text/html"/>
      <subtitle>journal of Adrian C. (anrxc)</subtitle>
      <title>Unknown and partly hidden</title>
      <updated>2011-11-05T23:17:11Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://www.nicosphere.net/tyrs-a-microblogging-client-based-on-ncurses-2534</id>
    <link href="http://www.nicosphere.net/tyrs-a-microblogging-client-based-on-ncurses-2534" rel="alternate" type="text/html"/>
    <title>Tyrs a Microblogging Client based on Ncurses</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://tyrs.nicosphere.net">Tyrs</a> is a microblogging client, supporting Twitter and Status.net
(identi.ca), it’s based on console using the <a href="http://en.wikipedia.org/wiki/Ncurses">NCurses</a> module from Python. The release of the 0.5.0 version is a good excuse to introduce Tyrs.</p>

<p>Tyrs aims to get a good interaction with a fairly intuitive interface that can
provide support ncurses. Tyrs tries also not to impose choices to the user by
providing a configuration file for features, display and defaults keys. You
don’t like borders, space between tweets, or colors? It’s all configurable
in an INI-like file.</p>

<p>It’s really for the fun I started Tyrs, as I’m not a developer. I
chose to start this project because I use it, as well as educational purpose. Moreover,
contrary to what you should believe, I am not a big Twitter user, just a little regular
user, wanting to have pleasure to write a program. The first lines are from May</p>

<p>The license used is GPLv3, its development is carried out on <a href="https://github.com/Nic0/tyrs">a repository on
Github</a>, the code source is also available in the <a href="http://pypi.python.org/pypi/tyrs">pypi page</a>. Tyrs is Free Software.</p>

<p>I first used other clients, GUI or CLI, but the CLI alternatives
doesn’t correspond specifically to my expectations. There are mainly:</p>

<ul>
<li><a href="http://www.bitlbee.org/main.php/news.r.html">BitleBee</a>, is an application to be added to IRC client such as irssi or
weechat.  I never was a big fan of bitlebee.</li>
<li><a href="http://www.floodgap.com/software/ttytter/">TTYtter</a>, is the application I was using before writing Tyrs. Very
complete and mature. His approach does   not include however ncurses, and
therefore, although it is easily controllable from the keyboard, it doesn’t
have the interactive that have ncurses software.</li>
</ul>


<p>Since then, I had the opportunity to discover other microblogging clients, but
generally without ncurses support. According to my tastes, I through that there
was a lack to find my favorite ncurses Twitter client, and so, fit my console application
collection that I use every days.</p>

<p>Here a screenshot (<a href="http://pix.toile-libre.org/upload/original/1320604662.png">full screen view</a>) to visualize what we are talking about, it isn’t my
timeline, but someone’s public timeline.</p>

<p>![Screenshot of Tyrs] (http://pix.toile-libre.org/upload/img/1320604662.png)</p>

<p>Let’s go a little deeper into of Tyrs with an overview of the main features.</p>

<ul>
<li>Timelines

<ul>
<li>Home: Used to view your tweets timeline, similar to what you have on your
home page of the site.</li>
<li>Mention: Includes tweets containing your nickname.</li>
<li>Direct: Includes messages sent privately.</li>
<li>Favorites: Displays tweets who has been bookmarked.</li>
<li>Other …</li>
</ul>
</li>
</ul>


<p>The Timelines are navigable with the arrow keys or with ‘j’ and ‘k’. We
could be compared to buffers of a ncurses IRC client.</p>

<p>This way of separate timelines is quite close to what can be seen in the
microblogging classic clients with a graphical interface. It’s probably a
reason why the interface is intuitive even if it’s a console application.</p>

<ul>
<li>Indicator of activities</li>
</ul>


<p>As we can display only one timeline, the indicator of activity indicates
whether new notices have appeared in other timelines, this detail avoids having
to navigate between timelines only to check for new incomings. A counter can also
quantify the activity. This place can also view the timeline currently
selected. Location is at the top right.</p>

<ul>
<li><p>Standard features:</p>

<ul>
<li>OAuth authentication;</li>
<li>Follow / Unfollow, ie subscribe to a feed of persons;</li>
<li>Search for a particular keyword;</li>
<li>Favorites;</li>
<li>Direct messages;</li>
<li>Opening direct URLs;</li>
</ul>
</li>
<li><p>Various</p>

<ul>
<li>Retweets Counter: This is a detail, but after using it a
while, I must say that I am used to. The purpose is to indicate
the number of times a tweet has been relayed (retweeted). It is
therefore a possibility to visualize in real time, popularity of a status.</li>
<li>Support URL shortener, so far, the main services are supported ur1.ca,
bit.ly and goo.gl.</li>
<li>Proxy support through the configuration file. This is one of the latest
feature added.</li>
<li>Filter system for tweets that do not contain URLs, the system that can
filter by name. It’s a way to reduce <em>noise</em>.</li>
<li><em>Waterline</em> to identify the last tweet read in the last use, it is
re-adjusted if necessary by just a key strock.</li>
<li>View a thread to get the conversation history. The answers to a tweet are
viewable by an envelope icon (✉).</li>
<li>Ability to start several instances of Tyrs, passing as argument ‘-a account’.</li>
</ul>
</li>
</ul>


<p>The number of keys shortcut can be confusing at first, the most common is
displayed at the bottom of the screen, that can be switched off, and a help
screen is available by pressing ‘h’.</p>

<p>As mentioned in the introduction, the main idea is to leave the choice up to
the user, and most behavior is customizable through a configuration file, that
is also generated at startup to ease your first customization.</p>

<p>Tyrs has been translated into French and Spanish, so this may seem anecdotal,
but it isn’t for me because is a real example of what I like in free software,
opportunities for contributions and exchange of humans from all horizons, not
speaking a word of Spanish, but it’s indeed a contribution straight from
Venezuela, which is given to Tyrs. Other aids to correct my poor English thanks
to <a href="http://jasonwryan.com/">jasonwryan</a> from Arch Linux, or proposals for
patches and bug reports and the packaging for distribution, including
Frugalware. Contributions and help which are always appreciated, especially
because it’s a small project.</p>

<p>If I am passionate about programming, I also have another focus is to keep a
blog. I mention here is not to make an advertisement, but because I think <a href="http://www.nicosphere.net/tag/tyrs/">the
topics about Tyrs</a>(unfortunately in French) are indicative of the state of mind in which I came to write
Tyrs, Speaking of this little program is the first time early in its design,
while the feature was only able to read his instructions without being able to
to send. There are some form of narrative developments and problems sometimes
encountered in darkness, discovering ncurses for Python.</p>

<p>For installation, more details are on <a href="http://tyrs.nicosphere.net/reference.html">the documentation page</a>, a package is
available for Arch Linux and Frugalware, in the case of Arch Linux, you simply
do:</p>

<pre><code>yaourt -S tyrs
</code></pre>

<p>Tyrs are mainly tested with Python 2.7, I’m not sure of the result obtained
with earlier versions of Python. However if you have this version of Python and
python-pip installed you can do:</p>

<pre><code>pip install tyrs
</code></pre>

<p>Tyrs is not perfect, far from it, as seen above, support for Python prior to
2.7 is not really tested. Another black, is editing a record, I’m really not
satisfied with the system before, I think I would see to rewrite that part
in-depth, something I wanted to do for a long time, but always rejected.
Certainly other bugs, depending of the moon  and distribution of butterflies.</p>

<p>I opened a thread on the <a href="https://bbs.archlinux.org/viewtopic.php?id=119588">Arch Linux Forum</a>.</p>

<p>Free Software often come with <a href="http://www.gnu.org/s/gsl/manual/html_node/No-Warranty.html">no warranty</a> but I did my best not to
introduce bugs. I’m interested in all returns, regardless
of the form, comments, bug reports, patches. Most important thing is I really
enjoyed write Tyrs.</p>

<p>Some usefull links to learn more about Tyrs:</p>

<ul>
<li><a href="http://tyrs.nicosphere.net">Project Home Page</a></li>
<li><a href="http://tyrs.nicosphere.net/reference.html">Project Documentation</a></li>
<li><a href="https://github.com/Nic0/tyrs">Project on Github</a></li>
<li><a href="http://pypi.python.org/pypi/tyrs">Project on Pypi</a></li>
</ul></div>
    </content>
    <updated>2011-11-05T23:00:00Z</updated>
    <source>
      <id>http://www.nicosphere.net</id>
      <author>
        <name>Nicolas Paris</name>
      </author>
      <link href="http://www.nicosphere.net/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://www.nicosphere.net/" rel="alternate" type="text/html"/>
      <title>Nic0's Sphere</title>
      <updated>2012-01-02T20:20:14Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://kmkeen.com/jshon/2011-11-05-03-10-48-832.html</id>
    <link href="http://kmkeen.com/jshon/2011-11-05-03-10-48-832.html" rel="alternate" type="text/html"/>
    <title>Jshon</title>
    <summary>Creating json is now ten times easier.</summary>
    <updated>2011-11-05T03:10:48Z</updated>
    <source>
      <id>http://kmkeen.com</id>
      <author>
        <name>Kyle Keen</name>
      </author>
      <link href="http://kmkeen.com" rel="alternate" type="text/html"/>
      <link href="http://kmkeen.com/rss.xml" rel="self" type="application/rss+xml"/>
      <subtitle>Kyle Keen hacking life, hardware and software.</subtitle>
      <title>kmkeen.com</title>
      <updated>2012-02-12T23:43:15Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.nicosphere.net/?p=2529</id>
    <link href="http://www.nicosphere.net/why-aur-is-part-of-the-arch-linux-success-2529/" rel="alternate" type="text/html"/>
    <title>Why AUR is part of the Arch Linux success</title>
    <summary>If you usually follow some blogs about Linux, especially those on Arch Linux, there is a common word that you are come across often, AUR, acronym of Arch User Repository. You might wonder what does it mean, what does it imply for the distribution, and why it’s so popular for the Arch Linux community. If [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>If you usually follow some blogs about Linux, especially those on Arch Linux, there
is a common word that you are come across often, <em>AUR</em>, acronym of <em>Arch User Repository</em>. You might wonder
what does it mean, what does it imply for the distribution, and why it’s so
popular for the Arch Linux community. If you asking yourself those questions,
this post is for you.</p><p>First, you should keep these two characteristics in mind.</p><ul><li>Everybody may contribute to AUR.</li><li>It’s really easy to contribute to AUR.</li></ul><p>AUR is a kind of repository totally public, open to whoever want to contribute
to let some resources available to anyone. No ceremonials, agreement or long
ritual initiation to submits a package to AUR.</p><p>It’s as easy to contribute to AUR as to use it, with some <em>AUR helpers</em> such as <code>yaourt</code> or others alternatives. Install a package from AUR isn’t more
difficult than install one with the official package manager <code>pacman</code>, manager
such as <code>apt-get</code> for Debian or Ubuntu. Dependencies and research are easily
managed that way. Even a vote system allow credibility about security and code
source of a package.</p><p>The main idea about packaging for <em>AUR</em> is to write some installation
directives in a file called <em>PKGBUILD</em>, by simply follow some easy packaging’s
rules. That’s what <em>AUR</em> contain, only directives that gives instruction to the
helper on how to build the package. There aren’t binary packages in <em>AUR</em>.</p><p>The fact that a <em>PKGBUILD</em> is easy to write increase the idea that everyone can
contribute to <em>AUR</em> given that the repository is open to everyone. If you
managed to install Arch Linux by yourself, you should be able to find out how
to write <em>PKGBUILD</em>. Of these two ideas, easy to contribute, and for everyone,
resulting implications very beneficial for Arch Linux.</p><p>For example, a person who have some practice with it, can make a script or a
program available within few minutes (which was the case for example to offer <a href="http://www.nicosphere.net/suivre-hacker-news-depuis-la-console-2372/">hacker-top</a> and <a href="http://www.nicosphere.net/suivre-reddit-depuis-la-console-2392/">reddit-top</a> a bit on a whim).  If more time was needed, would I
have done it? probably not. This is also beneficial for the user, so you may
easily enjoy interesting programs that would not be known however.</p><p>This simplification of the provision also encourages some exotic applications,
with for example some very recent drivers that would not be incorporated
otherwise. But also with the latest programming frameworks in vogues.  Knowing
that a framework can gain very big reputation in a short time. So latest
framework can be available easily and quickly to users. Most importantly, it
allows them to be updated, This is important if the evolution is rapid. For
example, if I try Node.js, I do not want the version of last year, but the
latest.  Same for Ruby on Rails, I do not want to watch a version of Ruby,
which may not be compatible with the latest Rails. This last example taken from
a real example, when we saw on the forums concerns about running Rails with
version 3, especially for Debian. All installed cleanly with a packet manager,
not by hand as we see often advisable in such cases.</p><p>All this convenience, and the non-formality could even be quantified.  The
website, <a href="http://aur.archlinux.org/">front-end of AUR</a>, announces 32,000 packages available for
archers, it’s more than 29,000 packages <a href="http://www.debian.org/">debian announced on their home
page</a>. So I know that is not the same and that is not far from being a
troll, but it is a fact that Arch Linux has a community and a number of
developers much less important than Debian, and is undeniable, for this system,
Arch Linux is able to offer to his users almost as many packages.</p><p>From the maintainer’s point of view, those concerned with the <code>[community]</code> repository, they can easily demote a package in AUR so it was officially
supported, without worrying to much about consequences, associated with the
fact that Arch Linux only supports two architectures, not dragging dozen
architecture to their credit. these two points I believe are the key to their
reactivity, and can keep a small core team (no more than two dozen core-dev,
without TU’s). A responsiveness of a small team to a rolling release enough
stable to interest a median users of Linux.</p><p>AUR also allows a developer to easily share its application, whatever the
language chosen, each language generally offers opportunities, such as <code>pip</code> (python) <code>gem</code> (ruby), it is still nice to have an opportunity to ensure
the smooth running of installation on its own distribution. Simplify
installation and distribution of software that is not known and still under
development, is a good way to promote an application.  Furthermore, PKGBUILD
allows be easily coupled to a manager for review as git or svn, allowing for
easier returns on development issues by an user.</p><p>Among all these points, everyone’s winner, from the median user
to developers. I hope that with these explanations, far from being
exhaustive, the success of the AUR for Arch Linux is more clear implications
that can be blurred at first.</p><p>Without AUR, Arch Linux would no longer be the same.</p><p><em><strong>Edit</strong>: More comments on <a href="http://news.ycombinator.com/item?id=3181579">Hacker News</a>, or on <a href="http://www.reddit.com/r/archlinux/comments/lwbvv/why_aur_is_part_of_the_arch_linux_success/">Reddit</a>.</em></p></div>
    </content>
    <updated>2011-11-01T11:49:50Z</updated>
    <category term="Non class&#xE9;"/>
    <category term="archlinux-en"/>
    <category term="linux-en"/>
    <author>
      <name>Nic0</name>
    </author>
    <source>
      <id>http://www.nicosphere.net</id>
      <link href="http://www.nicosphere.net/tag/archlinux-en/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://www.nicosphere.net" rel="alternate" type="text/html"/>
      <subtitle>Linux and programming blog</subtitle>
      <title>Nic0's Sphere » archlinux-en</title>
      <updated>2011-12-29T11:43:22Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://www.nicosphere.net/why-aur-is-part-of-the-arch-linux-success-2529</id>
    <link href="http://www.nicosphere.net/why-aur-is-part-of-the-arch-linux-success-2529" rel="alternate" type="text/html"/>
    <title>Why AUR is part of the Arch Linux success</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>If you usually follow some blogs about Linux, especially those on Arch Linux, there
is a common word that you are come across often, <em>AUR</em>, acronym of <em>Arch User Repository</em>. You might wonder
what does it mean, what does it imply for the distribution, and why it’s so
popular for the Arch Linux community. If you asking yourself those questions,
this post is for you.</p>

<p>First, you should keep these two characteristics in mind.</p>

<ul>
<li>Everybody may contribute to AUR.</li>
<li>It’s really easy to contribute to AUR.</li>
</ul>


<p>AUR is a kind of repository totally public, open to whoever want to contribute
to let some resources available to anyone. No ceremonials, agreement or long
ritual initiation to submits a package to AUR.</p>

<p>It’s as easy to contribute to AUR as to use it, with some <em>AUR helpers</em> such as
<code>yaourt</code> or others alternatives. Install a package from AUR isn’t more
difficult than install one with the official package manager <code>pacman</code>, manager
such as <code>apt-get</code> for Debian or Ubuntu. Dependencies and research are easily
managed that way. Even a vote system allow credibility about security and code
source of a package.</p>

<p>The main idea about packaging for <em>AUR</em> is to write some installation
directives in a file called <em>PKGBUILD</em>, by simply follow some easy packaging’s
rules. That’s what <em>AUR</em> contain, only directives that gives instruction to the
helper on how to build the package. There aren’t binary packages in <em>AUR</em>.</p>

<p>The fact that a <em>PKGBUILD</em> is easy to write increase the idea that everyone can
contribute to <em>AUR</em> given that the repository is open to everyone. If you
managed to install Arch Linux by yourself, you should be able to find out how
to write <em>PKGBUILD</em>. Of these two ideas, easy to contribute, and for everyone,
resulting implications very beneficial for Arch Linux.</p>

<p>For example, a person who have some practice with it, can make a script or a
program available within few minutes (which was the case for example to offer <a href="http://www.nicosphere.net/suivre-hacker-news-depuis-la-console-2372/">hacker-top</a>
and <a href="http://www.nicosphere.net/suivre-reddit-depuis-la-console-2392/">reddit-top</a> a bit on a whim).  If more time was needed, would I
have done it? probably not. This is also beneficial for the user, so you may
easily enjoy interesting programs that would not be known however.</p>

<p>This simplification of the provision also encourages some exotic applications,
with for example some very recent drivers that would not be incorporated
otherwise. But also with the latest programming frameworks in vogues.  Knowing
that a framework can gain very big reputation in a short time. So latest
framework can be available easily and quickly to users. Most importantly, it
allows them to be updated, This is important if the evolution is rapid. For
example, if I try Node.js, I do not want the version of last year, but the
latest.  Same for Ruby on Rails, I do not want to watch a version of Ruby,
which may not be compatible with the latest Rails. This last example taken from
a real example, when we saw on the forums concerns about running Rails with
version 3, especially for Debian. All installed cleanly with a packet manager,
not by hand as we see often advisable in such cases.</p>

<p>All this convenience, and the non-formality could even be quantified.  The
website, <a href="http://aur.archlinux.org/">front-end of AUR</a>, announces 32,000 packages available for
archers, it’s more than 29,000 packages <a href="http://www.debian.org/">debian announced on their home
page</a>. So I know that is not the same and that is not far from being a
troll, but it is a fact that Arch Linux has a community and a number of
developers much less important than Debian, and is undeniable, for this system,
Arch Linux is able to offer to his users almost as many packages.</p>

<p>From the maintainer’s point of view, those concerned with the <code>[community]</code>
repository, they can easily demote a package in AUR so it was officially
supported, without worrying to much about consequences, associated with the
fact that Arch Linux only supports two architectures, not dragging dozen
architecture to their credit. these two points I believe are the key to their
reactivity, and can keep a small core team (no more than two dozen core-dev,
without TU’s). A responsiveness of a small team to a rolling release enough
stable to interest a median users of Linux.</p>

<p>AUR also allows a developer to easily share its application, whatever the
language chosen, each language generally offers opportunities, such as
<code>pip</code> (python) <code>gem</code> (ruby), it is still nice to have an opportunity to ensure
the smooth running of installation on its own distribution. Simplify
installation and distribution of software that is not known and still under
development, is a good way to promote an application.  Furthermore, PKGBUILD
allows be easily coupled to a manager for review as git or svn, allowing for
easier returns on development issues by an user.</p>

<p>Among all these points, everyone’s winner, from the median user
to developers. I hope that with these explanations, far from being
exhaustive, the success of the AUR for Arch Linux is more clear implications
that can be blurred at first.</p>

<p>Without AUR, Arch Linux would no longer be the same.</p>

<p><em><strong>Edit</strong>: More comments on <a href="http://news.ycombinator.com/item?id=3181579">Hacker News</a>, or on <a href="http://www.reddit.com/r/archlinux/comments/lwbvv/why_aur_is_part_of_the_arch_linux_success/">Reddit</a>.</em></p></div>
    </content>
    <updated>2011-10-31T23:00:00Z</updated>
    <source>
      <id>http://www.nicosphere.net</id>
      <author>
        <name>Nicolas Paris</name>
      </author>
      <link href="http://www.nicosphere.net/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://www.nicosphere.net/" rel="alternate" type="text/html"/>
      <title>Nic0's Sphere</title>
      <updated>2012-01-02T20:20:14Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://linuxtidbits.wordpress.com/?p=1605</id>
    <link href="http://linuxtidbits.wordpress.com/2011/10/30/converting-ext4-to-jfs/" rel="alternate" type="text/html"/>
    <title>Converting Ext4 to JFS</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Because I have an older laptop and disk I/O can really bottleneck on the motherboard, I decided to move from the ext4 filesystem to JFS. Recently, I’ve used ext4 because it was fairly fast and definitely reliable; however, with the kernel moving to 2.6.30 new data integrity features have been added that slow it fairly [...]<img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1605&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://linuxtidbits.files.wordpress.com/2011/10/drive-harddisk.png"><img alt="" class="alignright size-full wp-image-1614" src="http://linuxtidbits.files.wordpress.com/2011/10/drive-harddisk.png?w=474" title="drive-harddisk"/></a>Because I have an older laptop and disk I/O can really bottleneck on the motherboard, I decided to move from the ext4 filesystem to JFS.  Recently, I’ve used ext4 because it was fairly fast and definitely reliable; however, with the kernel moving to 2.6.30 new data integrity features have been added that slow it fairly noticeable on an eight year old computer.  Moving to JFS has made a fair difference in improving the speed of the system, it’s caveat being that it that journals only metadata (not metadata and data like ext3/4)).</p>
<p><strong>Backup, Convert, Restore</strong></p>
<p>The JFS filesystem utilities will be needed (for Debian/Ubuntu):</p>
<p/><pre class="brush: plain;">sudo apt-get install jfsutils</pre><p/>
<p>Reboot to a rescue CD, and backup partition(s)/disks onto another drive.  For this example two partitions are used: one for root, one for home.  Mount root, home, and then the backup drive:</p>
<p/><pre class="brush: plain;">mkdir /mnt/{&lt;myROOTpartition&gt;,&lt;myHOMEpartition&gt;,&lt;myBACKUPdisk&gt;}
mount /dev/&lt;myROOTpartition&gt; /mnt/&lt;myROOTpartition&gt;
mount /dev/&lt;myHOMEpartition&gt; /mnt/&lt;myHOMEpartition&gt;
mount /dev/&lt;myBACKUPdisk&gt; /mnt/&lt;myBACKUPdisk&gt;</pre><p/>
<p>Create the backup directories:</p>
<p/><pre class="brush: plain;">mkdir -p /mnt/&lt;myBACKUPdisk&gt;/backup-rsync/{root,home}</pre><p/>
<p>Backup both partitions:</p>
<p/><pre class="brush: plain;">rsync -axS /mnt/&lt;myROOTpartition&gt;/ /mnt/&lt;myBACKUPdisk&gt;/backup-rsync/root
rsync -axS /mnt/&lt;myHOMEpartition&gt;/ /mnt/&lt;myBACKUPdisk&gt;/backup-rsync/home</pre><p/>
<p>Check integrity of backup, then create a JFS filesystem on both partitions:</p>
<p/><pre class="brush: plain;">mkfs.jfs /dev/&lt;myROOTpartition&gt;
mkfs.jfs /dev/&lt;myHOMEpartition&gt;</pre><p/>
<p>Restore the backup contents back to the root and home partitions; first method:</p>
<p/><pre class="brush: plain;">rsync -axS /mnt/&lt;myBACKUPdisk&gt;/backup-rsync/root/ /mnt/&lt;myROOTpartition&gt;
rsync -axS /mnt/&lt;myBACKUPdisk&gt;/backup-rsync/home/ /mnt/&lt;myHOMEpartition&gt;</pre><p/>
<p>Or this method to be sure files are defragmented (JFS is somewhat <a href="https://wiki.archlinux.org/index.php/JFS_Filesystem#Defragmenting_JFS" target="_blank">prone to fragmentation</a>, heavy use may require occasional defragmenting):</p>
<p/><pre class="brush: plain;">(cd /mnt/&lt;myBACKUPdisk&gt;/backup-rsync/root/ &amp;&amp; tar -cS -b8 --one -f - .) | (cd /mnt/&lt;myROOTpartition&gt; &amp;&amp; tar -xS -b8 -p -f -)
(cd /mnt/&lt;myBACKUPdisk&gt;/backup-rsync/home/ &amp;&amp; tar -cS -b8 --one -f - .) | (cd /mnt/&lt;myHOMEpartition&gt; &amp;&amp; tar -xS -b8 -p -f -)</pre><p/>
<p><strong>Updating the System</strong></p>
<p>The system needs to know of the filesystem changes.  <a href="https://wiki.archlinux.org/index.php/Change_Root" target="_blank">Changing apparent root</a> from the rescue CD to the current Linux install is done by:</p>
<p/><pre class="brush: plain;">cd /mnt/&lt;myROOTpartition&gt;
mount -t proc proc proc/
mount -t sysfs sys sys/
mount -o bind /dev dev/
chroot . /bin/bash</pre><p/>
<p>Update the chrooted system current mounts file:</p>
<p/><pre class="brush: plain;">grep -v rootfs /proc/mounts &gt; /etc/mtab</pre><p/>
<p>The fstab file (the static filesystem configuration) needs to be updated.  The information that will need adjusting is: the UUID (possibly), the filesystem type, and options.  The UUID’s (unique disk identifiers) may have changed, they can be appended onto the fstab file (so that they can be easily moved) like this:</p>
<p/><pre class="brush: plain;">blkid /dev/&lt;myROOTpartition&gt; | cut -d "\"" -f 4 &gt;&gt; /etc/fstab
blkid /dev/&lt;myHOMEpartition&gt; | cut -d "\"" -f 4 &gt;&gt; /etc/fstab</pre><p/>
<p>Edited /etc/fstab with set UUID, type, and options:</p>
<p/><pre class="brush: plain;"># &lt;file system&gt;                       &lt;mnt point&gt; &lt;type&gt; &lt;options&gt; &lt;dump&gt; &lt;pass&gt;
...
# /dev/sda2
UUID=5d9753dd-f45f-425a-85e2-25746897fdfa / jfs   noatime,errors=remount-ro 0 1
# /dev/sda4
UUID=d3f9eafd-1117-4c75-a309-b21dece655d1 /home jfs noatime                 0 2
...</pre><p/>
<p><tt><strong>noatime</strong></tt> lessens disk writes by not creating a timestamp every time a file is accessed (it isn’t seen as very useful anymore since it was developed primarily for servers with statistics in mind).</p>
<p>JFS supposedly works very well with the Deadline Scheduler; the Grub configuration need to specify to use it.  This example is for Grub2 though it is similar with original Grub; edit <tt>/etc/default/grub</tt> and append:</p>
<p/><pre class="brush: plain;">...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=deadline"
...</pre><p/>
<p>The other Grub configurations need to be updated with the new information:</p>
<p/><pre class="brush: plain;">update-grub</pre><p/>
<p>Then the Grub bootloader will have to be re-installed to the MBR (I think this is because the version of Grub put on the MBR has directions on how to be able to find its configurations for a specific filesystem).</p>
<p/><pre class="brush: plain;">grub-install /dev/&lt;myROOT-DISK&gt;  # Disk here is more likely and not partition</pre><p/>
<p>Exit the chroot and unmount temporary filesystems:</p>
<p/><pre class="brush: plain;">exit
umount {proc,sys,dev}</pre><p/>
<p>Reboot.</p>
<br/>  <a href="http://feeds.wordpress.com/1.0/gocomments/linuxtidbits.wordpress.com/1605/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/linuxtidbits.wordpress.com/1605/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/linuxtidbits.wordpress.com/1605/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/linuxtidbits.wordpress.com/1605/"/></a> <a href="http://feeds.wordpress.com/1.0/gofacebook/linuxtidbits.wordpress.com/1605/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/linuxtidbits.wordpress.com/1605/"/></a> <a href="http://feeds.wordpress.com/1.0/gotwitter/linuxtidbits.wordpress.com/1605/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/linuxtidbits.wordpress.com/1605/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/linuxtidbits.wordpress.com/1605/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/linuxtidbits.wordpress.com/1605/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/linuxtidbits.wordpress.com/1605/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/linuxtidbits.wordpress.com/1605/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/linuxtidbits.wordpress.com/1605/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/linuxtidbits.wordpress.com/1605/"/></a> <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=linuxtidbits.wordpress.com&amp;blog=1210515&amp;post=1605&amp;subd=linuxtidbits&amp;ref=&amp;feed=1" width="1"/></div>
    </content>
    <updated>2011-10-31T02:34:43Z</updated>
    <category term="Linux"/>
    <author>
      <name>Todd Partridge (Gen2ly)</name>
    </author>
    <source>
      <id>http://linuxtidbits.wordpress.com</id>
      <logo>http://1.gravatar.com/blavatar/5ad9566326fdd6b7f4e8af74375a3cac?s=96&amp;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</logo>
      <link href="http://linuxtidbits.wordpress.com/feed/" rel="self" type="application/rss+xml"/>
      <link href="http://linuxtidbits.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://linuxtidbits.wordpress.com/osd.xml" rel="search" title="Linux Tidbits" type="application/opensearchdescription+xml"/>
      <link href="http://linuxtidbits.wordpress.com/?pushpress=hub" rel="hub" type="text/html"/>
      <subtitle>Every letter has its place</subtitle>
      <title>Linux Tidbits</title>
      <updated>2012-01-20T12:43:11Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>tag:www.archlinux.org,2011-10-24:/news/wiki-and-bbs-downtime/</id>
    <link href="http://www.archlinux.org/news/wiki-and-bbs-downtime/" rel="alternate" type="text/html"/>
    <title>wiki and bbs downtime</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Ionuț Mircea Bîru wrote:</p>
<p>On October 23rd the data center where our server is located had a power failure. The server was rebooted and at the first look everything was fine.</p>
<p>In the morning we noticed that the performance was bad and started to investigate and found out that one of the hard disks was failing.</p>
<p>The drive has been replaced and is now synchronizing.</p>
<p><b>Update:</b>
A few hours after the server was back online, MySQL found out that the bbs db had been corrupted. We have restored a backup from Mon Oct 24 09:47:59 CEST 2011. Unfortunately all forum posts made after this date have been lost.</p>
<p>We are sorry for the long downtime. </p></div>
    </summary>
    <updated>2011-10-24T19:39:41Z</updated>
    <author>
      <name>Ionuț Mircea Bîru</name>
    </author>
    <source>
      <id>http://www.archlinux.org/news/</id>
      <link href="http://www.archlinux.org/news/" rel="alternate" type="text/html"/>
      <link href="http://www.archlinux.org/feeds/news/" rel="self" type="application/rss+xml"/>
      <subtitle>The latest and greatest news from the Arch Linux distribution.</subtitle>
      <title>Arch Linux: Recent news updates</title>
      <updated>2012-02-07T10:43:02Z</updated>
    </source>
  </entry>
</feed>

