<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8259296173456573857</id><updated>2012-02-16T15:05:16.334-08:00</updated><category term='dev'/><category term='design'/><category term='sneak-peek'/><category term='glimpse'/><category term='testing'/><category term='experiment'/><category term='elementary'/><category term='icon'/><title type='text'>Shnatsel's experiments</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://shnatsel.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8259296173456573857/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://shnatsel.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sergey "Shnatsel" Davidoff</name><uri>http://www.blogger.com/profile/02794328350397829763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/--EwnNv19h-U/Tijzn8SvyDI/AAAAAAAAAxo/AGkUbampSzY/s220/avatar.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8259296173456573857.post-7197927758554921641</id><published>2011-11-07T10:23:00.000-08:00</published><updated>2011-11-08T13:46:50.405-08:00</updated><title type='text'>MiniWheatFS aka reliable ramdisks</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Filesystems stored in RAM seem to be around for years, but they still have a problem that plagues them: they are limited by the amount of free RAM + swap on the machine. It's like that by design, and at a glance it seems perfectly OK. Actually, it is not. Not many people actually make 100Gb swaps just to use a gigabyte of RAM filesystem. And while sometimes it's feasible for a server, for desktop systems it's definitely unacceptable.&lt;br&gt;&lt;br&gt;A &lt;a href="http://www.bigdbahead.com/?p=137"&gt;solution&lt;/a&gt; was proposed by Yves Trudeau in 2009. The idea is to use a &lt;a href="http://en.wikipedia.org/wiki/Union_filesystem"&gt;union filesystem&lt;/a&gt; that writes files to the ramdisk while it has enough free space, and if there's not enough space in the ramdisk in a particular file, write it to an ordinary filesystem (hard disk). Yves named his idea MiniWheatFS and even created a &lt;a href="https://launchpad.net/miniwheatfs"&gt;launchpad project&lt;/a&gt; for it. Looks like he was too lazy too search for decent tools to implement the idea (or maybe Google banned him? who knows), but the implementation he proposed (based on UnionFS-FUSE) is not workable even in 2011.&lt;br&gt;&lt;br&gt;Luckily, I'm not banned in Google search, so I've investigated some union filesystems that could make it work.&lt;br&gt;&lt;br&gt;&lt;a href="http://podgorny.cz/moin/UnionFsFuse"&gt;UnionFS-FUSE&lt;/a&gt;, as proposed by Yves, is still way underpowered for such things as of 2011. In our case it will always write to ramdisk, and when it runs out of space on it, returns write errors.&lt;br&gt;&lt;br&gt;&lt;a href="http://en.wikipedia.org/wiki/AuFS"&gt;AuFS&lt;/a&gt; is a great kernel-space implementation of a union filesystem. It supports several rules of choosing the directory in which the file will be created. Unfortunately, it doesn't have a rule for our use case (I've tested all the rules myself and then asked the developers, it really doesn't). I hope we will see a rule for our use case in the future - this is the most promising option because it doesn't have the insane overhead that FUSE has.&lt;br&gt;&lt;br&gt;&lt;a href="http://svn.uvw.ru/mhddfs/trunk/README"&gt;mhddfs&lt;/a&gt; is a FUSE-based filesystem that was designed to unite several hard disks into a single writable filesystem. I've managed to implement the MiniWheatFS concept using it, and ran some tests. I've created a 100mb tmpfs and copied files there using cp command. All the files were cached before writing. The average file size is 3Mb. Hard disk write speed is 60Mb/s (cheap 1Tb barracuda). Here are the results from time command:&lt;br&gt;&lt;br&gt;&lt;b&gt;300mb data&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;HDD&lt;/b&gt;&lt;br&gt;real 0m5.620s&lt;br&gt;user 0m0.010s&lt;br&gt;sys 0m0.710s&lt;br&gt;&lt;br&gt;&lt;b&gt;mhddfs&lt;/b&gt;&lt;br&gt;real 0m5.111s&lt;br&gt;user 0m0.020s&lt;br&gt;sys 0m0.960s&lt;br&gt;&lt;br&gt;&lt;b&gt;100 mb data&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;HDD&lt;/b&gt;&lt;br&gt;real 0m1.073s&lt;br&gt;user 0m0.000s&lt;br&gt;sys 0m0.270s&lt;br&gt;&lt;br&gt;&lt;b&gt;mhddfs&lt;/b&gt;&lt;br&gt;real 0m0.864s&lt;br&gt;user 0m0.000s&lt;br&gt;sys 0m0.280s&lt;br&gt;&lt;br&gt;&lt;b&gt;tmpfs&lt;/b&gt;&lt;br&gt;real 0m0.137s&lt;br&gt;user 0m0.000s&lt;br&gt;sys 0m0.120s&lt;br&gt;&lt;br&gt;As you can see, using mhddfs over a ramdisk provides performance comparable to writing data to the hard disk. The FUSE overhead is so insane that even with my blazingly fast Core2Quad CPU and slow disk I get very little performance boost even on large files before the ramdisk is filled up and a performance penalty when the ramdisk is full. I've ran some tests on lots of small files too, and it turned out that FUSE overhead by far defeats the HDD seek time, with mhddfs writes being 2 times slower than HDD writes.&lt;br&gt;&lt;br&gt;As you can see, such setups are possible but not feasible in Linux as of 2011, unless you have an EXTREMELY slow disk.&lt;br&gt;&lt;br&gt;Of course, I'd love to be proven wrong!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8259296173456573857-7197927758554921641?l=shnatsel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shnatsel.blogspot.com/feeds/7197927758554921641/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://shnatsel.blogspot.com/2011/11/miniwheatfs-aka-reliable-ramdisks.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8259296173456573857/posts/default/7197927758554921641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8259296173456573857/posts/default/7197927758554921641'/><link rel='alternate' type='text/html' href='http://shnatsel.blogspot.com/2011/11/miniwheatfs-aka-reliable-ramdisks.html' title='MiniWheatFS aka reliable ramdisks'/><author><name>Sergey "Shnatsel" Davidoff</name><uri>http://www.blogger.com/profile/02794328350397829763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/--EwnNv19h-U/Tijzn8SvyDI/AAAAAAAAAxo/AGkUbampSzY/s220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8259296173456573857.post-1435088735733120885</id><published>2011-08-26T15:03:00.000-07:00</published><updated>2011-11-08T13:50:13.952-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='icon'/><category scheme='http://www.blogger.com/atom/ns#' term='experiment'/><title type='text'>Web browser icon</title><content type='html'>&lt;b&gt;J&lt;/b&gt;ust a concept I wanted to explore.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://dl.dropbox.com/u/5279564/midori-2.svg" imageanchor="1" style=""&gt;&lt;img border="0" height="48" width="48" src="http://dl.dropbox.com/u/5279564/midori-2.svg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://dl.dropbox.com/u/5279564/midori-2.svg"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Initially made with Midori in mind, but it looks too technical for an elementary app.&lt;br /&gt;&lt;br /&gt;Based on DanRabbit's elementary icons, GPLv3. Feel free to remix etc.&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; check &lt;a href="http://elementaryos.org/journal/new-midori-icon-elementary"&gt;this page&lt;/a&gt; for the new Midori icon designed by DanRabbit himself!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8259296173456573857-1435088735733120885?l=shnatsel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shnatsel.blogspot.com/feeds/1435088735733120885/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://shnatsel.blogspot.com/2011/08/web-browser-icon.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8259296173456573857/posts/default/1435088735733120885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8259296173456573857/posts/default/1435088735733120885'/><link rel='alternate' type='text/html' href='http://shnatsel.blogspot.com/2011/08/web-browser-icon.html' title='Web browser icon'/><author><name>Sergey "Shnatsel" Davidoff</name><uri>http://www.blogger.com/profile/02794328350397829763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/--EwnNv19h-U/Tijzn8SvyDI/AAAAAAAAAxo/AGkUbampSzY/s220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8259296173456573857.post-236899177973054254</id><published>2011-07-22T02:35:00.000-07:00</published><updated>2011-07-22T11:24:52.272-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sneak-peek'/><category scheme='http://www.blogger.com/atom/ns#' term='elementary'/><category scheme='http://www.blogger.com/atom/ns#' term='dev'/><category scheme='http://www.blogger.com/atom/ns#' term='glimpse'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>We've Just Revolutionized Alpha Testing</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="c7"&gt;Think back to&amp;nbsp;the last time you wanted to look at a newer, unstable release of some app. Was it easy to do? Or was it a compilation from source full of mystical errors, booting a newer OS release from a live CD while fighting black-screen-on-boot bugs, or a terribly slow and awkward virtual machine installation (which still&amp;nbsp;didn’t make much sense because you couldn’t try it with your real data)? I’ll guess it was closer to the latter.&lt;/div&gt;&lt;div class="c7"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="c9 c7"&gt;&lt;/div&gt;&lt;div class="c7"&gt;Now, imagine you can try the absolutely latest version of any app, on your real data, safely, side-by-side with the stable version, without manual compilation, rebooting, virtualization and whatever else, in a few clicks. Sounds good? Sounds awesome to me. And now, it’s real.&lt;/div&gt;&lt;div class="c9 c7"&gt;&lt;/div&gt;&lt;h2 class="c7"&gt;&lt;a href="" name="h.o5p7m8m3aypr"&gt;&lt;/a&gt;Meet Glimpse&lt;/h2&gt;&lt;div class="c7"&gt;Yes, this dream is finally real, and it’s called &lt;a class="c1" href="http://www.google.com/url?q=https%3A%2F%2Flaunchpad.net%2Fglimpse&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGTJJhlJziAucIOyZ2nozJp1AH3HQ"&gt;Glimpse&lt;/a&gt;. The only thing that you will need is an ISO of Ubuntu Oneiric, but it can download or update one automatically. Then, after a one-time setup, viola! You can test any unstable apps, fully integrated into your desktop, not interfering with the stable versions of themselves. Safely sandboxed, and working with your real data. Wait, WHAT?!&lt;/div&gt;&lt;h2 class="c7"&gt;&lt;a href="" name="h.rhkqj1kej7i3"&gt;&lt;/a&gt;Are you kidding?&lt;/h2&gt;&lt;div class="c7"&gt;No. But it’s really funny to look at people who hear this for the first time! The trick is, the sandboxed apps are allowed to read your real data, but when they write to it or modify it in any other way, all the changes stay within their sandbox. Your real files on your system are left intact. And if you break some files in the sandbox, you can simply purge the modifications made in it and start over.&lt;/div&gt;&lt;div class="c7"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="c9 c7"&gt;&lt;/div&gt;&lt;div class="c7"&gt;For example, imagine you’re testing an unstable version of a cool music player...&lt;/div&gt;&lt;div class="c7"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="c9 c7"&gt;&lt;/div&gt;&lt;div class="c7"&gt;&lt;b&gt;Without Glimpse:&lt;/b&gt;&amp;nbsp;First, you spend lots of time on setting up the build environment (again?! how do those guys manage to change it so quickly?!), including unstable version of compiler that breaks all other builds in the system. Then, when you finally manage to try the player for 10 minutes, you realize that the “improved writing metadata to files” has just broken half of your music library. You’re out of luck or have to restore a manual backup (if one exists).&lt;/div&gt;&lt;div class="c7"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="c9 c7"&gt;&lt;/div&gt;&lt;div class="c7"&gt;&lt;b&gt;With Glimpse:&lt;/b&gt;&amp;nbsp;You open Glimpse, click “Update sandbox”, and the latest version of the player arrives in a few minutes, not hours. And if you find that all the music files in the sandbox are broken, you think “thanks to Glimpse, my files are safe,” click the “Purge sandbox files” button, and your original music is available in the sandbox again.&lt;/div&gt;&lt;h2 class="c7"&gt;&lt;a href="" name="h.7cdzxxpvo3uz"&gt;&lt;/a&gt;How on Jupiter did you do that?!&lt;/h2&gt;&lt;div class="c7"&gt;You’ll laugh, but all the technology was already there, all I had to do is to “connect the dots.”&lt;/div&gt;&lt;div class="c7"&gt;It’s enough to say that Glimpse is written entirely in BASH. For the real work it relies on:&lt;/div&gt;&lt;ol class="c8" start="1"&gt;&lt;li class="c3"&gt;&lt;a class="c1" href="http://www.google.com/url?q=http%3A%2F%2Fzsync.moria.org.uk%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGCMjRhY-Cukr68qkwhsd-Dopa8vw"&gt;zsync&lt;/a&gt;&amp;nbsp;to download only those parts of ISO that have changed instead of pulling the whole 700Mb monster every time&lt;/li&gt;&lt;li class="c3"&gt;&lt;a class="c1" href="http://www.google.com/url?q=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FChroot&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGPVzHlVS3PuV5tIxJ1LhKuvHtK-A"&gt;chroot&lt;/a&gt;&amp;nbsp;for creating an isolated environment (instead of virtualization)&lt;/li&gt;&lt;li class="c3"&gt;&lt;a class="c1" href="http://www.google.com/url?q=http%3A%2F%2Fuck.sourceforge.net%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEtOgawAymhn1TOLvkTEVX9XdYefw"&gt;Ubuntu Customization Kit&lt;/a&gt;&amp;nbsp;and its awesome library to avoid reinventing the wheel&lt;/li&gt;&lt;li class="c3"&gt;&lt;a class="c1" href="http://www.google.com/url?q=https%3A%2F%2Fhelp.launchpad.net%2FPackaging%2FSourceBuilds%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGGN3HB5OY8JH-tRreJhgmpTY11qw"&gt;Launchpad Recipes&lt;/a&gt;&amp;nbsp;to get the absolutely latest code built, packaged and gift-wrapped&lt;/li&gt;&lt;li class="c3"&gt;&lt;a class="c1" href="http://www.google.com/url?q=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FAufs&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNE4rtluhD7iC02DkbmUnuHSQqga4g"&gt;AuFS&lt;/a&gt;&amp;nbsp;to be able write to home directory and keep the real files intact&lt;/li&gt;&lt;li class="c3"&gt;&lt;a class="c1" href="http://www.google.com/url?q=https%3A%2F%2Flaunchpad.net%2Fgaffel&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNHPOWwkyE_Slg6ndMJjWuGZ0klwnQ"&gt;Gaffel&lt;/a&gt;&amp;nbsp;and &lt;a class="c1" href="http://www.google.com/url?q=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FZenity&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFB3conl6A3-TJqnhsgE4C1123-7A"&gt;Zenity&lt;/a&gt;&amp;nbsp;to have a simple GTK2/GTK3 user interface&lt;/li&gt;&lt;/ol&gt;&lt;div class="c7"&gt;Most of these technologies (except Gaffel, which was written just now with Glimpse in mind, and recipes, that left beta several months ago) have been available for a few years already. It’s strange that I’m inventing Glimpse, and nobody did this before me. The only explanation I can make up is “others got stuck in polishing chroot”, but it doesn’t sound very convincing.&lt;/div&gt;&lt;h2 class="c7"&gt;&lt;a href="" name="h.u3udv5vitehm"&gt;&lt;/a&gt;Limitations&lt;/h2&gt;&lt;div class="c7"&gt;Everything has them, and you’d better know them before you meet them.&lt;/div&gt;&lt;ol class="c8" start="1"&gt;&lt;li class="c3"&gt;Glimpse is &lt;b&gt;not&lt;/b&gt;&amp;nbsp;yet accepted as an official elementary app because of its poor GUI. So you probably will not get any support from elementary developers.&lt;/li&gt;&lt;li class="c3"&gt;Whatever you run in Glimpse, it uses the host’s (your system’s) kernel. By design.&lt;/li&gt;&lt;li class="c3"&gt;Some system directories are not really sandboxed&amp;nbsp;- they’re mounted as is. In most cases it doesn’t matter, but if you’re aiming for mass destruction, be warned that these directories are &lt;b&gt;not&lt;/b&gt;&amp;nbsp;sandboxed:&lt;/li&gt;&lt;/ol&gt;&lt;ul class="c11" start="1"&gt;&lt;li class="c5"&gt;/dev/shm&lt;/li&gt;&lt;li class="c5"&gt;/proc&lt;/li&gt;&lt;li class="c5"&gt;/sys&lt;/li&gt;&lt;li class="c5"&gt;/dev/pts&lt;/li&gt;&lt;li class="c5"&gt;/var/run&lt;/li&gt;&lt;li class="c5"&gt;/tmp&lt;/li&gt;&lt;/ul&gt;&lt;ol class="c8" start="4"&gt;&lt;li class="c3"&gt;Exploits targeted to breaking chroot jail can break Glimpse sandboxing too. It will never happen on a desktop system, but if you’re going to test the cutting-edge server exploits, do it in a virtual machine.&lt;/li&gt;&lt;li class="c3"&gt;An encrypted home folder can not be accessed from the sandbox. &lt;a class="c1" href="http://www.google.com/url?q=https%3A%2F%2Fbugs.launchpad.net%2Fglimpse%2F%2Bbug%2F810929&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFtAiOBTRnyRfyqszR6HMK5AUfMmw"&gt;Any help on fixing this is appreciated&lt;/a&gt;.&lt;/li&gt;&lt;li class="c3"&gt;The elementary project provides daily builds for most of its apps “out of the box,” but other apps will be at their versions from the current unstable Ubuntu. You’ll have to add a &lt;a class="c1" href="https://wiki.ubuntu.com/DailyBuilds/AvailableDailyBuilds"&gt;daily build PPA&lt;/a&gt;&amp;nbsp;for each app you want to be at bleeding-edge version.&lt;/li&gt;&lt;li class="c3"&gt;One has to write a separate profile for each new OS one wants to sandbox. Complexity may vary. Running Fedora or openSUSE would require quite some tweaks, but it’s not that hard when there are two working examples already.&lt;/li&gt;&lt;li class="c3"&gt;Sandboxed apps try to use host’s theme settings, but they don’t have access to host’s theme files. Switch your host system’s theme to elementary in advance (unless you like&amp;nbsp;that old Windows 95-style interface!).&lt;/li&gt;&lt;/ol&gt;&lt;h2 class="c7"&gt;&lt;a href="" name="h.8231ufgtj9lc"&gt;&lt;/a&gt;Try it yourself&lt;/h2&gt;&lt;div class="c7"&gt;The user interface is rather ambiguous, but usable, and the underlying technology is rather stable by now (I use it all the time). Glimpse runs on Ubuntu Maverick and up. elementary OS Jupiter is also supported, so now you can finally get Marlin, BeatBox, Pantheon Shell and whatnot in Jupiter. At the moment of writing this the package containing Ubuntu profile hasn’t built yet due to a Launchpad lag, and Gaffel doesn’t show OS logos, but it should be fixed in a few hours.&lt;/div&gt;&lt;div class="c7"&gt;Glimpse is not an official elementary project yet, which means that you probably won’t get any support from elementary developers. If you still wish to install Glimpse, run:&lt;/div&gt;&lt;div class="c7" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo add-apt-repository ppa:glimpse-hackers/stable&lt;/div&gt;&lt;div class="c7" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get update&lt;/div&gt;&lt;div class="c7" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get install glimpse glimpse-profile-elementary glimpse-profile-ubuntu&lt;/div&gt;&lt;div class="c7"&gt;Then find it in Applications &amp;gt; System and enjoy!&lt;/div&gt;&lt;h2 class="c7"&gt;&lt;a href="" name="h.godrs8exmyzt"&gt;&lt;/a&gt;Hacking&lt;/h2&gt;&lt;div class="c7"&gt;All code is stored in Launchpad: &lt;a class="c1" href="https://code.launchpad.net/glimpse"&gt;https://code.launchpad.net/glimpse&lt;/a&gt;&lt;/div&gt;&lt;div class="c7"&gt;The core is very minimal, less than 50 lines of BASH. The real work is done by plugins. And, you know, having a Fedora plugin would be cool ;)&lt;/div&gt;&lt;div class="c7"&gt;Please &lt;a class="c1" href="http://www.blogger.com/post-create.g?blogID=8259296173456573857"&gt;report&lt;/a&gt;&amp;nbsp;any bugs you encounter.&lt;/div&gt;&lt;div class="c7"&gt;Fixing &lt;a class="c1" href="https://bugs.launchpad.net/glimpse"&gt;existing bugs&lt;/a&gt;&amp;nbsp;is a good idea too.&lt;/div&gt;&lt;div class="c7"&gt;The current UI supports translations, but I won’t upload the translation files anywhere because it was deemed unsatisfactory and I don’t want people to waste time on useless work.&lt;/div&gt;&lt;div class="c7"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="c9 c7"&gt;&lt;/div&gt;&lt;div class="c7"&gt;May the chroot be with you.&lt;br /&gt;Happy testing!&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;Bonus section: screenshots&lt;/h2&gt;&lt;a href="http://pix.toile-libre.org/upload/original/1311345752.png"&gt;Sandbox chooser and app launcher&lt;/a&gt;&lt;br /&gt;&lt;a href="https://launchpadlibrarian.net/75758753/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA-35.png"&gt;Sandbox first run dialog&lt;/a&gt;&lt;br /&gt;&lt;a href="http://pix.toile-libre.org/upload/original/1311346069.png"&gt;Marlin with GTK3 theming and overlay scrollbars out-of-the-box&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8259296173456573857-236899177973054254?l=shnatsel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shnatsel.blogspot.com/feeds/236899177973054254/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://shnatsel.blogspot.com/2011/07/weve-just-revolutionized-alpha-testing.html#comment-form' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8259296173456573857/posts/default/236899177973054254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8259296173456573857/posts/default/236899177973054254'/><link rel='alternate' type='text/html' href='http://shnatsel.blogspot.com/2011/07/weve-just-revolutionized-alpha-testing.html' title='We&apos;ve Just Revolutionized Alpha Testing'/><author><name>Sergey "Shnatsel" Davidoff</name><uri>http://www.blogger.com/profile/02794328350397829763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/--EwnNv19h-U/Tijzn8SvyDI/AAAAAAAAAxo/AGkUbampSzY/s220/avatar.jpg'/></author><thr:total>6</thr:total></entry></feed>
