<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" >

<channel>
	<title>Rafał Cieślak&#039;s blog &#187; Ubuntu</title>
	<atom:link href="http://rafalcieslak.wordpress.com/category/ubuntu/feed/?mrss=off" rel="self" type="application/rss+xml" />
	<link>http://rafalcieslak.wordpress.com</link>
	<description></description>
	<lastBuildDate>Tue, 02 Apr 2013 16:01:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='rafalcieslak.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Rafał Cieślak&#039;s blog &#187; Ubuntu</title>
		<link>http://rafalcieslak.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://rafalcieslak.wordpress.com/osd.xml" title="Rafał Cieślak&#039;s blog" />
	<atom:link rel='hub' href='http://rafalcieslak.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Dynamic linker tricks: Using LD_PRELOAD to cheat, inject features and investigate programs</title>
		<link>http://rafalcieslak.wordpress.com/2013/04/02/dynamic-linker-tricks-using-ld_preload-to-cheat-inject-features-and-investigate-programs/</link>
		<comments>http://rafalcieslak.wordpress.com/2013/04/02/dynamic-linker-tricks-using-ld_preload-to-cheat-inject-features-and-investigate-programs/#comments</comments>
		<pubDate>Tue, 02 Apr 2013 14:50:05 +0000</pubDate>
		<dc:creator>Rafał Cieślak</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[cheats]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[ld]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[linker]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[shared]]></category>

		<guid isPermaLink="false">http://rafalcieslak.wordpress.com/?p=245</guid>
		<description><![CDATA[This post assumes some basic C skills. Linux puts you in full control. This is not always seen from everyone&#8217;s perspective, but a power user loves to be in control. I&#8217;m going to show you a basic trick that lets you heavily influence the behavior of most applications, which is not only fun, but also, [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=245&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><strong>This post assumes some basic C skills.</strong></p>
<p>Linux puts you in full control. This is not always seen from everyone&#8217;s perspective, but a power user loves to be in control. I&#8217;m going to show you a basic trick that lets you heavily influence the behavior of most applications, which is not only fun, but also, at times, useful.</p>
<h4>A motivational example</h4>
<p>Let us begin with a simple example. Fun first, science later.</p>
<pre class="brush: cpp; title: &lt;b&gt;random_num.c:&lt;/b&gt;; notranslate">
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;time.h&gt;

int main(){
  srand(time(NULL));
  int i = 10;
  while(i--) printf(&quot;%d\n&quot;,rand()%100);
  return 0;
}
</pre>
<p>Simple enough, I believe. I compiled it with no special flags, just</p>
<blockquote>
<pre>gcc random_num.c -o random_num</pre>
</blockquote>
<p>I hope the resulting output is obvious &#8211; ten randomly selected numbers 0-99, hopefully different each time you run this program.</p>
<p>Now let&#8217;s pretend we don&#8217;t really have the source of this executable. Either delete the source file, or move it somewhere &#8211; we won&#8217;t need it. We will significantly modify this programs behavior, yet without touching it&#8217;s source code nor recompiling it.</p>
<p>For this, lets create another simple C file:</p>
<pre class="brush: cpp; title: &lt;b&gt;unrandom.c:&lt;/b&gt;; notranslate">
int rand(){
    return 42; //the most random number in the universe
}
</pre>
<p>We&#8217;ll compile it into a shared library.</p>
<blockquote>
<pre>gcc -shared -fPIC unrandom.c -o unrandom.so</pre>
</blockquote>
<p>So what we have now is an application that outputs some random data, and a custom library, which implements the rand() function as a constant value of 42.  Now&#8230; just run <em>random_num </em>this way, and watch the result:</p>
<blockquote>
<pre>LD_PRELOAD=$PWD/unrandom.so ./random_nums</pre>
</blockquote>
<p>If you are lazy and did not do it yourself (and somehow fail to guess what might have happened), I&#8217;ll let you know &#8211; the output consists of ten 42&#8242;s.</p>
<p><span id="more-245"></span></p>
<p><!--more-->This may be even more impressive it you first:</p>
<blockquote>
<pre>export LD_PRELOAD=$PWD/unrandom.so</pre>
</blockquote>
<p>and then run the program normally. An unchanged app run in an apparently usual manner seems to be affected by what we did in our tiny library&#8230;</p>
<h6><strong>Wait, what? What did just happen?</strong></h6>
<p>Yup, you are right, our program failed to generate random numbers, because it did not use the &#8220;real&#8221; rand(), but the one we provided &#8211; which returns 42 every time.</p>
<h6><strong>But we *told* it to use the real one. We programmed it to use the real one. Besides, at the time we created that program, the fake rand() did not even exist!</strong></h6>
<p>This is not entirely true. We did not choose which rand() we want our program to use. We told it just to use rand().</p>
<p>When our program is started, certain libraries (that provide functionality needed by the program) are loaded. We can learn which are these using <em>ldd</em>:<em><br />
</em></p>
<blockquote>
<pre>$ <strong>ldd random_nums</strong>
linux-vdso.so.1 =&gt; (0x00007fff4bdfe000)
libc.so.6 =&gt; /lib/x86_64-linux-gnu/libc.so.6 (0x00007f48c03ec000)
/lib64/ld-linux-x86-64.so.2 (0x00007f48c07e3000)</pre>
</blockquote>
<p>What you see as the output is the list of libs that are needed by <em>random_nums</em>. This list is built into the executable, and is determined compile time. The exact output might slightly differ on your machine, but a <strong>libc.so</strong> must be there &#8211; this is the file which provides core C functionality. That includes the &#8220;real&#8221; rand().</p>
<p>We can have a peek at what functions does libc provide. I used the following to get a full list:</p>
<blockquote>
<pre>nm -D /lib/libc.so.6</pre>
</blockquote>
<p>The <em>nm</em> command lists symbols found in a binary file. The -D flag tells it to look for dynamic symbols, which makes sense, as libc.so.6 is a dynamic library. The output is very long, but it indeed lists rand() among many other standard functions.</p>
<p>Now what happens when we set up the environmental variable LD_PRELOAD? This variable <strong>forces some libraries to be loaded for a program</strong>. In our case, it loads <em>unrandom.so</em> for <em>random_num</em>, even though the program itself does not ask for it. The following command may be interesting:<em><br />
</em></p>
<blockquote>
<pre>$ <strong>LD_PRELOAD=$PWD/unrandom.so ldd random_nums</strong>
linux-vdso.so.1 =&gt;  (0x00007fff369dc000)
/some/path/to/unrandom.so (0x00007f262b439000)
libc.so.6 =&gt; /lib/x86_64-linux-gnu/libc.so.6 (0x00007f262b044000)
/lib64/ld-linux-x86-64.so.2 (0x00007f262b63d000)</pre>
</blockquote>
<p>Note that it lists our custom library. And indeed this is the reason why it&#8217;s code get&#8217;s executed: <em>random_num</em> calls rand(), but if <em>unrandom.so</em> is loaded it is our library that provides implementation for rand(). Neat, isn&#8217;t it?</p>
<h4>Being transparent</h4>
<p>This is not enough. I&#8217;d like to be able to inject some code into an application in a similar manner, but in such way that it will be able to function normally. It&#8217;s clear if we implemented open() with a simple &#8220;<em>return 0;</em>&#8220;, the application we would like to hack should malfunction. The point is to be <strong>transparent</strong>, and to actually call the original open:</p>
<pre class="brush: cpp; title: &lt;b&gt;inspect_open.c:&lt;/b&gt;; notranslate">
int open(const char *pathname, int flags){
  /* Some evil injected code goes here. */
  return open(pathname,flags); // Here we call the &quot;real&quot; open function, that is provided to us by libc.so
}
</pre>
<p>Hm. Not really. This won&#8217;t call the &#8220;original&#8221; open(&#8230;). Obviously, this is an endless recursive call.</p>
<p>How do we access the &#8220;real&#8221; open function? It is needed to use the programming interface to the dynamic linker. It&#8217;s simpler than it sounds. Have a look at this complete example, and then I&#8217;ll explain what happens there:</p>
<pre class="brush: cpp; title: &lt;b&gt;inspect_open.c:&lt;/b&gt;; notranslate">
#define _GNU_SOURCE
#include &lt;dlfcn.h&gt;

typedef int (*orig_open_f_type)(const char *pathname, int flags);

int open(const char *pathname, int flags, ...)
{
    /* Some evil injected code goes here. */

    orig_open_f_type orig_open;
    orig_open = (orig_open_f_type)dlsym(RTLD_NEXT,&quot;open&quot;);
    return orig_open(pathname,flags);
}

</pre>
<p>The <i>dlfcn.h</i> is needed for <em>dlsym</em> function we use later. That strange <em>#define</em> directive instructs the compiler to enable some non-standard stuff, we need it to enable <em>RTLD_NEXT</em> in <em>dlfcn.h</em>. That typedef is just creating an alias to a complicated pointer-to-function type, with arguments just as the original open &#8211; the alias name is <em>orig_open_f_type</em>, which we&#8217;ll use later.</p>
<p>The body of our custom open(&#8230;) consists of some custom code. The last part of it creates a new function pointer <em>orig_open</em> which will point to the original open(&#8230;) function. In order to get the address of that function, we ask <em>dlsym</em> to find for us the next &#8220;open&#8221; function on dynamic libraries stack. Finally, we call that function (passing the same arguments as were passed to our fake &#8220;open&#8221;), and return it&#8217;s return value as ours.</p>
<p>As the &#8220;evil injected code&#8221; I simply used:</p>
<pre class="brush: cpp; title: &lt;b&gt;inspect_open.c (fragment):&lt;/b&gt;; notranslate">
printf(&quot;The victim used open(...) to access '%s'!!!\n&quot;,pathname); //remember to include stdio.h!
</pre>
<p>To compile it, I needed to slightly adjust compiler flags:</p>
<blockquote>
<pre>gcc -shared -fPIC  inspect_open.c -o inspect_open.so -ldl</pre>
</blockquote>
<p>I had to append <em>-ldl</em>, so that this shared library is linked to <em>libdl</em>, which provides the <em>dlsym</em> function. (Nah, I am not going to create a fake version of <em>dlsym</em>, though this might be fun.)</p>
<p>So what do I have in result? A shared library, which implements the open(&#8230;) function so that it behaves <strong>exactly</strong> as the real open(&#8230;)&#8230; except it has a side effect of <em>printf</em>ing the file path :-)</p>
<p>If you are not convinced this is a powerful trick, it&#8217;s the time you tried the following:</p>
<blockquote>
<pre>LD_PRELOAD=$PWD/inspect_open.so gnome-calculator</pre>
</blockquote>
<p>I encourage you to see the result yourself, but basically it lists every file this application accesses. In real time.</p>
<p>I believe it&#8217;s not that hard to imagine why this might be useful for debugging or investigating unknown applications. Please note, however, that this particular trick is not quite complete, because <em>open()</em> is not the only function that opens files&#8230; For example, there is also <em>open64()</em> in the standard library, and for full investigation you would need to create a fake one too.</p>
<h4><strong>Possible uses</strong></h4>
<p>If you are still with me and enjoyed the above, let me suggest a bunch of ideas of what can be achieved using this trick. Keep in mind that you can do all the above without to source of the affected app!</p>
<ol>
<li><del>Gain root privileges.</del> Not really, don&#8217;t even bother, you won&#8217;t bypass any security this way. (A quick explanation for pros: no libraries will be preloaded this way if ruid != euid)</li>
<li>Cheat games: <strong>Unrandomize.</strong> This is what I did in the first example. For a fully working case you would need also to implement a custom <em>random()</em>, <em>rand_r()</em><em>, random_r()</em>. Also some apps may be reading from <em>/dev/urandom</em> or so, you might redirect them to <em>/dev/null</em> by running the original <em>open()</em> with a modified file path. Furthermore, some apps may have their own random number generation algorithm, there is little you can do about that (unless: point 10 below). But this looks like an easy exercise for beginners.</li>
<li>Cheat games: <b>Bullet time. </b>Implement all standard time-related functions pretend the time flows two times slower. Or ten times slower. If you correctly calculate new values for time measurement, timed <em>sleep</em> functions, and others, the affected application will believe the time runs slower (or faster, if you wish), and you can experience awesome bullet-time action.<br />
Or go <strong>even one step further</strong> and let your shared library also be a DBus client, so that you can communicate with it real time. Bind some shortcuts to custom commands, and with some additional calculations in your fake timing functions you will be able to enable&amp;disable the slow-mo or fast-forward anytime you wish.</li>
<li>Investigate apps: <strong>List accessed files.</strong> That&#8217;s what my second example does, but this could be also pushed further, by recording and monitoring all app&#8217;s file I/O.</li>
<li>Investigate apps: <strong>Monitor internet access.</strong> You might do this with Wireshark or similar software, but with this trick you could actually gain control of what an app sends over the web, and not just look, but also affect the exchanged data. Lots of possibilities here, from detecting spyware, to cheating in multiplayer games, or analyzing &amp; reverse-engineering protocols of closed-source applications.</li>
<li>Investigate apps: <strong>Inspect GTK structures.</strong> Why just limit ourselves to standard library? Let&#8217;s inject code in all GTK calls, so that we can learn what widgets does an app use, and how are they structured. This might be then rendered either to an image or even to a gtkbuilder file! Super useful if you want to learn how does some app manage its interface!</li>
<li><strong>Sandbox unsafe applications.</strong> If you don&#8217;t trust some app and are afraid that it may wish to<em> rm -rf / </em>or do some other unwanted file activities, you might potentially redirect all it&#8217;s file IO to e.g. /tmp by appropriately modifying the arguments it passes to all file-related functions (not just <em>open</em>, but also e.g. removing directories etc.). It&#8217;s more difficult trick that a chroot, but it gives you more control. It would be only as safe as complete your &#8220;wrapper&#8221; was, and unless you really know what you&#8217;re doing, don&#8217;t actually run any malicious software this way.</li>
<li><strong>Implement features.</strong> <a href="http://www.zlibc.linux.lu/index.html">zlibc</a> is an actual library which is run this precise way; it uncompresses files on the go as they are accessed, so that any application can work on compressed data without even realizing it.</li>
<li><strong>Fix bugs. </strong>Another real-life example: some time ago (I am not sure this is still the case) Skype &#8211; which is closed-source &#8211; had problems capturing video from some certain webcams. Because the source could not be modified as Skype is not free software, this was fixed by preloading a library that would correct these problems with video.</li>
<li>Manually <strong>access application&#8217;s own memory</strong>. Do note that you can access all app data this way. This may be not impressive if you are familiar with software like CheatEngine/scanmem/GameConqueror, but they all require root privileges to work. LD_PRELOAD does not. In fact, with a number of clever tricks your injected code might access all app memory, because, in fact, it gets executed by that application itself. You might modify everything this application can. You can probably imagine this allows a lot of low-level hacks&#8230; but I&#8217;ll post an article about it another time.</li>
</ol>
<p>These are only the ideas I came up with. I bet you can find some too, if you do &#8211; share them by commenting!</p>
<hr />
<br />Filed under: <a href='http://rafalcieslak.wordpress.com/category/ubuntu/'>Ubuntu</a>  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=245&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rafalcieslak.wordpress.com/2013/04/02/dynamic-linker-tricks-using-ld_preload-to-cheat-inject-features-and-investigate-programs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>e4rat &#8211; decreasing bootup time on HDD drives</title>
		<link>http://rafalcieslak.wordpress.com/2013/03/17/e4rat-decreasing-bootup-time-on-hdd-drives/</link>
		<comments>http://rafalcieslak.wordpress.com/2013/03/17/e4rat-decreasing-bootup-time-on-hdd-drives/#comments</comments>
		<pubDate>Sun, 17 Mar 2013 20:03:49 +0000</pubDate>
		<dc:creator>Rafał Cieślak</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[boot]]></category>
		<category><![CDATA[e4rat]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[ext4]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[hdd]]></category>
		<category><![CDATA[netbook]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://rafalcieslak.wordpress.com/?p=224</guid>
		<description><![CDATA[This time I will describe how to set up e4rat in order to speed your Ubuntu&#8217;s boot time. Let&#8217;s begin with some motivation: my netbook used to boot-up in ~40 seconds. Using e4rat, it takes ~10-15 seconds. Impressive, isn&#8217;t it? Let&#8217;s see how does this trick work, and I&#8217;ll teach you how to enable it on [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=224&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>This time I will describe how to set up <a href="http://e4rat.sourceforge.net/"><strong>e4rat</strong></a> in order to speed your Ubuntu&#8217;s boot time. Let&#8217;s begin with some <strong>motivation</strong>: my netbook used to boot-up in ~40 seconds. Using e4rat, it takes ~10-15 seconds. Impressive, isn&#8217;t it? Let&#8217;s see how does this trick work, and I&#8217;ll teach you how to enable it on your machine.</p>
<p><span id="more-224"></span></p>
<hr />
<h4><strong>Prerequisites</strong></h4>
<p><em>Note:</em> e4rat will work only on HDD drives. If you installed your system on a SSD drive, it won&#8217;t make any chance. (I will explain this later on, but you may be already uninterested in this article). In case of SSD drives, <em>ureadahead,</em> which is installed with Ubuntu by default, already does it&#8217;s best to improve the boot time. Physical HDD drives however, can benefit a lot from e4rat.</p>
<p><em>Note 2: </em>You need to have your system installed on a <strong>ext4</strong> partition in order to use e4rat (which is default in most cases). Furthermore, a kernel not older than 2.6.31 is required. No worries &#8211; Ubuntu ships with a suitable kernel since 10.04! Also, e4rat is <em>confirmed</em> to work great with all Ubuntu releases since 11.04 Natty Narwhal.</p>
<h4><strong>How does it work?</strong></h4>
<p>First, let&#8217;s think why does your machine take so much time to boot up. Investigating the boot process, one can learn that if you use a physical HDD drive, most time during startup is spent <strong>waiting for your drive to access data </strong>(if you wish to investigate it on your own, <em>bootchart</em> is the utility that will help you). This makes a lot of sense, it needs to accelerate the plates, spin them as needed, move other mechanical parts to read information&#8230; Because there is lots of physical movement related, the time needed to read a file gets longer. And there can be thousands of files that are required on boot! Things are even worse: if the files are located throughout the whole disk space, much much more <em>seeking</em> for files has to be done (This also explains why the drive can be very noisy on startup!). Luckily, there is <strong>no</strong> (or almost none) <strong>file</strong> <strong>fragmentation</strong> on ext4 filesystems, so at least once the file is found, reading it requires not that much mechanisms movement. But &#8220;moving to files&#8221; is enough to make your boot take a long time.</p>
<p>First observation that has to be done, is that every time you bootup your system almost the same files are required. This is kind of intuitive, starting Ubuntu on the same machine should require similar stuff every time. What if we could found out what these files are, and somehow move them on the drive <strong>close to each other</strong>, so that accessing them requires less there-and-back drive movement? Yeah&#8230; so this is basically what e4rat does for you.</p>
<p>First, we&#8217;ll let e4rat inspect your boot-up, so that it can <strong>learn</strong> which files are needed to start your system. Then, we&#8217;ll use it&#8217;s file reallocation tool to <strong>move</strong> these files in a pattern as optimal as possible. Finally, we&#8217;ll let it <strong>start</strong> before your Ubuntu boots &#8211; it will load all the required files <strong>at once</strong> to RAM (which should take much much less time, because they will be read as a large block of concatenated data), and Ubuntu will continue the boot using the data in RAM &#8211; which, because RAM is insanely fast, in case of my Ubuntu 12.04 on ASUS 1225c, takes a total of 2 seconds. Therefore, the boot process should be significantly faster.</p>
<p>Pleas note, that you should re-do this process every time you upgrade your Ubuntu to a new release. This is because a lot of core system files are substituted during upgrade, and many different files will be used to start your system, so for best effects they should be relocated again. This is also the reason why using e4rat on Ubuntu Development version is not advised, as in such case lots of system files are changed with updates on a daily basis&#8230; which kills the idea of remembering what has to be preloaded for bootup.</p>
<p>Do you like this trick? If so, let me show you how to install and configure e4rat.</p>
<h4><strong>How to enable it?</strong></h4>
<hr />
<p><strong>1. Installing e4rat.</strong> First, you need to get e4rat on your system. Unfortunately, it is not available in the Software Center. Therefore, begin by looking at <a href="http://sourceforge.net/projects/e4rat/files/">e4rat downloads page</a>. Choose the latest release, and download the .deb file suitable for your system (amd64 for 64-a bit system / i386 for 32 bits). Don&#8217;t install the file yet!</p>
<p>The default boot-up aid in Ubuntu is <em>ureadahead</em>. It does a similar job, but it never relocates files. Therefore while it is helpful in case of SSD drives, it does not improve much if a HDD is involved. Because <em>ureadahead</em> conflicts with <em>e4rat</em>, we&#8217;ll need to <strong>uninstall <em>ureadahead</em></strong><em> </em>first. The easiest way to do it is running this command:</p>
<blockquote>
<pre>sudo apt-get purge ureadahead</pre>
</blockquote>
<p><em>Note:</em> This will warn you that you are about to remove <em>ubuntu-minimal</em> too. Don&#8217;t worry, this will <strong>not</strong> destroy your Ubuntu. <i>Ubuntu-minimal</i> is just an empty package that ensures all other required packages default for Ubuntu (like <i>ureadahead</i>)<em> </em>are present on your system. Therefore it&#8217;s safe to continue.</p>
<p>The next step is to <strong>install</strong> the <strong>e4rat .deb file</strong> we downloaded. You can double-click it and the Software Center will help. I prefer running:</p>
<blockquote>
<pre>sudo dpkg -i e4rat_file_name.deb</pre>
</blockquote>
<p>Once this is done, we can let it learn about your boot process!</p>
<hr />
<p><strong>2. Collecting startup files data.</strong> This step is about getting e4rat to know what files your system needs to boot up. This is fairly simple, and requires little work.</p>
<p>Start by restarting your system. Wait for the GRUB boot menu to appear (it is possible that you may need to hold the Shift key pressed in order to access this menu). When you will be presented with system selection menu, <b>do not boot</b> your Ubuntu. Instead, use arrow keys to highlight the entry you would normally use (most likely it&#8217;s called &#8220;Ubuntu&#8221; or &#8220;Ubuntu, with Linux version-version-version&#8221;). Press <strong>e</strong> to enter edit mode.</p>
<p><strong>Do not be afraid of editing this data!</strong> Changes done here are <strong>not persistent!</strong> Therefore the worst thing that can happen while messing up here (unless you intentionally enter malicious commands) is that your Ubuntu will fail to start &#8211; but it will be back to normal next time you start your computer as usually.</p>
<p>The exact contents of what you will see depend on your system version. However, what we are going to edit is common to all of them. <strong>Look for a line that starts with:   <em>linux /boot/vmlinuz-&#8230;</em></strong><em>   </em>Use arrow keys to reach the end of this line, and add the following at it&#8217;s end:<em><br />
</em></p>
<blockquote>
<pre>init=/sbin/e4rat-collect</pre>
</blockquote>
<p>(<em>Note: </em>This line can be longer than your screen, and it will wrap around &#8211; if you are unsure where to add this text, go to one line <b>below</b> the one we would like to edit, and press <strong>left arrow key</strong>, which should take you to the end of the previous like &#8211; right where you need to add the above text).</p>
<p>Then press <strong>Ctrl+X</strong>, which will start the system using this new argument.</p>
<p>For the next <strong>120 seconds</strong> e4rat will be looking which files are loaded during boot. <em><strong>Pro tip</strong></em>: if you open your browser (or any other application you use frequently) within these 2 minutes, e4rat will think the browser&#8217;s files are essential to boot, and will pre-load them everytime you start your system &#8211; this way your frequently used apps will also start faster!</p>
<p>Once your system is up, make sure everything went right, by testing if file <em>/var/lib/e4rat/startup.log</em> is present. I do it by running:</p>
<blockquote>
<pre>file /var/lib/e4rat/startup.log</pre>
</blockquote>
<p>If it says it&#8217;s a UTF-8 text file, everything&#8217;s fine. If it says there is no such file, you need to redo this step carefully &#8211; you must have somehow not launched e4rat-collect.</p>
<hr />
<p><b>3. Relocating files.</b></p>
<p>Now we&#8217;ll need to boot up in low-level text-mode. This is because file relocation won&#8217;t work, if whole system is running. No worries &#8211; again, it sounds scarier than it really is.</p>
<p>To enter it, we&#8217;ll do something similar to the previous step. Restart your system, select your OS in GRUB boot menu, and press <strong>e</strong> to edit it. Look for the same line as previously (<strong>the one that starts with   <em>linux /boot/vmlinuz-&#8230;  </em></strong>), but this time we need to add some other text. Type:</p>
<blockquote>
<pre>single</pre>
</blockquote>
<p>and press <strong>Ctrl+X </strong>to boot your system. After few seconds you will see command prompt (if not, press Ctrl+Alt+F1). The following command will start file relocation, according to data e4rat collected:</p>
<blockquote>
<pre>e4rat-realloc /var/lib/e4rat/startup.log</pre>
</blockquote>
<p><strong>It can take a long time. </strong>Do not worry if it does not finish within several minutes. It needs to move lots of data on your hard drive, and because it&#8217;s a slow one, it will take time. If you have little free disk space, this can be even longer. Just be patient, it will finish eventually.</p>
<p>Once it finishes, it will tell you some more or less interesting data about how well was it able to move your files.</p>
<p><strong>It is recommended to run this command multiple times,</strong> until it clearly says that <em>No further improvements are possible</em>. Every time you run it, it should take less time, and really, it&#8217;s worth to wait &#8211; the better the files are located, the faster your system will boot once we finish.</p>
<p>When it says that there is are no further improvements possible, we are done with this step. Do <strong>not</strong> shut down your computer.</p>
<hr />
<p><strong>4. Enabling e4rat to preload files every time you start your system.</strong></p>
<p>We are almost done. The last thing that has to be done is modifying the way your Ubuntu starts, so that it can benefit from e4rat. Still in text mode, run:</p>
<blockquote>
<pre>nano /etc/default/grub</pre>
</blockquote>
<p>A full-screen text-editor will appear, with a config file open. It&#8217;s very intuitive to use. Find a line that starts with  <strong></strong></p>
<blockquote>
<pre>GRUB_CMDLINE_LINUX_DEFAULT="..."</pre>
</blockquote>
<p>Leave whatever is between quotemarks, and add  <strong>init=/sbin/e4rat-preload </strong>. For example, on my system this line looked like that:</p>
<blockquote>
<pre>GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"</pre>
</blockquote>
<p>so I changed it into:</p>
<blockquote>
<pre>GRUB_CMDLINE_LINUX_DEFAULT="quiet splash init=/sbin/e4rat-preload"</pre>
</blockquote>
<p>I hope that&#8217;s clear. Press <strong>Ctrl+O</strong> and then <strong>Enter</strong> to save the file, then press <strong>Ctrl+X</strong> to close the editor.</p>
<p>To apply the changes we&#8217;ve just made, run the following command:</p>
<blockquote>
<pre>update-grub</pre>
</blockquote>
<p>Once if finishes, restart your machine using this command:</p>
<blockquote>
<pre>reboot</pre>
</blockquote>
<p>Now your Ubuntu should start <strong>normally</strong>. Well&#8230; almost. If everything went right, it should start <em>faster</em>. If you are lucky, it will start <em>lighting fast</em> (and it will be just as fast on every reboot since now)!<em><br />
</em></p>
<p>I hope you found this guide useful, and that your system boot time shocked you. If so, thank the people who develop <a href="http://e4rat.sourceforge.net/">e4rat</a>!</p>
<hr />
<p><strong>Final note: uninstalling e4rat.</strong> If for some reason you want to revert the changes you did with installing e4rat, here are the instructions. First, revert the changes to <em>/etc/default/grub</em> we introduced in step 4. Run <i>sudo update-grub</i> to apply this change. Run <em>sudo apt-get purge e4rat</em> to uninstall e4rat, and <em>sudo apt-get install ubuntu-minimal ureadahead </em>to restore ureadahead. Note that file relocation is not revertable, but you will not suffer from it.</p>
<br />Filed under: <a href='http://rafalcieslak.wordpress.com/category/ubuntu/'>Ubuntu</a>  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=224&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rafalcieslak.wordpress.com/2013/03/17/e4rat-decreasing-bootup-time-on-hdd-drives/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>There is something wrong with the new UDS system.</title>
		<link>http://rafalcieslak.wordpress.com/2013/02/28/there-is-something-wrong-with-the-new-uds-system/</link>
		<comments>http://rafalcieslak.wordpress.com/2013/02/28/there-is-something-wrong-with-the-new-uds-system/#comments</comments>
		<pubDate>Thu, 28 Feb 2013 19:13:16 +0000</pubDate>
		<dc:creator>Rafał Cieślak</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[summit]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[UDS]]></category>

		<guid isPermaLink="false">http://rafalcieslak.wordpress.com/?p=218</guid>
		<description><![CDATA[When I read the news about Canonical&#8217;s decision to change the way Ubuntu Developer Summit (original announcement here) I was totally astonished. I expected this change will cause a lot of buzz within the community, especially given the fact that all recent Canonical decisions are considered very controversial. This surprises me heavily, as I can spot [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=218&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>When I read the news about Canonical&#8217;s decision to change the way Ubuntu Developer Summit (<a href="http://fridge.ubuntu.com/2013/02/26/ubuntu-developer-summits-now-online-and-every-three-months/">original announcement here</a>) I was totally astonished. I expected this change will cause a lot of buzz within the community, especially given the fact that all recent Canonical decisions are considered very controversial. This surprises me heavily, as I can spot a big number of problems that this decision may cause, as well as problems with the way this decision itself was handled. <a href="http://www.jonobacon.org/2013/02/26/on-moving-to-an-online-ubuntu-developer-summit/">Jono Bacon&#8217;s article</a> explaining the decision did not satisfy me either. It explains the general reasoning behind this idea, but it does not clarify everything.</p>
<p><span id="more-218"></span></p>
<p>UDS is a part of long-term Ubuntu tradition. Every six months the developers from all over the world would meet in order to plan development for the upcoming release, brainstorm ideas, discuss problems and collaborate in many ways to ensure that next Ubuntu is going to rock. But the event is not (was not?) just about planning. It was a chance for the community to actually meet, to get to know each other, to tighten the bonds within community. I believe this is crucial for being deeply engaged within the community, and for ensuring the relations within community, as well as it&#8217;s structure and organisation are well and sound (and isn&#8217;t it important to have friends within the community?). We all know that a big number of Canonical employees are working remotely, and I feel that this may be one of the key facts which contributed to the decision of converting UDS into an online meeting. Apparently some folks at Canonical realized that people do not need to meet in order to be productive. Moreover, a very important part of UDS was outside the sessions &#8211; people would discuss brilliant ideas during the dinner, some would seek for aid for their team by looking for interested folks, others would flash their mobile device with the help of experienced ones, and finally, some people would teach each other a lot. It is clear that none of these will happen in case of an online UDS.<b><br />
</b></p>
<p>From what I understood, the idea is to make UDS available to everyone, so that all contributors, regardless of where they live in and how far are they willing to travel, could participate to the sessions. I can, however, see some significant inconsistency here. The first fact is the choice of Google Hangouts for sessions. I agree this is a great handy tool for video conferences, and I use it myself a lot, but it cannot be assumed that everyone is perfectly fine with G+ policy; there indeed are people who do their best to avoid any Google products. We are told that IRC sessions will be provided for these who can&#8217;t join videos, but that <strong>doesn&#8217;t do much sense,</strong> because it does not differ at all from remote participation in summits which were real meetings (people who were unable to travel to UDS could use IRC to contact with session participants, the IRC log was displayed live in the room so that everyone could interact with the discussion even if they were miles away &#8211; I have participated this way during UDS-Q, and the experience was actually quite satisfying, even though I couldn&#8217;t see the faces of people I was speaking with).</p>
<p>I also have to express my doubts about session organisation. While some UDS sessions were indeed held by less than 10 people, many other would grab interest of more (e.g the ones from Community track), resulting in more than 50 developers in the room + at least 20 on the IRC, with at least 30-40 of them participating actively in the discussion. Now, if the point is to let everyone participate, then it means we aim for even more participants. Now please imagine 80-100 people in a single G+ hangout. Even a number like 30 seems bizarre! Either this will end as a huge mess, or only some people will be voiced (which, again, breaks the idea of opening UDS to everyone).</p>
<p>I have also concerns about the way it is said to be organised. The event is going to be two-days long, and it will take place between 4pm to 10pm UTC. Obviously, that means that a big part of the word will be sleeping then, and the other be at work etc. And that, once more, is aganist the principle of opening UDS to everyone. I don&#8217;t see any reason why this can&#8217;t be a 24h event, with sessions spread more or less evenly, so that those living in Australia can participate too. I also believe that some teams might want to schedule meetings on times that suit their people best, why limit them to few hours, if this is going to be an online event?</p>
<p>The length of the event is also interesting. Two days. Two days of few-hour long discussion. Compare that to traditional 5-day long UDS with sessions from 9am to 6pm. Add the fact that online UDS will take place two times more frequently, and the conclusion is that we&#8217;ll need to be 10 times more efficient to discuss all that is needed. Will this be enough time? Luckily, event length can be fine-tuned if needed. Some speculate this may be related to Ubuntu switching to rolling release model.</p>
<p>One of the main problems with how was decision handled is that it was 1) a surprise 2) immediately effective. I opened up Planet Ubuntu on Wednesday and learned that the UDS is <strong>next week</strong>. A lot of time to prepare discussion topic, isn&#8217;t it? At the time of writing this, there is <a href="https://blueprints.launchpad.net/sprints/uds-1303"><strong>not a single blueprint</strong> registered for this UDS</a>. I might go on explaining why this was a terrible idea to announce it this late, but I believe you get the idea. Please also note that Canonical has never notified before about such idea. Until the announcement, everything seemed that the next UDS will take place as usually &#8211; this time in Oakland, and I expect there may be people who have already reserved their time. I feel that such crucial decisions need to come with some kind of transitional period.</p>
<p><strong>With all respect to Canonical and their right to manage the money they own</strong> (UDS is a really expensive event, every time I try to imagine the amount of money that had to be involved in Copenhagen, my mind suffers stack overflows), I am very skeptical about this decision, both because of the reasons I explained, and because of some that I&#8217;d rather not share publicly. Time will tell how it will affect planning, development and community. I hope the lack of such meetings won&#8217;t have a major impact.</p>
<p>And please keep in mind that regardless of what changes are done to the way we organize our work, Ubuntu community will always make sure your favorite OS is the best possible! :-)</p>
<br />Filed under: <a href='http://rafalcieslak.wordpress.com/category/ubuntu/'>Ubuntu</a>  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=218&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rafalcieslak.wordpress.com/2013/02/28/there-is-something-wrong-with-the-new-uds-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vModSynth 1.0 released</title>
		<link>http://rafalcieslak.wordpress.com/2013/02/10/vmodsynth-1-0-released/</link>
		<comments>http://rafalcieslak.wordpress.com/2013/02/10/vmodsynth-1-0-released/#comments</comments>
		<pubDate>Sun, 10 Feb 2013 15:34:41 +0000</pubDate>
		<dc:creator>Rafał Cieślak</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[dsp]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[linuxaudio]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[studio]]></category>
		<category><![CDATA[synthesis]]></category>
		<category><![CDATA[synthesizers]]></category>
		<category><![CDATA[vmodsynth]]></category>

		<guid isPermaLink="false">http://rafalcieslak.wordpress.com/?p=204</guid>
		<description><![CDATA[Didn&#8217;t I mention for the last 2 months I have been working on a synthesizer application? I am pleased to announce that vModSynth 1.0 is now publicly released and available to download. What is vModSynth? It&#8217;s a modular software synthesizer for Linux. It is not intended to be as convenient as possible, but to resemble the [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=204&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Didn&#8217;t I mention for the last 2 months I have been working on a synthesizer application?</p>
<p><strong>I am pleased to announce that vModSynth 1.0 is now publicly released and available to download.</strong></p>
<p>What is vModSynth? It&#8217;s a <i>modular software synthesizer</i> for Linux. It is not intended to be as convenient as possible, but to resemble the look &amp; feel of a real, analog, modular software synthesizer. See for yourself:</p>
<p><a href="http://rafalcieslak.files.wordpress.com/2013/02/vmod1.png"><img class="aligncenter size-full wp-image-205" alt="vmod1" src="http://rafalcieslak.files.wordpress.com/2013/02/vmod1.png?w=780&#038;h=566" width="780" height="566" /></a></p>
<p><span id="more-204"></span></p>
<p>vModSynth allows you to play with a modular synth on your computer. You are free to choose any modules you wish, you can connect them however you want, and you will hear the result immediately. The synthesizer intentionally resembles the look of a modular synthesizer (I was inspired by modules manufactured by <a href="http://synthesizers.com">synthesizers.com</a>), and it imitates behavior of one.</p>
<p><a href="http://rafalcieslak.files.wordpress.com/2013/02/vm2.png"><img class="aligncenter size-large wp-image-207" alt="vm2" src="http://rafalcieslak.files.wordpress.com/2013/02/vm2.png?w=780&#038;h=379" width="780" height="379" /></a></p>
<p>vModSynth integrates perfectly with external MIDI devices &#8211; you can play it with an external keyboard, and you can bind <strong>any</strong> knob to a knob/slider on your physical device, so that you can actually <strong>feel</strong> the synthesizer, and modify it&#8217;s parameters just as on a real one! You can also connect any external sequencing application, like <em>Rosegarden</em> or <em>harmonySEQ</em>.<i><br />
</i></p>
<p><a href="http://rafalcieslak.files.wordpress.com/2013/02/vm3.png"><img class="alignleft size-full wp-image-210" alt="vm3" src="http://rafalcieslak.files.wordpress.com/2013/02/vm3.png?w=780"   /></a> There is a number of modules you can add to your setup. A all-in-one oscillator, some effects, some processing modules, whatever you like. If I continue to develop this project, the number of modules will certainly grow, as creating new ones is very easy.</p>
<p>No limits to the number of modules, the number of connections, loops in connections, you are absolutely free. Just build your own synthesizing path and hear it in action.</p>
<p><strong>The source file can be <a href="https://launchpad.net/vmodsynth/trunk/1.0/+download/vmodsynth-1.0.tar.gz"><strong>d</strong>ownloaded here</a></strong>. Compilation is as simple as <em>./configure &amp;&amp; make &amp;&amp; make install </em>. <strong>A detailed user manual is available in the <em>./doc</em> directory.</strong></p>
<p>There is also<a href="https://launchpad.net/~smartboyhw/+archive/vmodsynth-release/"><strong> a PPA</strong></a> for Ubuntu 12.04/12.10/13.04 available. To add it an install, use <em>sudo add-apt-repository ppa:smartboyhw/vmodsynth-release &amp;&amp; sudo apt-get update &amp;&amp; sudo apt-get install vmodsynth</em> . Thanks to <strong>Howard Chan</strong> for maintaining the PPA!</p>
<p>Questions, ideas, bugs? Please <a title="About me" href="http://rafalcieslak.wordpress.com/about/">contact me</a> directly, or leave a comment here. I have not yet recognized the level of interest others may have in this piece of software, and I need to investigate whether it makes sense to setup a bug tracker etc. <strong>However</strong>, if you are interested in contributing to this project, writing new awesome modules or generally helping me make vModSynth a awesome synthesizer, you will be welcome with my arms wide open!</p>
<br />Filed under: <a href='http://rafalcieslak.wordpress.com/category/ubuntu/'>Ubuntu</a>  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=204&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rafalcieslak.wordpress.com/2013/02/10/vmodsynth-1-0-released/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Dynamically changing Ubuntu Phone wallpaper for your desktop</title>
		<link>http://rafalcieslak.wordpress.com/2013/01/13/dynamically-changing-ubuntu-phone-wallpaper-for-your-desktop/</link>
		<comments>http://rafalcieslak.wordpress.com/2013/01/13/dynamically-changing-ubuntu-phone-wallpaper-for-your-desktop/#comments</comments>
		<pubDate>Sun, 13 Jan 2013 19:42:23 +0000</pubDate>
		<dc:creator>Rafał Cieślak</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[desktop]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[phone]]></category>
		<category><![CDATA[phoneos]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[ubuntuphone]]></category>
		<category><![CDATA[wallpaper]]></category>
		<category><![CDATA[welcome screen]]></category>

		<guid isPermaLink="false">http://rafalcieslak.wordpress.com/?p=179</guid>
		<description><![CDATA[We have all already seen it. The super-elegant Welcome Screen seen on all demonstrations of Ubuntu Phone OS is appreciated by many for it&#8217;s brilliant design and simplicity. Because of that, some have tried to recreate it to use as a desktop wallpaper. Among several versions that are available, I liked Michał Prędotka&#8217;s version most. This version [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=179&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><strong>We have all already seen it.</strong> The super-elegant <em>Welcome Screen</em> seen on all demonstrations of Ubuntu Phone OS is appreciated by many for it&#8217;s brilliant design and simplicity.</p>
<p>Because of that, some have tried to recreate it to use as a desktop wallpaper. Among several versions that are available, I liked <a href="http://mivoligo.com/d/inspire-wallpaper">Michał Prędotka&#8217;s version</a> most. This version was modified to many different colors by Michael Hall &#8211; he has even created a <a href="http://www.youtube.com/watch?v=WmqrA-BaWHE">video tutorial</a> on how to make your own color scheme for this wallpaper.</p>
<p>I love the idea of different simple wallpapers that share the design, but vary in colors. But I&#8217;m lazy, and I don&#8217;t want to change my wallpaper everyday to enjoy another color scheme. Ideally the wallpaper would change automatically. But if the design is identical and only colors change, then it may be neat to change the colors <strong>smoothly</strong>.</p>
<p><img class="wp-image-181 alignnone" alt="c5" src="http://rafalcieslak.files.wordpress.com/2013/01/c5.png?w=146&#038;h=92" width="146" height="92" /><img class="wp-image-184 alignnone" alt="c1" src="http://rafalcieslak.files.wordpress.com/2013/01/c1.png?w=146&#038;h=92" width="146" height="92" /><img class="wp-image-182 alignnone" alt="c3" src="http://rafalcieslak.files.wordpress.com/2013/01/c3.png?w=147&#038;h=92" width="147" height="92" /><img class=" wp-image-183 alignnone" alt="c4" src="http://rafalcieslak.files.wordpress.com/2013/01/c4.png?w=147&#038;h=92" width="147" height="92" /><img class="wp-image-180 alignnone" alt="c2" src="http://rafalcieslak.files.wordpress.com/2013/01/c2.png?w=146&#038;h=92" width="146" height="92" /></p>
<p><small>(these images are low-res, and are not meant to be downloaded)</small></p>
<p><span id="more-179"></span></p>
<p>I have written a small script which does that for you. It runs in the background, and every now and then it creates a new shade of color for your wallpaper. This way the color changes smoothly. By default, it takes full day for the colors to repeat (but you can chage the period easily) &#8211; it&#8217;s yellow in the morning, green near noon, in the afternoon it gets blue, evening is violet, and at night it gets red. You may want the colors to change slower (it may be cool to have the full cycle take a week, this way everyday&#8217;s a new color!). If you wish, it will be simple even to modify color selection algorithm as you wish.</p>
<p><strong>You can download the script <a href="http://people.ubuntu.com/~rafalcieslak256/welcome_screen.tar.gz">here</a>.</strong> After extracting, simply launch the <strong>run</strong> file (you may wish to modify the script before). I have also added the script to the list of apps that is started when I login, so that it runs in the background whenever I using my desktop. By default, it refreshes the wallpaper every 10 minutes. This is enough for shade changes to be not noticable.</p>
<p><strong>And <i>of</i></strong> <strong><em>course</em> the Dash and Launcher&#8217;s cameleonic features are following the mood of your wallpaper!</strong></p>
<p>I hope you will enjoy this colourful trick!</p>
<br />Filed under: <a href='http://rafalcieslak.wordpress.com/category/ubuntu/'>Ubuntu</a>  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=179&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rafalcieslak.wordpress.com/2013/01/13/dynamically-changing-ubuntu-phone-wallpaper-for-your-desktop/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>FitBit trophies as a milestone for Ubuntu Accomplishments</title>
		<link>http://rafalcieslak.wordpress.com/2012/12/08/fitbit-trophies-as-a-milestone-for-ubuntu-accomplishments/</link>
		<comments>http://rafalcieslak.wordpress.com/2012/12/08/fitbit-trophies-as-a-milestone-for-ubuntu-accomplishments/#comments</comments>
		<pubDate>Sat, 08 Dec 2012 19:10:53 +0000</pubDate>
		<dc:creator>Rafał Cieślak</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[accomplishments]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[fitbit]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[trophies]]></category>
		<category><![CDATA[UAS]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[ubuntu accomplishments]]></category>

		<guid isPermaLink="false">http://rafalcieslak.wordpress.com/?p=174</guid>
		<description><![CDATA[You may have heard about FitBit badges support in Ubuntu Accomplishments system. Matt Fisher and Chris Wayne have written a new collection of accomplishments which pulls in your FitBit badges to other trophies. You can learn more about what awesome work they did by reading their articles [Matt] [Chris]. To those of you thinking &#8220;Hey, [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=174&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img class="alignright" alt="Accomps logo" src="https://launchpadlibrarian.net/100826171/ubuntu-accomplishments-icon-64x64.png" height="64" width="64" />You may have heard about <strong>FitBit badges support</strong> in Ubuntu Accomplishments system. Matt Fisher and Chris Wayne have written a new collection of accomplishments which pulls in your FitBit badges to other trophies. You can learn more about what awesome work they did by reading their articles [<a href="http://www.mattfischer.com/blog/?p=357">Matt</a>] [<a href="http://chrismwayne.com/?p=155">Chris</a>].</p>
<p>To those of you thinking &#8220;Hey, that app is <strong>Ubuntu</strong> accomplishments. How does FitBit relate to Ubuntu?&#8221;: that&#8217;s what a <strong>separate collection</strong> means. All trophies are grouped in sets &#8211; each set may relate to a different community, may be developed by completely different people &#8211; and such sets are called <strong>collections</strong>. You can think about them as of plugins or add-ons. Collections are installed separatelly, and are optional. That means that you are free to install FitBit accomplishments alongside Ubuntu trophies, and that you can also use just FitBit badges and remove default collections that award you for being active in Ubuntu community.</p>
<p>Now why do I consider FitBit trophies a milestone for the project?</p>
<p><span id="more-174"></span></p>
<p>Ubuntu Accomplishments System <strong>has reached the level</strong> on which creating third-party collections is simple and clear. The appearance of FitBit accomplishments symbolises how extensive this platform is, that it can be used to present achievements in areas not limited to Ubuntu. This is <strong>the first</strong> additional accomplishments collection I am aware of &#8211; except for few proofs of concept we did some time ago &#8211; and that means a lot to me. <em>This is the ultimate proof that the system is fully capable of integrating with third-parties</em>. As far as I know, it took Matt and Chris about a week to create this collection &#8211; and considering the fact that they are busy people <strong>and</strong> how simple the scripts are &#8211; as seen in <a href="http://www.mattfischer.com/blog/?p=357">Matt&#8217;s post</a> - it&#8217;s clear that making a simple set of third-party trophies is a quick task.</p>
<p>I believe that the power of this platform lurks in it&#8217;s <strong>extensibility</strong>. Imagine what collections others (or you!) may develop:</p>
<ul>
<li>Trophies for a local Ubuntu community</li>
<li>Achivements in a video game</li>
<li>Accomplishments representing aquired skills in a local diving/basketball/parachuting/etc. club</li>
<li>Awards for being active in other communities (Kubuntu? Debian? Wikipedia? a MMORPG? DevianArt? <em>or anything you wish</em>)</li>
<li>Badges for students symbolising awards for their efforts</li>
</ul>
<p>You get the idea. The sky is the limit.</p>
<p>Now with the Accomplishments System being qiute stable, it&#8217;s no pain developing your own collection. <strong>Pick up any idea you have</strong>, <a href="https://wiki.ubuntu.com/Accomplishments/Creating/">use this guide</a> hop onto <strong>#ubuntu-accomplishments</strong> or join <a href="https://launchpad.net/~ubuntu-accomplishments-contributors">our<strong> mailing list</strong></a> and we&#8217;ll make sure you find all the resources you may need to make your own awesome collection.</p>
<p><em>And kudos to Matt and Chris for their exemplary work ;-)</em></p>
<br />Filed under: <a href='http://rafalcieslak.wordpress.com/category/ubuntu/'>Ubuntu</a>  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=174&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rafalcieslak.wordpress.com/2012/12/08/fitbit-trophies-as-a-milestone-for-ubuntu-accomplishments/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>BarCamp Wrocław</title>
		<link>http://rafalcieslak.wordpress.com/2012/11/12/barcamp-wroclaw/</link>
		<comments>http://rafalcieslak.wordpress.com/2012/11/12/barcamp-wroclaw/#comments</comments>
		<pubDate>Mon, 12 Nov 2012 20:51:37 +0000</pubDate>
		<dc:creator>Rafał Cieślak</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[bcwro]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[local]]></category>
		<category><![CDATA[unexus]]></category>
		<category><![CDATA[wrocław]]></category>

		<guid isPermaLink="false">http://rafalcieslak.wordpress.com/?p=167</guid>
		<description><![CDATA[This Saturday I have attended BarCamp Wrocław, an unconference organised at my city. It happened to have been held at my university ;) The event was awesome, quite a few people turned up, I&#8217;ve met the founders of Unexus (who organised this event, kudos to them!), as well as Johan Janssens, co-founder of Joomla, who gave [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=167&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://rafalcieslak.wordpress.com/2012/11/12/barcamp-wroclaw/bclogo1/" rel="attachment wp-att-168"><br />
<img class="alignright" title="bclogo1" alt="" src="http://rafalcieslak.files.wordpress.com/2012/11/bclogo1.png?w=180&#038;h=180" height="180" width="180" /></a>This Saturday I have attended <a href="http://www.facebook.com/pages/BarCamp-Wroclaw/233250676802624">BarCamp Wrocław</a>, an unconference organised at my city. It happened to have been held at my university ;) The event was awesome, quite a few people turned up, I&#8217;ve met the <a href="http://unexus.org/team">founders of Unexus</a> (who organised this event, kudos to them!), as well as Johan Janssens, co-founder of Joomla, who gave an excelent talk about the concept of FOSS. To my surprise, it turned out that many people in local community are still very confused about what actually FOSS is, and why it&#8217;s cool. There were also many interesting talks about few certain software projects, we had a nice discussion on technology-related topics.<a href="http://rafalcieslak.wordpress.com/2012/11/12/barcamp-wroclaw/bclogo1/" rel="attachment wp-att-168"><br />
</a></p>
<p>I&#8217;m definitelly looking for another chance to meet great developers from my city and participate in discussions with international experts. That was a great fun!</p>
<br />Filed under: <a href='http://rafalcieslak.wordpress.com/category/ubuntu/'>Ubuntu</a>  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=167&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rafalcieslak.wordpress.com/2012/11/12/barcamp-wroclaw/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ubuntu Acccomplishments on UDS</title>
		<link>http://rafalcieslak.wordpress.com/2012/11/03/ubuntu-acccomplishments-on-uds/</link>
		<comments>http://rafalcieslak.wordpress.com/2012/11/03/ubuntu-acccomplishments-on-uds/#comments</comments>
		<pubDate>Sat, 03 Nov 2012 14:40:32 +0000</pubDate>
		<dc:creator>Rafał Cieślak</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[accomplishments]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[trophies]]></category>
		<category><![CDATA[UAS]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[ubuntu accomplishments]]></category>
		<category><![CDATA[UDS]]></category>

		<guid isPermaLink="false">http://rafalcieslak.wordpress.com/?p=162</guid>
		<description><![CDATA[That was an interesting week! Lots of great discussions on Ubuntu Developer Summit, I&#8217;ve met many great people, brainstormed a lot, and learned a great deal of things. Obviously, I was most active in sessions concerning Ubuntu Accomplishments, and I would like to share what we&#8217;ve decided with those who did not participate. To my [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=162&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img class="alignleft" style="margin-left:10px;margin-right:10px;" title="Accomplishments" alt="" src="https://launchpadlibrarian.net/100826171/ubuntu-accomplishments-icon-64x64.png" height="64" width="64" />That was an interesting week! Lots of great discussions on Ubuntu Developer Summit, I&#8217;ve met many great people, brainstormed a lot, and learned a great deal of things. Obviously, I was most active in sessions concerning <strong>Ubuntu Accomplishments</strong>, and I would like to share what we&#8217;ve decided with those who did not participate.</p>
<p><span id="more-162"></span></p>
<p>To my delight, some sessions met with wide interest. Especially the Accomplishments Writing Workshop was attended by many, and results are promising, I was told we can hope to see <strong>Ubuntu TV</strong> accomplishments soon! We have also found <strong>a new use case</strong> for Accomplishments, an IT manager expressed interest in using our platform to train employees, he hopes to achieve that by purging default accomplishment collections and installing a collection designed as a tutorial. I&#8217;m looking forward results, this sounds as a cool idea! Another great news is that <strong>work on UbuntuForums accomplishments is in progress!</strong></p>
<p>We also have quite a good plan concerning how to get Ubuntu Accomplishments to <strong>Universe</strong> repositories for 13.04. There are some minor things we&#8217;ll need to fix, and we&#8217;re going to make the daemon a DBus service (I am going to investigate how we can make it starting both as a service and on user login), yet finally we will have all Accomplishment packages pushed into Universe. <em>We think this is a <strong>very</strong> important step, because with these packages being available in Ubuntu repositories other developers will be much more likely to integrate their applications with our accomplishments system!</em></p>
<p>Another highlight from our sessions is how we are going to improve the Accomplishments Viewer for 0.4. I am going to work on implementing a wiser <strong>search&amp;filter</strong> algorithm, that will enable us to add a search bar to the Viewer. We will be also working on visual updates, Martin has volunteered to experiment with <strong>rendering a wooden cabinet look</strong> for trophies collection. It is possible that we&#8217;ll also try our a webkit version of the viewer, but most likely we&#8217;ll stay with GTK+, and therefore I will be also trying to <strong>improve viewer&#8217;s performance</strong> and responsiveness. You can also expect new icon templates for trophies, just to increase variety of accomplishments.</p>
<p>Concerning accomplishments collecctions themselves, we have not reached consensus about rewarding user for sustained contributions. We need to investigate ways of awarding the user as he gradually progresses through Ubuntu community, but this involves discussion about core concepts of this system. It turns out that if we want to make Accomplishments more fun, it is very easy to start turning whole community into a game, which should be avoided. We will be continuing this discussion with Jono, as he may have a better idea of the direction this project should be heading towards.</p>
<p>Lastly, we discussed <strong>deploying</strong> Accomplishments Validation Server and Web Gallery <strong>on</strong> <strong>Canonical</strong> <strong>servers</strong>. Among other actions we&#8217;ll take to achieve that, we are going to prepare separate &#8216;production&#8217; branches for both projects. We will also try desiging a formal accomplishments review process, to ensure that no new accomplishments added to official collections have some insecure code which will be run on these official servers.</p>
<p>Concluding, during this exciting week we have planed our work for the next release, as well as brainstormed ideas on improving general experience with accomplishments. It was a lot of fun, and I am really excited to start working! :-)</p>
<br />Filed under: <a href='http://rafalcieslak.wordpress.com/category/ubuntu/'>Ubuntu</a>  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=162&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rafalcieslak.wordpress.com/2012/11/03/ubuntu-acccomplishments-on-uds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Toggle Backlight mode in Unity2D</title>
		<link>http://rafalcieslak.wordpress.com/2012/10/05/toggle-backlight-mode-in-unity2d/</link>
		<comments>http://rafalcieslak.wordpress.com/2012/10/05/toggle-backlight-mode-in-unity2d/#comments</comments>
		<pubDate>Fri, 05 Oct 2012 14:41:12 +0000</pubDate>
		<dc:creator>Rafał Cieślak</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[backlight]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[help]]></category>
		<category><![CDATA[launcher]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[trick]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[unity]]></category>
		<category><![CDATA[unity2d]]></category>

		<guid isPermaLink="false">http://rafalcieslak.wordpress.com/?p=146</guid>
		<description><![CDATA[I really like the &#8220;Backlight Toggles&#8221; launcher mode, which causes all launcher icons to have a colored background if and only if the application is running. This allows me to quickly see what&#8217;s running and what&#8217;s not. As far as I know this is the default mode for 12.10. I was missing this feature on [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=146&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I really like the <strong>&#8220;Backlight Toggles&#8221;</strong> launcher mode, which causes all launcher icons to have a colored background if and only if the application is running. This allows me to quickly see what&#8217;s running and what&#8217;s not. As far as I know this is the default mode for 12.10.</p>
<p><strong>I was missing this feature on Unity2D.</strong> It turns out that I was not the only one who looked for help in the Internet in this matter &#8211; actually some people would like to use this feature. I&#8217;m going to give you a hand with that! As Unity2D is no longer developed, we cannot hope such feature will be ever implemented, so I prepared a simple script that patches few Unity files and enables that behavior immediately!</p>
<p><a href="http://rafalcieslak.wordpress.com/2012/10/05/toggle-backlight-mode-in-unity2d/ggzmr/" rel="attachment wp-att-147"><img class="wp-image-147 alignnone" title="2dbg" src="http://rafalcieslak.files.wordpress.com/2012/10/ggzmr.png?w=360&#038;h=360" alt="" width="360" height="360" /></a></p>
<p>To get and run the script, use the following:</p>
<p><span id="more-146"></span></p>
<pre>wget http://people.ubuntu.com/~rafalcieslak256/Unity2dBgToggle.sh
chmod +x Unity2dBgToggle.sh
./Unity3dBgToggle.sh</pre>
<p><strong>Important notes:</strong> This script works for <strong>Ubuntu 12.04 </strong>only. It modifies some Unity2D files, so if it will complain it cannot apply patches, do not force it to do so. Although I have carefully tested this script on several machines, I cannot guarantee it will work for everyone, especially if you are using other Unity2D mods. Also note that Unity2D updates will revert these changes, you will need to re-run the script.</p>
<p>If anything went wrong, reverting changes is as simple as reinstalling <code>unity-2d-shell</code> package.</p>
<p>Enjoy! ;-)</p>
<br />Filed under: <a href='http://rafalcieslak.wordpress.com/category/ubuntu/'>Ubuntu</a>  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=146&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rafalcieslak.wordpress.com/2012/10/05/toggle-backlight-mode-in-unity2d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>So what is actually new in Ubuntu Accomplishments 0.3?</title>
		<link>http://rafalcieslak.wordpress.com/2012/10/01/so-what-is-actually-new-in-ubuntu-accomplishments-0-3/</link>
		<comments>http://rafalcieslak.wordpress.com/2012/10/01/so-what-is-actually-new-in-ubuntu-accomplishments-0-3/#comments</comments>
		<pubDate>Mon, 01 Oct 2012 19:17:51 +0000</pubDate>
		<dc:creator>Rafał Cieślak</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[0.3]]></category>
		<category><![CDATA[accomplishments]]></category>
		<category><![CDATA[changelog]]></category>
		<category><![CDATA[daemon]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[highlights]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[trophies]]></category>
		<category><![CDATA[UAS]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[viewer]]></category>

		<guid isPermaLink="false">http://rafalcieslak.wordpress.com/?p=142</guid>
		<description><![CDATA[Ubuntu Accomplishments system had a new release this week, which sums up our efforts from last 4 months. What were we doing all that time? What&#8217;s new, what&#8217;s worth trying out? If you don&#8217;t like reading changelogs, this post will present some highlights of most important changes that were introduced in Ubuntu Accomplishments 0.3. User-side [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=142&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img class="alignright" title="UAS Logo" src="https://launchpadlibrarian.net/100826171/ubuntu-accomplishments-icon-64x64.png" alt="" width="80" height="80" />Ubuntu Accomplishments system had a new release this week, which sums up our efforts from last 4 months. What were we doing all that time? What&#8217;s new, what&#8217;s worth trying out? If you don&#8217;t like reading changelogs, this post will present some highlights of most important changes that were introduced in Ubuntu Accomplishments 0.3.</p>
<p><span id="more-142"></span></p>
<h4>User-side goodies</h4>
<ul>
<li>A brand new feature is <strong>social portals integration</strong>. This allows one to show off the trophy they got, by instantly posting such information on Twitter, Facebook, and whatever else your Gwibber is connected to. When you have accomplished something, just go to trophies details view, and use the big SHARE button. You will be able to edit the default message, and in a single click you can publish it to your friends &#8211; show them who has the coolest Ubuntu Trophies! <em>Kudos to SilverFox for her awesome work on this feature!</em><strong><br />
</strong></li>
<li><strong>Publishing your trophies online.</strong> This allows you to easily share your achievements with the online service <a href="http://trophies.ubuntu.com" rel="nofollow">http://trophies.ubuntu.com</a>, which should be deployed soon. Once published there, you can browse your trophies online, make your friends jealous of your collection, and use links to single trophies, which can work as the <strong>proof</strong> that you actually deserve the trophy. <strong>This feature is implemented in 0.3, but temporarily disabled</strong>, because it requires trophies.ubuntu.com to be live&#8230; we&#8217;ll enable it in 0.3.1 as soon as the web service will be ready.</li>
<li>A slightly more <strong>sophisticated MyTrophies view</strong>. It now groups your trophies by collections, and allows you to browse sort them by the time of when you have acquired them &#8211; helpful when looking for what you&#8217;ve just accomplished!</li>
<li>Ubuntu Accomplishments now successfully works on <strong>other distros</strong> and Ubuntu Flavors! That includes Kubuntu, Xubuntu, Ubuntu Studio, Lubuntu, Fedora and many more!</li>
<li>Helpful <strong>welcome screen </strong>that appears in the viewer, when one has no accomplishment collections installed. It instructs how to install accomplishments collections, instead of being confusingly blank.</li>
<li><strong>More efficient scripts</strong>. By using wise caching tricks, we managed to decrease the time all scripts need to run by up to 60%! That means faster scanning for trophies, and less resource usage.</li>
<li>An elegant <strong>daemon launcher</strong>. Up till now starting/stopping the daemon required a complicated command to be run in terminal, now it&#8217;s just simple <em>accomplishments-daemon &#8211;start</em>! The launcher now also takes care about the pidfile and proper logging &#8211; which fixes many bugs some of you have been experiencing.</li>
<li>Ability to <strong>reload accomplishment collections</strong> from Viewer&#8217;s menu. This is really helpful if you are writing your own accomplishment; instead restarting the daemon, just choose &#8220;Reload&#8230;&#8221; in the Viewer, and your new accomplishment will be refreshed!</li>
</ul>
<h4>Changes in accomplishments collections</h4>
<ul>
<li>New accomplishments. Thanks to everyone who contributed them!
<ul>
<li><strong>Ubuntu Power Users</strong></li>
<li><strong>Gwibber &#8211; Added Identi.ca</strong></li>
<li><strong>Gwibber &#8211; Added Twitter</strong></li>
<li><strong>Gwibber &#8211; Facebook</strong></li>
<li><strong>Ubuntu Youth</strong></li>
<li><strong>Change Wallpaper</strong></li>
<li><strong>AskUbuntu Organizer</strong></li>
<li><strong>AskUbuntu Outspoken</strong></li>
<li><strong>AskUbuntu Scholar</strong></li>
<li><strong>AskUbuntu Supporter</strong></li>
</ul>
</li>
<li>A great number of <strong>grammar</strong> and <strong>typo</strong> <strong>fixes</strong>. Thanks to all contributors who found them!</li>
<li>Several accomplishment scripts were fixed.</li>
</ul>
<h4>Technical changes</h4>
<p>These are probably the ones most exciting for us, as for this release we&#8217;ve focused on getting the API really stable, and improving the general quality of code. I do know average user will not notice them, but they are important to keep whatever&#8217;s behind the curtain in good shape.</p>
<p>At this moment, we&#8217;ve done lots of cleaning up, and haven&#8217;t yet messed up the code with 0.4 features. If you are interested in getting involved and contributing some code,<strong> this is probably the best moment</strong> to do so, as the code is now shining! In such case, get in touch with us on <em>#ubuntu-accomplishments</em>, or e-mail me directly.</p>
<ul>
<li><strong>Unit tests.</strong> All API functions are now automatically tested, this reduces the chances of regressions and unwillingly broken interface. We have now a good collection of tests, that cover pretty much everything that is needed to ensure that on bugs will suddenly emerge in daemon&#8217;s API.</li>
<li><strong>Refactored API.</strong> Many things got renamed to use a common naming theme, we took care to use underscore prefixes correctly. There was also some PEP8 refactoring going on, which makes the code a pleasure to read :)</li>
<li><strong>Improved the way we use twistd framework.</strong> Lots of things were fixed in this matter, we no longer use tricky workarounds. That increases stability, and solves some bugs we&#8217;ve had with U1 and accomplishment notifications.</li>
<li><strong>Documentation.</strong> Huge amount of work was committed here &#8211; all API calls are fully documented, as you can see in daemon&#8217;s source or on <a href="http://213.138.100.229/ubuntu-accomplishments-daemon/docs/_build/html/index.html">these pages</a>.</li>
</ul>
<p>Plus a lot of general <strong>bug fixes</strong>.</p>
<p>That is pretty much it. <span style="text-decoration:underline;">Thanks again to everyone who made this release happen!</span></p>
<br />Filed under: <a href='http://rafalcieslak.wordpress.com/category/ubuntu/'>Ubuntu</a>  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rafalcieslak.wordpress.com&#038;blog=34919385&#038;post=142&#038;subd=rafalcieslak&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rafalcieslak.wordpress.com/2012/10/01/so-what-is-actually-new-in-ubuntu-accomplishments-0-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
