<?xml version="1.0"?>
<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="http://gstreamer.freedesktop.org/planet/">
	<title>Planet GStreamer</title>
	<link>http://gstreamer.freedesktop.org/planet/</link>
	<description>Planet GStreamer - http://gstreamer.freedesktop.org/planet/</description>

	<items>
		<rdf:Seq>
			<rdf:li rdf:resource="http://gstreamer.freedesktop.org/news/#2013-05-21T23:00:00Z" />
			<rdf:li rdf:resource="http://thomas.apestaart.org/log/?p=1550" />
			<rdf:li rdf:resource="http://www.advogato.org/person/ensonic/diary.html?start=139" />
			<rdf:li rdf:resource="http://thomas.apestaart.org/log/?p=1545" />
			<rdf:li rdf:resource="http://wingolog.org/2013/05/08/generators-in-v8" />
			<rdf:li rdf:resource="http://thomas.apestaart.org/log/?p=1537" />
			<rdf:li rdf:resource="http://thomas.apestaart.org/log/?p=1533" />
			<rdf:li rdf:resource="http://jeff.ecchi.ca/blog/?p=2405" />
			<rdf:li rdf:resource="http://gstreamer.freedesktop.org/news/#2013-04-26T14:00:00Z" />
			<rdf:li rdf:resource="http://blogs.gnome.org/uraeus/?p=2140" />
			<rdf:li rdf:resource="http://blog.mikeasoft.com/?p=618" />
			<rdf:li rdf:resource="http://wingolog.org/2013/04/18/inside-full-codegen-v8s-baseline-compiler" />
			<rdf:li rdf:resource="http://jeff.ecchi.ca/blog/?p=2397" />
			<rdf:li rdf:resource="http://arunraghavan.net/?p=1426" />
			<rdf:li rdf:resource="http://www.advogato.org/person/ensonic/diary.html?start=138" />
			<rdf:li rdf:resource="http://blogs.gnome.org/uraeus/?p=2133" />
			<rdf:li rdf:resource="http://jeff.ecchi.ca/blog/?p=2392" />
			<rdf:li rdf:resource="http://wingolog.org/2013/04/04/thoughts-on-blink" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-977684764667858073.post-2470648344711224589" />
			<rdf:li rdf:resource="http://jeff.ecchi.ca/blog/?p=2386" />
			<rdf:li rdf:resource="http://base-art.net/Articles/123/" />
			<rdf:li rdf:resource="http://wingolog.org/2013/03/26/sexuality-and-sexism" />
			<rdf:li rdf:resource="http://jeff.ecchi.ca/blog/?p=2381" />
			<rdf:li rdf:resource="http://gstreamer.freedesktop.org/news/#2013-03-22T17:40:00Z" />
			<rdf:li rdf:resource="http://gstreamer.freedesktop.org/news/#2013-03-22T16:00:00Z" />
			<rdf:li rdf:resource="http://zee-nix.blogspot.com/feeds/3409133375404325321/comments/default" />
			<rdf:li rdf:resource="http://www.advogato.org/person/ensonic/diary.html?start=137" />
			<rdf:li rdf:resource="http://blog.mikeasoft.com/?p=598" />
			<rdf:li rdf:resource="http://wingolog.org/2013/02/25/on-generators" />
			<rdf:li rdf:resource="http://wingolog.org/2013/02/16/opengl-particle-simulation-in-guile" />
			<rdf:li rdf:resource="http://www.advogato.org/person/ensonic/diary.html?start=136" />
			<rdf:li rdf:resource="http://guij.emont.org/blog/2013/02/10/migrating-to-jekyll" />
			<rdf:li rdf:resource="http://wingolog.org/2013/02/04/knocking-on-private-back-doors-with-the-web-browser" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-977684764667858073.post-8662099044968413313" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-977684764667858073.post-3924434265297821536" />
			<rdf:li rdf:resource="http://thomas.apestaart.org/log/?p=1529" />
			<rdf:li rdf:resource="http://thomas.apestaart.org/log/?p=1527" />
			<rdf:li rdf:resource="http://wingolog.org/2013/01/07/an-opinionated-guide-to-scheme-implementations" />
			<rdf:li rdf:resource="http://www.advogato.org/person/ensonic/diary.html?start=135" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-977684764667858073.post-3646838049593350613" />
			<rdf:li rdf:resource="http://arunraghavan.net/?p=1412" />
			<rdf:li rdf:resource="http://base-art.net/Articles/122/" />
			<rdf:li rdf:resource="http://wingolog.org/2012/12/12/corps-bespoke-text-codecs" />
			<rdf:li rdf:resource="http://wingolog.org/2012/12/05/geneva" />
			<rdf:li rdf:resource="http://zee-nix.blogspot.com/feeds/8844118172235900197/comments/default" />
			<rdf:li rdf:resource="http://felipec.wordpress.com/?p=1377" />
			<rdf:li rdf:resource="http://www.advogato.org/person/ensonic/diary.html?start=134" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-977684764667858073.post-4222597467555828089" />
			<rdf:li rdf:resource="http://arunraghavan.net/?p=1380" />
			<rdf:li rdf:resource="http://abock.org/?p=518" />
			<rdf:li rdf:resource="http://felipec.wordpress.com/?p=1357" />
			<rdf:li rdf:resource="http://www.advogato.org/person/ensonic/diary.html?start=133" />
			<rdf:li rdf:resource="http://codeanticode.wordpress.com/?p=1674" />
			<rdf:li rdf:resource="http://blog.mikeasoft.com/?p=586" />
			<rdf:li rdf:resource="http://www.advogato.org/person/ensonic/diary.html?start=132" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-2750852840563144504.post-3687123827138394966" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8516651997079965154.post-7806435650452973002" />
			<rdf:li rdf:resource="http://wingolog.org/2012/08/15/quasiconf-2012-lisp-froscon" />
			<rdf:li rdf:resource="http://wingolog.org/2012/08/15/lakewards" />
			<rdf:li rdf:resource="http://www.advogato.org/person/ensonic/diary.html?start=131" />
		</rdf:Seq>
	</items>
</channel>

<item rdf:about="http://gstreamer.freedesktop.org/news/#2013-05-21T23:00:00Z">
	<title>GStreamer: GStreamer Conference 2013: Registration now open, Call for Papers</title>
	<link>http://gstreamer.freedesktop.org/news/#2013-05-21T23:00:00Z</link>
	<content:encoded>&lt;p&gt;&lt;i&gt;About the GStreamer Conference&lt;/i&gt;&lt;/p&gt;&lt;p&gt;
The GStreamer Conference 2013 will take place from 22-23 October 2013 in
Edinburgh (UK), and will be co-hosted with the Embedded Linux Conference Europe
and the Automotive Linux Summit.
        &lt;/p&gt;&lt;p&gt;
It is a conference for developers, decision-makers, and anyone else interested
in the GStreamer multimedia framework and open source multimedia.
        &lt;/p&gt;&lt;p&gt;&lt;i&gt;Registration now open&lt;/i&gt;&lt;/p&gt;&lt;p&gt;
You can now register for the GStreamer Conference 2013 on the
&lt;a href=&quot;http://gstreamer.freedesktop.org/conference/2013/&quot;&gt;conference website&lt;/a&gt;.
        &lt;/p&gt;&lt;p&gt;&lt;i&gt;Call for Papers&lt;/i&gt;&lt;/p&gt;&lt;p&gt;
The initial submission needs to be only a couple of paragraphs describing the
talk you want to give and the desired length of your talk (please allow for
5-10 minutes of questions at the end as well).
        &lt;/p&gt;&lt;p&gt;
Talks can be on almost anything multimedia related, ranging from talks about
applications to challenges in the lower levels in the stack or hardware.
        &lt;/p&gt;&lt;p&gt;
Please send all proposals to &lt;a href=&quot;mailto:gstreamer-conference@lists.freedesktop.org&quot;&gt;gstreamer-conference@&lt;!-- --&gt;lists.freedesktop.org&lt;/a&gt;.
        &lt;/p&gt;</content:encoded>
	<dc:date>2013-05-21T23:00:00+00:00</dc:date>
</item>
<item rdf:about="http://thomas.apestaart.org/log/?p=1550">
	<title>Thomas Vander Stichele: Organizing photo libraries</title>
	<link>http://thomas.apestaart.org/log/?p=1550</link>
	<content:encoded>&lt;p&gt;The weather&amp;#8217;s picking up so it&amp;#8217;s time for spring cleaning around the house.  When I moved back to Barcelona three years ago I took with me my old analogue photos and negatives, with the idea of sorting through them at some point and getting them digitized.  And while I&amp;#8217;m at it, maybe it&amp;#8217;s time to pull all my various folders of photos together too and organize them.&lt;/p&gt;
&lt;p&gt;Well, I finally started.  I grouped the negatives, labeled them by year, put them in individual envelopes, and handed them off to a professional lab to scan them after doing a quick test run on one set (which turned out great, but it&amp;#8217;s *really* annoying me that they scan to JPEG by default, charge 40% extra for TIFF, and use a non-multiple-of-8 resolution to scan at which means I can&amp;#8217;t losslessly rotate the negatives.  Yes, I&amp;#8217;m anal.)&lt;/p&gt;
&lt;p&gt;So now I pulled together all my various folders of photos, and before I start doing tagging and stuff like that, I want to organize them in a decent folder layout.  Googling for ideas pretty much suggests that the way to go is&lt;/p&gt;
&lt;p&gt;YYYY/MM/DD&lt;/p&gt;
&lt;p&gt;with possibly some description together with the DD&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m not really happy about that, however, because there are certain things I&amp;#8217;d like to be able to do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;easily see where photos come from &amp;#8211; did I make them ? did I get them from someone ? Did I download them from Facebook ?&lt;/li&gt;
&lt;li&gt;Are these original files from a camera without editing ?&lt;/li&gt;
&lt;li&gt;Are these the original scans ? From negatives ? From actual photos ? Or are they retouched, rotated, denoised, &amp;#8230;&lt;/li&gt;
&lt;li&gt;Are these photos SFW ? Can I point my media center slideshow to this directory and have it safely show any photos under it ? (What do you mean, you&amp;#8217;ve never snowboarded at night in only your underwear, and mooning the photographer ?) Or maybe not even SFW, but simply watchable and reasonable quality or subject material?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I realize some of these issues can not be resolved simply with a directory layout.  But I&amp;#8217;m sure some of you must have had similar issues or come up with a slightly better layout ? &lt;/p&gt;
&lt;p&gt;Point me in the right direction please.&lt;/p&gt;</content:encoded>
	<dc:date>2013-05-18T11:51:02+00:00</dc:date>
</item>
<item rdf:about="http://www.advogato.org/person/ensonic/diary.html?start=139">
	<title>Stefan Kost: 15 May 2013</title>
	<link>http://www.advogato.org/person/ensonic/diary.html?start=139</link>
	<content:encoded>&lt;b&gt;buzztard is now buzztrax&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
We applied as an organisation to take part in the Google Summer of Code program, but got rejected mainly due to the project name. As this was not the first time people where uncomfortable with the name, we renamed the project - buzztard is now called buzztrax. The homepage with the wiki and wordpress already got moved. The renamed codebase is online at &lt;a href=&quot;https://github.com/Buzztrax&quot; target=&quot;_blank&quot;&gt;github&lt;/a&gt;. The mailing lists have been migrated to buzztrax.org. A few things still need to be fixed (e.g. file releases). &lt;br /&gt;
&lt;br /&gt;
Besides the renaming there are also some improvements on the code side. I am probably the last one to discover the g_signal_handlers_disconnect_by_* macros. Using these made the code a bit leaner. I also worked on the level-meter features. I did some cleanups on the widget. The syncing code is more efficient as we listen to sync-messages on the gstreamer side to avoid another thread round trip. Song rendering can disabled the level-meters for less noise on the screen and some performance savings. The song-rendering now uses the TOC support in gstreamer-1.0. That means that the labels of a song (intro, chorus, break, ...) will end up in wav and flac files right now. When other formats support toc, this will automatically work for those formats too. The flag in ogg muxing got fixed in upstream and now works for us again.&lt;br /&gt;
&lt;br /&gt;
56 files changed, 715 insertions(+), 631 deletions(-)&lt;br /&gt;</content:encoded>
	<dc:date>2013-05-15T12:10:04+00:00</dc:date>
</item>
<item rdf:about="http://thomas.apestaart.org/log/?p=1545">
	<title>Thomas Vander Stichele: morituri and Hidden Track One Audio</title>
	<link>http://thomas.apestaart.org/log/?p=1545</link>
	<content:encoded>&lt;p&gt;I have tomorrow (saturday) blocked out for a whole day of &lt;a href=&quot;https://thomas.apestaart.org/morituri/trac&quot;&gt;morituri&lt;/a&gt; hacking as I will be home alone.&lt;/p&gt;
&lt;p&gt;One of the things a lot of morituri users are puzzled by is its relentless drive to extract every single sample of audio from the CD.  Currently, even if it&amp;#8217;s a really short pre-gap, and most likely just an inaccurate master or burn, with no useful audio in it.&lt;/p&gt;
&lt;p&gt;For me, that was a design goal of morituri &amp;#8211; I want to be able to exactly reproduce a CD as is.  That is to say, ripping a CD should extract *all* audio from the CD, and it should be possible to make a copy of that CD and then rip that copy, and end up with exactly the same result as from the original CD.  (I&amp;#8217;m sure there&amp;#8217;s a fancy scientific term for that that I can&amp;#8217;t remember right now)&lt;/p&gt;
&lt;p&gt;To a lot of other people, it seems to be annoying and they don&amp;#8217;t like having those small almost empty files lying around.&lt;/p&gt;
&lt;p&gt;So I thought I&amp;#8217;d do something about that, and that it might be useful as well to analyze my current collection of tracks and figure out what&amp;#8217;s in there.  Maybe I can find some hidden gems that I hadn&amp;#8217;t noticed before?&lt;/p&gt;
&lt;p&gt;So I added a quick task to morituri that calculates the maximum sample value (I didn&amp;#8217;t want to use my own level element in GStreamer for this as I wanted to make sure it was actual digital zero; this should be done in an element instead though, but I preferred the five minute hack for this one).&lt;/p&gt;
&lt;p&gt;And then I ran:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
rip debug maxsample /mnt/nas/media/audio/rip/morituri/own/album/*/00*flac
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Sadly, that turned up 0 as the biggest sample for all these tracks!&lt;/p&gt;
&lt;p&gt;Wait, what? I spent all that time on getting those secret tracks ripped just to get none? That&amp;#8217;s not possible! I know some of those tracks!&lt;/p&gt;
&lt;p&gt;Maybe the algorithm is wrong.  Nope, it works fine on all the regular tracks.&lt;/p&gt;
&lt;p&gt;Oh, crap.  Maybe morituri has been ripping silence all this time because my CD drive can&amp;#8217;t get that data off.  Yikes, that would be a bit of egg on my face.&lt;/p&gt;
&lt;p&gt;No, it works if I check that Bloc Party track I know about.&lt;/p&gt;
&lt;p&gt;Ten minutes of staring at the screen to realize that, while I was outputting names from a variable from the for loop over my arguments, the track I was actually passing to the task was always the first one.  Duh.  Problem solved.&lt;/p&gt;
&lt;p&gt;As for what I found in my collection:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a cute radio jingle that brought back memories from a live bootleg I had made myself of Bloem.  That&amp;#8217;s from over ten years ago, but that must have been around the time I learned about the existence of HTOA and wanted to get one in&lt;/li&gt;
&lt;li&gt;found unknown HTOA tracks on Art Brut&amp;#8217;s Bang Bang Rock &amp;#038; Roll, Mew&amp;#8217;s Half the world is watching me; not their best stuff&lt;/li&gt;
&lt;li&gt;soundscapey or stagesetting tracks on QOTSA&amp;#8217;s Songs for the Deaf, Motorpsycho&amp;#8217;s Angels and Daemons at play And Blissard; not that worth it (the Blissard track was ok, but really quiet)&lt;/li&gt;
&lt;li&gt;
Pulp hid a single piano chord in a 2 second pre-gap on This is Hardcore; very curious.  It&amp;#8217;s not an intro to the first track, because it doesn&amp;#8217;t fit with the sound at all.
&lt;/li&gt;
&lt;li&gt;Damien Rice hid a demo version of 9 Crimes (the first track) in the pregap; instead of piano and female vocals, he plays guitar and sings all the parts.&lt;/li&gt;
&lt;li&gt;Got reacquainted with my favourite HTOA tracks: the orchestral quasi-wordless medley on the Luke Haines/Das Capital disc; the first Bloc Party album with a beautiful instrumental (up there with the hidden track at the end of Placebo&amp;#8217;s first album; both bands delivering an atypical but stunning moodscape; the beautiful cover of Ben Kenobi&amp;#8217;s Theme by Arab Strap on the Cherubs EP (no idea why that landed in my album dir, that needs to be fixed); the silly Soulwax skit for their second album.
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Of course, Wikipedia has the &lt;a href=&quot;http://en.wikipedia.org/wiki/List_of_albums_with_tracks_hidden_in_the_pregap&quot;&gt;last word on everything&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I note that they think Pulp recorded a cymbal, not a piano.  And now that I see the title of the QOTSA hidden track, I get the joke I think.&lt;/p&gt;
&lt;p&gt;In total, on my album collection of 1564 full CD&amp;#8217;s, I have 171 HTOA&amp;#8217;s ripped, 138 tracks of pure digital silence, and only about 11 are actually useful tracks.&lt;/p&gt;
&lt;p&gt;I expected to find more gems in my collection.  I&amp;#8217;ll go through ep&amp;#8217;s, singles and compilations next just to be sure.&lt;/p&gt;
&lt;p&gt;But with this code in hand, maybe it&amp;#8217;s time to add something to morituri to save the silent HTOA tracks as pure .cue information.&lt;/p&gt;</content:encoded>
	<dc:date>2013-05-10T20:08:31+00:00</dc:date>
</item>
<item rdf:about="http://wingolog.org/2013/05/08/generators-in-v8">
	<title>Andy Wingo: generators in v8</title>
	<link>http://wingolog.org/archives/2013/05/08/generators-in-v8</link>
	<content:encoded>&lt;div&gt;&lt;p&gt;Hey y'all, ES6 generators have landed in V8!  Excellent!&lt;/p&gt;&lt;p&gt;Many of you know what that means already, but for those of you that don't, a little story.&lt;/p&gt;&lt;p&gt;A few months ago I was talking with Andrew Paprocki over at &lt;a href=&quot;http://bloomberg.com/&quot;&gt;Bloomberg&lt;/a&gt;.  They use JavaScript in all kinds of ways over there, and as is usually the case in JS, it often involves communicating with remote machines.  This happens on the server side and on the client side.  JavaScript has some great implementations, but as a language it doesn't make asynchronous communication particularly easy.  Sure, you can do anything you want with node.js, but it's pretty easy to get stuck in callback hell waiting for data from the other side.&lt;/p&gt;&lt;p&gt;Of course if you do a lot of JS you learn ways to deal with it.  The eponymous &lt;a href=&quot;http://callbackhell.com/&quot;&gt;Callback Hell&lt;/a&gt; site lists some, and lately many people think of &lt;a href=&quot;http://ianbishop.github.io/blog/2013/01/13/escape-from-callback-hell/&quot;&gt;Promises&lt;/a&gt; as the answer.  But it would be nice if sometimes you could write a function and have it just suspend in the middle, wait for your request to the remote computer to come through, then continue on.&lt;/p&gt;&lt;p&gt;So Andrew asked if me if we could somehow make asynchronous programming easier to write and read, maybe by implementing something like C#'s &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/vstudio/hh156528.aspx&quot;&gt;&lt;tt&gt;await&lt;/tt&gt;&lt;/a&gt; operator in the V8 JavaScript engine.  I told him that the way into V8 was through standards, but that fortunately the upcoming ECMAScript 6 standard was likely to include an equivalent to &lt;tt&gt;await&lt;/tt&gt;: generators.&lt;/p&gt;&lt;p&gt;&lt;b&gt;ES6 generators&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Instead of returning a value, when you first call a generator, it returns an iterator:&lt;/p&gt;&lt;pre&gt;
// notice: function* instead of function
function* values() {
  for (var i = 0; i &amp;lt; arguments.length; i++) {
    yield arguments[i];
  }
}

var o = values(1, 2, 3);  // &lt;i&gt;=&amp;gt;&lt;/i&gt; [object Generator]
&lt;/pre&gt;&lt;p&gt;Calling &lt;tt&gt;next&lt;/tt&gt; on the iterator resumes the generator, lets it run until the next &lt;tt&gt;yield&lt;/tt&gt; or &lt;tt&gt;return&lt;/tt&gt;, and then suspends it again, resulting in a value:&lt;/p&gt;&lt;pre&gt;
o.next(); // &lt;i&gt;=&amp;gt;&lt;/i&gt; { value: 1, done: false }
o.next(); // &lt;i&gt;=&amp;gt;&lt;/i&gt; { value: 2, done: false }
o.next(); // &lt;i&gt;=&amp;gt;&lt;/i&gt; { value: 3, done: false }
o.next(); // &lt;i&gt;=&amp;gt;&lt;/i&gt; { value: undefined, done: true }
&lt;/pre&gt;&lt;p&gt;Maybe you're the kind of person that likes imprecise, incomplete, overly abstract analogies.  Yes?  Well generators are like functions, with their bodies taken to the first derivative.  Calling &lt;tt&gt;next&lt;/tt&gt; integrates between two yield points.  Chew on that truthy nugget!&lt;/p&gt;&lt;p&gt;&lt;b&gt;asynchrony&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Anyway!  Supending execution, waiting for something to happen, then picking up where you left off: put these together and you have a nice facility for asynchronous programming.  And happily, it works really well with promises, a tool for asynchrony that lots of JS programmers are using these days.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/kriskowal/q&quot;&gt;Q&lt;/a&gt; is a popular promises library for JS.  There are some &lt;a href=&quot;https://npmjs.org/package/q&quot;&gt;250+&lt;/a&gt; packages that depend on it in NPM, node's package manager.  So cool, let's take their example of the &quot;Pyramid of Doom&quot; from the github page:&lt;/p&gt;&lt;pre&gt;
step1(function (value1) {
    step2(value1, function(value2) {
        step3(value2, function(value3) {
            step4(value3, function(value4) {
                // Do something with value4
            });
        });
    });
});
&lt;/pre&gt;&lt;p&gt;The promises solution does at least fix the pyramid problem:&lt;/p&gt;&lt;pre&gt;
Q.fcall(step1)
.then(step2)
.then(step3)
.then(step4)
.then(function (value4) {
    // Do something with value4
}, function (error) {
    // Handle any error from step1 through step4
})
.done();
&lt;/pre&gt;&lt;p&gt;But to my ignorant eye, some kind of solution involving a straight-line function would be even better.  Remember what generators do: they suspend computation, wait for someone to pass back in a result, and then continue on.  So whenever you would register a callback, whenever you would chain a &lt;tt&gt;then&lt;/tt&gt; onto your promise, instead you suspend computation by yielding.&lt;/p&gt;&lt;pre&gt;
Q.async(function* () {
  try {
    var value1 = yield step1();
    var value2 = yield step2(value1);
    var value3 = yield step3(value2);
    var value4 = yield step4(value3);
    // Do something with value4
  } catch (e) {
    // Handle any error from step1 through step4
  }
});
&lt;/pre&gt;&lt;p&gt;And for a super-mega-bonus, we actually get to use try and catch to handle exceptions, just as Gods and Brendan intended.&lt;/p&gt;&lt;p&gt;Now I know you're a keen reader and there are two things that you probably noticed here.  One is, where are the promises, and where are the callbacks?  Who's making these promises anyway?  Well you probably saw already in the second example that using promises well means that you have functions that return promises instead of functions that take callbacks.  The form of functions like &lt;tt&gt;step1&lt;/tt&gt; and such are different when you use promises.  So in a way the comparison between the pyramid and the promise isn't quite fair because the functions aren't quite the same.  But we're all reasonable people so we'll deal with it.&lt;/p&gt;&lt;p&gt;Note that it's not actually necessary that any of the &lt;tt&gt;step&lt;i&gt;N&lt;/i&gt;&lt;/tt&gt; functions return promises.  The promises library will lift a value to a promise if needed.&lt;/p&gt;&lt;p&gt;The second and bigger question would be, how does the generator resume?  Of course you've already seen the answer: the whole generator function is decorated by &lt;a href=&quot;https://github.com/kriskowal/q/tree/master/examples/async-generators&quot;&gt;&lt;tt&gt;Q.async&lt;/tt&gt;&lt;/a&gt;, which takes care of resuming the generator when the yielded promises are fulfilled.&lt;/p&gt;&lt;p&gt;You don't have to use generators of course, and using them with Q does mean you have to understand more things: not only standard JavaScript, but newfangled features, and promises to boot.  Well, if it's not your thing, that's cool.  But it seems to me that the widespread appreciation of &lt;tt&gt;await&lt;/tt&gt; in C# bodes well for generators in JS.&lt;/p&gt;&lt;p&gt;&lt;b&gt;ES6, unevenly distributed&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;Q.async&lt;/tt&gt; has been part of Q for a while now, because Firefox has been shipping generators for some time.&lt;/p&gt;&lt;p&gt;Note however that the current ES6 draft specification for generators is slightly different from what Firefox ships: calling &lt;tt&gt;next&lt;/tt&gt; on the iterator returns an object with &lt;tt&gt;value&lt;/tt&gt; and &lt;tt&gt;done&lt;/tt&gt; properties, whereas the SpiderMonkey JS engine used by Firefox uses an exception to indicate that the iterator is finished.&lt;/p&gt;&lt;p&gt;This change was the result of some &lt;a href=&quot;https://github.com/rwldrn/tc39-notes/blob/master/es6/2013-03/mar-12.md#412-stopiterationgenerator&quot;&gt;discussions at the TC39 meeting in March&lt;/a&gt;, and hasn't made it into a draft specification or to the &lt;a href=&quot;http://wiki.ecmascript.org/doku.php?id=harmony:generators&quot;&gt;harmony:generators&lt;/a&gt; page yet.  All could change, but there seems to be a consensus.&lt;/p&gt;&lt;p&gt;I made a patch to Q to allow it to work both with the old SpiderMonkey-style generators as well as with the new ES6 style, and something like it should go in soon.&lt;/p&gt;&lt;p&gt;&lt;b&gt;give it to me already!&lt;/b&gt;&lt;/p&gt;&lt;p&gt;So yeah, generators in V8!  I've been working closely with V8 hackers Michael Starzinger and Andreas Rossberg on the design and implementation of generators in V8, and I'm happy to say that it's all upstream now, modulo &lt;tt&gt;yield*&lt;/tt&gt; which should go in soon.  Along with other future ES6 features, it's all behind a runtime flag.  Pass &lt;tt&gt;--harmony&lt;/tt&gt; or &lt;tt&gt;--harmony-generators&lt;/tt&gt; to your V8 to enable it.&lt;/p&gt;&lt;p&gt;Barring unforeseen issues, this will probably see the light in &lt;a href=&quot;http://www.chromium.org/developers/calendar&quot;&gt;Chromium 29&lt;/a&gt;, corresponding to V8 3.19.  For now though this hack is so hot out of the fire that it hasn't even had time to cool down and make it to the Chrome Canary channel yet.  Perhaps within a few weeks; whenever the V8 dependency in Chrome gets updated to the 3.19 tree.&lt;/p&gt;&lt;p&gt;As far as Node goes, they usually track the latest stable V8 release, and so for them it will probably also be a few weeks before it goes in.  You'll still have to run Node with the &lt;tt&gt;--harmony&lt;/tt&gt; flag.  However if you want a sneak preview of the future, I uploaded a &lt;a href=&quot;https://github.com/andywingo/node/tree/v8-3.19&quot;&gt;branch of Node with V8 3.19&lt;/a&gt; that you can build from source.  It might mulch your cat, but life is not without risk on the &lt;tt&gt;bleeding_edge&lt;/tt&gt;.&lt;/p&gt;&lt;p&gt;Finally for Q, as I said ES6 compatibility should come soon; track the progress or check out your own copy &lt;a href=&quot;https://github.com/kriskowal/q/pull/288&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;b&gt;final notes&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Thanks to the V8 team for their support in this endeavor, especially to Michael Starzinger for enduring my constant questions.  There's lots of interesting things in the V8 pipeline coming out of Munich.  Thanks also to Andrew Paprocki and the &lt;a href=&quot;http://bloomberg.com/&quot;&gt;Bloomberg&lt;/a&gt; crew for giving me the opportunity to fill out this missing piece of real-world ES6.  The Bloomberg folks really get the web.&lt;/p&gt;&lt;p&gt;This has been a hack from &lt;a href=&quot;http://www.igalia.com/&quot;&gt;Igalia&lt;/a&gt;, your friendly neighborhood browser experts.  Have fun with generators, and happy hacking!&lt;/p&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2013-05-08T19:31:42+00:00</dc:date>
	<dc:creator>Andy Wingo</dc:creator>
</item>
<item rdf:about="http://thomas.apestaart.org/log/?p=1537">
	<title>Thomas Vander Stichele: Votes for talks at open source conferences</title>
	<link>http://thomas.apestaart.org/log/?p=1537</link>
	<content:encoded>&lt;p&gt;I&amp;#8217;ve never been a fan of voting for talks, because it tends to be poorly implemented under the guise of democracy.  Of course it&amp;#8217;s easy for me to talk, I&amp;#8217;ve never organized anything at that scale.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll give two examples on why I feel this way, one of which triggering today&amp;#8217;s blog post.&lt;/p&gt;
&lt;p&gt;First off, my colleague Marek submitted a talk to Djangocon.  The talk was about how to use &lt;a href=&quot;https://github.com/f3at/feat&quot;&gt;feat&lt;/a&gt; (a toolkit we wrote for livetranscoding) to serve Django pages, but in such a way that they can use Deferreds to remove the concurrency bottleneck of &amp;#8220;1 request at a time&amp;#8221; per process running Django.&lt;/p&gt;
&lt;p&gt;Personally, to me, this is one of the most irritating design choices of Django &amp;#8211; from the ground up it was built synchronously (which could have been fine in most places).  But the fact that, when you get a request, you have to always synchronously respond to it (and block every other request for that process in the meantime) is a design choice that could have easily been avoided.&lt;/p&gt;
&lt;p&gt;In our particular use case, it was really painful.  If our website has to do an API request to some other service we don&amp;#8217;t control that can easily take 30 seconds, our process throughput suddenly becomes 2 pages per minute.  All the while, the server is sitting there waiting.&lt;/p&gt;
&lt;p&gt;Yes, you can throw RAM at the problem and start 30 times more processes; or thread out API requests; or farm it out to Celery, and do some back-and-forthing to see when the call&amp;#8217;s done.  Or do any other number of workarounds for a fundamental design choice.&lt;/p&gt;
&lt;p&gt;Since we like Twisted, we preferred to throw Twisted at the problem, and ended up with something that worked.&lt;/p&gt;
&lt;p&gt;Anyway, that&amp;#8217;s a lot of setup to explain what the talk was about.  Marek submitted the talk to DjangoCon, and honestly I didn&amp;#8217;t expect it to get much traction because, when you&amp;#8217;re inside Django, you think like Django, and you don&amp;#8217;t really realize that this is a real problem.  Most people who do realize it switch away to something else.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But to my surprise, Marek&amp;#8217;s talk was the most-voted talk!&lt;/strong&gt; I wish I could link to the results, but of course that vote site is no longer online.&lt;/p&gt;
&lt;p&gt;I guess I expected that would mean he&amp;#8217;d be presenting at DjangoCon this year.  So I asked him today when his talk was, and he said &amp;#8220;Oh that&amp;#8217;s right.  I did not get accepted.&amp;#8221;&lt;/p&gt;
&lt;p&gt;Well, that was a surprise.  Of course, the organising committee reserves the right to decide on their own &amp;#8211; maybe they just didn&amp;#8217;t like the talk.  But if you ask your potential visitors to vote, you&amp;#8217;d expect the most-voted talk to make it on the schedule no ?&lt;/p&gt;
&lt;p&gt;The feedback Marek got from them was surprising too, though.  Their first response was that this talk was too similar to another talk, titled &amp;#8220;How to combine JavaScript &amp;#038; Django in a smart way&amp;#8221;.  Now, I&amp;#8217;m not a JavaScript expert, but from the title alone I can already tell that it&amp;#8217;s very unlikely that these two talks have many similarities beyond the word &amp;#8216;Django&amp;#8217;.&lt;/p&gt;
&lt;p&gt;After refuting that point, their second reason was that they wanted more experienced speakers (but they didn&amp;#8217;t ask Marek for his experience), and their third reason was that the talk was in previous editions of DjangoCon US/EU (it&amp;#8217;s unclear whether they meant his talk or the JavaScript one, but Marek&amp;#8217;s definitely wasn&amp;#8217;t, and we couldn&amp;#8217;t find any mention of the other talk in previous conferences.  I&amp;#8217;m also not sure why that even matters one way or the other. This email thread was in Polish, so I have to rely on Marek&amp;#8217;s interpretation of it)&lt;/p&gt;
&lt;p&gt;Personally, my reaction would have been to complain to the organizers or Django maintainers.  Marek&amp;#8217;s flegmatic attitude was much better though &amp;#8211; after such an exchange, he simply doesn&amp;#8217;t want to have anything to do with the conference.&lt;/p&gt;
&lt;p&gt;He&amp;#8217;s probably right &amp;#8211; &lt;strong&gt;it&amp;#8217;s hard to argue with someone who doesn&amp;#8217;t want to invite you and is lying about the reasons.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The second example is &lt;a href=&quot;http://bcndevcon.org/&quot;&gt;BCNDevCon&lt;/a&gt;, a great conference here in Barcelona, organized by a guy who used to work for Flumotion who I have enormous respect for.  I&amp;#8217;ve never seen anyone create such a big conference over so little time.&lt;/p&gt;
&lt;p&gt;He believes strongly in the democratic aspect, and as far as I can tell constructs the schedule solely based on the votes.&lt;/p&gt;
&lt;p&gt;Sadly I didn&amp;#8217;t go to the last one, and the reason is simply because I felt that the talks that made it were too obviously corporate.  A lot of talks were about Microsoft products, and you could tell that they won votes because people&amp;#8217;s coworkers voted on talks.  I&amp;#8217;m not saying that&amp;#8217;s necessarily wrong &amp;#8211; given that he worked at our company and has friends here, I&amp;#8217;m sure people working here presenting at his conference have also done vote tending.  It&amp;#8217;s natural to do so.  But there should be a way to balance that out.&lt;/p&gt;
&lt;p&gt;I think the idea of voting is good, but implementation matters too.  Ideally, you would only want people that actually are going to show up to vote.  I have no idea how you can ensure that, though.  Do you ask people to pre-pay ? Do you ask them to commit to pay if at least 50% of their votes make it in the final schedule, kickstarter-style ?&lt;/p&gt;
&lt;p&gt;These two examples are on opposite extremes of voting.  One conference simply disregards completely what people vote on.  If I had voted or bought a ticket, I would feel lied to.  Why waste the time of so many people? The other conference puts so much stock in the vote, that I feel the final result was strongly affected.  I seriously doubt all those Windows 8 voters actually showed up.&lt;/p&gt;
&lt;p&gt;Does anyone have good experiences with conference voting that did work? Feel free to share!&lt;/p&gt;</content:encoded>
	<dc:date>2013-05-07T11:53:26+00:00</dc:date>
</item>
<item rdf:about="http://thomas.apestaart.org/log/?p=1533">
	<title>Thomas Vander Stichele: If I was 16 years younger…</title>
	<link>http://thomas.apestaart.org/log/?p=1533</link>
	<content:encoded>&lt;p&gt;I&amp;#8217;d totally try and be the &lt;a href=&quot;https://blog.pinboard.in/2013/04/seeking_a_summer_pintern/&quot;&gt;intern for pinboard&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The money is great for a summer job, but that&amp;#8217;s not the important part.  pinboard seems interesting, it&amp;#8217;s a real service, and it&amp;#8217;s (I assume) small enough to understand from top to bottom.  Contrary to, say, a Google Summer of Code project, you get to touch a real existing service, and from what I can tell from the blog you get to do it with a smart and funny guy.&lt;/p&gt;
&lt;p&gt;You&amp;#8217;ve got five weeks left; even if you&amp;#8217;re in the middle of exams right now, apply!&lt;/p&gt;
&lt;p&gt;(And if you do, why not add the features to merge and rename tags while you&amp;#8217;re at it?)&lt;/p&gt;</content:encoded>
	<dc:date>2013-05-03T21:30:25+00:00</dc:date>
</item>
<item rdf:about="http://jeff.ecchi.ca/blog/?p=2405">
	<title>Jean-François Fortin Tam: No more stuck rendering dialogs!</title>
	<link>http://jeff.ecchi.ca/blog/2013/04/28/no-more-stuck-render-dialogs/</link>
	<content:encoded>&lt;p&gt;If you&amp;#8217;ve tried rendering projects with Pitivi 0.15 or older, chances are you&amp;#8217;ve encountered one of these dreadful situations where the rendering process would get stuck:&lt;span id=&quot;more-2405&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#8230;at the beginning, with the progressbar saying it&amp;#8217;s currently &amp;#8220;estimating&amp;#8221; — which was a lie that I &lt;a href=&quot;https://git.gnome.org/browse/pitivi/commit/?id=df3689239&quot;&gt;corrected&lt;/a&gt; a little while ago.&lt;/li&gt;
&lt;li&gt;&amp;#8230;at the very end. Extra trolling points for having made you waste a huge amount of time to get a 0 bytes output file (if we&amp;#8217;re lucky, &lt;a href=&quot;https://bugzilla.gnome.org/show_bug.cgi?id=692316&quot;&gt;that bug&lt;/a&gt; is gone).&lt;/li&gt;
&lt;li&gt;&amp;#8230;somewhere in the middle, because caps negotiation failed, some elements were not linked, GStreamer thinks you ran out of available RAM, or because you&amp;#8217;ve been very naughty.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In any such case, the rendering dialog just sat there and smiled at you, as if everything was fine in the world. Well, no more:&lt;/p&gt;
&lt;div id=&quot;attachment_2409&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;img class=&quot;size-full wp-image-2409&quot; alt=&quot;slap&quot; src=&quot;http://jeff.ecchi.ca/blog/wp-content/uploads/slap.jpg&quot; width=&quot;400&quot; height=&quot;279&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Pitivi is going to give you the honest, brutal truth.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;This is the result of a horrifying thought suddenly springing to my mind yesterday night: &amp;#8220;Hey, what if the code was not even &lt;em&gt;checking&lt;/em&gt; for errors in the pipeline when rendering?&amp;#8221;&lt;/p&gt;
&lt;p&gt;Indeed, it wasn&amp;#8217;t. How silly is that! I have thus prepared a simple fix to improve the situation: catch pipeline error messages, abort the render (you really don&amp;#8217;t want to ignore a GStreamer error) and display an error dialog. This will at least &lt;a href=&quot;https://bugzilla.gnome.org/show_bug.cgi?id=635874&quot;&gt;let people know that something is wrong&lt;/a&gt; and that they should start writing patches to GStreamer instead of accusing Pitivi of hurting kittens. You&amp;#8217;d be surprised how many people can sit for hours in front of that stuck progressbar.&lt;/p&gt;
&lt;p&gt;Before I commit the fix however, I would need your feedback on the usability of that dialog:&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignnone size-full wp-image-2406&quot; alt=&quot;2013-04-27&quot; src=&quot;http://jeff.ecchi.ca/blog/wp-content/uploads/2013-04-27.png&quot; width=&quot;662&quot; height=&quot;267&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is not terribly pretty, but it&amp;#8217;s better than nothing. A few things to consider:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In that screenshot, all the text except the window title (&amp;#8220;Error While Rendering Project&amp;#8221;) comes from the GStreamer pipeline error message (the error and the error&amp;#8217;s details). I know that the error details look ugly, but I suspect it wouldn&amp;#8217;t be useful to GStreamer/Pitivi developers if we don&amp;#8217;t have them &amp;#8220;verbatim&amp;#8221;. Maybe we could try to mangle the error details string (split using &amp;#8220;:&amp;#8221; and take only the first and last two items of the resulting list?) and encourage the user to run from a terminal to get better debug info, but that feels a bit backwards.&lt;/li&gt;
&lt;li&gt;We should probably have some less-scary text to accompany the actual error details. Something that guides the user towards an action that can be done to address the problem (ex: reporting a bug). Maybe it can be placed between the header and the details (above the &amp;#8220;qtdemux.c&amp;#8221; line)? The problem is finding a universal text to be used.&lt;/li&gt;
&lt;li&gt;If we consider the route where we suggest the user to report bugs, where should we point to? The Pitivi bugs investigation page? Pitivi bugzilla? GStreamer bugzilla? The distro&amp;#8217;s bug tracker?&lt;/li&gt;
&lt;li&gt;Let&amp;#8217;s keep this simple, both visually and in terms of code/implementation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What do you think? Is the current approach sufficient or is there something better that we can easily do?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: here&amp;#8217;s an alternative dialog with some more comprehensible text, where the actual error (as seen in the previous screenshot) gets shoved under the rug by putting it in a GTK expander widget (clicking &amp;#8220;Details&amp;#8221; reveals the error&amp;#8217;s details as above):&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignnone size-full wp-image-2413&quot; alt=&quot;2013-04-29&quot; src=&quot;http://jeff.ecchi.ca/blog/wp-content/uploads/2013-04-29.png&quot; width=&quot;648&quot; height=&quot;235&quot; /&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2013-04-28T04:19:25+00:00</dc:date>
</item>
<item rdf:about="http://gstreamer.freedesktop.org/news/#2013-04-26T14:00:00Z">
	<title>GStreamer: GStreamer Core and Plugins 1.0.7 bug-fix release</title>
	<link>http://gstreamer.freedesktop.org/news/#2013-04-26T14:00:00Z</link>
	<content:encoded>&lt;p&gt;
The GStreamer team is pleased to announce another bug-fix release for the
new API and ABI-stable 1.x series of the GStreamer multimedia
framework.
        &lt;/p&gt;&lt;p&gt;
Check out the release notes for
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gstreamer/1.0.7.html&quot;&gt;GStreamer core&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-plugins-base/1.0.7.html&quot;&gt;gst-plugins-base&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-plugins-good/1.0.7.html&quot;&gt;gst-plugins-good&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-plugins-ugly/1.0.7.html&quot;&gt;gst-plugins-ugly&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-plugins-bad/1.0.7.html&quot;&gt;gst-plugins-bad&lt;/a&gt;, or
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-libav/1.0.7.html&quot;&gt;gst-libav&lt;/a&gt;,
or download tarballs for
&lt;a href=&quot;http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.0.7.tar.xz&quot;&gt;gstreamer&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.0.7.tar.xz&quot;&gt;gst-plugins-base&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.0.7.tar.xz&quot;&gt;gst-plugins-good&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.0.7.tar.xz&quot;&gt;gst-plugins-ugly&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.0.7.tar.xz&quot;&gt;gst-plugins-bad&lt;/a&gt;, or
&lt;a href=&quot;http://gstreamer.freedesktop.org/src/gst-libav/gst-libav-1.0.7.tar.xz&quot;&gt;gst-libav&lt;/a&gt;,
        &lt;/p&gt;&lt;p&gt;
Improvements include:
        &lt;ul&gt;
    &lt;li&gt;better support for static plugins&lt;/li&gt;
    &lt;li&gt;streamsynchronizer is now a public element, useful in HLS pipelines for example&lt;/li&gt;
    &lt;li&gt;osxaudio plugin ported to 1.0&lt;/li&gt;
    &lt;li&gt;androidmedia plugin is ported to 1.0&lt;/li&gt;
    &lt;li&gt;internal libav snapshot in gst-libav has been updated to libav 0.8.6&lt;/li&gt;
    &lt;li&gt;Now uses frame based threading if possible and disables slice
        based threading until libav 0.9.x is used (as is the case in git master
        already) This provides potentially better performance and fixes some
        display corruptions caused by bugs in the slice based threading&lt;/li&gt;
    &lt;li&gt;a number of &lt;a href=&quot;https://bugzilla.gnome.org/buglist.cgi?product=GStreamer&amp;target_milestone=1.0.7&quot;&gt;bug fixes&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
        &lt;/p&gt;</content:encoded>
	<dc:date>2013-04-26T14:00:00+00:00</dc:date>
</item>
<item rdf:about="http://blogs.gnome.org/uraeus/?p=2140">
	<title>Christian Schaller: Brno GUADEC Call for Papers!</title>
	<link>http://blogs.gnome.org/uraeus/2013/04/19/brno-guadec-call-for-papers/</link>
	<content:encoded>&lt;p&gt;I would like to give everyone a friendly reminder that Saturday the 27th of April is the official &lt;a href=&quot;https://www.guadec.org/&quot;&gt;deadline for the GUADEC 2013 Call for Papers&lt;/a&gt;. So make sure to get your proposal submitted.&lt;/p&gt;
&lt;p&gt;We hope to have a wide range of talks this year, including talks on related subjects such as Wayland and Multimedia, so don&amp;#8217;t automatically assume that you will not get a talk approved because its not &amp;#8216;pure GNOME&amp;#8217;.&lt;/p&gt;
&lt;p&gt;GUADEC this year will be in Brno in the Czech Republic, so I hope to see as many of you as possible here.&lt;/p&gt;</content:encoded>
	<dc:date>2013-04-19T10:29:01+00:00</dc:date>
</item>
<item rdf:about="http://blog.mikeasoft.com/?p=618">
	<title>Michael Sheldon: Erudite now available for Symbian Belle</title>
	<link>http://blog.mikeasoft.com/2013/04/19/erudite-now-available-for-symbian-belle/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://mikeasoft.com/~mike/firestarter-library.png&quot;&gt;&lt;img alt=&quot;Erudite displaying a book library&quot; src=&quot;http://mikeasoft.com/~mike/firestarter-library-small.png&quot; title=&quot;Erudite displaying a book library&quot; class=&quot;alignright&quot; width=&quot;169&quot; height=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Overview&lt;/h3&gt;
&lt;p&gt;Erudite makes it possible to use Amazon’s Cloud Reader on various mobile platforms which aren&amp;#8217;t officially supported by Amazon. You can either read books online, or download them for reading offline. Your progress in a book is then also kept synchronised between your phone and other Kindle devices.&lt;/p&gt;
&lt;h3&gt;Symbian Belle support&lt;/h3&gt;
&lt;p&gt; Until recently Erudite only supported MeeGo Harmattan and Mer based phones (such as the Nokia N9), but now it&amp;#8217;s also available for Symbian Belle phones as well. I&amp;#8217;ll try and put together a build for Symbian Anna phones in the near future.&lt;/p&gt;
&lt;p&gt; There&amp;#8217;s a fairly comprehensive review of Erudite for Symbian over on All About Symbian: &lt;a href=&quot;http://www.allaboutsymbian.com/flow/item/17320_Erudite_brings_Amazon_Kindle_e.php&quot;&gt;Erudite review&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Upcoming features&lt;/h3&gt;
&lt;p&gt; In the next release for both Symbian and MeeGo I&amp;#8217;ll be focusing on orientation switching support, so users can optionally view their books in landscape mode, as well as investigating some apparent issues with very large books.&lt;/p&gt;
&lt;h3&gt;Download&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://store.ovi.com/content/358486&quot;&gt;Symbian Belle version&lt;/a&gt; &amp;mdash; Nokia 701, Nokia C6-01, Nokia C7-00, Nokia N8-00, Nokia X7-00, Nokia E6-00, Nokia 808 Pureview, Nokia 603, Nokia Oro, Nokia E7-00, and Nokia 700&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://store.ovi.com/content/307241&quot;&gt;MeeGo Harmattan version&lt;/a&gt; &amp;mdash; Nokia N9, Nokia N950&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2013-04-19T09:51:34+00:00</dc:date>
</item>
<item rdf:about="http://wingolog.org/2013/04/18/inside-full-codegen-v8s-baseline-compiler">
	<title>Andy Wingo: inside full-codegen, v8's baseline compiler</title>
	<link>http://wingolog.org/archives/2013/04/18/inside-full-codegen-v8s-baseline-compiler</link>
	<content:encoded>&lt;div&gt;&lt;p&gt;Greetings to all.  This is another nargish article on the internals of the V8 JavaScript engine.  If that's your thing, read on.  Otherwise, here's an &lt;a href=&quot;http://www.zcommunications.org/rebel-cities-and-urban-resistance-by-david-harvey&quot;&gt;interesting interview with David Harvey&lt;/a&gt;.  See you laters!&lt;/p&gt;&lt;p&gt;&lt;b&gt;full-codegen&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Today's topic is V8's baseline compiler, called &quot;full-codegen&quot; in the source.  To recall, &lt;a href=&quot;http://wingolog.org/archives/2011/07/05/v8-a-tale-of-two-compilers&quot;&gt;V8 has two compilers&lt;/a&gt;: one that does a quick-and-dirty job (full-codegen), and one that focuses on hot spots (Crankshaft).&lt;/p&gt;&lt;p&gt;When you work with V8, most of the attention goes to Crankshaft, and rightly so: Crankshaft is how V8 makes code go fast.  But everything goes through full-codegen first, so it's still useful to know how full-codegen works, and necessary if you go to hack on V8 itself.&lt;/p&gt;&lt;p&gt;The goal of this article is to recall the full-codegen to mind, so as to refresh our internal &quot;efficiency model&quot; of how V8 runs your code (cf. &lt;a href=&quot;http://norvig.com/Lisp-retro.html&quot;&gt;Norvig's PAIP retrospective, #20&lt;/a&gt;), and to place it in a context of other engines and possible models.&lt;/p&gt;&lt;p&gt;&lt;b&gt;stack machine&lt;/b&gt;&lt;/p&gt;&lt;p&gt;All JavaScript code executed by V8 goes through full-codegen, so full-codegen has to be very fast.  This means that it doesn't have time to do very much optimization.  Even if it did have time to do optimization (which it doesn't), full-codegen lacks the means to do so.  Since the code hasn't run yet when full-codegen compiles it, it doesn't know anything about types or shapes of objects.  And as in other JS engines, full-codegen only compiles a function at a time, so it can't see very far.  (This lets it compile functions lazily, the first time they are executed.  Overall syntactic validity is ensured by a quick &quot;pre-parse&quot; over the source.)&lt;/p&gt;&lt;p&gt;I have to admit my surprise however at seeing again how simple full-codegen actually is: it's a stack machine!  You don't get much simpler than that.  It's shocking in some ways that this is the technology that kicked off the JS performance wars, back in 2008.  The article I wrote a couple years ago does mention this, but since then I have spent a lot of time in JSC and forgot how simple things could be.&lt;/p&gt;&lt;p&gt;Full-codegen does have a couple of standard improvements over the basic stack machine model, as I mentioned in the &quot;two compilers&quot; article.  One is that the compiler threads a &quot;context&quot; through the compilation process, so that if (say) &lt;tt&gt;x++&lt;/tt&gt; is processed in &quot;effect&quot; context, it doesn't need to push the initial value of &lt;tt&gt;x&lt;/tt&gt; on the stack as the result value.  The other is that if the top-of-stack (ToS) value is cached in a register, so that even if we did need the result of &lt;tt&gt;x++&lt;/tt&gt;, we could get it with a simple &lt;tt&gt;mov&lt;/tt&gt; instruction.  Besides these &quot;effect&quot; and &quot;accumulator&quot; (ToS) contexts, there are also contexts for pushing values on the stack, and for processing a value for &quot;control&quot; (as the test of a conditional branch).&lt;/p&gt;&lt;p&gt;&lt;b&gt;and that's it!&lt;/b&gt;&lt;/p&gt;&lt;p&gt;That's the whole thing!&lt;/p&gt;&lt;p&gt;Still here?&lt;/p&gt;&lt;p&gt;What about type recording and all that fancy stuff, you say?  Well, most of the fancy stuff is in crankshaft.  Type recording happens in the inline caches that aren't really part of full-codegen proper.&lt;/p&gt;&lt;p&gt;Full-codegen does keep some counters on loops and function calls and such that it uses to determine when to tier up to Crankshaft, but that's not very interesting.  (It is interesting to note that V8 used to determine what to optimizing using a statistical profiler, and that is no longer the case.  It seems statistical profiling would be OK in the long run, but as far as I understand it didn't do a great job with really short-running code, and made it difficult to reproduce bugs.)&lt;/p&gt;&lt;p&gt;I think -- and here I'm just giving my impression, but fortunately I have readers that will call my bullshit -- I think that if you broke down basic JavaScript and ignored optimizable hot spots, an engine mostly does variable accesses, property accesses, and allocations.  Those are the fundamental things to get right.  In a browser you also have DOM operations, which &lt;a href=&quot;http://www.chromium.org/blink&quot;&gt;Blink&lt;/a&gt; will speed up at some point; and there are some domain-specific things like string operations and regular expressions of course.  But ignoring that, there are just variables, properties, and allocations.&lt;/p&gt;&lt;p&gt;We'll start with the last bit.  Allocation is a function of your choice of &lt;a href=&quot;http://wingolog.org/archives/2011/05/18/value-representation-in-javascript-implementations&quot;&gt;value representation&lt;/a&gt;, your use of &quot;hidden classes&quot; (&quot;maps&quot; in V8; all engines do the same thing now), and otherwise it's more a property of the runtime than of the compiler.  (Crankshaft can lower allocation cost by using unboxed values and inlining allocations, but that's Crankshaft, not full-codegen.)&lt;/p&gt;&lt;p&gt;Property access is mostly handled by inline caches, which also handle method dispatch and relate to hidden classes.&lt;/p&gt;&lt;p&gt;The only thing left for full-codegen to do is to handle variable accesses: to determine where to store local variables, and how to get at them.  In this case, again there's not much magic: either variables are really local and don't need to be looked up by name at runtime, in which case they can be allocated on the stack, or they persist for longer or in more complicated scopes, in which case they go on the heap.  Of course if a variable is never referenced, it doesn't need to be allocated at all.&lt;/p&gt;&lt;p&gt;So in summary, full-codegen is quick, and it's dirty.  It does its job with the minimum possible effort and gets out of the way, giving Crankshaft a chance to focus on the hot spots.&lt;/p&gt;&lt;p&gt;&lt;b&gt;comparison&lt;/b&gt;&lt;/p&gt;&lt;p&gt;How does this architecture compare with what other JS engines are doing, you ask?&lt;/p&gt;&lt;p&gt;I have very little experience with SpiderMonkey, but as far as I can tell, with every release they they get closer and closer to V8's model.  Earlier this month Kannan Vijayan wrote about &lt;a href=&quot;http://blog.mozilla.org/javascript/2013/04/05/the-baseline-compiler-has-landed/&quot;&gt;SpiderMonkey's new baseline compiler&lt;/a&gt;, which looks to be exactly comparable to full-codegen.  It's a &lt;a href=&quot;http://hg.mozilla.org/mozilla-central/file/286cf3d33281/js/src/ion/BaselineCompiler.cpp#l916&quot;&gt;stack machine&lt;/a&gt; that emits native code.  It looks a little different because it operates on bytecode and not the AST, as SpiderMonkey still has an &lt;a href=&quot;http://hg.mozilla.org/mozilla-central/file/286cf3d33281/js/src/jsinterp.cpp&quot;&gt;interpreter&lt;/a&gt; hanging around.&lt;/p&gt;&lt;p&gt;JavaScriptCore, the WebKit JavaScript engine, is similar on the surface:  it also has a baseline compiler and an optimizing compiler.  (In fact it's getting another optimizing compiler soon, but that's a story for another article).  But if you look deeper, I think JSC has diverged from V8's model in interesting ways.&lt;/p&gt;&lt;p&gt;Besides being a &lt;a href=&quot;http://wingolog.org/archives/2011/10/28/javascriptcore-the-webkit-js-implementation&quot;&gt;register machine&lt;/a&gt;, a model that has inherent advantages over a stack machine, JavaScriptCore also has a &lt;a href=&quot;http://wingolog.org/archives/2012/06/27/inside-javascriptcores-low-level-interpreter&quot;&gt;low-level interpreter&lt;/a&gt; that uses the same calling convention as the optimizing compiler.  I don't think JSC is moving in V8's direction in this regard; in fact, they could remove their baseline compiler entirely, relying instead on the interpreter and the optimizing compiler.  JSC also has some neat tricks related to scoping (lazy tear-off); again, a topic for some future article.&lt;/p&gt;&lt;p&gt;&lt;b&gt;summary&lt;/b&gt;&lt;/p&gt;&lt;p&gt;The field is still a bit open as to what is the best approach to use for cold code.  It seems that an interpreter could still be a win, because if not, why would SpiderMonkey keep one around, now that they have a baseline compiler?  And why would JSC add a new one?&lt;/p&gt;&lt;p&gt;At the same time, it seems to me that one could do more compile-time analysis at little extra cost, to speed up full-codegen by allocating more temporaries into slots; you would push and pop at compile-time to avoid doing it at run-time.  It's unclear whether it would be worth it, though, as that analysis would have to run on all code instead of just the hot spots.&lt;/p&gt;&lt;p&gt;Hopefully someone will embark on the experiment; it should just be a simple matter of programming :)  Until next time, happy hacking!&lt;/p&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2013-04-18T15:45:20+00:00</dc:date>
	<dc:creator>Andy Wingo</dc:creator>
</item>
<item rdf:about="http://jeff.ecchi.ca/blog/?p=2397">
	<title>Jean-François Fortin Tam: PiTiVi and the 2013 Summer of Code</title>
	<link>http://jeff.ecchi.ca/blog/2013/04/11/pitivi-and-the-2013-summer-of-code/</link>
	<content:encoded>&lt;p&gt;This year will be a little bit different. In a rather unexpected turn of events, &lt;a href=&quot;http://pitivi.org&quot;&gt;PiTiVi&lt;/a&gt; has been accepted as a mentoring organization but &lt;a href=&quot;http://gstreamer.net&quot;&gt;GStreamer&lt;/a&gt; has not. Fear not however, as GStreamer has no better ally than the PiTiVi team when it comes to pushing our favorite multimedia framework to its limits and beyond. As you may know, PiTiVi makes heavy use of the &lt;em&gt;GStreamer Editing Services&lt;/em&gt; library and, in turn, GNonLin and the rest of GStreamer. With the switch to GES and the &lt;a title=&quot;Break the kettles and sink the boats&quot; href=&quot;http://jeff.ecchi.ca/blog/2012/05/19/break-the-kettles-and-sink-the-boats/&quot;&gt;irrevocable shedding of our old skin&lt;/a&gt;, &lt;strong&gt;any backend work done for the sake of the PiTiVi project ends up benefitting GStreamer and other projects.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-2397&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;One way to look at things is that &lt;em&gt;there is no such thing as a PiTiVi backend anymore&lt;/em&gt;. PiTiVi &lt;em&gt;is &lt;/em&gt;a frontend that pushes the latest and greatest open-source multimedia technologies forward.&lt;/p&gt;
&lt;p&gt;With the GES port nearing completion, this is the first time that we can truly say there are three interrelated components to contribute to. This new reality sets the tone for a different way to look at PiTiVi project ideas this year: you can finally&amp;#8230;&lt;/p&gt;
&lt;h1&gt;Choose your character class&lt;/h1&gt;
&lt;p&gt;&lt;img class=&quot;alignnone  wp-image-2398&quot; title=&quot;With apologies to Mr. Amano&quot; alt=&quot;pitivi hacker style&quot; src=&quot;http://jeff.ecchi.ca/blog/wp-content/uploads/pitivi-hacker-style.png&quot; width=&quot;700&quot; height=&quot;312&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Are you a ninja? A spellcaster? A tank? While most projects are a balance of backend and UI work, we know that some people prefer to lean more to one side or another of the continuum — that&amp;#8217;s why I created a new visual notation for &lt;a href=&quot;http://wiki.pitivi.org/wiki/Google_Summer_of_Code&quot;&gt;our ideas page&lt;/a&gt; this year. Instead of an &amp;#8220;easy/hard&amp;#8221; system (which would be inaccurate and misleading, as perceived difficulty is measured differently for everybody), we simply provided a visual indication of the expected involvement in the various components for a given project idea (for example, &amp;#8220;PiTiVi: ◼◼◻◻◻ GES: ◼◼◼◼◼  GStreamer: ◼◼◼◻◻&amp;#8221;). So if you were looking for something closer to a hardcore GStreamer GSoC project, you can spot ideas that might interest you here.&lt;/p&gt;
&lt;p&gt;Not a programmer? You can help raise awareness about this. Maybe you know a brilliant hacker friend/relative or a top-notch computer science student waiting for a chance to make a big difference in the world. Tell that person about how cool and welcoming PiTiVi is and how getting involved is the best way to advance free, powerful and intuitive video editing for everyone!&lt;/p&gt;</content:encoded>
	<dc:date>2013-04-11T19:09:26+00:00</dc:date>
</item>
<item rdf:about="http://arunraghavan.net/?p=1426">
	<title>Arun Raghavan: PulseAudio in GSoC 2013</title>
	<link>http://arunraghavan.net/2013/04/pulseaudio-in-gsoc-2013/</link>
	<content:encoded>&lt;p&gt;That&amp;#8217;s right &amp;#8212; PulseAudio will be participating in the Google Summer of Code again this year! We had a great set of students and projects last year, and you&amp;#8217;ve already seen some their work in the last release.&lt;/p&gt;

&lt;p&gt;There are some more details on &lt;a href=&quot;http://lists.freedesktop.org/archives/pulseaudio-discuss/2013-April/016899.html&quot;&gt;how to get involved&lt;/a&gt; on the mailing list. We&amp;#8217;re looking forward to having another set of smart and enthusiastic new contributors this year!&lt;/p&gt;

&lt;p&gt;p.s.: Mentors and students from organisations (GStreamer and BlueZ, for example), do feel free to get in touch with us if you have ideas for projects related to PulseAudio that overlap with those other projects.&lt;/p&gt;</content:encoded>
	<dc:date>2013-04-11T11:34:48+00:00</dc:date>
</item>
<item rdf:about="http://www.advogato.org/person/ensonic/diary.html?start=138">
	<title>Stefan Kost: 9 Apr 2013</title>
	<link>http://www.advogato.org/person/ensonic/diary.html?start=138</link>
	<content:encoded>&lt;b&gt;buzztard &amp;amp; gstreamer hackfest&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This month I mostly cleaned up small bits and pieces from the gstreamer-1.0 port. Most notably multitrack encoding works again. The handling of EOS and starting of the next track was racy. Speaking of the recording dialog - this one now has some basics for a silent mode implemented. For now it only disables the scrolling in the sequence view. Next thing would be to disable the level meters.&lt;br /&gt;
&lt;br /&gt;
I hacked a bit more on the child-proxy iface. This now turned into utility functions that allows to write:&lt;br /&gt;
  &lt;code&gt;bt_child_proxy_set(obj, &quot;prop1::prop2::prop3&quot;, val, NULL);&lt;/code&gt;&lt;br /&gt;
So what does this do?&lt;br /&gt;
  &lt;code&gt;GObject obj1, obj2;&lt;br /&gt;
  g_object_get(obj, &quot;prop1&quot;, &amp;amp;obj1, NULL);&lt;br /&gt;
  g_object_get(obj1, &quot;prop2&quot;, &amp;amp;obj2, NULL);&lt;br /&gt;
  g_object_set(obj2, &quot;prop3&quot;, val, NULL);&lt;br /&gt;
  g_object_unref (obj2);&lt;br /&gt;
  g_object_unref (obj1);&lt;/code&gt;&lt;br /&gt;
This saved quite a few lines of C in buzztard. I wonder if this is something we want to add to glib? If we do I would go for a single ':' as a separator and we might also want to consider starting the property with one:&lt;br /&gt;
  &lt;code&gt;g_object_set(obj, &quot;:prop1:prop2:prop3&quot;, val, NULL);&lt;/code&gt;&lt;br /&gt;
The leading ':' would help to quickly detect whether we need to split the property name and recurse into child objects. The whole scheme is backwards compatible as property names are not allowed to contain ':'.&lt;br /&gt;
&lt;br /&gt;
In the end of march I attended the GStreamer hackfest in Milano. First I looked into a few tests - both on GStreamer and buzztard side. On the GStreamer side adder has some test fixes. On the buzztard side I improved my encoding tests. Wim gave me the crucial tip that fixed the dynamic adding/removing of analyzers while playing. Maybe I can try that for machines again. I showed the parser for controller-setups to some people and did smaller changes on it. I also discussed what we could do with gst-tracelib for gst-1.0 and started a new design-draft for it.&lt;br /&gt;
&lt;br /&gt;
41 files changed, 871 insertions(+), 816 deletions(-)</content:encoded>
	<dc:date>2013-04-09T20:31:51+00:00</dc:date>
</item>
<item rdf:about="http://blogs.gnome.org/uraeus/?p=2133">
	<title>Christian Schaller: No GStreamer in this years Google Summer of Code</title>
	<link>http://blogs.gnome.org/uraeus/2013/04/09/no-gstreamer-in-this-years-goolge-summer-of-code/</link>
	<content:encoded>&lt;p&gt;Some sad news, GStreamer did not get accepted to the 2013 Google Summer of Code. We don&amp;#8217;t know the exact reasons, but all we can do at this point is redouble our efforts to get accepted again next year.&lt;/p&gt;
&lt;p&gt;In the meantime not all hope is lost. You can still do a Google Summer of Code involving GStreamer with some of the other organisations that did get approved. For instance if you have an idea for a great multimedia desktop application using GStreamer you can try submitting that to for instance GNOME or KDE depending on your UI toolkit of choice as one example. In the past GNOME has also been open to hosting some pure GStreamer projects so you can always try submitting such too. In general I recommend people to take a look at the &lt;a href=&quot;http://www.google-melange.com/gsoc/accepted_orgs/google/gsoc2013&quot;&gt;list of accepted organisations&lt;/a&gt; and see if there are projects which technologies would be relevant to the GSoC project you want to do and the apply with them. Also remember you can submit the same project to multiple organisations if it fits multiple projects.&lt;/p&gt;
&lt;p&gt;Also the &lt;a href=&quot;http://www.pitivi.org&quot;&gt;PiTiVi video editor&lt;/a&gt; did get approved so I strongly encourage you to take a look at their wonderful &lt;a href=&quot;http://wiki.pitivi.org/wiki/Google_Summer_of_Code&quot;&gt;ideas page&lt;/a&gt; and submit a proposal to do a PiTiVi project.&lt;/p&gt;</content:encoded>
	<dc:date>2013-04-09T09:29:36+00:00</dc:date>
</item>
<item rdf:about="http://jeff.ecchi.ca/blog/?p=2392">
	<title>Jean-François Fortin Tam: Le nipponophone de l’autobus</title>
	<link>http://jeff.ecchi.ca/blog/2013/04/05/le-nipponophone-de-lautobus/</link>
	<content:encoded>&lt;p&gt;Hier dans l&amp;#8217;autobus, j&amp;#8217;ai eu la chance de tomber sur un homme blanc parlant au téléphone&amp;#8230; dans le langage du soleil levant. Après un très long moment de tergiversation mentale après la fin de son appel, j&amp;#8217;osai:&lt;span id=&quot;more-2392&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;«Bonjour monsieur, parlez-vous français? C&amp;#8217;est pas tous les jours que j&amp;#8217;entends parler japonais dans cet autobus, et vous le parlez très bien! Où l&amp;#8217;avez-vous appris?»&lt;/p&gt;
&lt;p&gt;«J&amp;#8217;ai vécu au Japon pendant cinq ans!»&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;S&amp;#8217;en suit une quinzaine de minutes de discussion où je découvris des choses qui changèrent certaines de mes perceptions, jusque-là biaisées par les ouï-dires.&lt;/p&gt;
&lt;p&gt;D&amp;#8217;abord, le taux de change entre le peso canadien et le Yen est plutôt désavantageux pour les canadiens en ce moment: l&amp;#8217;économie japonaise, bien que mal en point du point de vue intérieur, reste assez forte sur le point de vue international, spécialement en comparaison avec l&amp;#8217;Europe en crise depuis 2008-2009. Les investisseurs se replient alors sur une monnaie stable comme le Yen (ça, je dois dire que j&amp;#8217;ai du mal à comprendre cette subtilité). Si l&amp;#8217;Europe reprenait du poil de la bête, la valeur du Yen se rebalancerait possiblement.&lt;/p&gt;
&lt;p&gt;Oui, le coût de la vie au Japon est élevé. C&amp;#8217;est pourquoi il est préférable d&amp;#8217;y travailler plutôt que d&amp;#8217;être touriste, parce que les salaires sont en conséquence.&lt;/p&gt;
&lt;p&gt;Surtout, je me demandais comment était l&amp;#8217;accueil et l&amp;#8217;intégration des étrangers s&amp;#8217;établissant au japon. Certains reportages, combinés aux films comme «Stupeur et tremblements» (qui est, admettons-le, un peu dramatisé/comédique) et les opinions des gens autour de moi, me laissaient croire à une société fermée/repliée. Selon cet homme, il n&amp;#8217;en est rien; il s&amp;#8217;agit strictement du même phénomène que ce que l&amp;#8217;on retrouve pratiquement partout dans le monde: si l&amp;#8217;immigrant fait des efforts pour apprendre et maîtriser la langue locale, son intégration se fera avec succès alors que «les gens vont se précipiter avec joie pour vous aider», tout comme les Québécois francophones adoptent une attitude positive envers quiconque fait des efforts pour parler le Français.&lt;/p&gt;
&lt;p&gt;Et vous? Habitez-vous au Japon ou connaissez-vous quelqu&amp;#8217;un qui vous a fait témoignage de l&amp;#8217;intégration des immigrants là-bas?&lt;/p&gt;</content:encoded>
	<dc:date>2013-04-05T23:08:17+00:00</dc:date>
</item>
<item rdf:about="http://wingolog.org/2013/04/04/thoughts-on-blink">
	<title>Andy Wingo: thoughts on blink</title>
	<link>http://wingolog.org/archives/2013/04/04/thoughts-on-blink</link>
	<content:encoded>&lt;div&gt;&lt;p&gt;So &lt;a href=&quot;http://www.chromium.org/blink&quot;&gt;Chromium forked WebKit&lt;/a&gt; again!  You've probably seen some articles on it already, but &lt;a href=&quot;http://infrequently.org/2013/04/probably-wrong/&quot;&gt;Alex Russell's piece&lt;/a&gt; is pretty good.&lt;/p&gt;&lt;p&gt;In retrospect the split was easy to see coming, but I can't help but feel bittersweet about it.  The announcement and Alex's article both cite technical reasons for the fork, but to me it seems to be ultimately a human failure.  So the Chromium team saw problems in WebKit and agreed on a solution that will help them achieve their goals faster: that's great!  But why were they unable to do so within WebKit itself?&lt;/p&gt;&lt;p&gt;There are technical differences, yes, but those could be resolved by human action (as they now will be, by humans, under the Blink aegis).  No, to me the fundamental problem was a lack of the &lt;a href=&quot;http://www.seedsforchange.org.uk/consensus#conditions&quot;&gt;conditions for consensus&lt;/a&gt; within the WebKit project, and for that there is ample blame to go around.&lt;/p&gt;&lt;p&gt;In the best of events this split will end up with both Blink and WebKit as more technically consistent, nimble projects.  I would also hope that this split serves as a wakeup call to some of the decision-making processes within WebKit.  However it is easy to be pessimistic in this regard -- the Apple-Google dynamic has been great for WebKit as an open project, opening up discussions and collaboration possibilities, especially among folks that don't work for the two major corporations.  Both projects will have to actively make an effort to remain open, because passivity will favor the structural tendency to work in-house.&lt;/p&gt;&lt;p&gt;I should probably mention the obvious thing, that &lt;a href=&quot;http://igalia.com&quot;&gt;Igalia&lt;/a&gt; will work with both projects, of course.  We'll get our WebKit patches into Blink, and vice versa.  The message for customers doesn't change much, either -- most customers have already chosen a particular WebKit port, and those that used Chromium will now use Chromium on Blink.&lt;/p&gt;&lt;p&gt;For those projects that haven't chosen a WebKit port yet, the fundamental decision has always been WebKit2/JSC versus Chromium/V8, and that hasn't changed too much from this announcement.  It's true that WebKit2 is a less mature multi-process implementation than Chromium, but it is getting a lot of investment these days, so it's fair to assume that technically that the two approaches will work just as well within a few months.  The same goes for JSC versus V8.&lt;/p&gt;&lt;p&gt;Finally, a meta-note.  Sometimes these press releases catch us up in their whirlwind and we're left with a feeling of anxiety: &quot;Google just released AngularJS, now I need to rewrite all my apps!?&quot;  Well, maybe ;)  But I find a bit of dispassion is appropriate after a piece of news like this.  Good luck to both projects, and see you on the mailing lists.&lt;/p&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2013-04-04T06:43:17+00:00</dc:date>
	<dc:creator>Andy Wingo</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-977684764667858073.post-2470648344711224589">
	<title>Bastien Nocera: Geocluing the desktop, slowly</title>
	<link>http://www.hadess.net/2013/04/geocluing-desktop-slowly.html</link>
	<content:encoded>Over the past couple of months, &lt;a href=&quot;http://techchicblog.wordpress.com/&quot;&gt;Satabdi&lt;/a&gt; has been working during her &lt;a href=&quot;https://live.gnome.org/OutreachProgramForWomen&quot;&gt;Outreach Program for Women&lt;/a&gt; on &lt;a href=&quot;https://git.gnome.org/browse/geocode-glib&quot;&gt;geocode-glib&lt;/a&gt;, and &lt;a href=&quot;http://zee-nix.blogspot.fr/&quot;&gt;Zeeshan&lt;/a&gt; more recently joined us to help with cleaning up some of the code.&lt;br /&gt;&lt;br /&gt;As Satabdi's program is now finished (though not her involvement!), and a new GNOME development cycle has started, I'll try to explain where geocode-glib fits in, and answer some questions on the future of Geoclue.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(Reverse-)Geocoding&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;First and foremost, geocode-glib is a &lt;a href=&quot;http://en.wikipedia.org/wiki/Geocoding&quot;&gt;geocoding&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Reverse_geocoding&quot;&gt;reverse geocoding&lt;/a&gt; library. It uses Yahoo! web services for this, though we're investigating using Nominatim for this in the future.&lt;br /&gt;&lt;br /&gt;This replaces the convoluted implementations for those two services in &lt;a href=&quot;http://www.freedesktop.org/wiki/Software/GeoClue&quot;&gt;geoclue&lt;/a&gt; (3 if you include &lt;i&gt;Address&lt;/i&gt; as a service). The API should be mostly stable now, and we'll soon start porting a few applications to it (Evolution and Empathy come to mind).&lt;br /&gt;&lt;br /&gt;The library also includes a GeocodeLocation object. This will be useful later.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;GeoIP&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;geocode-glib, thanks to Satabdi's work, includes a &lt;a href=&quot;http://en.wikipedia.org/wiki/GeoIP&quot;&gt;GeoIP&lt;/a&gt; server, to be installed on GNOME servers eventually, which uses data from &lt;a href=&quot;http://www.maxmind.com/&quot;&gt;MaxMind&lt;/a&gt; to &amp;nbsp;locate a user connected to the Internet from the IP address. We also have a client library to access this server.&lt;br /&gt;&lt;br /&gt;This is usually good enough to locate a user in a city, or a country, which would help us with many integration points in GNOME, such as the upcoming &lt;a href=&quot;https://live.gnome.org/Design/SystemSettings/DateAndTime#Guidelines&quot;&gt;Date and Time&lt;/a&gt; panel re-design.&lt;br /&gt;&lt;br /&gt;But this code isn't really for you, app developers.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Geoclue&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A fine project, but the codebase is showing its age (dbus-glib!), and the decision, well, not to take decisions on which backends to use for various services make it fragile. This is a maintenance problem, both for in terms of making sure all the services are kept working, and that geoclue itself is kept stable.&lt;br /&gt;&lt;br /&gt;So we'll start a reimplementation of Geoclue. The goals are:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Trimmed down API, just for positioning&lt;/li&gt;&lt;li&gt;Smaller, but more integrated, selection of ways to get the positioning (GPS from your integrated WWAN modem, Wi-Fi AP data, IP address, no discrete GPS or manual location)&lt;/li&gt;&lt;li&gt;Power-saving, by aggregating requests from all the applications&lt;/li&gt;&lt;li&gt;and finally, privacy, where only applications that you allow to request your location can get it, and only with an accuracy as needed for the application.&lt;/li&gt;&lt;/ul&gt;The code currently in geocode-glib for IP geocoding will likely move there when the project has been kickstarted.&lt;br /&gt;&lt;br /&gt;I hope this clears any misconceptions people might have about geocode-glib, or, more likely, about the future of geoclue.</content:encoded>
	<dc:date>2013-04-04T02:40:56+00:00</dc:date>
	<dc:creator>Bastien Nocera</dc:creator>
</item>
<item rdf:about="http://jeff.ecchi.ca/blog/?p=2386">
	<title>Jean-François Fortin Tam: GStreamer Hackfest 2013: Moving Images</title>
	<link>http://jeff.ecchi.ca/blog/2013/04/03/gstreamer-hackfest-2013-moving-images/</link>
	<content:encoded>&lt;p&gt;I&amp;#8217;m back from this year&amp;#8217;s GStreamer hackfest, which was fantastic as usual — an intersection of great minds, big challenges, flaky Wi-Fi and good food. Christian already did &lt;a href=&quot;http://blogs.gnome.org/uraeus/2013/03/31/gstreamer-hackfest-in-milan/&quot;&gt;a generic summary&lt;/a&gt;, so I&amp;#8217;ll be narrating from the GNonLin/&lt;a title=&quot;Why you should be using GES&quot; href=&quot;http://jeff.ecchi.ca/blog/2012/09/17/why-you-should-be-using-ges/&quot;&gt;GES&lt;/a&gt;/PiTiVi perspective. See the end of this blog post for a nice video retrospective.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-2386&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://jeff.ecchi.ca/blog/wp-content/uploads/2013-04-02.jpg&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-2387&quot; alt=&quot;2013-04-02&quot; src=&quot;http://jeff.ecchi.ca/blog/wp-content/uploads/2013-04-02-500x200.jpg&quot; width=&quot;500&quot; height=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Edward provided an initial patch to improve the behavior of timestamps and seeking in GNonLin, while Nicolas &amp;#8220;Stormer&amp;#8221; Dufresne fixed two bugs causing deadlocks. Nicolas spent a &lt;em&gt;lot&lt;/em&gt; of time discussing with Wim Taymans, Edward Hervey, Sebastian Dröge and other hackfesters about the architecture of GNonLin in light of GStreamer 1.x. He also fixed looping for the Ogg demuxer in pull mode and, with some help from Mathieu &amp;#8220;Forest Ranger&amp;#8221; Duponchelle, fleshed out the design for a new tree data structure for GNonLin.&lt;/p&gt;
&lt;p&gt;Mathieu the Moustached Avenger worked on implementing keyframes in GES, paving the way for him to create a user interface to animate any effect property in PiTiVi. That user interface will most likely depend on him working on the clutter timeline canvas, so I&amp;#8217;m looking forward to improvements in that area.&lt;/p&gt;
&lt;p&gt;Thibault &amp;#8220;Keyboard Crusher&amp;#8221; Saunier finished the implementation of GES Containers and clip groups, then worked on implementing — at long last — audio mixing in GES. This is an essential feature of multitrack audio/video editing, and I&amp;#8217;m really happy to see that feature make its comeback for the next release of PiTiVi. This work will also depend on Mathieu&amp;#8217;s keyframes UI. A proper reimplementation of video mixing remains to be done, however.&lt;/p&gt;
&lt;p&gt;There are lots of outstanding things to solve in GNonLin and GES. Nicolas has a bunch of ideas for things to improve and redesign in GNonLin and I expect much collaboration between Thibault and him to optimize the entire stack for better reliability and performance (for example, adding caps filters to allow realtime downscaling of videos to improve preview performance, configurable downstream buffering for playback to avoid frame drops in CPU-intensive parts of a timeline, etc.). GNonLin and GES have much potential to allow us to be a lot smarter than before.&lt;/p&gt;
&lt;p&gt;Personally, I spent most of my time testing, discussing and hacking on some new features for PiTiVi.&lt;/p&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;I added a button in the timeline toolbar that toggles the &amp;#8220;gapless mode&amp;#8221; (automatic ripple edits), which makes your clips behave like magnets and prevents needing to re-arrange them manually all the time. The feature works and will be merged after a customary code review.&lt;/li&gt;
&lt;li&gt;I made some progress on the custom effects UI branch. Once it&amp;#8217;s complete, you will be able to easily create custom user interfaces for effects that require it, simply by using a glade/gtkbuilder .ui file (or, if you prefer, a set of widgets from your own python module). Of course, for the majority of effects, our automatically generated user interfaces are still good enough, so we can keep using them and avoid unnecessary work.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;(See &lt;a href=&quot;http://jeff.ecchi.ca/blog/2013/03/22/pitivi-status-update-for-q1-2013/&quot;&gt;my previous blog post&lt;/a&gt; for a situation report on where we stood with PiTiVi before the hackfest)&lt;/p&gt;
&lt;p&gt;I also spent a bit of time setting up my film making gear and shooting various interesting moments of the hackfest. Here&amp;#8217;s my montage, which will tell the story much better than a long blog post. Hope you&amp;#8217;ll like it:&lt;/p&gt;

	&lt;!-- Begin Video.js --&gt;
	
		
		
		
	
	&lt;!-- End Video.js --&gt;

&lt;p&gt;I would like to thank Collabora for allowing many GStreamer contributors to attend the hackfest, which I consider vital to the health of the GStreamer community. I was happy to meet again with many friends and help push the Free multimedia stack forward. Props to Christian Schaller and Alessandro Decina for organizing the whole thing, too!&lt;/p&gt;
&lt;p&gt;Aside from &lt;a href=&quot;http://collabora.com&quot;&gt;Collabora&lt;/a&gt; and &lt;a href=&quot;http://fluendo.com&quot;&gt;Fluendo&lt;/a&gt; sponsoring two of our dinners (thanks!), I would also like to thank you, &lt;a href=&quot;http://www.pitivi.org/?go=donators&quot;&gt;PiTiVi supporters&lt;/a&gt;, for making it possible for me to spend some money to thank GStreamer contributors with some food &lt;a href=&quot;https://plus.google.com/107925534586325319124/posts/AfzPsaWZLX1&quot;&gt;and beer&lt;/a&gt; — maximum boost to the GStreamer community! Full disclosure: I used 84 euros worth of PiTiVi donations for that purpose.&lt;/p&gt;</content:encoded>
	<dc:date>2013-04-03T16:33:09+00:00</dc:date>
</item>
<item rdf:about="http://base-art.net/Articles/123/">
	<title>Phil Normand: GStreamer hackfest in Milan</title>
	<link>http://base-art.net/Articles/123/</link>
	<content:encoded>&lt;p&gt;I spent Easter in Milan, attending the &lt;a class=&quot;reference external&quot; href=&quot;http://gstreamer.freedesktop.org/wiki/GStreamerHackfest2013&quot;&gt;second official GStreamer
hackfest&lt;/a&gt;. It has been a productive event and, as always, a pleasure to
hang out with some members of the GStreamer core dev team fame :)&lt;/p&gt;
&lt;p&gt;I focused on a few GStreamer bugs that were blocking some other WebKit
bugs related to the media player and the WebAudio backend. I also had
in mind to port the osxaudio sink to 1.0, a task started one week
before the hackfest, but didn't have time to come back to it.&lt;/p&gt;
&lt;p&gt;The first task I worked on was about cleaning up some code in
uridecodebin related to URI protocols and on-disk buffering. In WebKit
we use a custom HTTP(S) source element used by playbin when loading
remote media files. The issue is that that element is also &lt;a class=&quot;reference external&quot; href=&quot;https://bugs.webkit.org/show_bug.cgi?id=108088&quot;&gt;exposed to
applications using WebKit itself&lt;/a&gt; so we made it handle a custom
protocol, webkit+http://. But that exposed a &lt;a class=&quot;reference external&quot; href=&quot;https://bugzilla.gnome.org/show_bug.cgi?id=693484&quot;&gt;bug in urideocdebin&lt;/a&gt; where
some protocols, including http, are hardcoded in a white list used to
enable on-disk buffering. Unfortunately the aforementioned bug is not
solved yet even though some good progress was made!&lt;/p&gt;
&lt;p&gt;The second task I worked on was first reported by Wim, the WebKit
media player wasn't pausing when receiving buffering messages. The
&lt;a class=&quot;reference external&quot; href=&quot;http://trac.webkit.org/changeset/147206&quot;&gt;fix&lt;/a&gt; was quite simple. After that I finally added some basic &lt;a class=&quot;reference external&quot; href=&quot;http://trac.webkit.org/changeset/147279&quot;&gt;codec
installer support in WebKit&lt;/a&gt;. The GStreamer codec installer API is
quite simple :)&lt;/p&gt;
&lt;p&gt;Lastly I started working again on the &lt;a class=&quot;reference external&quot; href=&quot;https://bugs.webkit.org/show_bug.cgi?id=78883&quot;&gt;WebAudio
createMediaSourceElement&lt;/a&gt; support for the GStreamer/WebKit
backend. The patch has been sleeping in Bugzilla since last
Christmas. That feature is interesting for WebAudio applications that
need to use audio data coming from media elements to eg, do stuff like
&lt;a class=&quot;reference external&quot; href=&quot;http://html5-demos.appspot.com/static/webaudio/createMediaSourceElement.html&quot;&gt;equalizers&lt;/a&gt;. The current patch in bugzilla gathers the audio buffers
in lists and copy them to the AudioBus when needed. Those memcpys
could probably be avoided by pre-allocating the memory for the
AudioBus and telling GStreamer to write directly there. So, with the help
of my friend &lt;a class=&quot;reference external&quot; href=&quot;http://twitter.com/alessandrod&quot;&gt;Alessandro Decina&lt;/a&gt; (who was doing some similar stuff on
his Firefox branch) I started working on a simple
GstAllocator that would be configured in the pipeline by intercepting
allocation queries toward the appsinks used to gather the audio
buffers. Well, this exposed some bugs on the GStreamer side! The
deinterleave element always uses the default allocator when pushing
data to its source pads. So I started a patch that performs allocation
queries downstream and use the allocator returned, if
any. Unfortunately my custom allocator doesn't work yet but I'll cary
on work on this, the GstAllocator API is quite an interesting thing to
play with :)&lt;/p&gt;
&lt;p&gt;All in all it was a great and productive event. Christian wrote a nice
&lt;a class=&quot;reference external&quot; href=&quot;http://blogs.gnome.org/uraeus/2013/03/31/gstreamer-hackfest-in-milan&quot;&gt;report about the hackfest&lt;/a&gt; too. I also wanted to thank &lt;a class=&quot;reference external&quot; href=&quot;http://collabora.com&quot;&gt;Collabora&lt;/a&gt;
and &lt;a class=&quot;reference external&quot; href=&quot;http://fluendo.com&quot;&gt;Fluendo&lt;/a&gt; for sponsoring dinners. A special thank you as well for
&lt;a class=&quot;reference external&quot; href=&quot;http://igalia.com&quot;&gt;Igalia&lt;/a&gt; which covered my travel expenses and attendance to the
hackfest.&lt;/p&gt;</content:encoded>
	<dc:date>2013-04-01T10:29:37+00:00</dc:date>
</item>
<item rdf:about="http://wingolog.org/2013/03/26/sexuality-and-sexism">
	<title>Andy Wingo: sexuality and sexism</title>
	<link>http://wingolog.org/archives/2013/03/26/sexuality-and-sexism</link>
	<content:encoded>&lt;div&gt;&lt;p&gt;Greetings, dear readers.  Today's article is not about compilers, but about the people that write and run them.  Like me, and like you.&lt;/p&gt;&lt;p&gt;I write a lot about programming here because it's interesting to me and it makes me happy, but that's not the extent of my desires as a human.  Among all the things, and perhaps even foremost among them, is the desire to live in a more beautiful world: a world of making and sharing, of nature abloom, and of people too: a world, in short, full of life.&lt;/p&gt;&lt;p&gt;Part of that life is sexual, and how wonderfully, playfully, rightfully so.  But the world as a whole would be better if we kept sexuality out of programming and other male-dominated pursuits.&lt;/p&gt;&lt;p&gt;The reason for this is that sexuality (for example, in the form of sexual jokes) among a group of men creates a kind of &quot;boy's club&quot; atmosphere in which people that aren't in the straight male majority feel uncomfortable.  A &quot;boy's club&quot; has a virtual &quot;no girls or queers allowed&quot; sign on it.  It's just not a comfortable place to be, for non-club-members.&lt;/p&gt;&lt;p&gt;Of course, sometimes being uncomfortable is good.  But being uncomfortable because of your gender is not one of those cases.  And even, it must be said, sometime it goes beyond discomfort to danger -- conferences that women do not attend for fear of groping; things that women cannot say for fear of rape threats.  There is no hyperbole here.  It is an astonishing, indignation-provoking injustice.&lt;/p&gt;&lt;p&gt;How did it get this bad?&lt;/p&gt;&lt;p&gt;As usual, through small steps.  One of the first is widespread toleration of unrelated sexuality in male-dominated fields: boy's clubs.  So I think that we all -- and especially men, and especially people with respect within a community -- should actively discourage any of these factors that lead to &quot;boy's clubs&quot;.  A joke that &quot;I'd fork &lt;i&gt;that&lt;/i&gt; project&quot; is not OK.  It would be fine if it were just a lame joke; but it's not fine because it's part of this whole &quot;boy's club&quot; thing.&lt;/p&gt;&lt;p&gt;Incidentally, there is a name for the structural tendency to favor one gender over another in a group that isn't &quot;boy's club&quot;, and it is &quot;sexism&quot;.  Sometimes people dismiss sexism in programming because, you know, &quot;show me the code&quot;, but this misses the broader picture.  I personally have profited immensely from the personal connections I have made at the many conferences that I have attended.  I've even put up with some &quot;boy's club&quot; jokes on the same level as &quot;fork-&lt;i&gt;that&lt;/i&gt;-repo&quot;.  I think a woman would find it more difficult to make some of these connections, and so would not end up producing the patches I do.&lt;/p&gt;&lt;p&gt;So, friends, if you are with me in recognizing this structural injustice called sexism, a stain upon our community of compiler hackers and users, I think this is an occasion in which imperative programming is acceptable and even appropriate.  Learn to recognize &quot;boy's clubs&quot; and work constructively against them.  &lt;a href=&quot;http://adainitiative.org/2013/02/keeping-it-on-topic-the-problem-with-discussing-sex-at-technical-conferences/&quot;&gt;Sex and tech is usually a bad idea&lt;/a&gt;, so point this out when you see it -- especially if you are a man -- and support &lt;a href=&quot;http://www.forbes.com/sites/deannazandt/2013/03/22/why-asking-what-adria-richards-could-have-done-differently-is-the-wrong-question/&quot;&gt;others who do the same&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2013-03-26T20:07:10+00:00</dc:date>
	<dc:creator>Andy Wingo</dc:creator>
</item>
<item rdf:about="http://jeff.ecchi.ca/blog/?p=2381">
	<title>Jean-François Fortin Tam: La carte Opus et les points de service qui n’en sont pas vraiment</title>
	<link>http://jeff.ecchi.ca/blog/2013/03/25/la-carte-opus-et-les-points-de-service-qui-nen-sont-pas-vraiment/</link>
	<content:encoded>&lt;p&gt;Il se trouve que les &lt;a href=&quot;http://carteopus.info&quot;&gt;cartes Opus&lt;/a&gt; expirent (simplement parce qu&amp;#8217;ils ont décidé que ça serait cool que ça expire, même si c&amp;#8217;est une carte anonyme à tarif régulier). Chez moi, la pharmacie du coin a toujours offert le service de recharge de titres de transports, et c&amp;#8217;est donc avec un grosse absence d&amp;#8217;excitation que j&amp;#8217;ai reçu la nouvelle du CIT Richelain comme quoi «le CIT a maintenant un point de service sur son territoire! C&amp;#8217;est la pharmacie Jean Coutu où vous faisiez déjà vos transactions depuis dix ans!».&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-2381&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignnone size-full wp-image-2382&quot; alt=&quot;poker face&quot; src=&quot;http://jeff.ecchi.ca/blog/wp-content/uploads/poker-face.png&quot; width=&quot;300&quot; height=&quot;375&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Or, ma carte Opus du moment était sur le point d&amp;#8217;expirer (en vérifiant le numéro de série sur le site web dédié). Le site en question nous assure à maintes reprises que le renouvellement obligatoire, étant un caprice des administrateurs de l&amp;#8217;Opus, est entièrement gratuit. Dans &lt;a href=&quot;http://carteopus.info/faq&quot;&gt;la FAQ&lt;/a&gt;, on trouve ceci:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;3. Où dois-je aller pour remplacer sans frais ma carte OPUS ?&lt;br /&gt;
Présentez-vous avec votre carte qui expire dans moins de trois mois ou qui est expirée depuis moins de 6 mois dans un centre de service de la STM ou dans une billetterie métropolitaine de l&amp;#8217;AMT, ou dans un centre de service d&amp;#8217;un CIT.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Pour être doublement certain, la même chose en d&amp;#8217;autres termes:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;8. Je ne veux pas payer les frais de 6 $, que dois-je faire pour éviter ces frais ?&lt;/p&gt;
&lt;p&gt;Présentez-vous avec votre carte qui arrive à expiration dans moins de 3 mois ou qui est expirée depuis moins de 6 mois dans un centre de service de la STM ou dans une billetterie métropolitaine de l&amp;#8217;AMT, ou dans un centre de service d&amp;#8217;un CIT pour obtenir une nouvelle carte OPUS sans avoir à payer les frais de 6 $.&lt;/p&gt;
&lt;p&gt;S&amp;#8217;il y a des titres de transport valides sur votre carte, ceux-ci seront transférés sur votre nouvelle carte.&lt;br /&gt;
[...]&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Telle ne fut pas ma surprise lorsque, après avoir échangé ma carte chez PJC, on me demande des frais de renouvellement de 6$. Je m&amp;#8217;objecte:&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;size-full wp-image-2383 alignleft&quot; alt=&quot;neutral-suspicious&quot; src=&quot;http://jeff.ecchi.ca/blog/wp-content/uploads/neutral-suspicious.png&quot; width=&quot;198&quot; height=&quot;214&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;«Uuuuuh. Non, pas s&amp;#8217;pôsé. Le site officiel de la carte Opus dit que le renouvellement est gratuit dans un point de service du CIT et il n&amp;#8217;est pas question que je paie pour le faire, sinon j&amp;#8217;aurais conservé ma carte qui a encore trois mois d&amp;#8217;usage avant expiration»&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;S&amp;#8217;en suit des regards confus des deux caissières devant moi, un appel à la direction qui décide d&amp;#8217;annuler les frais «pour cette fois» (vu que la procédure est déjà toute faite, qu&amp;#8217;ils ont déjà exigé une montagne de mes renseignements personnels pour une carte anonyme et qu&amp;#8217;ils ont déjà invalidé l&amp;#8217;ancienne).&lt;/p&gt;
&lt;p&gt;On me dit toutefois que si je ne veux pas payer de tels frais, il faudrait que j&amp;#8217;aille à la billetterie de l&amp;#8217;AMT à Montréal. &lt;em&gt;Brillant.&lt;/em&gt; Il sert à quoi, votre point de service «officiel» sur la rive sud?&lt;/p&gt;
&lt;p&gt;Pour vérifier, je téléphone au CIT/Gestrans&amp;#8230; qui eux-mêmes n&amp;#8217;étaient visiblement pas au courant du fait que le site de la carte Opus indique que le renouvellement est gratuit. Après m&amp;#8217;avoir fait patienter, on me dit que non, il faut vraiment aller à la billetterie métropolitaine au centre-ville.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;«Donc le point de service officiel sur le territoire du CIT n&amp;#8217;est pas plus utile qu&amp;#8217;avant?&lt;/p&gt;
&lt;p&gt;— Ouaip.»&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Regardons de nouveau le site d&amp;#8217;information sur le renouvellement de la carte opus. L&amp;#8217;explication du tonnerre qui nous dévoile un peu le fouillis dans lequel on se trouve:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;4. Pourquoi doit-on se présenter dans un centre de service de la STM, dans une billetterie métropolitaine de l&amp;#8217;AMT, ou un centre de service d&amp;#8217;un CIT pour faire remplacer sans frais la carte OPUS qui arrive à expiration ou qui est expirée ?&lt;/p&gt;
&lt;p&gt;Parce que les centres de service et les billetteries possèdent l&amp;#8217;équipement requis pour effectuer tous les types de transaction (renouvellement, reconstitution, transferts des titres de transport restants, etc.) alors que dans un point de vente, le marchand n&amp;#8217;est autorisé qu&amp;#8217;à effectuer la vente des titres de transport et, par le fait même, vous demandera de payer les frais de 6 $ pour votre nouvelle carte OPUS.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Pourtant, selon &lt;a href=&quot;http://www.citrichelain.com/CITWhatsNew.aspx?ID=35&quot;&gt;l&amp;#8217;annonce&lt;/a&gt;, c&amp;#8217;est bien un point de service officiel dont on parle:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Le CIT est fier de vous annoncer l&amp;#8217;ouverture d&amp;#8217;un centre de service sur son territoire. [...] Le centre de service est situé au: Esc. André Lachapelle Inc. – Jean Coutu [...]&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Plus amusant encore:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;7. Puis-je faire renouveler ou échanger ma carte dans un point de vente (dépanneur, pharmacie), ou dans une distributrice de titres de transport ?&lt;br /&gt;
Aucun renouvellement ou échange ne peut se faire dans un point de vente, ou à une distributrice de titres de transport. Le renouvellement ou l&amp;#8217;échange des cartes qui expirent dans moins de trois mois, ou qui sont expirées depuis moins de 6 mois, doivent se faire dans un centre de service de la STM ou dans une billetterie métropolitaine de l&amp;#8217;AMT, ou dans un centre de service d&amp;#8217;un CIT.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Bref, si la pharmacie du coin n&amp;#8217;était pas effectivement un centre de service officiel du CIT, on n&amp;#8217;aurait pas été en mesure de m&amp;#8217;y renouveler ma carte (ce qui a pourtant été le cas)!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Mais monsieur, on peut pas vous le faire gratuitement parce qu&amp;#8217;on peut pas, mais on peut, mais on peut pas. Enfin pas vraiment.&lt;br /&gt;
&lt;/em&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2013-03-26T03:25:05+00:00</dc:date>
</item>
<item rdf:about="http://gstreamer.freedesktop.org/news/#2013-03-22T17:40:00Z">
	<title>GStreamer: GStreamer OpenMAX IL wrapper plugin 1.0.0 release</title>
	<link>http://gstreamer.freedesktop.org/news/#2013-03-22T17:40:00Z</link>
	<content:encoded>&lt;p&gt;
The GStreamer team is pleased to announce the first GStreamer OpenMAX IL wrapper plugin
release for the new API and ABI-stable 1.x series of the GStreamer multimedia
framework.
        &lt;/p&gt;&lt;p&gt;
Check out the release notes for
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-omx/1.0.0.html&quot;&gt;gst-omx&lt;/a&gt;,
or download tarballs for
&lt;a href=&quot;http://gstreamer.freedesktop.org/src/gst-omx/gst-omx-1.0.0.tar.xz&quot;&gt;gst-omx&lt;/a&gt;,
        &lt;/p&gt;</content:encoded>
	<dc:date>2013-03-22T17:40:00+00:00</dc:date>
</item>
<item rdf:about="http://gstreamer.freedesktop.org/news/#2013-03-22T16:00:00Z">
	<title>GStreamer: GStreamer Core and Plugins 1.0.6 bug-fix release</title>
	<link>http://gstreamer.freedesktop.org/news/#2013-03-22T16:00:00Z</link>
	<content:encoded>&lt;p&gt;
The GStreamer team is pleased to announce a new bug-fix release for the
new API and ABI-stable 1.x series of the GStreamer multimedia
framework.
        &lt;/p&gt;&lt;p&gt;
Check out the release notes for
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gstreamer/1.0.6.html&quot;&gt;GStreamer core&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-plugins-base/1.0.6.html&quot;&gt;gst-plugins-base&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-plugins-good/1.0.6.html&quot;&gt;gst-plugins-good&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-plugins-ugly/1.0.6.html&quot;&gt;gst-plugins-ugly&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-plugins-bad/1.0.6.html&quot;&gt;gst-plugins-bad&lt;/a&gt;, or
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-libav/1.0.6.html&quot;&gt;gst-libav&lt;/a&gt;,
or download tarballs for
&lt;a href=&quot;http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.0.6.tar.xz&quot;&gt;gstreamer&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.0.6.tar.xz&quot;&gt;gst-plugins-base&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.0.6.tar.xz&quot;&gt;gst-plugins-good&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.0.6.tar.xz&quot;&gt;gst-plugins-ugly&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.0.6.tar.xz&quot;&gt;gst-plugins-bad&lt;/a&gt;, or
&lt;a href=&quot;http://gstreamer.freedesktop.org/src/gst-libav/gst-libav-1.0.6.tar.xz&quot;&gt;gst-libav&lt;/a&gt;,
        &lt;/p&gt;&lt;p&gt;
Improvements include:
        &lt;ul&gt;
    &lt;li&gt;build fixes for out-of-tree autogen.sh and automake 1.13, and recent kernel/video4linux&lt;/li&gt;
    &lt;li&gt;gobject-introspection fixes for bindings&lt;/li&gt;
    &lt;li&gt;videoscale: Correct DAR and border calculations&lt;/li&gt;
    &lt;li&gt;playbin: make sure converters are always plugged when needed, fixes not-negotiated errors with some sinks&lt;/li&gt;
    &lt;li&gt;playbin: fix subtitleoverlay caps handling to avoid not-negotiated errors when subtitle plugins are missing&lt;/li&gt;
    &lt;li&gt;adder: make &quot;caps&quot; property work properly&lt;/li&gt;
    &lt;li&gt;alsasink: don't use 100% CPU in some cases&lt;/li&gt;
    &lt;li&gt;reliability fixes for flushing seeks and shutdowns in queue and bastransform&lt;/li&gt;
    &lt;li&gt;appsrc: fix locking order&lt;/li&gt;
    &lt;li&gt;audiovisualisation fixes&lt;/li&gt;
    &lt;li&gt;deinterlace: fix infinite loop on EOS with non-default methods or fields&lt;/li&gt;
    &lt;li&gt;avidemux push mode fixes, make dv-in-avidemux work&lt;/li&gt;
    &lt;li&gt;level: send a final level message on EOS&lt;/li&gt;
    &lt;li&gt;osxvideosink fixes&lt;/li&gt;
    &lt;li&gt;ximagesrc: Set the pixel aspect ratio correctly in the output caps&lt;/li&gt;
    &lt;li&gt;v4l2: don't check stride for encoded formats&lt;/li&gt;
    &lt;li&gt;leak fixes in GstBin, pango, auparse, gdppay&lt;/li&gt;
    &lt;li&gt;qtdemux: skip disabled tracks and ignore chapter subtitle tracks&lt;/li&gt;
    &lt;li&gt;RTSP and RTP fixes&lt;/li&gt;
    &lt;li&gt;Opus audio decoder, encoder and RTP payloader fixes&lt;/li&gt;
    &lt;li&gt;codecparser fixes for H.264, MPEG-2 and VC-1 parsing&lt;/li&gt;
    &lt;li&gt;opensles, eglglessink, and decklink plugins ported to 1.0&lt;/li&gt;
    &lt;li&gt;libav: fix H.264 decoding errors in some files and update to 0.8.5 release&lt;/li&gt;

    &lt;li&gt;miscellaneous &lt;a href=&quot;https://bugzilla.gnome.org/buglist.cgi?product=GStreamer&amp;target_milestone=1.0.6&quot;&gt;bug fixes&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
        &lt;/p&gt;</content:encoded>
	<dc:date>2013-03-22T16:00:00+00:00</dc:date>
</item>
<item rdf:about="http://zee-nix.blogspot.com/feeds/3409133375404325321/comments/default">
	<title>Zeeshan Ali: New in Boxes 3.8</title>
	<link>http://www.advogato.org/person/zeenix/diary.html?start=317</link>
	<content:encoded>&lt;div&gt;&lt;div&gt;We just rolled out &lt;a href=&quot;http://live.gnome.org/Boxes/&quot;&gt;Boxes &lt;/a&gt;&lt;a href=&quot;http://download.gnome.org/sources/gnome-boxes/3.7/gnome-boxes-3.7.92.tar.xz&quot;&gt;3.7.92&lt;/a&gt; and have now entered code freeze. This means that apart from translations and doc updates, Boxes is ready for the stable 3.8 release (due next Monday). So whats new you ask? Since Boxes 3.6, we have been hard at work, making Boxes an app that is so awesome that it makes you want to use virtual machines if you are not already. :) Boxes is now a lot more reliable, has improved and more impressive UI and has cool new features:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Add USB redirection support in new VMs and option to add it into existing VMs. i-e You can use your USB devices (camera, flash drive etc) plugged into host from the guest operating system.&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-FYRm-IFuewo/UUkLjh3K1YI/AAAAAAAAEJM/dWcXGva72DM/s1600/Screenshot+from+2013-03-20+03:02:21.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;194&quot; src=&quot;http://2.bp.blogspot.com/-FYRm-IFuewo/UUkLjh3K1YI/AAAAAAAAEJM/dWcXGva72DM/s320/Screenshot+from+2013-03-20+03:02:21.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-J2bMGKsbQ3E/UUkLtb0xtoI/AAAAAAAAEJc/RTVITW7JGPE/s1600/Screenshot+from+2013-03-20+03:04:19.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;http://2.bp.blogspot.com/-J2bMGKsbQ3E/UUkLtb0xtoI/AAAAAAAAEJc/RTVITW7JGPE/s320/Screenshot+from+2013-03-20+03:04:19.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Smart_card&quot;&gt;Smartcard support&lt;/a&gt;. This means if you have an appropriate reader device, you can use that to read information from your smart cards (credit/bank cards etc) from your virtual machine boxes.&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Automatically download and installation of all virtio and QXL drivers, and spice-vdagent as part of Windows XP and Windows 7 express installation. This means following working out of the box:&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;div&gt;Copy&amp;amp;paste between host and VM.&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Guest resolution automatically adjusted to fit the Boxes window.&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Very efficient disk I/O (helps in reducing installation time e.g).&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href=&quot;http://youtu.be/AdD-8pX8JtM&quot;&gt;Here&lt;/a&gt; is a screencast of Windows XP with QXL in action.&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;div&gt;&lt;a href=&quot;http://www.ovirt.org/Documentation&quot;&gt;oVirt&lt;/a&gt; support. This means you can now access all your virtual machines running on a (most likely remote) oVirt broker from Boxes by simply providing it's URL. &lt;a href=&quot;http://cfergeau.blogspot.fi/2012/07/outside-boxes.html&quot;&gt;Christophe blogged&lt;/a&gt; about it last year.&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Improved selection view:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Option to pause VMs.&lt;/li&gt;&lt;li&gt;Options to select all, none and running boxes.&lt;/li&gt;&lt;li&gt;Allow accessing properties for non-running VMs. &lt;/li&gt;&lt;/ul&gt; &lt;/ul&gt;&lt;ul&gt;&lt;a href=&quot;http://youtu.be/aA1uDeoETHw&quot;&gt;Here&lt;/a&gt; is a screencast of new selection view in action.&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Allow tweaking properties for remote machines in the wizard.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;UI looks a lot more like UI mockups and more consistent with Documents.&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Add initial experience greeting. As a consequence, we don't auto-launch wizard on first time usage anymore.&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-Qc_AaBiaPLo/UUkXwv0blPI/AAAAAAAAEJ0/cQtCWKrScF8/s1600/Screenshot+from+2013-03-20+03%253A34%253A04.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;194&quot; src=&quot;http://2.bp.blogspot.com/-Qc_AaBiaPLo/UUkXwv0blPI/AAAAAAAAEJ0/cQtCWKrScF8/s320/Screenshot+from+2013-03-20+03%253A34%253A04.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Please ignore the notification about box deletion. You don't get that on first use, I promise!&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Support for changing the CD-ROM device/ISO from properties. You can see this option in  the screenshot above along with USB redirection options.&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Selecting item when maximized automatically enters fullscreen view. You see this in action in the &lt;a href=&quot;http://youtu.be/AdD-8pX8JtM&quot;&gt;QXL demo screencast&lt;/a&gt; I pointed to above.&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Mark recommended RAM and storage of guest OS (when known) in properties.&lt;span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-LRfZ-eLOYS4/UUka8k-mXZI/AAAAAAAAEJ8/sBdm3bB57TE/s1600/Screenshot+from+2013-03-20+03:36:50.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;194&quot; src=&quot;http://1.bp.blogspot.com/-LRfZ-eLOYS4/UUka8k-mXZI/AAAAAAAAEJ8/sBdm3bB57TE/s320/Screenshot+from+2013-03-20+03:36:50.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Allow search with multiple terms. A search like &quot;foo bar&quot; now means name containing &quot;foo&quot; and &quot;bar&quot;. This is nicer, and what you expect from e.g. gnome-shell search.&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Allow drag to unfullscreen Boxes.&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Troubleshooting log viewer to system properties.&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;For Developers:&lt;span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;We now make use of &lt;a href=&quot;http://libosinfo.org/&quot;&gt;libosinfo&lt;/a&gt; for express/automated installations. Support for new OSes/distros can be added through libosinfo. No Vala or C hacking needed, only XSL/XML.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Loads of other fixes and minor improvements. For more details: &lt;a href=&quot;http://git.gnome.org/browse/gnome-boxes/tree/NEWS&quot;&gt;http://git.gnome.org/browse/gnome-boxes/tree/NEWS &lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;Hope you &lt;strike&gt;like&lt;/strike&gt; love Boxes 3.8!&lt;/div&gt;</content:encoded>
	<dc:date>2013-03-20T03:06:58+00:00</dc:date>
</item>
<item rdf:about="http://www.advogato.org/person/ensonic/diary.html?start=137">
	<title>Stefan Kost: 14 Mar 2013</title>
	<link>http://www.advogato.org/person/ensonic/diary.html?start=137</link>
	<content:encoded>&lt;b&gt;buzztard&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
As I already mentioned in last months issue, I ported buzztard and gst-buzztard to use gstreamer-1.0. It will require 1.1.X for some fixes in gstreamer itself. So how did it went. The basic porting to make it compile against 1.0 took about 20 hours spread over a couple of days. It is quite straight forward. I updated the &lt;a href=&quot;http://cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/random/porting-to-1.0.txt&quot; title=&quot;porting guide&quot;&gt;porting guide&lt;/a&gt; where things were not mentioned.&lt;br /&gt;
&lt;br /&gt;
The more tricky part where the soft api changes. At this port I was running the apps with G_DEBUG=fatal_warnings. The property name changes here and there we easy to fix. Also request pad name changes (%d -&gt; _%u) took not too long to handle. Other things like caps negotiation kept me busy for a few evenings. For once I was e.g. writing GST_AUDIO_NE (&quot;S16&quot;) instead of GST_AUDIO_NE (S16) which leads to caps negotiation failing. Another recommendation is to avoid setting channel-mask=3 for stereo caps. It is purely optional, most elements drop it anyway and by leaving it out, you can merge the mono and stereo caps.&lt;br /&gt;
&lt;br /&gt;
I ported freeverb in plugins-bad and made fixed to audiopanorama and adder. Adder and collectpads have a few more new tests upstream. Another things that took a while was getting seek-in-ready to work again. Buzztard needs to configure the playback segment from the application, as the sources happy beep for all eternity. In 0.10 I could send a seek to my bin in ready, in 1.0 it gets dropped (pads are flushing). Now I recursively iterate over sources and seek on all of them. This is only needed to get to playing. To get these things fixed I ported a few of my stand alone examples, but the majority of this is still left unported.&lt;br /&gt;
&lt;br /&gt;
Now the basics seem to work. I am confident that I can fix the remaining issues in march and look forward to attend the hackfest in &lt;a href=&quot;http://gstreamer.freedesktop.org/wiki/GStreamerHackfest2013&quot; title=&quot;Milano over easter&quot;&gt;Milano over easter&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
The porting for buzztard:&lt;br /&gt;
69 files changed, 1909 insertions(+), 1473 deletions(-)&lt;br /&gt;
The porting for gst-buzztard:&lt;br /&gt;
34 files changed, 1254 insertions(+), 1414 deletions(-)&lt;br /&gt;
&lt;br /&gt;
The other thing I was doing this month was to experiment with embeddable scripting engines. I wrote a toy gtk app that opens a window, sets up the scripting engine, registers a function to get the window handle and start a script that calls the function to get the window and adds a vbox with two labels. I did that for lua, seed and gjs. For lua it took 30 min, for seek it took 30min, for gjs it took 2 hours and is still not working fully (the custom function returning a gobject).&lt;br /&gt;
&lt;br /&gt;
69 files changed, 1907 insertions(+), 1507 deletions(-)&lt;br /&gt;</content:encoded>
	<dc:date>2013-03-14T20:13:40+00:00</dc:date>
</item>
<item rdf:about="http://blog.mikeasoft.com/?p=598">
	<title>Michael Sheldon: Ogre3D on Jolla’s SailfishOS</title>
	<link>http://blog.mikeasoft.com/2013/02/28/ogre3d-on-jollas-sailfishos/</link>
	<content:encoded>&lt;p&gt;I spent a bit of time hacking around with the &lt;a href=&quot;https://sailfishos.org/&quot;&gt;Sailfish SDK&lt;/a&gt; and managed to get a rough port of &lt;a href=&quot;http://ogre3d.org&quot;&gt;Ogre3D&lt;/a&gt; working: &lt;/p&gt;
&lt;p&gt;&lt;center&gt;&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=dGW4sw6qB5E&quot;&gt;Video of Ogre3D running under Sailfish&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; This is running within the emulator using the Mesa LLVM OpenGL ES 2.0 implementation, so naturally I won&amp;#8217;t be able to say for certain if a port is possible for actual phones running Sailfish until I get my hands on some hardware, but it seems hopeful.&lt;/p&gt;</content:encoded>
	<dc:date>2013-02-28T21:26:10+00:00</dc:date>
</item>
<item rdf:about="http://wingolog.org/2013/02/25/on-generators">
	<title>Andy Wingo: on generators</title>
	<link>http://wingolog.org/archives/2013/02/25/on-generators</link>
	<content:encoded>&lt;div&gt;&lt;p&gt;Hello!  Is this dog?&lt;/p&gt;&lt;p&gt;&lt;center&gt;&lt;img src=&quot;http://wingolog.org/pub/yes-this-is-dog.png&quot; /&gt;&lt;/center&gt;&lt;/p&gt;&lt;p&gt;Hi dog this is Andy, with some more hacking nargery.  Today the topic is generators.&lt;/p&gt;&lt;p&gt;&lt;b&gt;(shift k)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;By way of introduction, you might recall (with a shudder?) a &lt;a href=&quot;http://wingolog.org/archives/2010/02/14/sidelong-glimpses&quot;&gt;couple&lt;/a&gt; of &lt;a href=&quot;http://wingolog.org/archives/2010/02/26/guile-and-delimited-continuations&quot;&gt;articles&lt;/a&gt; I wrote in the past on &lt;a href=&quot;http://www.gnu.org/software/guile/manual/html_node/Prompts.html&quot;&gt;delimited continuations&lt;/a&gt;.  I even gave a &lt;a href=&quot;http://wingolog.org/pub/qc-2012-delimited-continuations-slides.pdf&quot;&gt;talk on delimited continuations&lt;/a&gt; at FrOSCon last year, a talk that was so hot that thieves broke into the the FrOSCon video squad's room and stole their hard drives before the edited product could hit the tubes.  Not kidding!  The FrOSCon folks still have the tapes somewhere, but meanwhile time marches on without the videos; truly, the terrorists have won.&lt;/p&gt;&lt;p&gt;Anyway, the summary of all that is that Scheme's much-praised &lt;tt&gt;call-with-current-continuation&lt;/tt&gt; isn't actually a great building block for composable abstractions, and that delimited continuations have much better properties.&lt;/p&gt;&lt;p&gt;So imagine my surprise when Oleg Kiselyov, in a &lt;a href=&quot;http://lists.scheme-reports.org/pipermail/scheme-reports/2012-February/001824.html&quot;&gt;mail to the Scheme standardization list&lt;/a&gt;, suggested a different replacement for &lt;tt&gt;call/cc&lt;/tt&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;My bigger suggestion is to remove &lt;tt&gt;call/cc&lt;/tt&gt; and &lt;tt&gt;dynamic-wind&lt;/tt&gt; from the base library into an optional feature. I'd like to add the note inviting the discussion for more appropriate abstractions to supersede &lt;tt&gt;call/cc&lt;/tt&gt; -- such [as] generators, for example.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;He elaborated in &lt;a href=&quot;http://lists.scheme-reports.org/pipermail/scheme-reports/2012-February/001872.html&quot;&gt;another mail&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Generators are a wide term, some versions of generators are equivalent (equi-expressible) to shift/reset. Roshan James and Amr Sabry have written a &lt;a href=&quot;http://www.cs.indiana.edu/~sabry/papers/yield.pdf&quot;&gt; paper about all kinds of generators, arguing for the generator interface&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;And you know, generators are indeed a very convenient abstraction for composing producers and consumers of values -- more so than the lower-level delimited continuations.  Guile's failure to standardize a generator interface is an instance of a class of Scheme-related problems, in which generality is treated as more important than utility.  It's true that you can do generators in Guile, but we shouldn't make the user build their own.&lt;/p&gt;&lt;p&gt;The rest of the programming world moved on and built generators into their languages.  James and Sabry's paper is good because it looks at &lt;tt&gt;yield&lt;/tt&gt; as a kind of mainstream form of delimited continuations, and uses that perspective to place the generators of common languages in a taxonomy.  Some of them are as expressive as delimited continuations.  There are are also two common restrictions on generators that trade off expressive power for ease of implementation:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Generators can be restricted to disallow backtracking, as in Python.  This allows generators to yield without allocating memory for a new saved execution state, instead updating the stored continuation in-place.  This is commonly called the &lt;i&gt;one-shot&lt;/i&gt; restriction.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Generators can also restrict access to their continuation.  Instead of reifying generator state as external iterators, internal iterators call their consumers directly.  The first generators developed by Mary Shaw in the Alphard language were like this, as are the generators in Ruby.  This can be called the &lt;i&gt;linear-stack&lt;/i&gt; restriction, after an implementation technique that they enable.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;With that long introduction out of the way, I wanted to take a look at the proposal for generators in the latest ECMAScript draft reports -- to examine their expressiveness, and to see what implementations might look like.  ES6 specifies generators with the the first kind of restriction -- with external iterators, like Python.&lt;/p&gt;&lt;p&gt;Also, Kiselyov &amp;amp; co. have a hip new paper out that explores the expressiveness of linear-stack generators, &lt;a href=&quot;http://okmij.org/ftp/continuations/PPYield/yield-pp.pdf&quot;&gt;&lt;i&gt;Lazy v. Yield: Incremental, Linear Pretty-printing&lt;/i&gt;&lt;/a&gt;.  I was quite skeptical of this paper's claim that internal iterators were significantly more efficient than external iterators.  So this article will also look at the performance implications of the various forms of generators, including full resumable generators.&lt;/p&gt;&lt;p&gt;&lt;b&gt;ES6 iterators&lt;/b&gt;&lt;/p&gt;&lt;p&gt;As you might know, there's an official ECMA committee beavering about on a new revision of the ECMAScript language, and they would like to include both &lt;dfn&gt;iterators&lt;/dfn&gt; and &lt;dfn&gt;generators&lt;/dfn&gt;.&lt;/p&gt;&lt;p&gt;For the purposes of ECMAScript 6 (ES6), an &lt;dfn&gt;iterator&lt;/dfn&gt; is an object with a &lt;tt&gt;next&lt;/tt&gt; method.  Like this one:&lt;/p&gt;&lt;pre&gt;
var p = console.log;

function integers_from(n) {
  function next() {
    return this.n++;
  }
  return { n: n, next: next };
}

var ints = integers_from(0);
p(ints.next()); // prints 0
p(ints.next()); // prints 1
&lt;/pre&gt;&lt;p&gt;Here, &lt;tt&gt;int_gen&lt;/tt&gt; is an iterator that returns successive integers from 0, all the way up to &lt;strike&gt;infinity&lt;/strike&gt;&lt;a href=&quot;http://www.jwz.org/blog/2010/10/every-day-i-learn-something-new-and-stupid/&quot;&gt;2^53&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;To indicate the end of a sequence, the current ES6 drafts follow Python's example by having the &lt;tt&gt;next&lt;/tt&gt; method throw a special exception.  ES6 will probably have an &lt;tt&gt;isStopIteration()&lt;/tt&gt; predicate in the &lt;tt&gt;@iter&lt;/tt&gt; module, but for now I'll just compare directly.&lt;/p&gt;&lt;pre&gt;
function StopIteration() {}
function isStopIteration(x) { return x === StopIteration; }

function take_n(iter, max) {
  function next() {
    if (this.n++ &amp;lt; max)
      return iter.next();
    else
      throw StopIteration;
  }
  return { n: 0, next: next };
}

function fold(f, iter, seed) {
  var elt;
  while (1) {
    try {
      elt = iter.next();
    } catch (e) {
      if (isStopIteration (e))
        break;
      else
        throw e;
    }
    seed = f(elt, seed);
  }
  return seed;
}

function sum(a, b) { return a + b; }

p(fold(sum, take_n(integers_from(0), 10), 0));
// prints 45
&lt;/pre&gt;&lt;p&gt;Now, I don't think that we can praise this code for being particularly elegant.  The end result is pretty good: we take a limited amount of a stream of integers, and combine them with a fold, without creating intermediate data structures.  However the means of achieving the result -- the implementation of the producers and consumers -- are nasty enough to prevent most people from using this idiom.&lt;/p&gt;&lt;p&gt;To remedy this, ES6 does two things.  One is some &quot;sugar&quot; over the use of iterators, the &lt;tt&gt;for-of&lt;/tt&gt; form.  With this sugar, we can rewrite &lt;tt&gt;fold&lt;/tt&gt; much more succinctly:&lt;/p&gt;&lt;pre&gt;
function fold(f, iter, seed) {
  for (var x of iter)
    seed = f(x, seed);
  return seed;
}
&lt;/pre&gt;&lt;p&gt;The other thing offered by ES6 are &lt;dfn&gt;generators&lt;/dfn&gt;.  Generators are functions that can &lt;tt&gt;yield&lt;/tt&gt;.  They are defined by &lt;tt&gt;function*&lt;/tt&gt;, and yield their values using iterators:&lt;/p&gt;&lt;pre&gt;
function* integers_from(n) {
  while (1)
    yield n++;
}

function* take_n(iter, max) {
  var n = 0;
  while (n++ &amp;lt; max)
    yield iter.next();
}
&lt;/pre&gt;&lt;p&gt;These definitions are mostly equivalent to the previous iterator definitions, and are much nicer to read and write.&lt;/p&gt;&lt;p&gt;I say &quot;mostly equivalent&quot; because generators are closer to coroutines in their semantics because they can also receive values or exceptions from their caller via the &lt;tt&gt;send&lt;/tt&gt; and &lt;tt&gt;throw&lt;/tt&gt; methods.  This is very much as in Python.  &lt;a href=&quot;http://taskjs.org/&quot;&gt;Task.js&lt;/a&gt; is a nice example of how a coroutine-like treatment of generators can help avoid the &lt;a href=&quot;http://wingolog.org/archives/2005/04/06/100&quot;&gt;fraction-of-an-action&lt;/a&gt; callback mess in frameworks like &lt;strike&gt;Twisted&lt;/strike&gt;node.js.&lt;/p&gt;&lt;p&gt;There is also a &lt;tt&gt;yield*&lt;/tt&gt; operator to delegate to another generator, as in &lt;a href=&quot;http://www.python.org/dev/peps/pep-0380/&quot;&gt;Python's PEP 380&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;OK, now that you know all the things, it's time to ask (and hopefully answer) a few questions.&lt;/p&gt;&lt;p&gt;&lt;b&gt;design of ES6 iterators&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Firstly, has the ES6 committee made the right decisions regarding the iterators proposal?  For me, I think they did well in choosing external iterators over internal iterators, and the choice to duck-type the iterator objects is a good one.  In a language like ES6, lacking delimited continuations or cross-method generators, external iterators are more expressive than internal iterators.  The &lt;tt&gt;for-of&lt;/tt&gt; sugar is pretty nice, too.&lt;/p&gt;&lt;p&gt;Of course, expressivity isn't the only thing.  For iterators to be maximally useful they have to be fast, and here I think they could do better.  Terminating iteration with a &lt;tt&gt;StopIteration&lt;/tt&gt; exception is not so great.  It will be hard for an optimizing compiler to rewrite the &lt;tt&gt;throw&lt;/tt&gt;/&lt;tt&gt;catch&lt;/tt&gt; loop terminating condition into a simple &lt;tt&gt;goto&lt;/tt&gt;, and with that you lose some visibility about your loop termination condition.  Of course you can assume that the &lt;tt&gt;throw&lt;/tt&gt; case is not taken, but you usually don't know for sure that there are no more &lt;tt&gt;throw&lt;/tt&gt; statements that you might have missed.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.dartlang.org/articles/m3-whats-new/iterables.html#iterator&quot;&gt;Dart did a better job here&lt;/a&gt;, I think.  They split the &lt;tt&gt;next&lt;/tt&gt; method into two: a &lt;tt&gt;moveNext&lt;/tt&gt; method to advance the iterator, and a &lt;tt&gt;current&lt;/tt&gt; getter for the current value.  Like this:&lt;/p&gt;&lt;pre&gt;
function dart_integers_from(n) {
  function moveNext() {
    this.current++;
    return true;
  }
  return { current: n-1, moveNext: moveNext };
}

function dart_take_n(iter, max) {
  function moveNext() {
    if (this.n++ &amp;lt; max &amp;amp;&amp;amp; iter.moveNext()) {
      this.current = iter.current;
      return true;
    }
    else
      return false;
  }
  return {
    n: 0,
    current: undefined,
    moveNext: moveNext
  };
}

function dart_fold(f, iter, seed) {
  while (iter.moveNext())
    seed = f(iter.current, seed);
}
&lt;/pre&gt;&lt;p&gt;I think it might be fair to say that it's easier to implement an ES6 iterator, but it is easier to use a Dart iterator.  In this case, &lt;tt&gt;dart_fold&lt;/tt&gt; is much nicer, and almost doesn't need any sugar at all.&lt;/p&gt;&lt;p&gt;Besides the aesthetics, Dart's &lt;tt&gt;moveNext&lt;/tt&gt; is transparent to the compiler.  A simple inlining operation makes the termination condition immediately apparent to the compiler, enabling range inference and other optimizations.&lt;/p&gt;&lt;p&gt;&lt;b&gt;iterator performance&lt;/b&gt;&lt;/p&gt;&lt;p&gt;To measure the overhead of &lt;tt&gt;for-of&lt;/tt&gt;-style iteration, we can run benchmarks on &quot;desugared&quot; versions of &lt;tt&gt;for-of&lt;/tt&gt; loops and compare them to normal &lt;tt&gt;for&lt;/tt&gt; loops.  We'll throw in Dart-style iterators as well, and also a stateful closure iterator designed to simulate generators.  (More on that later.)&lt;/p&gt;&lt;p&gt;I put up a &lt;a href=&quot;http://jsperf.com/for-vs-iterators-vs-generators/2&quot;&gt;test case on jsPerf&lt;/a&gt;.  If you click through, you can run the benchmarks directly in your browser, and see results from other users.  It's imprecise, but I believe it is accurate, more or less.&lt;/p&gt;&lt;p&gt;The summary of the results is that current engines are able to run a basic summing &lt;tt&gt;for&lt;/tt&gt; loop in about five cycles per iteration (again, assuming 2.5GHz processors; the Epiphany 3.6 numbers, for example, are mine).  That's suboptimal only by a factor of 2 or so; pretty good.  Thigh fives all around!&lt;/p&gt;&lt;p&gt;However, performance with iterators is not so good.  I was surprised to find that most of the other tests are suboptimal by about a factor of 20.  I expected the engines to do a better job at inlining.&lt;/p&gt;&lt;p&gt;One data point that stands out of my limited data set is the development Epiphany 3.7.90 browser, which uses JavaScriptCore from WebKit trunk.  This browser did significantly better with Dart-style iterators, something I suspect due to better inlining, though I haven't verified it.&lt;/p&gt;&lt;p&gt;Better inlining and stack allocation is already a development focus of modern JS engines.  Dart-style iterators will get faster without being a specific focus of optimization.  It seems like a much better strategy for the ES6 specification to piggy-back off this work and specify iterators in such a way that they will be fast by default, without requiring more work on the exception system, something that is universally reviled among implementors.&lt;/p&gt;&lt;p&gt;&lt;b&gt;what about generators?&lt;/b&gt;&lt;/p&gt;&lt;p&gt;It's tough to know how ES6 generators will perform, because they're not widely implemented and don't have a straightforward &quot;desugaring&quot;.  As far as I know, there is only one practical implementation strategy for &lt;tt&gt;yield&lt;/tt&gt; in JavaScript, and that is to save the function's stack and the set of live registers.  Resuming a generator copies the activation back onto the stack and restores the registers.  Any other strategy that involves higher-level control-flow rewriting would make debugging too difficult.  This is not a terribly onerous requirement for an implementation.  They already have to know exactly what is live and what is not, and can reconstruct a stack frame without too much difficulty.&lt;/p&gt;&lt;p&gt;In practice, invoking a generator is not much different from calling a stateful closure.  For this reason, I added another test to the &lt;a href=&quot;http://jsperf.com/for-vs-iterators-vs-generators/2&quot;&gt;jsPerf benchmark&lt;/a&gt; I mentioned before that tests stateful closures.  It does slightly worse than iterators that keep state in an object, but not much worse -- and there is no essential reason why it should be slow.&lt;/p&gt;&lt;p&gt;On the other hand, I don't think we can expect compilers to do a good job at inlining generators, especially if they are specified as terminating with a &lt;tt&gt;StopIteration&lt;/tt&gt;.  Terminating with an exception has its own quirks, as &lt;a href=&quot;http://blog.cdleary.com/2010/12/a-generator-protocol-trap/&quot;&gt;Chris Leary wrote a few years ago&lt;/a&gt;, though I think in his conclusion he is searching for virtues where there are none.&lt;/p&gt;&lt;p&gt;&lt;b&gt;dogs are curious about multi-shot generators&lt;/b&gt;&lt;/p&gt;&lt;p&gt;So dog, that's ECMAScript.  But since we started with Scheme, I'll close this parenthesis with a note on resumable, multi-shot generators.  What is the performance impact of allowing generators to be fully resumable?&lt;/p&gt;&lt;p&gt;Being able to snapshot your program at any time is pretty cool, but it has an allocation cost.  That's pretty much the dominating factor.  All of the examples that we have seen so far execute (or should execute) without allocating any memory.  But if your generators are resumable -- or even if they aren't, but you build them on top of full delimited continuations -- you can't re-use the storage of an old captured continuation when reifying a new one.  A test of iterating through resumable generators is a test of short-lived allocations.&lt;/p&gt;&lt;p&gt;I ran this test in my Guile:&lt;/p&gt;&lt;pre&gt;
(define (stateful-coroutine proc)
  (let ((tag (make-prompt-tag)))
    (define (thunk)
      (proc (lambda (val) (abort-to-prompt tag val))))
    (lambda ()
      (call-with-prompt tag
                        thunk
                        (lambda (cont ret)
                          (set! thunk cont)
                          ret)))))

(define (integers-from n)
  (stateful-coroutine
   (lambda (yield)
     (let lp ((i n))
       (yield i)
       (lp (1+ i))))))

(define (sum-values iter n)
  (let lp ((i 0) (sum 0))
    (if (&amp;lt; i n)
        (lp (1+ i) (+ sum (iter)))
        sum)))

(sum-values (integers-from 0) 1000000)
&lt;/pre&gt;&lt;p&gt;I get the equivalent of 2 Ops/sec (in terms of the jsPerf results), allocating about 0.5 GB/s (288 bytes/iteration).  This is similar to the allocation rate I get for JavaScriptCore, which is also not generational.  V8's generational collector lets it sustain about 3.5 GB/s, at least in my tests.  &lt;a href=&quot;http://jsperf.com/allocation-rate&quot;&gt;Test case here&lt;/a&gt;; multiply the 8-element test by 100 to yield approximate MB/s.&lt;/p&gt;&lt;p&gt;Anyway these numbers are much lower than the iterator tests.  ES6 did right to specify one-shot generators as a primitive.  In Guile we should perhaps consider implementing some form of one-shot generators that don't have an allocation overhead.&lt;/p&gt;&lt;p&gt;Finally, while I enjoyed the paper from Kiselyov and the gang, I don't see the point in praising simple generators when they don't offer a significant performance advantage.  I think we will see external iterators in JavaScript achieve near-optimal performance within a couple years without paying the expressivity penalty of internal iterators.&lt;/p&gt;&lt;p&gt;Catch you next time, dog!&lt;/p&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2013-02-25T16:17:25+00:00</dc:date>
	<dc:creator>Andy Wingo</dc:creator>
</item>
<item rdf:about="http://wingolog.org/2013/02/16/opengl-particle-simulation-in-guile">
	<title>Andy Wingo: opengl particle simulation in guile</title>
	<link>http://wingolog.org/archives/2013/02/16/opengl-particle-simulation-in-guile</link>
	<content:encoded>&lt;div&gt;&lt;p&gt;Hello, internets!  Did you know that today marks &lt;a href=&quot;http://lists.gnu.org/archive/html/guile-devel/2011-02/msg00173.html&quot;&gt;two years of Guile 2&lt;/a&gt;?  Word!&lt;/p&gt;&lt;p&gt;Guile 2 was a major upgrade to Guile's performance and expressiveness as a language, and I can say as a user that it is so nice to be able to rely on such a capable foundation for hacking the hack.&lt;/p&gt;&lt;p&gt;To celebrate, we organized a little birthday hack-feast -- a communal potluck of programs that Guilers brought together to share with each other.  Like &lt;a href=&quot;http://lists.gnu.org/archive/html/guile-user/2012-02/msg00048.html&quot;&gt;last year&lt;/a&gt;, we'll collect them all and publish a summary article on &lt;a href=&quot;http://planet.gnu.org/&quot;&gt;Planet GNU&lt;/a&gt; later on this week.  This is an article about the hack that I worked on.&lt;/p&gt;&lt;p&gt;&lt;b&gt;figl&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://gitorious.org/guile-figl&quot;&gt;Figl&lt;/a&gt; is a Guile binding to OpenGL and related libraries, written using Guile's &lt;a href=&quot;http://www.gnu.org/software/guile/manual/html_node/Foreign-Function-Interface.html&quot;&gt;dynamic FFI&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Figl is a collaboration between myself and Guile super-hacker Daniel Hartwig.  It's pretty complete, with a generated binding for all of OpenGL 2.1 based on the specification files.  It doesn't have a good web site yet -- it might change name, and probably we'll move to savannah -- but it does have great documentation in texinfo format, built with the source.&lt;/p&gt;&lt;p&gt;But that's not my potluck program.  My program is a little demo particle simulation built on Figl.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://wingolog.org/pub/figl-particle-effect.webm&quot;&gt;Click to download video&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Source available &lt;a href=&quot;https://gitorious.org/guile-figl/guile-figl/blobs/master/examples/particle-system/vbo.scm&quot;&gt;here&lt;/a&gt;.  It's a fairly modern implementation using vertex buffer objects, doing client-side geometry updates.&lt;/p&gt;&lt;p&gt;To run, assuming you have some version of Guile 2.0 installed:&lt;/p&gt;&lt;pre&gt;
git clone git://gitorious.org/guile-figl/guile-figl.git
cd guile-figl
autoreconf -vif
./configure
make
# 5000 particles
./env guile examples/particle-system/vbo.scm 5000
&lt;/pre&gt;&lt;p&gt;You'll need OpenGL development packages installed -- for the&lt;tt&gt;.so&lt;/tt&gt; links, not the header files.&lt;/p&gt;&lt;p&gt;&lt;b&gt;performance&lt;/b&gt;&lt;/p&gt;&lt;p&gt;If you look closely on the video, you'll see that the program itself is rendering at 60 fps, using 260% CPU.  (The CPU utilization drops as soon as the video starts, because of the screen capture program.)  This is because the updates to the particle positions and to the vertices are done using as many processors as you have -- 4, in my case (2 real and 2 threads each).  I've gotten it up to 310% or so, which is pretty good utilization considering that the draw itself is single-threaded and there are other things that need to use the CPU like the X server and the compositor.&lt;/p&gt;&lt;p&gt;Each particle has a position and a velocity, and is attracted to the center using a gravity-like force.  If you consider that updating a particle's position should probably take about 100 cycles (for a square root, some divisions, and a few other floating point operations), then my 2.4GHz processors should allow for a particle simulation with 1.6 million particles, updated at 60fps.  In that context, getting to 5K particles at 60 fps is not so impressive -- it's sub-optimal by a factor of 320.&lt;/p&gt;&lt;p&gt;This slowness is oddly exciting to me.  It's been a while since I've felt Guile to be slow, and this is a great test case.  The two major things to work on next in Guile are its newer register-based virtual machine, which should speed things up by a factor of 2 or so in this benchmark; and an ahead-of-time native compiler, which should add another factor of 5 perhaps.  Optimizations to an ahead-of-time native compiler could add another factor of 2, and a JIT would probably make up the rest of the difference.&lt;/p&gt;&lt;p&gt;One thing I was really wondering about when making this experiment was how the garbage collector would affect the feeling of the animation.  Back when I worked with the excellent folks at &lt;a href=&quot;http://oblong.com/&quot;&gt;Oblong&lt;/a&gt;, I realized that graphics could be held to a much higher standard of smoothness than I was used to.  Guile allocates floating-point numbers on the heap and uses the &lt;a href=&quot;http://www.hpl.hp.com/personal/Hans_Boehm/gc/&quot;&gt;Boehm-Demers-Weiser conservative collector&lt;/a&gt;, and I was a bit skeptical that things could be smooth because of the pause times.&lt;/p&gt;&lt;p&gt;I was pleasantly surprised that the result was very smooth, without noticeable GC hiccups.  However, GC is noticeable on an overloaded system.  Since the simulation advances time by 1/60th of a second at each frame, regardless of the actual frame rate, differing frame processing times under load can show a sort of &quot;sticky-zipper&quot; phenomenon.&lt;/p&gt;&lt;p&gt;If I ever got to optimal update performance, I'd probably need to use a better graphics card than my Intel i965 embedded controller.  And of course vertex shaders are really the way to go if I cared about the effect and not the compiler -- but I'm more interested in compilers than graphics, so I'm OK with the state of things.&lt;/p&gt;&lt;p&gt;Finally I would note that it has been pure pleasure to program with general, high-level macros, knowing that the optimizer would transform the code into really efficient low-level code.  Of course I had to check the optimizations, with the &lt;tt&gt;,optimize,&lt;/tt&gt; command at the REPL.  I even had to add a couple of transformations to the optimizer at one point, but I was able to do that &lt;a href=&quot;http://www.nongnu.org/geiser&quot;&gt;without restarting the program&lt;/a&gt;, which was quite excellent.&lt;/p&gt;&lt;p&gt;So that's my happy birthday dish for the Guile 2 potluck.  More on other programs after the hack-feast is over; until then, see you in &lt;tt&gt;#guile&lt;/tt&gt;!&lt;/p&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2013-02-16T19:20:14+00:00</dc:date>
	<dc:creator>Andy Wingo</dc:creator>
</item>
<item rdf:about="http://www.advogato.org/person/ensonic/diary.html?start=136">
	<title>Stefan Kost: 14 Feb 2013</title>
	<link>http://www.advogato.org/person/ensonic/diary.html?start=136</link>
	<content:encoded>&lt;b&gt;buzztard 0.7 is out&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
We started the year with a release in the beginning of January. So far only a few issues were reported. Patches for these are on the 0.7.1 branch. One last minute change in 0.7 was the departure from trying to link/unlink elements in gstreamer while playing. I sadly have to conclude that in 0.10 this only works for some cases. It was working sort of okayish for buzztard, but the were still deadlocks or internal dataflow errors from time to time. One such scenario is that when you happen to reconnect elements while the song loops. These things are not easy to sync from the application level. Lets hope this is easier in 1.0. The sticky events should help with setting up the context from new elements. &lt;br /&gt;
&lt;br /&gt;
On the mainline I bumped the required library version and removed the ifdefs for the backwards compatibility. As a first bigger change, I ported the settings from gconf to dconf. We had a settings abstraction to other gconf or play keyfiles, which we now removed. Altogether I kept to use an intermediate object that exposes settings as a gobject with properties for the keys. This allows to use notify to bind to property changes instead of using a custom api.&lt;br /&gt;
&lt;br /&gt;
Then I started with porting gst-buzztard &amp;amp; buzztard to gstreamer-1.0. I made good progress. I will report the details in the next update.&lt;br /&gt;
&lt;br /&gt;
77 files changed, 5892 insertions(+), 8131 deletions(-)&lt;br /&gt;</content:encoded>
	<dc:date>2013-02-14T20:57:17+00:00</dc:date>
</item>
<item rdf:about="http://guij.emont.org/blog/2013/02/10/migrating-to-jekyll">
	<title>Guillaume Emont: Migrating to Jekyll</title>
	<link>http://guij.emont.org/blog/2013/02/10/migrating-to-jekyll/</link>
	<content:encoded>&lt;p&gt;I&amp;#8217;ve decided to switch my blog from &lt;a href=&quot;http://wordpress.org/&quot;&gt;WordPress&lt;/a&gt; to a &lt;a href=&quot;http://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt;-based system. When this article goes live, the migration should be done. I hope I managed to avoid flooding the planets that aggregate me with old articles (&lt;a href=&quot;http://planet.igalia.com/&quot;&gt;Planet Igalia&lt;/a&gt;, &lt;a href=&quot;http://gstreamer.freedesktop.org/planet/&quot;&gt;Planet GStreamer&lt;/a&gt; and &lt;a href=&quot;http://planet.gnome.org/&quot;&gt;Planet GNOME&lt;/a&gt;), if I failed, I apologise, feed aggregators are a bit like dark magic to me.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;blog!&quot; src=&quot;http://guij.emont.org/blog/images/blog.jpg&quot; /&gt; &lt;br /&gt;CC BY-NC-SA 2.0 by &lt;a href=&quot;http://www.flickr.com/photos/inju/278659657/in/photostream/&quot;&gt;Kevin Lim&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;why&quot;&gt;Why?&lt;/h2&gt;

&lt;p&gt;The main motivation behind that is that is that I am very tired of the WordPress editor. I am a programmer and spend my days using the same editor&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a rel=&quot;footnote&quot; href=&quot;http://guij.emont.org/blog/category/geekeries/feed/#fn:1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, which means that I have gotten rather efficient using it, or, at least, that&amp;#8217;s the way of writing text that is the most comfortable to me.&lt;/p&gt;

&lt;p&gt;In a stock WordPress installation, all you could do to edit your blog post in your own editor is to edit it in HTML and then cut and paste your result in the editor and publish. HTML. Eeek! I don&amp;#8217;t want to be editing a tag soup, I want to focus on the content. There are better languages than HTML for that, such as &lt;a href=&quot;http://docutils.sourceforge.net/rst.html&quot;&gt;reStructuredText&lt;/a&gt; or &lt;a href=&quot;http://daringfireball.net/projects/markdown/&quot;&gt;MarkDown&lt;/a&gt;. I did try &lt;a href=&quot;http://xdissent.com/projects/wordprest/&quot;&gt;WordPreSt&lt;/a&gt; a while ago but wasn&amp;#8217;t satisfied with the work flow it provided, and if I remember correctly, I ended up having to correct things manually.&lt;/p&gt;

&lt;p&gt;So, reading up a bit on the internets on what&amp;#8217;s available, I got seduced by the concept of jekyll and its principle of offline generation of static pages, and the default workflow is very similar to the one I am used to when doing software development. Also, it seems to be actively maintained and used in &lt;a href=&quot;http://pages.github.com/&quot;&gt;GitHub Pages&lt;/a&gt;, which gives me a feeling that it&amp;#8217;s here to stay. The only drawback that I see to it is that commenting cannot be handled by strictly static web pages. Most people using jekyll for blogging seem to resort to using external commenting services, such as &lt;a href=&quot;http://disqus.com/&quot;&gt;Disqus&lt;/a&gt; and friends or even facebook, but I&amp;#8217;d rather not depend on an external service for that. I&amp;#8217;ve found a solution to that that seems decent to me, and I explain this in a later section.&lt;/p&gt;

&lt;p&gt;Jekyll in itself is not a blogging system out of the box, but a good tool to make one. Since I didn&amp;#8217;t feel like reinventing the wheel, I am using &lt;a href=&quot;http://jekyllbootstrap.com/&quot;&gt;Jekyll-Bootstrap&lt;/a&gt; as a base for my blog.&lt;/p&gt;

&lt;h2 id=&quot;conversion_of_posts&quot;&gt;Conversion of posts&lt;/h2&gt;

&lt;p&gt;I&amp;#8217;d rather leave my old articles online, while still not have to manage a WordPress installation, so I definitely want to migrate my old articles to the new system. Luckily, jekyll comes out of the box with &lt;a href=&quot;https://github.com/mojombo/jekyll/wiki/blog-migrations&quot;&gt;migration tools&lt;/a&gt; to make your life easy. I&amp;#8217;ve used the tool that gets the content from a Wordpress export file and it went (mostly) like a breeze, as far as I could check. I only had to modify a bit the image caption code in one &lt;a href=&quot;http://guij.emont.org/blog/2011/10/23/prague-we-meet-again/&quot;&gt;article&lt;/a&gt;. I still have some image files that aren&amp;#8217;t where they should be in old posts, but that was already the case with WordPress. I will need to fix these articles at some point.&lt;/p&gt;

&lt;h2 id=&quot;static_comments&quot;&gt;Static comments&lt;/h2&gt;

&lt;p&gt;The issue that I had left to deal with is to be able to have comments, and to import the comments I had in WordPress. I chose to use &lt;a href=&quot;http://hezmatt.org/~mpalmer/blog/2011/07/19/static-comments-in-jekyll.html&quot;&gt;Jekyll::StaticComments&lt;/a&gt; (code &lt;a href=&quot;https://github.com/mpalmer/jekyll-static-comments&quot;&gt;here&lt;/a&gt; for that purpose. It is a plugin for Jekyll that takes comments in YAML files and renders them at the end of a post. That still left me with two problems: how do I migrate old comments from WordPress, and how do I let people add new comments?&lt;/p&gt;

&lt;h3 id=&quot;comment_migration&quot;&gt;Comment Migration&lt;/h3&gt;

&lt;p&gt;I&amp;#8217;ve written a quick and dirty script with &lt;a href=&quot;http://www.crummy.com/software/BeautifulSoup/&quot;&gt;BeautifulSoup&lt;/a&gt; that gets the comment from a WordPress export file and generates a suitable tree of YAML files for use by Jekyll::StaticComments. I&amp;#8217;ve put it online and called it &lt;a href=&quot;https://github.com/guijemont/wp2jekyll-comments&quot;&gt;wp2jekyll-comments&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;adding_new_comments&quot;&gt;Adding new comments&lt;/h3&gt;

&lt;p&gt;Jekyll:StaticComments comes with a &lt;a href=&quot;https://github.com/mpalmer/jekyll-static-comments/blob/master/commentsubmit.php&quot;&gt;PHP script&lt;/a&gt; that allows one to submit comments. Since I&amp;#8217;m an awful geek, I don&amp;#8217;t like much the idea of having to use PHP here, so I made my own version of it in Python. I&amp;#8217;ve published it as &lt;a href=&quot;https://github.com/guijemont/jekyll-comments&quot;&gt;jekyll-comments&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;hr /&gt;&lt;ol&gt;&lt;li id=&quot;fn:1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://www.vim.org/&quot;&gt;vim&lt;/a&gt;&lt;/p&gt;
&lt;a rev=&quot;footnote&quot; href=&quot;http://guij.emont.org/blog/category/geekeries/feed/#fnref:1&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2013-02-09T23:00:00+00:00</dc:date>
</item>
<item rdf:about="http://wingolog.org/2013/02/04/knocking-on-private-back-doors-with-the-web-browser">
	<title>Andy Wingo: knocking on private back doors with the web browser</title>
	<link>http://wingolog.org/archives/2013/02/04/knocking-on-private-back-doors-with-the-web-browser</link>
	<content:encoded>&lt;div&gt;&lt;p&gt;I woke up at five this morning with two things in my head.&lt;/p&gt;&lt;p&gt;One was, most unfortunately, Rebecca Black's &lt;a href=&quot;http://www.youtube.com/watch?v=kfVsfOSbJY0&quot;&gt;Friday&lt;/a&gt;, except with &quot;Monday&quot; -- you know, &quot;Monday, Monday, gettin' up on Monday, hack, hack, hack, hack, which thing should I hack?&quot;, et cetera.&lt;/p&gt;&lt;p&gt;The other was a faint echo of Patrick McKenzie's great &lt;a href=&quot;http://www.kalzumeus.com/2013/01/31/what-the-rails-security-issue-means-for-your-startup/&quot;&gt;article on the practical implications of the recent Rails vulnerabilities&lt;/a&gt;.  In particular, he pointed out that development web servers running only on your local laptop could be accessed by malicious web pages.&lt;/p&gt;&lt;p&gt;Of course this is not new, strictly speaking, but it was surprising to me in a way that it shouldn't have been.  For example, Guile has a &lt;a href=&quot;http://www.gnu.org/software/guile/manual/html_node/Command_002dline-Options.html&quot;&gt;command-line argument to run a REPL server on a local port&lt;/a&gt;.  This is fantastic for interactive development and debugging, but it is also a vulnerability if you run a web server on the same machine.  A malicious web page could request data from the default Guile listener port, which is a short hop away from rooting your machine.&lt;/p&gt;&lt;p&gt;I made a little test case this morning: a &lt;a href=&quot;http://wingolog.org/pub/localhost-portscan.html&quot;&gt;local port scanner&lt;/a&gt;.  It tries to fetch &lt;tt&gt;http://localhost:&lt;i&gt;port&lt;/i&gt;/favicon.ico&lt;/tt&gt; for all ports between 1 and 10000 on your machine.  (You can click that link; it doesn't run the scan until you click a button.)&lt;/p&gt;&lt;p&gt;If it finds a favicon, that indicates that there is a running local web application, which may or may not be vulnerable to CSRF attacks or other attacks like the Rails yaml attack.&lt;/p&gt;&lt;p&gt;If the request for a favicon times out, probably that port is vulnerable to some kind of attack, like the old &lt;a href=&quot;http://www.remote.org/jochen/sec/hfpa/index.html&quot;&gt;form protocol attack&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If the request fails, the port may be closed, or the process listening at the port may have detected invalid input and closed the connection.  We could run a timing loop to determine if a connection was made or not, but for now the port scanner doesn't output any information for this case.&lt;/p&gt;&lt;p&gt;In my case, the page finds that I have a probably vulnerable port 2628, which appears to be &lt;a href=&quot;http://packages.debian.org/sid/dictd&quot;&gt;dictd&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Anyway, I hope that page is useful to someone.  And if you are adding backdoors into your applications for development purposes, be careful!&lt;/p&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2013-02-04T08:47:09+00:00</dc:date>
	<dc:creator>Andy Wingo</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-977684764667858073.post-8662099044968413313">
	<title>Bastien Nocera: Power management in GNOME 3.8</title>
	<link>http://www.hadess.net/2013/02/power-management-in-gnome-38.html</link>
	<content:encoded>In the past couple of weeks, apart from reviewing very many patches for gnome-control-center (especially for &lt;a href=&quot;http://blogs.gnome.org/mclasen/2013/01/25/gnome-3-7-at-the-halfway-mark/&quot;&gt;new and re-designed panels&lt;/a&gt;), I've been working on updating the power management handling in GNOME.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Test suite&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The first change is that we have a test suite (currently with 15 separate tests) to test interaction between gnome-settings-daemon's power management and various session and system components. This is thanks to &lt;a href=&quot;http://www.piware.de/&quot;&gt;Martin Pitt&lt;/a&gt;, and his work on &lt;a href=&quot;http://www.piware.de/2012/11/python-dbusmock-templates/&quot;&gt;python-dbusmock&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We'll try and add &lt;a href=&quot;http://git.gnome.org/browse/gnome-settings-daemon/tree/plugins/power/test.py&quot;&gt;new tests&lt;/a&gt; as bug reports come in to avoid regressions, although some cases will remain untested because of limitations in our logging.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-t64rpGU20tA/UQt30zbhqII/AAAAAAAAAfQ/Vd21cnI2kEk/s1600/Screenshot+from+2013-02-01+08:54:25.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;214&quot; src=&quot;http://3.bp.blogspot.com/-t64rpGU20tA/UQt30zbhqII/AAAAAAAAAfQ/Vd21cnI2kEk/s320/Screenshot+from+2013-02-01+08:54:25.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&amp;nbsp;All clear&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Screensaver and backlight interaction&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;With gnome-shell becoming the sole screensaver (after the &lt;a href=&quot;https://live.gnome.org/ThreePointSeven/Features/DropOrFixFallbackMode&quot;&gt;removal of fallback mode&lt;/a&gt;, and the obsoletion of gnome-screensaver), we've been able to streamline the code handling the various screen backlight power levels.&lt;br /&gt;&lt;br /&gt;Your screen will now turn off as soon as the screensaver kicks in, moving your mouse in the screensaver will turn it back on for 20 seconds before turning off again, and when to dim (&lt;a href=&quot;http://blogs.gnome.org/mclasen/files/2013/01/settings-power.png&quot;&gt;if you've chosen so&lt;/a&gt;) is dependent on whether you're on battery or not, and the default idle time (eg. if your screen turns off after 5 minutes of inactivity, the screen will dim after 4). This makes the behaviour more consistent, and predictable, compared to the mish-mash of settings we had before, where some delays were available for change in the UI, and others only through GSettings or gnome-tweak-tool.&lt;br /&gt;&lt;br /&gt;Those constants are &lt;a href=&quot;http://git.gnome.org/browse/gnome-settings-daemon/tree/plugins/power/gsd-power-constants.h&quot;&gt;separate from the code&lt;/a&gt;, and &lt;a href=&quot;http://git.gnome.org/browse/gnome-settings-daemon/tree/plugins/power/gsdpowerconstants.py&quot;&gt;exported to the test suite&lt;/a&gt; so they are flexible and can be changed if the behaviour doesn't exactly match what users are expecting.&lt;br /&gt;&lt;br /&gt;The other change relating to that, is that the screen shield will now always pop down when the screensaver kicks in (thanks to Giovanni for the gnome-shell work). This doesn't mean that you'll have to enter your password each time, but only after the &quot;&lt;a href=&quot;http://blogs.gnome.org/mclasen/files/2013/01/settings-privacy-lock.png&quot;&gt;lock delay&lt;/a&gt;&quot; if you've set one.&lt;br /&gt;&lt;br /&gt;We've also added a number of nice touches, like the screen turning back on for a short period when you plug or unplug your laptop, made sure that your laptop screen gets turned off and your session locked when closing the lid and turn off the backlight for machines where suspend causes the backlight to come back on temporarily (as seen on MacBooks).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Very very idle&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We've also added a &lt;a href=&quot;http://bugzilla.gnome.org/show_bug.cgi?id=597030&quot;&gt;long-requested feature&lt;/a&gt;: the ability to force logout after a period of idle. This is useful in kiosk and computer lab situations, and is only &lt;a href=&quot;http://git.gnome.org/browse/gnome-settings-daemon/commit/plugins/power?id=5edebf43b2b8d1f3696eb6650e109eb90f5957f3&quot;&gt;available through GSettings&lt;/a&gt;. As we've added support for this feature (warning prior to logging out, with the screen turning on for a couple of seconds when the warning shows up), we've realised that the infrastructure is the same for automatic suspend/hibernate situation. This means I expect to &lt;a href=&quot;https://bugzilla.gnome.org/show_bug.cgi?id=681869&quot;&gt;change the default &quot;long idle&quot; behaviour&lt;/a&gt; to suspending. This will still be changeable in the Power preferences. This should land after 3.7.5, and don't worry, we'll make this change very visible in the release notes :)&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-y5YZ6A5iAos/UQt700TiYjI/AAAAAAAAAfg/SuCgX-m9gt4/s1600/Screenshot+from+2013-02-01+09:24:17.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;134&quot; src=&quot;http://3.bp.blogspot.com/-y5YZ6A5iAos/UQt700TiYjI/AAAAAAAAAfg/SuCgX-m9gt4/s320/Screenshot+from+2013-02-01+09:24:17.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;*I* am not suspending by default&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Inhibit&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But you don't want to suspend, you really don't.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;GNOME supports the draft &lt;a href=&quot;http://people.freedesktop.org/~hadess/idle-inhibition-spec/&quot;&gt;FreeDesktop &quot;Idle inhibition&quot; specification&lt;/a&gt;, as implemented by KDE, which hopefully means that more third-party applications should start behaving better when playing back films, in presentation mode, or for large overnight downloads. This should hopefully get out of draft status before the GNOME 3.8 release.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We also have a &lt;a href=&quot;http://git.gnome.org/browse/gnome-session/tree/doc/man/gnome-session-inhibit.xml&quot;&gt;gnome-session-inhibit tool&lt;/a&gt; available in gnome-session for your scripting needs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Colophon&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;All the changes mentioned should be available in GNOME 3.7.5, and I will be available to take complaints at &lt;a href=&quot;https://fosdem.org/2013/&quot;&gt;FOSDEM this week-end&lt;/a&gt;.&lt;/div&gt;</content:encoded>
	<dc:date>2013-02-01T08:45:32+00:00</dc:date>
	<dc:creator>Bastien Nocera</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-977684764667858073.post-3924434265297821536">
	<title>Bastien Nocera: Office-runner 1.0</title>
	<link>http://www.hadess.net/2013/01/office-runner-10.html</link>
	<content:encoded>&lt;div class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-DueKH07pVz4/UQbu3oJ-iyI/AAAAAAAAAfA/z4-m-yCUhMQ/s1600/Screenshot+from+2013-01-28+22:32:24.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;http://1.bp.blogspot.com/-DueKH07pVz4/UQbu3oJ-iyI/AAAAAAAAAfA/z4-m-yCUhMQ/s320/Screenshot+from+2013-01-28+22:32:24.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href=&quot;http://www.hadess.net/2011/09/omg-i-haz-designed-bug-fix.html&quot;&gt;Office Runner&lt;/a&gt; 1.0 is now available, downloadable &lt;a href=&quot;http://ftp.gnome.org/pub/GNOME/sources/office-runner/1.0/&quot;&gt;at the usual location&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We had some pretty good comments on the original announcement, even though some people took this opportunity to start slinging insults, which is pretty uncool.&lt;br /&gt;&lt;br /&gt;There's plenty of related power management work that's been happening in preparation of GNOME 3.8, and we're mostly waiting on GNOME Shell changes to land before I can talk to you about those. I hope it gets the same (positive) comments as Office Runner did, though I imagine some people will get angry about changes, as they are wont to do.&lt;br /&gt;&lt;br /&gt;This version requires systemd for the suspend inhibition.&lt;br /&gt;&lt;br /&gt;And don't forget to post your high scores ;)</content:encoded>
	<dc:date>2013-01-28T21:45:24+00:00</dc:date>
	<dc:creator>Bastien Nocera</dc:creator>
</item>
<item rdf:about="http://thomas.apestaart.org/log/?p=1529">
	<title>Thomas Vander Stichele: measuring puppet</title>
	<link>http://thomas.apestaart.org/log/?p=1529</link>
	<content:encoded>&lt;p&gt;For one of work&amp;#8217;s projects, we&amp;#8217;ll soon be working on scaling our platform more, which will require deploying a bunch more machines.  For this project, we basically have a local dev platform, an online dev platform, a preproduction platform, and a production platform.&lt;/p&gt;
&lt;p&gt;Right now, all these platforms have exactly one host.  There are two puppetmasters, one for the dev platforms and one for the pre/pro platforms.&lt;/p&gt;
&lt;p&gt;Since deploying a bunch more machines is going to require a lot more puppet running, I want to work on removing as much friction as I can from my puppet work.  I do the runs manually as we upgrade platforms during deployment, and a run typically takes well over a minute.  For me, that&amp;#8217;s too long &amp;#8211; it causes me to waste time, lose focus, task switch, and forget I should be following up on puppet runs.  It makes finetuning puppet modules a chore as I hack on them.&lt;/p&gt;
&lt;p&gt;So I wanted to start by trimming some of the obvious fat before I segment my puppet config into separately testable pieces.  I would have expected puppet apply to actually have something to help with that, but it doesn&amp;#8217;t.&lt;/p&gt;
&lt;p&gt;After thinking it through, I realized I wanted some kind of tool that would timestamp output of puppet apply &amp;#8211;debug so I could see which things it does take more time than others.&lt;/p&gt;
&lt;p&gt;I wasn&amp;#8217;t sure what to google for, but timestamp stdout seemed to bring up some results, and I hit on &lt;a href=&quot;http://joeyh.name/code/moreutils/&quot; title=&quot;moreutils&quot;&gt;http://joeyh.name/code/moreutils/&lt;/a&gt; which includes a tool called &amp;#8216;ts&amp;#8217; and is a simple pipe filter that timestamps lines going to stdout.&lt;/p&gt;
&lt;p&gt;That was almost good enough.  What I really wanted though was to know how much time elapsed since printing the last line.  My perl is rusty, but I managed to quickly cook up a &lt;a href=&quot;https://thomas.apestaart.org/thomas/trac/browser/patches/moreutils/0001-add-support-for-incremental-timestamping.patch&quot;&gt;patch&lt;/a&gt; that makes it print incremental timestamps.&lt;/p&gt;
&lt;p&gt;Now I can do a puppet run like this:&lt;br /&gt;
&lt;code&gt;puppet apply --modulepath=`pwd`/modules:`pwd`/dev/modules manifests/site.pp --debug | ts -i &quot;%H:%M:%.S&quot; | egrep -B 1 &quot;^00:00:0[^0]&quot;&lt;br /&gt;
00:00:00.001066 debug: Executing 'test -e ../commit &amp;amp;&amp;amp;                   (                     test xorigin/master == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify origin/master^0 | head -n 1` == `cat ../commit` ) )'&lt;br /&gt;
00:00:02.646908 debug: Service[postfix](provider=redhat): Executing '/sbin/service postfix status'&lt;br /&gt;
--&lt;br /&gt;
00:00:00.000987 debug: Executing 'test -e ../commit &amp;amp;&amp;amp;                   (                     test xorigin/release-1.4.x == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify origin/release-1.4.x^0 | head -n 1` == `cat ../commit` ) )'&lt;br /&gt;
00:00:01.871258 debug: Exec[git-checkout-/var/www/partner-test](provider=posix): Executing check 'test -e ../commit &amp;amp;&amp;amp;                   (                     test xorigin/release-1.4.x == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify origin/release-1.4.x^0 | head -n 1` == `cat ../commit` ) )'&lt;br /&gt;
00:00:00.000942 debug: Executing 'test -e ../commit &amp;amp;&amp;amp;                   (                     test xorigin/release-1.4.x == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify origin/release-1.4.x^0 | head -n 1` == `cat ../commit` ) )'&lt;br /&gt;
00:00:01.886606 debug: Prefetching aliases resources for mailalias&lt;br /&gt;
--&lt;br /&gt;
00:00:00.000957 debug: Executing '/usr/sbin/semanage fcontext -l | grep -q '^/home/git/dev(/.*)?''&lt;br /&gt;
00:00:01.750281 debug: /Stage[main]/Dexter::Apache/Selinux::Set_fcontext[home-httpd]/Exec[semanage-/home/git/dev-httpd_sys_content_t]/unless: /usr/sbin/semanage: Broken pipe&lt;br /&gt;
--&lt;br /&gt;
00:00:00.000855 debug: Executing 'test -e ../commit &amp;amp;&amp;amp;                   (                     test xorigin/release-1.4.x == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify origin/release-1.4.x^0 | head -n 1` == `cat ../commit` ) )'&lt;br /&gt;
00:00:02.064475 debug: /Schedule[puppet]: Skipping device resources because running on a host&lt;br /&gt;
--&lt;br /&gt;
00:00:00.001048 debug: Executing '/usr/sbin/semanage fcontext -l | grep -q '^/srv/merchant(/.*)?''&lt;br /&gt;
00:00:01.750129 debug: /Stage[main]/Partner::Install/Selinux::Set_fcontext[srv-merchant-httpd]/Exec[semanage-/srv/merchant-httpd_sys_content_t]/unless: /usr/sbin/semanage: Broken pipe&lt;br /&gt;
--&lt;br /&gt;
00:00:00.000861 debug: Executing 'test -e ../commit &amp;amp;&amp;amp;                   (                     test xmaster == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify master^0 | head -n 1` == `cat ../commit` ) )'&lt;br /&gt;
00:00:01.841316 debug: Exec[git-checkout-/var/www/merchant](provider=posix): Executing check 'test -e ../commit &amp;amp;&amp;amp;                   (                     test xorigin/release-1.4.x == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify origin/release-1.4.x^0 | head -n 1` == `cat ../commit` ) )'&lt;br /&gt;
00:00:00.000955 debug: Executing 'test -e ../commit &amp;amp;&amp;amp;                   (                     test xorigin/release-1.4.x == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify origin/release-1.4.x^0 | head -n 1` == `cat ../commit` ) )'&lt;br /&gt;
00:00:01.858206 debug: Service[httpd](provider=redhat): Executing '/sbin/service httpd status'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Some explanation is in order.&lt;/p&gt;
&lt;p&gt;The puppet apply is straightforward if you know puppet a little &amp;#8211; it will apply a manifest and spit out a lot of debug info.&lt;/p&gt;
&lt;p&gt;The output gets piped into ts, which will do incremental timestamping (with -i, which is what my patch adds) according to the specified format (ts by default uses seconds precision, but can do microsecond precision if you use %.S in the format).&lt;/p&gt;
&lt;p&gt;Then I grep for all lines that take at least 1 second to be output, and display the line before that too (since puppet is generating output either before or after a possibly long-running task, so either on the line before or the line that took too long).&lt;/p&gt;
&lt;p&gt;In the first section, I doubt service postfix status is to blame, so it&amp;#8217;s probably my convoluted git updating that takes too long.  I need to rework that module so it doesn&amp;#8217;t fetch on every run.&lt;/p&gt;
&lt;p&gt;In the third section, semanage is to blame.  Hm, maybe I need to find a different way to look up whether the particular fcontext rule I want to add is already there.  I&amp;#8217;ve considered converting it to facts, although that sounds like it would be stretching facts a little &amp;#8211; that&amp;#8217;s a lot of info to store in a fact.&lt;/p&gt;
&lt;p&gt;The others are repeats of both, so I know where to start trimming the fat now!&lt;/p&gt;
&lt;p&gt;And when all &gt; 1 sec items are gone, time to shave off more below that.&lt;/p&gt;
&lt;p&gt;If you want to try out ts with incremental timestamping, it&amp;#8217;s available in the rebuilt moreutils rpm in my &lt;a href=&quot;http://thomas.apestaart.org/pkg/&quot;&gt;package repositories&lt;/a&gt; for CentOS 6 and F16/17/18.&lt;/p&gt;
&lt;p&gt;If any puppetmaster (hah!) has good tips on how to debug and measure the catalog generation step (the one on the master), let me know!&lt;/p&gt;</content:encoded>
	<dc:date>2013-01-24T19:58:17+00:00</dc:date>
</item>
<item rdf:about="http://thomas.apestaart.org/log/?p=1527">
	<title>Thomas Vander Stichele: mach 1.0.2 “ears” released</title>
	<link>http://thomas.apestaart.org/log/?p=1527</link>
	<content:encoded>&lt;p&gt;Another Fedora, another mach release.  This release fixes a minor bug and adds support for Fedora 18.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thomas.apestaart.org/download/mach/&quot;&gt;Get the source&lt;/a&gt;, update from my repository, or wait until updates hit the Fedora repository.&lt;/p&gt;
&lt;p&gt;Happy packaging!&lt;/p&gt;</content:encoded>
	<dc:date>2013-01-22T21:32:41+00:00</dc:date>
</item>
<item rdf:about="http://wingolog.org/2013/01/07/an-opinionated-guide-to-scheme-implementations">
	<title>Andy Wingo: an opinionated guide to scheme implementations</title>
	<link>http://wingolog.org/archives/2013/01/07/an-opinionated-guide-to-scheme-implementations</link>
	<content:encoded>&lt;div&gt;&lt;p&gt;Hark, the beloved programing language!  But hark, also: for Scheme is a language of many implementations.  If Scheme were a countryside, it would have its cosmopolitan cities, its hipster dives, its blue-collar factory towns, quaint villages, western movie sets full of façades and no buildings, shacks in the woods, and single-occupancy rent-by-the-hour slums.  It's a confusing and delightful place, but you need a guide.&lt;/p&gt;&lt;p&gt;And so it is that there is a steady rivulet of folks coming into the &lt;tt&gt;#scheme&lt;/tt&gt; IRC channel asking what implementation to use.  Mostly the regulars are tired of the question, but when they do answer it's in very guarded terms -- because the topic is a bit touchy, and a bit tribal.  There's a subtle tension between partisans of the different implementations, but people are polite enough to avoid controversial, categorical statements.  Unfortunately the end result of this is usually silence in the channel.&lt;/p&gt;&lt;p&gt;Well I'm tired of it!  All that silence is boring, and so I thought I'd give you my opinionated guide to Scheme implementations.  This is necessarily subjective and colored, as I co-maintain the Guile implementation and do all of my hacking in Guile.  But hey, to each folk their stroke, right?  What I say might still be valuable to you.&lt;/p&gt;&lt;p&gt;So without further introduction, here are seven recommendations for seven use cases.&lt;/p&gt;&lt;p&gt;&lt;b&gt;The embedded Scheme&lt;/b&gt;&lt;/p&gt;&lt;p&gt;So you have a big project written in C or C++ and you want to embed a Scheme interpreter, to allow you to extend this project from the inside in a higher-level, dynamic language.  This is the sort of thing where &lt;a href=&quot;http://www.lua.org/&quot;&gt;Lua&lt;/a&gt; really shines.  So what Scheme to use?&lt;/p&gt;&lt;p&gt;Use &lt;a href=&quot;http://code.google.com/p/chibi-scheme/&quot;&gt;Chibi Scheme&lt;/a&gt;!  It's small and from all accounts works great for static linking.  Include a copy of it in your project, and save yourself the headache of adding an external dependency to something that changes.&lt;/p&gt;&lt;p&gt;Embedding Scheme is a great option if you need to ship an application on Windows, iOS, or Android.  The other possibility is shipping a native binary created by a Scheme that compiles natively, so...&lt;/p&gt;&lt;p&gt;&lt;b&gt;The Scheme that can make a binary executable&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Sometimes what you want to do is just ship an executable, and not rely on the user to install a runtime for a particular Scheme system.  Here you should use &lt;a href=&quot;http://www.call-cc.org/&quot;&gt;Chicken&lt;/a&gt; or &lt;a href=&quot;http://gambitscheme.org/wiki/index.php/Main_Page&quot;&gt;Gambit&lt;/a&gt;.  Both of these Schemes have a compiler that produces C, which it then passes on to your system's C compiler to generate an executable.&lt;/p&gt;&lt;p&gt;Another possibility is to use &lt;a href=&quot;http://racket-lang.org/&quot;&gt;Racket&lt;/a&gt;, and use its &lt;a href=&quot;http://docs.racket-lang.org/raco/exe-dist.html&quot;&gt;&lt;tt&gt;raco exe&lt;/tt&gt; and &lt;tt&gt;raco dist&lt;/tt&gt;&lt;/a&gt; commands to package together a program along with a dynamically-linked runtime into a distributable directory.&lt;/p&gt;&lt;p&gt;&lt;b&gt;The dynamically linked Scheme&lt;/b&gt;&lt;/p&gt;&lt;p&gt;What if you want to extend a project written in C, C++, or the like, but you want to dynamically link to a Scheme provided with the user's system instead of statically linking?  Here I recommend &lt;a href=&quot;http://gnu.org/s/guile/&quot;&gt;Guile&lt;/a&gt;.  Its C API and ABI are stable, parallel-installable, well-documented, and binary packages are available on all Free Software systems.  It's LGPL, so it doesn't impose any licensing requirements on your C program, or on the Scheme that you write.&lt;/p&gt;&lt;p&gt;&lt;b&gt;The Scheme with an integrated development environment&lt;/b&gt;&lt;/p&gt;&lt;p&gt;What if you really like IDEs?  For great justice, download you a &lt;a href=&quot;http://racket-lang.org/&quot;&gt;Racket&lt;/a&gt;!  It has a great debugger, an excellent Scheme editor, on-line help, and it's easy to run on all popular platforms.  Incidentally, I would say that Racket is probably the most newbie-friendly Scheme there is, something that stems from its long association with education in US high schools and undergraduate programs.  But don't let the pedagogical side of things fool you into thinking it is underpowered: besides its usefulness for language research, Racket includes a package manager with lots of real-world modules, and lots of people swear by it for getting real work done.&lt;/p&gt;&lt;p&gt;&lt;b&gt;The Scheme for SICP&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Many people come by &lt;tt&gt;#scheme&lt;/tt&gt; asking which Scheme they should use for following along with &lt;a href=&quot;http://mitpress.mit.edu/sicp/&quot;&gt;&lt;i&gt;Structure and Interpretation of Computer Programs&lt;/i&gt;&lt;/a&gt;.  SICP was originally written for &lt;a href=&quot;http://www.gnu.org/software/mit-scheme/&quot;&gt;MIT Scheme&lt;/a&gt;, but these days it's easier to use Neil Van Dyke's &lt;a href=&quot;http://www.neilvandyke.org/racket-sicp/&quot;&gt;SICP mode for Racket&lt;/a&gt;.  It has nice support for SICP's &quot;picture langauge&quot;.  So do that!&lt;/p&gt;&lt;p&gt;&lt;b&gt;The server-side Scheme&lt;/b&gt;&lt;/p&gt;&lt;p&gt;So you write the intertubes, do you?  Well here you have a plethora of options.  While I write all of my server-side software in &lt;a href=&quot;http://gnu.org/s/guile/&quot;&gt;Guile&lt;/a&gt;, and I think it's a fine implementation for this purpose, let me recommend &lt;a href=&quot;http://www.call-cc.org/&quot;&gt;Chicken&lt;/a&gt; for your consideration.  It has loads of modules (&quot;eggs&quot;, they call them) for all kinds of tasks -- AWS integration, great HTTP support, zeromq, excellent support for systems-level programming, and they have a good community of server-side hackers.&lt;/p&gt;&lt;p&gt;&lt;b&gt;The Scheme for interactive development with Emacs&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Install &lt;a href=&quot;http://gnu.org/s/guile/&quot;&gt;Guile&lt;/a&gt;!  All right, this point is a bit of an advertisement, but it's my blog so that's OK.  So the thing you need to do is &lt;a href=&quot;http://www.gnu.org/software/guile/manual/html_node/Using-Guile-in-Emacs.html&quot;&gt;install Paredit and Geiser&lt;/a&gt;.  That page I linked to gives you the procedure.  From there you can build up your program incrementally, starting with debugging the null program.  It's a nice experience.&lt;/p&gt;&lt;p&gt;&lt;b&gt;You and your Scheme&lt;/b&gt;&lt;/p&gt;&lt;p&gt;These recommendations are starting points.  Most of these systems are multi-purpose: you can use Gambit as an interpreter for source code, Racket for server-side programing, or Chicken in Emacs via &lt;a href=&quot;http://wiki.call-cc.org/eggref/4/slime&quot;&gt;SLIME&lt;/a&gt;.  And there are a panoply of other fine Schemes: &lt;a href=&quot;http://www.scheme.com/&quot;&gt;Chez&lt;/a&gt;, &lt;a href=&quot;http://practical-scheme.net/gauche/&quot;&gt;Gauche&lt;/a&gt;, &lt;a href=&quot;http://www.gnu.org/software/kawa/&quot;&gt;Kawa&lt;/a&gt;, and the list goes &lt;a href=&quot;http://en.wikipedia.org/wiki/Category:Scheme_implementations&quot;&gt;on and on&lt;/a&gt; (and even farther beyond that).  The important thing in the beginning is to make a good starting choice, &lt;i&gt;invest some time with your choice&lt;/i&gt;, and then (possibly) change implementations if needed.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://wingolog.org/archives/2008/07/10/how-to-choose-between-equivalent-options&quot;&gt;To choose an implementation is to choose a tribe&lt;/a&gt;.  Since Scheme is so minimal, you begin to rely on extensions that are only present in your implementation, and so through code you bind yourself to a world of code, people, and practice, loosely bound to the rest of the Scheme world through a fictional first-person-plural.  This is OK!  Going deep into a relationship with an implementation is the only way to do great work.  The looser ties to the rest of the Scheme world in the form of the standards, the &lt;a href=&quot;http://library.readscheme.org/&quot;&gt;literature&lt;/a&gt;, the IRC channel, and the mailing lists provide refreshing conversation among fellow travellers, not marching orders for a phalanx.&lt;/p&gt;&lt;p&gt;So don't fear implementation lock-in -- treat your implementation's facilities as strengths, until you have more experience and know more about how your needs are served by your Scheme.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Finally...&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Just do it!  You wouldn't think that this point needs elaboration, but I see so many people floundering and blathering without coding, so it bears repeating.  Some people get this strange nostalgic &quot;Scheme is an ideal that I cannot reach&quot; mental block that is completely unproductive, not to mention lame.  If you're thinking about using Scheme, do it!  Install your Scheme, run your REPL, and start typing stuff at it.  And try to write as much of your program in Scheme as possible.  &lt;a href=&quot;http://twistedmatrix.com/users/glyph/rant/extendit.html&quot;&gt;Prefer extension over embedding&lt;/a&gt;.  Use an existing implementation rather than writing your own.  Get good at using your REPL (or the IDE, in the case of Racket).  Read your implementation's manual.  Work with other people's code so you get an idea of what kind of code experienced Schemers write.  Read the source code of your implementation.&lt;/p&gt;&lt;p&gt;See you in &lt;tt&gt;#scheme&lt;/tt&gt;, and happy hacking!&lt;/p&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2013-01-07T13:43:35+00:00</dc:date>
	<dc:creator>Andy Wingo</dc:creator>
</item>
<item rdf:about="http://www.advogato.org/person/ensonic/diary.html?start=135">
	<title>Stefan Kost: 1 Jan 2013</title>
	<link>http://www.advogato.org/person/ensonic/diary.html?start=135</link>
	<content:encoded>&lt;b&gt;buzztard&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Happy new 2013!&lt;br /&gt;
&lt;br /&gt;
Besides a lot of testing and little bug fixes here and there I finished of a few half ready features. One is range-randomize (press Ctrl+Shift+R). In contrast to randomize which takes the parameters min-max value as bounds, this one picks the bounds from the first and last value in the selected range. The other one is that now one can rename machines also from the sequence headers. I was afraid that swapping the GtkLabel with a GtkEntry would use too much space and look ugly, but luckily one can turn off the frame. I still get a different background color though.&lt;br /&gt;
&lt;br /&gt;
During testing I noticed some inconsistencies when renaming machines and found a rather bad data corruption. Certain interaction would create songs that won't read back fully. One can manually fix them up (it is xml after all). I fixed the bug and could even make the format a bit simpler. I had to touch quite a few places: &lt;br /&gt;
  30 files changed, 246 insertions(+), 404 deletions(-)&lt;br /&gt;
Old songs can still be read, but songs written with the new version, also need the new version for reading. One lesson learned, the 'id' attribute in xml is special. &lt;br /&gt;
&lt;br /&gt;
Another results from testing is that the shell based test scripts can now be run standalone to check a bunch of songs (do syntax check, print stats, convert or encode songs).&lt;br /&gt;
&lt;br /&gt;
Finally I entered string freeze for 0.7. I already received the first updates for the translations, thanks a lot! I am looking forward to release it soon.&lt;br /&gt;
&lt;br /&gt;
I uploaded some example song snippets to &lt;a href=&quot;https://soundcloud.com/ensonic-1/devin&quot;&gt;soundcloud&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
438 files changed, 3138 insertions(+), 2800 deletions(-)</content:encoded>
	<dc:date>2013-01-01T18:02:31+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-977684764667858073.post-3646838049593350613">
	<title>Bastien Nocera: Settings news</title>
	<link>http://www.hadess.net/2012/12/settings-news.html</link>
	<content:encoded>&lt;a href=&quot;http://permalink.gmane.org/gmane.comp.gnome.devel.announce/300&quot;&gt;GNOME 3.7.3 just got released earlier today&lt;/a&gt;, and includes some great new work. I won't be posting screenshots, because some of the UIs aren't final, and we'll be iterating until 3.8 is released (and it's my birthday ;).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Cleaning up&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We've cleaned up gnome-settings-daemon plug-ins, and gnome-control-center panels, as well as removing the support code for GNOME Fallback, saving us around 10k lines of code.&lt;br /&gt;&lt;br /&gt;gnome-control-center (now &quot;Settings&quot; in the UI) is faster to start, and gnome-settings-daemon require less code to write additional plug-ins.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;New panels&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;3 new panels got added:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Search panel, to control the search output in gnome-shell, as well as control which directories and file types Tracker should index.&lt;/li&gt;&lt;li&gt;Notifications, to manage the notifications that will show up on your desktop. The filtering is done in gnome-shell itself, and would allow you to only show specific notifications in the lock screen for example. &lt;a href=&quot;http://thread.gmane.org/gmane.comp.gnome.desktop/48217&quot;&gt;See Giovanni's post&lt;/a&gt; if your application uses notifications.&lt;/li&gt;&lt;li&gt;Privacy, which still requires quite a bit of work, would be the go-to place to ensure your identity isn't leaked on the network, or visible on your system. You can see how some of the features in the two aforementioned panels will also affect your privacy.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;With the above panels merged, we're left with the re-design of the Power panel, which should mean the end of the &quot;Screen &amp;amp; Brightness&quot; panel (half of the settings went to the Privacy panel, the other half will go to the Power panel).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;New backend features&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First, users of Wacom tablets, you'll be happy to know there's now a button you can press to see, in an OSD, the current configuration of your tablet buttons. This feature has been long in the making, but the results are great. There's coverage for every tablet known to libwacom, and support for touchrings, touchstrips and modeswitch buttons. Select the button you want to use for the help in the Settings panel.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Secondly, we now support the draft &quot;&lt;a href=&quot;http://people.freedesktop.org/~hadess/idle-inhibition-spec/&quot;&gt;Idle Inhibition&lt;/a&gt;&quot; specification from Freedesktop.org.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We also have some unfinished features.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The remote-display plugin will disable animations in the desktop when using the desktop over VNC or Spice.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And the cursor plugin will hide the mouse cursor until first used, or when using a touchscreen, similarly to what Windows 8 supports (it's the only system other than ours that supports both cursor pointers and touchscreens).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Those 2 plugins should hopefully be working by the time of the GNOME 3.8 release.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Until next time.&lt;/div&gt;</content:encoded>
	<dc:date>2012-12-21T15:22:48+00:00</dc:date>
	<dc:creator>Bastien Nocera</dc:creator>
</item>
<item rdf:about="http://arunraghavan.net/?p=1412">
	<title>Arun Raghavan: PulseAudio 3.0</title>
	<link>http://arunraghavan.net/2012/12/pulseaudio-3-0/</link>
	<content:encoded>&lt;p&gt;Yay, we just released PulseAudio 3.0! I&amp;#8217;m not going to rehash the changelog that you can find in the &lt;a href=&quot;http://lists.freedesktop.org/archives/pulseaudio-discuss/2012-December/015692.html&quot;&gt;release announcement&lt;/a&gt; as well as the longer &lt;a href=&quot;http://www.freedesktop.org/wiki/Software/PulseAudio/Notes/3.0&quot;&gt;release notes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I would like to thank the 36 contributors over the last 6 months who have made this release what it is and continue to demonstrate what a vibrant community we have!&lt;/p&gt;</content:encoded>
	<dc:date>2012-12-18T07:57:46+00:00</dc:date>
</item>
<item rdf:about="http://base-art.net/Articles/122/">
	<title>Phil Normand: WebKitGTK+ Hackfest, 2012 edition</title>
	<link>http://base-art.net/Articles/122/</link>
	<content:encoded>&lt;p&gt;There has been some media coverage of the hackfest already so
I'll just focus on one area, Multimedia!&lt;/p&gt;
&lt;p&gt;I think this fourth edition of the event was the first with so
many hackers focusing on Multimedia:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;http://blogs.igalia.com/xrcalvar/&quot;&gt;Xabier&lt;/a&gt; and &lt;a class=&quot;reference external&quot; href=&quot;http://falcosigh.wordpress.com/&quot;&gt;Zan&lt;/a&gt; worked on the &lt;a class=&quot;reference external&quot; href=&quot;https://twitter.com/calvaris/status/278936552892157952/photo/1&quot;&gt;media controls&lt;/a&gt; and finally landed the GStreamer 1.0 build support in our JHBuild moduleset so the buildbots now run the tests with a modern GStreamer setup&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;http://blogs.gnome.org/jjongsma/&quot;&gt;Jonathon&lt;/a&gt; focused on the Mediastream/WebRTC backend&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;http://blogs.igalia.com/vjaquez&quot;&gt;Victor&lt;/a&gt; has been working on &lt;a class=&quot;reference external&quot; href=&quot;https://bugs.webkit.org/show_bug.cgi?id=31155&quot;&gt;audio pitch preservation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;yours truly dedicated most of his time on porting the WebAudio backend to GStreamer 1.0 and hunting two small bugs in the deinterleave and interleave elements&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We also had a small session about the current status of
Multimedia in WebKitGTK+ with a summary of what's been done
recently, the work in progress and plans for the future. It's
interesting because there is always a new W3C specification to
implement and bugs to fix :)&lt;/p&gt;
&lt;p&gt;A warm thank you to all the sponsors and organizers that made the
event possible, it was really nice to meet new (and old) friends,
hack on interesting tasks and keep pushing for a vibrant
project such as WebKitGTK+ :)&lt;/p&gt;
&lt;img alt=&quot;https://live.gnome.org/Hackfests/WebKitGTK2012?action=AttachFile&amp;do=get&amp;target=igalia-logo.png&quot; src=&quot;https://live.gnome.org/Hackfests/WebKitGTK2012?action=AttachFile&amp;do=get&amp;target=igalia-logo.png&quot; /&gt;
&lt;img alt=&quot;https://live.gnome.org/Hackfests/WebKitGTK2012?action=AttachFile&amp;do=get&amp;target=collabora-logo.png&quot; src=&quot;https://live.gnome.org/Hackfests/WebKitGTK2012?action=AttachFile&amp;do=get&amp;target=collabora-logo.png&quot; /&gt;
&lt;img alt=&quot;http://blogs.igalia.com/alex/files/2010/12/badge.png&quot; src=&quot;http://blogs.igalia.com/alex/files/2010/12/badge.png&quot; /&gt;</content:encoded>
	<dc:date>2012-12-15T15:12:37+00:00</dc:date>
</item>
<item rdf:about="http://wingolog.org/2012/12/12/corps-bespoke-text-codecs">
	<title>Andy Wingo: corps: bespoke text codecs</title>
	<link>http://wingolog.org/archives/2012/12/12/corps-bespoke-text-codecs</link>
	<content:encoded>&lt;div&gt;&lt;p&gt;Happy 12/12/12, peoples!  In honor of repeated subsequences, today I'm happy to release a new set of compression tools, &lt;a href=&quot;http://gitorious.org/corps&quot;&gt;Corps&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Corps is a toolkit for generating custom text codecs, specialized to particular bodies of text.  You give it an example corpus to analyze, and Corps can generate codecs based on what it finds.&lt;/p&gt;&lt;p&gt;For example, if you want to develop a compression algorithm that operates on JavaScript source text, you probably want to use a special code to represent the multi-character sequence &lt;tt&gt;function&lt;/tt&gt;.&lt;/p&gt;&lt;p&gt;I say &quot;probably&quot;, because in reality you don't know what substrings are most common.  Corps uses the Re-Pair algorithm to build up an optimal token set.  This algorithm treats all characters in the input as tokens, and recursively creates composite tokens from the most common pair of adjacent tokens, repeating the process until there are no more repeated pairs of tokens.  For full details, see &lt;a href=&quot;http://goanna.cs.rmit.edu.au/~e76763/pub/lm00-procieee.pdf&quot;&gt;&quot;Off-Line Dictionary-Based Compression&quot;&lt;/a&gt; by Larsson and Moffat.&lt;/p&gt;&lt;p&gt;Corps is mostly useful for creating special-purpose fixed codecs based on a dictionary generated by its offline analysis.  Although pre-generated codecs often do not compress as well as adaptive codecs like the one used by &lt;tt&gt;gzip&lt;/tt&gt;, fixed codecs are typically faster as they can use the fixed code table to generate optimized encoders and decoders.  Corps currently generates encoders in C and Scheme, and decoders in C, Scheme, and JavaScript.&lt;/p&gt;&lt;p&gt;Special-purpose codecs can also provide some interesting properties, such as the ability to decompress a substring of the original text.&lt;/p&gt;&lt;p&gt;&lt;b&gt;get source&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Corps is written for Guile version 2.0.  See &lt;a href=&quot;http://gnu.org/s/guile&quot;&gt;http://gnu.org/s/guile&lt;/a&gt; for more information on Guile and how to install it on your system.&lt;/p&gt;&lt;p&gt;To build Corps from git, do:&lt;/p&gt;&lt;pre&gt;
git clone git://gitorious.org/corps/corps.git
cd corps
./autogen.sh &amp;amp;&amp;amp; ./configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make check
&lt;/pre&gt;&lt;p&gt;You can install using &lt;tt&gt;make install&lt;/tt&gt;, but it's often more convenient to just run corps uninstalled, using the &lt;tt&gt;env&lt;/tt&gt; script.&lt;/p&gt;&lt;p&gt;&lt;b&gt;stinky cheese&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Corps includes a simple command-line tool called &lt;tt&gt;corps&lt;/tt&gt;.  For full documentation, run &lt;tt&gt;corps help&lt;/tt&gt;.  You can run it uninstalled by prefixing the &lt;tt&gt;./env&lt;/tt&gt; from the build tree.&lt;/p&gt;&lt;p&gt;As an example, say you want to build a database of wikipedia pages on cheese.  Let's fetch a page:&lt;/p&gt;&lt;pre&gt;
$ curl -s '&lt;a href=&quot;http://en.wikipedia.org/wiki/Maroilles_(cheese)&quot;&gt;http://en.wikipedia.org/wiki/Maroilles_(cheese)&lt;/a&gt;' &amp;gt; cheese
$ ls -l cheese
-rw-r--r-- 1 wingo wingo 43123 Dec 12 15:12 cheese
&lt;/pre&gt;&lt;p&gt;Now we analyze it to determine common substrings:&lt;/p&gt;&lt;pre&gt;
./env corps extract-all cheese &amp;gt; cheese-tokens
&lt;/pre&gt;&lt;p&gt;This generates a list of (string,frequency) pairs.  An &lt;tt&gt;extract-all&lt;/tt&gt; token set is usually quite large.  We can pare it down to something manageable, the 500 most common substrings:&lt;/p&gt;&lt;pre&gt;
./env corps extract-subset cheese-tokens 500 cheese &amp;gt; 500-tokens
&lt;/pre&gt;&lt;p&gt;With this dictionary, we can huffman-code the page:&lt;/p&gt;&lt;pre&gt;
$ ./env corps encode -t 500-tokens -m huffman cheese cheese.huff
$ ls -l cheese.huff
-rw-r--r-- 1 wingo wingo 18060 Dec 12 16:09 cheese.huff
&lt;/pre&gt;&lt;p&gt;Well that's pretty cool -- it's less than half the size of the source text.  We can also pare down this set of tokens to an appropriate number of tokens for a bytecode, and try doing a byte-encode of the file:&lt;/p&gt;&lt;pre&gt;
$ ./env corps extract-subset 500-tokens 254 cheese &amp;gt; 254-tokens
$ ./env corps encode -t 254-tokens cheese &amp;gt; cheese.bc
$ ls -l cheese.bc
-rw-r--r-- 1 wingo wingo 22260 Dec 12 16:19 cheese.bc
&lt;/pre&gt;&lt;p&gt;It's larger than the huffman-code, not only because of the smaller dictionary, but also because a bytecode is less dense.  In practice though a bytecode is good enough while being very fast, so we'll continue with the bytecode.&lt;/p&gt;&lt;p&gt;Now let's generate a C encoder and decoder for this token set.&lt;/p&gt;&lt;pre&gt;
$ ./env corps generate-c-byte-encoder 254-tokens &amp;gt; encoder.inc.c
$ ./env corps generate-c-byte-decoder 254-tokens &amp;gt; decoder.inc.c
$ cp ~/src/corps/corps/decoder.c .
$ cp ~/src/corps/corps/encoder.c .
$ gcc -o decoder -O3 decoder.c
$ gcc -o encoder -O3 encoder.c
$ ls -l encoder decoder
-rwxr-xr-x 1 wingo wingo 13192 Dec 12 16:23 decoder
-rwxr-xr-x 1 wingo wingo 31048 Dec 12 16:23 encoder
&lt;/pre&gt;&lt;p&gt;Nice!  We could use the &lt;tt&gt;corps&lt;/tt&gt; tool to decode cheese.bc, but to vary things up we can use our zippy C decoder:&lt;/p&gt;&lt;pre&gt;
$ ./decoder &amp;lt; cheese.bc &amp;gt; cheese.out
$ cmp cheese.out cheese &amp;amp;&amp;amp; echo 'excellent!'
excellent!
&lt;/pre&gt;&lt;p&gt;The performance of the C encoder is pretty good:&lt;/p&gt;&lt;pre&gt;
$ for ((x=0;x&amp;lt;1000;x++)) do cat cheese &amp;gt;&amp;gt; megacheese; done
$ time gzip -c &amp;lt; megacheese &amp;gt; megacheese.gz
real	0m1.418s
user	0m1.396s
sys	0m0.016s
$ time ./encoder &amp;lt; megacheese &amp;gt; megacheese.bc
real	0m0.523s
user	0m0.480s
sys	0m0.044s
$ ls -l megacheese*
-rw-r--r-- 1 wingo wingo 43123000 Dec 12 17:03 megacheese
-rw-r--r-- 1 wingo wingo 22370002 Dec 12 17:04 megacheese.bc
-rw-r--r-- 1 wingo wingo 11519311 Dec 12 17:04 megacheese.gz
&lt;/pre&gt;&lt;p&gt;Gzip gets better compression results for many reasons, but our quick-and-dirty bytecode compressor does well enough and is quite fast.  The decoder is also quite good:&lt;/p&gt;&lt;pre&gt;
$ time ./decoder &amp;lt; megacheese.bc &amp;gt; /dev/null
real	0m0.179s
user	0m0.160s
sys	0m0.016s
$ time gunzip -c &amp;lt; megacheese.gz &amp;gt; /dev/null
real	0m0.294s
user	0m0.284s
sys	0m0.008s
&lt;/pre&gt;&lt;p&gt;Amusingly, for this text, gzipping the bytecoded file has quite an impact:&lt;/p&gt;&lt;pre&gt;
$ gzip -c &amp;lt; megacheese.bc &amp;gt; megacheese.bc.gz
$ ls -l megacheese*
-rw-r--r-- 1 wingo wingo 43123000 Dec 12 17:03 megacheese
-rw-r--r-- 1 wingo wingo 22370002 Dec 12 17:04 megacheese.bc
-rw-r--r-- 1 wingo wingo   175246 Dec 12 17:12 megacheese.bc.gz
-rw-r--r-- 1 wingo wingo 11519311 Dec 12 17:04 megacheese.gz
&lt;/pre&gt;&lt;p&gt;It so happens that byte-compressing the original text allows it to fit within the default gzip &quot;window size&quot; of 32 KB, letting gzip detect the thousandfold duplication of the source text.  As a codec that works on bytes, gzip tends to work quite well on bytecoded files, and poorly on bit-coding schemes like huffman codes.  A gzipped bytecoded file is usually smaller than a gzipped raw file and smaller than a gzipped huffman-coded file.&lt;/p&gt;&lt;p&gt;&lt;b&gt;hack&lt;/b&gt;&lt;/p&gt;&lt;p&gt;I'll close with a link to the 254 most common substrings in one corpus of JavaScript code that I analyzed: &lt;a href=&quot;https://gitorious.org/corps/corps/blobs/master/corps/js/254-tokens.inc.scm&quot;&gt;here&lt;/a&gt;.  I have a set of patches to integrate a codec optimized for JavaScript source into V8, to try to reduce the memory footprint of JS source code.  More on that quixotic endeavor in some future post.  Until then, happy scheming!&lt;/p&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2012-12-12T16:57:56+00:00</dc:date>
	<dc:creator>Andy Wingo</dc:creator>
</item>
<item rdf:about="http://wingolog.org/2012/12/05/geneva">
	<title>Andy Wingo: geneva</title>
	<link>http://wingolog.org/archives/2012/12/05/geneva</link>
	<content:encoded>&lt;div&gt;&lt;p&gt;&lt;b&gt;silence on the wire&lt;/b&gt;&lt;/p&gt;&lt;p&gt;It's been pretty quiet in this electro-rag, and for a simple but profound reason.  I don't know about all of &lt;a href=&quot;http://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs&quot;&gt;Maslow's hierarchy of needs&lt;/a&gt;, but for me there is definitely a hierarchy between housing and anything else.&lt;/p&gt;&lt;p&gt;Thing is, my partner and I drove up to Geneva almost three months ago, but we only moved in somewhere permanent last week.  Everything was up in the air!  Sublets and couches and moving vans and storage units.  All the things in all the places.&lt;/p&gt;&lt;p&gt;In a way it should have been liberating, but I reckon I'm just a homebody: someone who likes to have a spritual and physical base to come back to.  It's the classic introverted/extroverted &quot;where do you get your energy&quot; thing -- in private, or in society?  Of course it's both, but for me the private side is important and necessary.&lt;/p&gt;&lt;p&gt;&lt;b&gt;society, nations, states&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Incidentally, October made ten years since I left the US.  I lived in Namibia for a couple of years, moved to Spain in 2005, and as you know, left for Switzerland in September.  In that time, a third of my life, I have not been able to vote for my local government.  &lt;a href=&quot;http://wingolog.org/archives/2008/04/12/readings-and-expoundings-thereon&quot;&gt;Representative democracy isn't very democratic&lt;/a&gt;, of course, but not even having that nominal connection to collective decision-making is a bit unmooring.&lt;/p&gt;&lt;p&gt;In Spain I have what is called &quot;EU long-term residency&quot;.  In 2003, the EU standardized visas for &quot;third-country nationals&quot;: folks like me that do not have citizenship in a EU country.  After 5 years, you automatically get country-specific &quot;long-term residency&quot;, and can optionally apply for &quot;EU long-term residency&quot; (as I just did), which has the additional benefit of being transferable to other EU countries.&lt;/p&gt;&lt;p&gt;The idea of EU long-term residency was to make third-country nationals have the same rights as EU citizens, but several restrictions placed on the agreement by individual nations make it not very attractive compared to full nationality.  EU citizens have the right to move around the EU, whereas third-country nationals have to apply to do so.&lt;/p&gt;&lt;p&gt;And in many countries, you can get nationality just as easy as long-term residency.  In France for example, you only have to wait 5 years to be able to apply for nationality.  In Spain, if you come from a Latin American country, you only have to wait 2 years (in theory; I have heard of unreasonable delays).  As that is not my particular case, I would have to wait 10 years to get Spanish nationality, making this &quot;EU long-term residency&quot; attractive.  However if I move away from Spain officially, I would have to &quot;start over&quot;.&lt;/p&gt;&lt;p&gt;Man.  The EU.  What a bizarre institution.  I think few normal citizens can describe the structure of the the EU -- you know, what's the deal with the parliament and the commisioners and the president and the central bank?  The operations of the EU have very little to do with democracy.  The tenuous accountability of the Members of European Parliament is mostly to political parties rather than to the people.  Finance in rich countries basically runs the bank.  The commission seems to run itself, with limited accountability to the governments of member states.  To the extent that the EU is a democracy, it is its weakest form: vast, physically removed from its constituency, composed of representatives of representatives.&lt;/p&gt;&lt;p&gt;&lt;b&gt;and yet&lt;/b&gt;&lt;/p&gt;&lt;p&gt;It's been interesting to see the contrast in Switzerland.  Switzerland has its own currency, protectionist trade policies, and a smattering of EU-à-la-carte.  So, yes, it is relatively easy for EU citizens to move to Switzerland, but on the other hand it's quite difficult if you are a &quot;third-country national&quot; like myself.&lt;/p&gt;&lt;p&gt;Switzerland is also very local.  Most legislation involves the citizens directly, via referendum.  The other day, voters here just approved a new constitution, by simple majority, &lt;i&gt;for Geneva&lt;/i&gt;.  Contrast this to the EU, which centralizes its power more every year.&lt;/p&gt;&lt;p&gt;There are good things and bad things about this.  I suppose that specifically, it's mostly good for the Swiss, neutral for EU nationals, and worse for third-country nationals.  Policies that enable local agricultural and industrial production are great for local workers, businesses, consumers (with Swiss salary), and the environment.  These policies are quite difficult to have in the EU.  Even the existence of the Swiss franc is great for local decision-making power, although its policies are mostly controlled by finance.&lt;/p&gt;&lt;p&gt;On the other hand, the immigration policy is quite reactionary, often bordering on xenophobia.  In the EU, the institutions were able to achieve some limited forms of freedom of movement of persons, including third-country nationals, in exchange for the freedom of movement of capital.  No such arrangement has been made in Switzerland.  (They'll happily take your capital, of course.)&lt;/p&gt;&lt;p&gt;As you probably know, I mostly identify as an anarchist, a kind of libertarian socialism that is suspicious of hierarchical power structures.  So Switzerland has its attractions in that sense.  But I've had discussions with folks arguing that the EU has actually been the emancipatory institution, in contrast to reactionary governments, and there is something there.  For all its decentralized, democratic principles, women did not get the right to vote in Swiss federal elections until 1971, and the last canton (local government) held out until 1990, when it was forced to allow women to vote by a federal court.&lt;/p&gt;&lt;p&gt;&lt;b&gt;capital&lt;/b&gt;&lt;/p&gt;&lt;p&gt;There's no way around it: Geneva stinks of money.&lt;/p&gt;&lt;p&gt;An illustration, if you don't mind.  When we first came here to visit in August, we got out of the car, went to a cash machine, and tried to get out 120 francs (approximately 120 dollars, or 100 euros).  No.  The minimum amount was 100 francs, and the next was 200.  Well, OK.  We got 200.  &lt;i&gt;It came out in two bills.&lt;/i&gt;  The machine did not dispense any lower denomination.  There was nothing wrong with that machine; it was marked as only dispensing 100-franc bills and higher.&lt;/p&gt;&lt;p&gt;On the other hand, unlike Spain, all shopkeepers carry around fat bankrolls and are quite happy to break a 100, even on a 50 cent purchase.  You can do that only if you can find something that costs that little, of course.&lt;/p&gt;&lt;p&gt;If you walk around the center of town, it's designer tailors, caviar bars (not kidding), and private banks.  It is truly disgusting.  It makes me think of a butcher's counter: bleach covering a faint smell of blood, but without the redeeming earthiness.  Perhaps this is just a personal analogy though.&lt;/p&gt;&lt;p&gt;That's the macro-level.  Of course there are normal folks here too, but that's tempered by the cost: things are in general really expensive here.  Starbucks drip coffee for 5 dollars.  You can easily spend 70 dollars a person at a normal restaurant.  A normal one-hour tram ticket is 5 dollars.  Etc.&lt;/p&gt;&lt;p&gt;From what I can tell, the cost of things is not a problem if you have a Swiss salary.  I'm in something of an irregular state: an American with Spanish residency, working for a Spanish company, living in Geneva (but actually France).  Administrativia aside, it has been quite a shock coming from Spain to here.  In Igalia, the cooperative I work at, we try to pay everyone the same when everything is going well, but when the budget is a little tighter salaries get scaled down to something approaching &quot;the cost of living&quot; (whatever that is).&lt;/p&gt;&lt;p&gt;We had to open a whole new round of discussions about how to determine compensation after I moved here.  Geneva just didn't fit in anyone's conception about what was reasonable!  It raises all kinds of issues:  what does it mean to work in a cooperative with people in all different kinds of places?  What does fair and equal compensation actually mean in San Francisco and A Coruña and Madrid and Geneva, and how do you calculate it?  It looks like we've come to an interesting and probably unique solution there, so perhaps more on that as discussions progress.&lt;/p&gt;&lt;p&gt;&lt;b&gt;borders&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Of course it's strange to come to this capital of, well, capital with these values, but here I am.  You end up talking about money a lot.  Of course you need a place to put your money and take it out.  For an anarchist I've got a lot of bank accounts: Spanish, Swiss, French, and US somewhere...  For all the new EU regulations, cross-border ATM fees still make it attractive to have an account in the place where you need to withdraw money.&lt;/p&gt;&lt;p&gt;Same thing with mobile phone companies.  As I said, we ended up moving to France.  The rent is a lot cheaper, it's more compatible with our residency permits, and it's still only a 25 minute bike or tram into the center of Geneva so it's not totally in the boon-docks.  But this makes me carry around two phones because I cross the border all the time, and then of course there's the old Spanish SIM I need to do something with.  I've done the PIN-to-PUK dance multiple times, because I can't remember so many numbers.&lt;/p&gt;&lt;p&gt;It's a pretty strange identity to have: to have a house in France, but feel attached to Switzerland.  It's tough to catch the dominant social story, of who is the &quot;us&quot; in this place.  It's problem with Geneva in general, transient city that it is.&lt;/p&gt;&lt;p&gt;&lt;b&gt;greenery&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Well, this post grows long, and it's mostly a rant, right?  And I needed to rant and be done with it.  But I don't want to be too negative.  We have an actual house, with a garden, and we're going to plant things and compost and such.  It's warm and cozy inside and there are snowy mountains about, and there's a cosmopolitan city within a close if brisk bike ride.  I have a French grocery store five minute's walk away.  It's a dark season, but there is cheese and wine enough to carry me through to springtime :)  So things are good.  I'll still rant, but things are all right.&lt;/p&gt;&lt;p&gt;Bon.  Catch you internauts later.  Next time, with code!&lt;/p&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2012-12-05T23:16:13+00:00</dc:date>
	<dc:creator>Andy Wingo</dc:creator>
</item>
<item rdf:about="http://zee-nix.blogspot.com/feeds/8844118172235900197/comments/default">
	<title>Zeeshan Ali: Boxes video tutorial</title>
	<link>http://www.advogato.org/person/zeenix/diary.html?start=316</link>
	<content:encoded>&lt;div&gt;I have been meaning to do this for a while and now I finally managed to do it: &lt;a href=&quot;http://www.youtube.com/watch?v=ki_PeRiHLKU&quot;&gt;Here&lt;/a&gt; you'll find tutorial on &lt;a href=&quot;http://live.gnome.org/Boxes&quot;&gt;Boxes&lt;/a&gt;. I know the sound quality and volume isn't good and there is other mistakes/issues but I'm not too ashamed as this is the first time I've done this and tools that I needed/wanted were all breaking on my Fedora 18 laptop.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE:&lt;/b&gt; I &lt;a href=&quot;https://www.youtube.com/watch?v=2iFhcu4Llqg&quot;&gt;uploaded&lt;/a&gt; an updated version of this tutorial with slightly improved audio. To improve it further, I'll have to re-record the audio or the whole video but right now I don't have time for that. Perhaps in a few weeks..&lt;/div&gt;&lt;div&gt;
  &lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3575421168816814786-8844118172235900197?l=zee-nix.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2012-11-23T17:05:56+00:00</dc:date>
</item>
<item rdf:about="http://felipec.wordpress.com/?p=1377">
	<title>Felipe Contreras: FelipeC</title>
	<link>http://felipec.wordpress.com/2012/11/13/git-remote-hg-bzr-2/</link>
	<content:encoded>&lt;p&gt;I&amp;#8217;ve been involved in the git project for some time now, and through the years I&amp;#8217;ve had to work with other DSCMs, like mercurial and monotone. Not really as a user, but investigating the inner workings of them, mostly for conversion purposes, and I&amp;#8217;ve written tools that nobody used, like mtn2git, or pidgin-git-import, but eventually I decided; why not write something that everybody can use?&lt;/p&gt;
&lt;p&gt;So, I present to you &lt;strong&gt;git-remote-hg&lt;/strong&gt;, and &lt;strong&gt;git-remote-bzr&lt;/strong&gt;. What do they do?&lt;/p&gt;
&lt;pre&gt;git clone &quot;hg::http://selenic.com/repo/hello&quot;
git clone &quot;bzr::lp:gnuhello&quot;&lt;/pre&gt;
&lt;p&gt;That&amp;#8217;s right, you can clone both mercurial and bazaar repositories now with little to no effort.&lt;/p&gt;
&lt;p&gt;The original repository will be tracked like any git repository:&lt;/p&gt;
&lt;pre&gt;% git remote show origin
* remote origin
  Fetch URL: hg::http://selenic.com/repo/hello
  Push  URL: hg::http://selenic.com/repo/hello
  HEAD branch: master
  Remote branches:hg and mercurial. 
    branches/default tracked
    master           tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (create)&lt;/pre&gt;
&lt;p&gt;You can pull, and in fact push as well. Actually, you wouldn&amp;#8217;t even notice that this remote is not a git repository. You can create and push new branches&amp;#8230; everything.&lt;/p&gt;
&lt;p&gt;You might be thinking that this code being so new might have many issues, and you might screw up a mercurial repository. While that is true to some extent, there&amp;#8217;s already a project that tries to act as a bridge between mercurial and git: &lt;a href=&quot;http://hg-git.github.com/&quot;&gt;hg-git&lt;/a&gt;. This project has a long history, and a lot of people use it successfully. So, I took their test framework, cleaned it up, and used to test my git-remote-hg code. Eventually all the tests passed, and I cloned big mercurial repositories without any issue, and the result were &lt;strong&gt;exact replicas&lt;/strong&gt;, and I know that because the SHA-1&amp;#8242;s were the same &lt;img src=&quot;http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;So you can even keep working on top of clones you have created with hg-git, and switch back and forth between git-remote-hg and hg-git as you wish. The advantage over hg-git, is that you don&amp;#8217;t need to use the mercurial interface at all, you can use git &lt;img src=&quot;http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;To enable the hg-git compatibility mode you would need this:&lt;/p&gt;
&lt;pre&gt;% git config --global remote-hg.hg-git-compat true&lt;/pre&gt;
&lt;h2&gt;What about the others?&lt;/h2&gt;
&lt;p&gt;Surely I must not be the first one try something this cool, right? I don&amp;#8217;t want to dwell into all the details why none of the other tools suited my needs, but let&amp;#8217;s give a quick look:&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://hg-git.github.com/&quot;&gt;hg-git&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;It&amp;#8217;s for mercurial, not git. So you need to use it through the mercurial UI.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://repo.or.cz/w/fast-export.git&quot;&gt;fast-export&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This is a very nice tool, but only allows you to export stuff (fetch an hg repo), and you have to manually run the &amp;#8216;git fast-import&amp;#8217; command, setup the marks, and so on. Also, it&amp;#8217;s not very well maintained.&lt;/p&gt;
&lt;h3&gt;Another &lt;a href=&quot;https://github.com/rfk/git-remote-hg&quot;&gt;git-remote-hg&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;It needs hg-git.&lt;/p&gt;
&lt;h3&gt;Yet another &lt;a href=&quot;https://github.com/msysgit/msysgit/wiki/Guide-to-git-remote-hg&quot;&gt;git-remote-hg&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You need quite a lot of patches on top of git, so your vanilla version of git is not going to cut it. In addition to that it doesn&amp;#8217;t support as many features; no tags, no bookmarks. Plus it fails all my extensive tests for git-remote-hg.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;https://github.com/cosmin/git-hg&quot;&gt;git-hg&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;It needs separate tools, such as &amp;#8216;hg convert&amp;#8217;, and fast-export, and it doesn&amp;#8217;t use remote helper infrastructure, so it&amp;#8217;s not transparent: you have to run git-hg clone, git-hg fetch, and so on.&lt;/p&gt;
&lt;h3&gt;Another &lt;a href=&quot;https://github.com/todesschaf/git-hg&quot;&gt;git-hg&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;It needs hg-git, and doesn&amp;#8217;t use git&amp;#8217;s remote helper infrastructure either: you have to do git hg-clone, git hg-pull, etc.&lt;/p&gt;
&lt;p&gt;There might be others, but you get the point.&lt;/p&gt;
&lt;p&gt;The situation in bazaar is not much better, but I&amp;#8217;m not going to bother listing the tools.&lt;/p&gt;
&lt;h2&gt;More coolness&lt;/h2&gt;
&lt;p&gt;In fact, you can push and pull from and to mercurial and bazaar &lt;img src=&quot;http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;pre&gt;% git remote -v
bzr	bzr::lp:~felipec/+junk/test (fetch)
bzr	bzr::lp:~felipec/+junk/test (push)
gh	gh:felipec/test.git (fetch)
gh	gh:felipec/test.git (push)
hg	hg::bb+ssh://felipec/test (fetch)
hg	hg::bb+ssh://felipec/test (push)&lt;/pre&gt;
&lt;p&gt;Isn&amp;#8217;t that cool?&lt;/p&gt;
&lt;p&gt;So, are there any drawbacks? Surely some information must be lost.&lt;/p&gt;
&lt;p&gt;Nope, not really. At least not when using the hg-git compat mode, because all the extra information is saved in the commit messages.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: I forgot to mention the only bidirectionality problem: octopus merges. In git a merge can have any number of parent commits, but in mercurial only two are allowed. So you might have problem converting from a git repository to a mercurial one. It&amp;#8217;s the only feature that hg-git has, that git-remote-hg doesn&amp;#8217;t. As for bazaar, it also allows multiple parents, so it should work fine, but this hasn&amp;#8217;t been thoroughly tested.&lt;/p&gt;
&lt;p&gt;The only consideration is that in the case of mercurial branches are quite different from git branches, so you need to be really careful to get the behavior you want, which is why it&amp;#8217;s best to just ignore mercurial branches, and use bookmarks instead. When you create git branches and push them to mercurial, bookmarks will be created on whatever branch is current.&lt;/p&gt;
&lt;h2&gt;Trying it out&lt;/h2&gt;
&lt;p&gt;Just copy them files (&lt;a href=&quot;http://github.com/felipec/git/blob/fc/master/contrib/remote-helpers/git-remote-hg.py&quot;&gt;git-remote-hg&lt;/a&gt;, &lt;a href=&quot;http://github.com/felipec/git/blob/fc/master/contrib/remote-helpers/git-remote-bzr.py&quot;&gt;git-remote-bzr&lt;/a&gt;) to any location available in your $PATH (.e.g ~/bin), and start cloning &lt;img src=&quot;http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Soon they might be merged into upstream git, so they would be distributed as other contrib scripts (e.g. /usr/share/git), and eventually possibly enabled by default.&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/felipec.wordpress.com/1377/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/felipec.wordpress.com/1377/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=felipec.wordpress.com&amp;blog=62686&amp;post=1377&amp;subd=felipec&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2012-11-13T02:28:17+00:00</dc:date>
</item>
<item rdf:about="http://www.advogato.org/person/ensonic/diary.html?start=134">
	<title>Stefan Kost: 11 Nov 2012</title>
	<link>http://www.advogato.org/person/ensonic/diary.html?start=134</link>
	<content:encoded>&lt;b&gt;buzztard&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Finally pushed the pattern control-source: 26 files changed, 1204 insertions, 1333 deletions. It looks like only a little gain in code size, but that is not true; we added more tests and splitting up a large class always comes with some boilerplate for the new class. There are still some opportunities for optimizations, which I'll probably try some soon.&lt;br /&gt;
&lt;br /&gt;
In the UI I improved the interaction controller workflow. For controllers that implement control discovery the dialog from the context menu will also bind the new controller. The settings are now finally useful, as there one can do mass-learning (tweak all knows and then go through the list and name them).&lt;br /&gt;
&lt;br /&gt;
Writing synth plugins for buzztard would be quite a bit of copy and paste. I chopped simsyn into pieces as reusable objects in libgst-buzztard. We have a few oscillators, envelope objects and the svf-filter. The gst elements would proxy some properties of the synth component. Unfortunately that means copy'n'paste of the property setup. I've tried this code, but it shows no effect :/  &lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;     GObjectClass * filter_klass = g_type_class_ref (GSTBT_TYPE_FILTER_SVF);&lt;br /&gt;
     g_object_class_install_property (gobject_class, PROP_RESONANCE,&lt;br /&gt;
        g_param_spec_override (&quot;resonance&quot;, &lt;br /&gt;
          g_object_class_find_property (filter_klass, &quot;resonance&quot;)));&lt;br /&gt;
     g_type_class_unref (filter_klass);&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
A full standalone example can be found at &lt;a href=&quot;http://buzztard.git.sourceforge.net/git/gitweb.cgi?p=buzztard/buzztard;a=blob;f=design/gobject/propertyproxy.c&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
We also have a new element called wavereplay. This is mainly for testing the wavetable oscillator, but also has a nice property compared to tracker elements. It only has parameters to select the wave to play and it will play it from start to finish in syn with the song. That is if you seek to 2:00, the wave will play content from 2:00. This is unlike tracker elements that would only play what gets triggered from the new time position. One practical use is doing a mixdown of the music rendering with the vocal recordings. In such a song you load two wave (song, vocals), use two wavereplay elements, add effect elements to the one for the vocals and re-render the song to create the mixdown.&lt;br /&gt;
&lt;br /&gt;
I thought I knew pretty much all about gobject. This month I discovered something old I did not know about. It is supported to calls g_object_class_install_property() for a property inherited from the baseclass to e.g. narrow down the value range. This is very useful for the &quot;children&quot; property of polyphonic elements (where children is the number of voices). The interface does only  limit the property to the full int range. With this feature elements like e.g. sidsyn can override the range to 3...3 (sid has always 3 voices).&lt;br /&gt;
&lt;br /&gt;
The last bigger change this month was a refactoring cleanup in sequence and song-info. This was quite a big of code shuffling, but now all the timing info is in song-info (which already has bpm an stuff). This change helped with an optimization in the pattern control-sources.&lt;br /&gt;
&lt;br /&gt;
132 files changed, 2417 insertions(+), 2138 deletions(-)&lt;br /&gt;</content:encoded>
	<dc:date>2012-11-11T21:07:36+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-977684764667858073.post-4222597467555828089">
	<title>Bastien Nocera: Jobs change</title>
	<link>http://www.hadess.net/2012/11/jobs-change.html</link>
	<content:encoded>Seeing as everyone is making job-related posts, I thought I'd join in the fun.&lt;br /&gt;&lt;br /&gt;After 10 years of service, I've left &lt;a href=&quot;http://gb.redhat.com/&quot;&gt;Red Hat UK&lt;/a&gt; on the &lt;a href=&quot;http://en.wikipedia.org/wiki/Halloween&quot;&gt;31st of October&lt;/a&gt; to join &lt;a href=&quot;http://fr.redhat.com/&quot;&gt;Red Hat France&lt;/a&gt; on the &lt;a href=&quot;http://en.wikipedia.org/wiki/All_Saints%27_Day&quot;&gt;1st of November&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I now live in &lt;a href=&quot;http://en.wikipedia.org/wiki/Lyon&quot;&gt;the birthplace of cinema and of French gastronomy&lt;/a&gt;, so poke me if you want to talk GNOME or Linux over beers. I've already found the English pub.</content:encoded>
	<dc:date>2012-11-09T20:18:28+00:00</dc:date>
	<dc:creator>Bastien Nocera</dc:creator>
</item>
<item rdf:about="http://arunraghavan.net/?p=1380">
	<title>Arun Raghavan: PulseConf 2012: Report</title>
	<link>http://arunraghavan.net/2012/11/pulseconf-2012-report/</link>
	<content:encoded>&lt;p&gt;For those of you who missed my previous updates, we recently organised a PulseAudio miniconference in Copenhagen, Denmark last week. The organisation of all this was spearheaded by ALSA and PulseAudio hacker, &lt;a href=&quot;http://voices.canonical.com/david.henningsson/&quot;&gt;David Henningsson&lt;/a&gt;. The good folks organising the Ubuntu Developer Summit / Linaro Connect were kind enough to allow us to colocate this event. A big thanks to both of them for making this possible!&lt;/p&gt;

&lt;div id=&quot;attachment_1381&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://arunraghavan.net/wp-content/uploads/pulseconf.jpg&quot;&gt;&lt;img src=&quot;http://arunraghavan.net/wp-content/uploads/pulseconf-e1352181077652-943x1024.jpg&quot; alt=&quot;The room where the first PulseAudio conference took place&quot; title=&quot;PulseConf Room&quot; width=&quot;540&quot; height=&quot;586&quot; class=&quot;size-large wp-image-1381&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;The room where the first PulseAudio conference took place&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;The conference was attended by the four current active PulseAudio developers: &lt;a href=&quot;http://colin.guthr.ie/&quot;&gt;Colin Guthrie&lt;/a&gt;, Tanu Kaskinen, David Henningsson, and myself. We were joined by long-time contributors Janos Kovacs and Jaska Uimonen from Intel, &lt;a href=&quot;http://www.themuso.com/&quot;&gt;Luke Yelavich&lt;/a&gt;, Conor Curran and Michał Sawicz.&lt;/p&gt;

&lt;p&gt;We started the conference at around 9:30 am on November 2nd, and actually managed to keep to the final &lt;a href=&quot;http://lists.freedesktop.org/archives/pulseaudio-discuss/2012-November/015135.html&quot;&gt;schedule&lt;/a&gt;(!), so I&amp;#8217;m going to break this report down into sub-topics for each item which will hopefully make for easier reading than an essay. I&amp;#8217;ve also put up some photos from the conference on the &lt;a href=&quot;https://plus.google.com/events/c203cr2jfibmc7tcemci11pgbq4&quot;&gt;Google+ event&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Mission and Vision&lt;/h3&gt;

&lt;p&gt;We started off with a broad topic &amp;#8212; what each of our personal visions/goals for the project are. Interestingly, two main themes emerged: having the most seamless desktop user experience possible, and making sure we are well-suited to the embedded world.&lt;/p&gt;

&lt;p&gt;Most of us expressed interest in making sure that users of various desktops had a smooth, hassle-free audio experience. In the ideal case, they would never need to find out what PulseAudio is!&lt;/p&gt;

&lt;p&gt;Orthogonally, a number of us are also very interested in making PulseAudio a strong contender in the embedded space (mobile phones, tablets, set top boxes, cars, and so forth). While we already find PulseAudio being used in some of these, there are areas where we can do better (more in later topics).&lt;/p&gt;

&lt;p&gt;There was some reservation expressed about other, less-used features such as network playback being ignored because of this focus. The conclusion after some discussion was that this would not be the case, as a number of embedded use-cases do make use of these and other &amp;#8220;fringe&amp;#8221; features.&lt;/p&gt;

&lt;h3&gt;Increasing patch bandwidth&lt;/h3&gt;

&lt;p&gt;Contributors to PulseAudio will be aware that our patch queue has been growing for the last few months due to lack of developer time. We discussed several ways to deal with this problem, the most promising of which was a periodic triage meeting.&lt;/p&gt;

&lt;p&gt;We will be setting up a rotating schedule where each of us will organise a meeting every 2 weeks (the period might change as we implement things) where we can go over outstanding patches and hopefully clear backlog. Colin has agreed to set up the first of these.&lt;/p&gt;

&lt;h3&gt;Routing infrastructure&lt;/h3&gt;

&lt;p&gt;Next on the agenda was a presentation by Janos Kovacs about the work they&amp;#8217;ve been doing at Intel with enhancing the PulseAudio&amp;#8217;s routing infrastructure. These are being built from the perspective of &lt;acronym title=&quot;In-Vehicle Infotainment&quot;&gt;IVI&lt;/acronym&gt; systems (i.e., cars) which typically have fairly complex use cases involving multiple concurrent devices and users. The slides for the talk will be put up here shortly (&lt;em&gt;edit: slides are now &lt;a href=&quot;http://arunraghavan.net/downloads/janos-pulseaudio-copenhagen.pdf&quot;&gt;available&lt;/a&gt;&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;The talk was mingled with a Q&amp;amp;A type discussion with Janos and Jaska. The first item of discussion was consolidating Colin&amp;#8217;s priority-based routing ideas into the proposed infrastructure. The broad thinking was that the ideas were broadly compatible and should be implementable in the new model.&lt;/p&gt;

&lt;p&gt;There was also some discussion on merging the module-combine-sink functionality into PulseAudio&amp;#8217;s core, in order to make 1:N routing easier. Some alternatives using te &lt;tt&gt;module-filter-*&lt;/tt&gt; were proposed. Further discussion will likely be required before this is resolved.&lt;/p&gt;

&lt;p&gt;The next steps for this work are for Jaska and Janos to break up the code into smaller logical bits so that we can start to review the concepts and code in detail and work towards eventually merging as much as makes sense upstream.&lt;/p&gt;

&lt;h3&gt;Low latency&lt;/h3&gt;

&lt;p&gt;This session was taken up against the background of improving latency for games on the desktop (although it does have other applications). The indicated required latency for games was given as 16 ms (corresponding to a frame rate of 60 fps). A number of ideas to deal with the problem were brought up.&lt;/p&gt;

&lt;p&gt;Firstly, it was suggested that the &lt;tt&gt;maxlength&lt;/tt&gt; buffer attribute when setting up streams could be used to signal a hard limit on stream latency &amp;#8212; the client signals that it will prefer an underrun, over a latency above maxlength.&lt;/p&gt;

&lt;p&gt;Another long-standing item was to investigate the cause of underruns as we lower latency on the stream &amp;#8212; David has already begun taking this up on the LKML.&lt;/p&gt;

&lt;p&gt;Finally, another long-standing issue is the buffer attribute adjustment done during stream setup. This is not very well-suited to low-latency applications. David and I will be looking at this in coming days.&lt;/p&gt;

&lt;h3&gt;Merging per-user and system modes&lt;/h3&gt;

&lt;p&gt;Tanu led the topic of finding a way to deal with use-cases such as &lt;acronym title=&quot;Music Player Daemon&quot;&gt;&lt;tt&gt;mpd&lt;/tt&gt;&lt;/acronym&gt; or multi-user systems, where access to the PulseAudio daemon of the active user by another user might be desired. Multiple suggestions were put forward, though a definite conclusion was not reached, as further thought is required.&lt;/p&gt;

&lt;p&gt;Tanu&amp;#8217;s suggestion was a split between a per-user daemon to manage tasks such as per-user configuration, and a system-wide daemon to manage the actual audio resources. The rationale being that the hardware itself is a common resource and could be handled by a non-user-specific daemon instance. This approach has the advantage of having a single entity in charge of the hardware, which keeps a part of the implementation simpler. The disadvantage is that we will either sacrifice security (arbitrary users can &amp;#8220;eavesdrop&amp;#8221; using the machine&amp;#8217;s mic), or security infrastructure will need to be added to decide what users are allowed what access.&lt;/p&gt;

&lt;p&gt;I suggested that since these are broadly fringe use-cases, we should document how users can configure the system by hand for these purposes, the crux of the argument being that our architecture should be dictated by the main use-cases, and not the ancillary ones. The disadvantage of this approach is, of course, that configuration is harder for the minority that wishes multi-user access to the hardware.&lt;/p&gt;

&lt;p&gt;Colin suggested a mechanism for users to be able to request access from an &amp;#8220;active&amp;#8221; PulseAudio daemon, which could trigger approval by the corresponding &amp;#8220;active&amp;#8221; user. The communication mechanism could be the D-Bus system bus between user daemons, and Ștefan Săftescu&amp;#8217;s Google Summer of Code work to allow desktop notifications to be triggered from PulseAudio could be used to get to request authorisation.&lt;/p&gt;

&lt;p&gt;David suggested that we could use the per-user/system-wide split, modified somewhat to introduce the concept of a &amp;#8220;system-wide&amp;#8221; card. This would be a device that is configured as being available to the whole system, and thus explicitly marked as not having any privacy guarantees.&lt;/p&gt;

&lt;p&gt;In both the above cases, discussion continued about deciding how the access control would be handled, and this remains open.&lt;/p&gt;

&lt;p&gt;We will be continuing to look at this problem until consensus emerges.&lt;/p&gt;

&lt;h3&gt;Improving (laptop) surround sound&lt;/h3&gt;

&lt;p&gt;The next topic dealt with being able to deal with laptops with a built-in 2.1 channel set up. The background of this is that there are a number of laptops with stereo speakers and a subwoofer. These are usually used as stereo devices with the subwoofer implicitly being fed data by the audio controller in some hardware-dependent way.&lt;/p&gt;

&lt;p&gt;The possibility of exposing this hardware more accurately was discussed. Some investigation is required to see how things are currently exposed for various hardware (my MacBook Pro exposes the subwoofer as a surround control, for example). We need to deal with correctly exposing the hardware at the ALSA layer, and then using that correctly in PulseAudio profiles.&lt;/p&gt;

&lt;p&gt;This led to a discussion of how we could handle profiles for these. Ideally, we would have a stereo profile with the hardware dealing with upmixing, and a 2.1 profile that would be automatically triggered when a stream with an LFE channel was presented. This is a general problem while dealing with surround output on HDMI as well, and needs further thought as it complicates routing.&lt;/p&gt;

&lt;h3&gt;Testing&lt;/h3&gt;

&lt;p&gt;I gave a rousing speech about writing more tests using some of the new improvements to our testing framework. Much cheering and acknowledgement ensued.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ed.: some literary liberties might have been taken in this section&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;Unified cross-distribution ALSA configuration&lt;/h3&gt;

&lt;p&gt;I missed a large part of this unfortunately, but the crux if the discussion was around unifying cross-distribution sound configuration for those who wish to disable PulseAudio.&lt;/p&gt;

&lt;h3&gt;Base volumes&lt;/h3&gt;

&lt;p&gt;The next topic we took up was base volumes, and whether they are useful to most end users. For those unfamiliar with the concept, we sometimes see sinks/sources where which support volume controls going to &gt; 0dB (which is the no=attenuation point). We provide the maximum allowed gain in ALSA as the maximum volume, and suggest that UIs show a marker for the base volume.&lt;/p&gt;

&lt;p&gt;It was felt that this concept was irrelevant, and probably confusing to most end users, and that we suggest that UIs do not show this information any more.&lt;/p&gt;

&lt;p&gt;Relatedly, it was decided that having a per-port maximum volume configuration would be useful, so as to allow users to deal with hardware where the output might get too loud.&lt;/p&gt;

&lt;h3&gt;Devices with dynamic capabilities (HDMI)&lt;/h3&gt;

&lt;p&gt;Our next topic of discussion was finding a way to deal with devices such as those HDMI ports where the capabilities of the device could change at run time (for example, when you plug out a monitor and plug in a home theater receiver).&lt;/p&gt;

&lt;p&gt;A few ideas to deal with this were discussed, and the best one seemed to be David&amp;#8217;s proposal to always have a separate card for each HDMI device. The addition of dynamic profiles could then be exploited to only make profiles available when an actual device is plugged in (and conversely removed when the device is plugged out).&lt;/p&gt;

&lt;h3&gt;Splitting of configuration&lt;/h3&gt;

&lt;p&gt;It was suggested that we could split our current configuration files into three categories: core, policy and hardware adaptation. This was met with approval all-around, and the pre-existing ability to read configuration from subdirectories could be reused.&lt;/p&gt;

&lt;p&gt;Another feature that was desired was the ability to ship multiple configurations for different hardware adaptations with a single package and have the correct one selected based on the hardware being run on. We did not know of a standard, architecture-independent way to determine hardware adaptation, so it was felt that the first step toward solving this problem would be to find or create such a mechanism. This could either then be used to set up configuration correctly in early boot, or by PulseAudio for do runtime configuration selection.&lt;/p&gt;

&lt;p&gt;Relatedly, moving all distributed configuration to &lt;tt&gt;/usr/share/...&lt;/tt&gt;, with overrides in &lt;tt&gt;/etc/pulse/...&lt;/tt&gt; and &lt;tt&gt;$HOME&lt;/tt&gt; were suggested.&lt;/p&gt;

&lt;h3&gt;Better drain/underrun reporting&lt;/h3&gt;

&lt;p&gt;David volunteered to implement a per-sink-input timer for accurately determining when drain was completed, rather than waiting for the period of the entire buffer as we currently do. Unsurprisingly, no objections were raised to this solution to the long-standing issue.&lt;/p&gt;

&lt;p&gt;In a similar vein, redefining the underflow event to mean a real device underflow (rather than the client-side buffer running empty) was suggested. After some discussion, we agreed that a separate event for device underruns would likely be better.&lt;/p&gt;

&lt;h3&gt;Beer&lt;/h3&gt;

&lt;p&gt;We called it a day at this point and dispersed beer-wards.&lt;/p&gt;

&lt;div id=&quot;attachment_1390&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://arunraghavan.net/wp-content/uploads/pulseconf-hackers.jpg&quot;&gt;&lt;img src=&quot;http://arunraghavan.net/wp-content/uploads/pulseconf-hackers-1024x577.jpg&quot; alt=&quot;PulseConf Hackers&quot; title=&quot;PulseConf Hackers&quot; width=&quot;540&quot; height=&quot;304&quot; class=&quot;size-large wp-image-1390&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Our valiant attendees after a day of plotting the future of PulseAudio&lt;/p&gt;&lt;/div&gt;

&lt;h3&gt;User experience&lt;/h3&gt;

&lt;p&gt;David very kindly invited us to spend a day after the conference hacking at his house in Lund, Sweden, just a short hop away from Copenhagen. We spent a short while in the morning talking about one last item on the agenda &amp;#8212; helping to build a more seamless user experience. The idea was to figure out some tools to help users with problems quickly converge on what problem they might be facing (or help developers do the same). We looked at the Ubuntu apport audio debugging tool that David has written, and will try to adopt it for more general use across distributions.&lt;/p&gt;

&lt;h3&gt;Hacking&lt;/h3&gt;

&lt;p&gt;The rest of the day was spent in more discussions on topics from the previous day, poring over code for some specific problems, and rolling out the first release candidate for the upcoming 3.0 release.&lt;/p&gt;

&lt;h3&gt;And cut!&lt;/h3&gt;

&lt;p&gt;I am very happy that this conference happened, and am looking forward to being able to do it again next year. As you can see from the length of this post, there are lot of things happening in this part of the stack, and lots more yet to come. It was excellent meeting all the fellow PulseAudio hackers, and my thanks to all of them for making it.&lt;/p&gt;

&lt;p&gt;Finally, I wouldn&amp;#8217;t be sitting here writing this report without support from Collabora, who sponsored my travel to the conference, so it&amp;#8217;s fitting that I end this with a shout-out to them. :)&lt;/p&gt;</content:encoded>
	<dc:date>2012-11-06T11:04:22+00:00</dc:date>
</item>
<item rdf:about="http://abock.org/?p=518">
	<title>Aaron Bockover: From Rdio to Xamarin</title>
	<link>http://abock.org/2012/10/24/from-rdio-to-xamarin</link>
	<content:encoded>&lt;p&gt;Last week I gave a talk on &lt;a href=&quot;http://github.com/rdio/vernacular&quot;&gt;Vernacular&lt;/a&gt; at &lt;a href=&quot;http://monkeyspace.org&quot;&gt;MonkeySpace&lt;/a&gt; in Boston. As Wednesday concluded, so did my last day at &lt;a href=&quot;http://rd.io&quot;&gt;Rdio&lt;/a&gt; after nearly two years. In that time I had the pleasure of working with very bright people on creating the best streaming music service available on Mobile, Web, and Desktop.&lt;/p&gt;

&lt;p&gt;From the introduction of the Windows Phone app, to the launch of the new Android app, Rdio 2.0 for Web and Desktop, and finally the Android and iOS refresh betas, Rdio has been and will always be close to my heart. I wish everyone at Rdio the best -- keep on being excellent!&lt;/p&gt;

&lt;p&gt;I originally intended to simply take a few weeks of vacation time after leaving Rdio to focus on &lt;a href=&quot;http://catoverflow.com&quot;&gt;Cat Overflow&lt;/a&gt;, beer drinking, and cycling (funemployment!), but &lt;a href=&quot;http://instagram.com/p/RDAtJjr69a/&quot;&gt;after spending a long weekend in Florida for a wedding&lt;/a&gt;, I find myself headed back to Boston. A simple Monday and Tuesday at home in Raleigh is all I’ve afforded myself in terms of vacation, since today I start at &lt;a href=&quot;http://xamar.in&quot;&gt;Xamarin&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;While I’m determined to actually take some real vacation in the near future, I was enticed to join Xamarin as soon as possible to begin bootstrapping work on an exciting new product. I'm looking forward to working with new and familiar faces!&lt;/p&gt;

&lt;p&gt;Perhaps I’ll start blogging again as well, after nearly two years of silence. I certainly owe a follow-up post about Vernacular. For starters, here are slides from my talk last week, cats included. Video of the talk should be up at MonkeySpace soon as well.&lt;/p&gt;

&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://dl.dropbox.com/u/10397738/vernacular.pdf&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://abock.org/blog-images/vernacular.png&quot; alt=&quot;Vernacular Slide&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dl.dropbox.com/u/10397738/vernacular.pdf&quot;&gt;PDF Slides (static cats)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dl.dropbox.com/u/10397738/vernacular.key&quot;&gt;Keynote Slides (animated cats)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2012-10-24T18:40:15+00:00</dc:date>
</item>
<item rdf:about="http://felipec.wordpress.com/?p=1357">
	<title>Felipe Contreras: FelipeC</title>
	<link>http://felipec.wordpress.com/2012/10/14/progress-and-ruby/</link>
	<content:encoded>&lt;p&gt;We&amp;#8217;ve all have noticed that when looking back at code you wrote years ago, you realize how much you have progressed&amp;#8211;or how much you sucked in the past, depending on your perspective&amp;#8211;so it&amp;#8217;s always a fair assumption to say, that in the future you will look back at the code you are working now, and feel ashamed. Perhaps this becomes logarithmically less of an issue as time goes on, but at least I still experience this.&lt;/p&gt;
&lt;p&gt;I want to share what I think is a good example of this. Ruby code is particularly special in this respect since there&amp;#8217;s always tons of ways to write code that do exactly the same.&lt;/p&gt;
&lt;p&gt;Back in 2007 when I started msn-pecan, I wanted a script to create a ChangeLog, not because I thought it was needed, but mainly to shut up the people that said the git log wasn&amp;#8217;t good enough, and that you still needed to update the ChangeLog in every commit. Few of those people remain today, but my script is still here.&lt;/p&gt;
&lt;p&gt;The objective was to output something like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;== Release 0.0.2 ==

2007-11-30	Felipe Contreras 
	* Add readme.
	* Update copyright stuff.
	* Fix to allow aliases with special characters.

== Release 0.0.1 ==

2007-11-29	Felipe Contreras 
	* Fix warnings.
	* Add display name support.

2007-11-28	Felipe Contreras 
	* Add .gitignore file.
	* Update info.
	* Fix compilation.
	* Stuff required to compile.
	* Initial import.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For some reason I was forced to look at it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;#!/usr/bin/env ruby&lt;/span&gt;

&lt;span&gt;require&lt;/span&gt; &lt;span&gt;&quot;stringio&quot;&lt;/span&gt;

revs&lt;span&gt;=&lt;/span&gt;&lt;span&gt;`git rev-list master`&lt;/span&gt;
refs&lt;span&gt;=&lt;/span&gt;&lt;span&gt;`git for-each-ref --format=&quot;%(objectname) %(refname)&quot; refs/tags`&lt;/span&gt;

commits &lt;span&gt;=&lt;/span&gt; revs.map { &lt;span&gt;|&lt;/span&gt;e&lt;span&gt;|&lt;/span&gt; e.chomp }

tags &lt;span&gt;=&lt;/span&gt; {}

list &lt;span&gt;=&lt;/span&gt; {}
list_order &lt;span&gt;=&lt;/span&gt; []
&lt;span&gt;$tag&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;&quot;&quot;&lt;/span&gt;

refs.each &lt;span&gt;do&lt;/span&gt; &lt;span&gt;|&lt;/span&gt;l&lt;span&gt;|&lt;/span&gt;
  tag, name &lt;span&gt;=&lt;/span&gt; l.chomp.split(&lt;span&gt;&quot; &quot;&lt;/span&gt;)
  name &lt;span&gt;=&lt;/span&gt; name.slice(&lt;span&gt;&lt;span&gt;/&lt;/span&gt;refs\&lt;span&gt;/&lt;/span&gt;&lt;span&gt;tags&lt;/span&gt;&lt;/span&gt;\&lt;span&gt;&lt;span&gt;/&lt;/span&gt;v(.*)&lt;span&gt;/&lt;/span&gt;&lt;/span&gt;, &lt;span&gt;1&lt;/span&gt;)
  tags[tag] &lt;span&gt;=&lt;/span&gt; name
&lt;span&gt;end&lt;/span&gt;

commits.each &lt;span&gt;do&lt;/span&gt; &lt;span&gt;|&lt;/span&gt;e&lt;span&gt;|&lt;/span&gt;
  commit &lt;span&gt;=&lt;/span&gt; &lt;span&gt;StringIO&lt;/span&gt;.&lt;span&gt;new&lt;/span&gt;(&lt;span&gt;`git show --pretty=&quot;format:%an ::%ai::%s\n%b&quot; --quiet &lt;span&gt;#{e}&lt;/span&gt;`&lt;/span&gt;)
  author, date, subject &lt;span&gt;=&lt;/span&gt; commit.readline.chomp.split(&lt;span&gt;&quot;::&quot;&lt;/span&gt;)
  date &lt;span&gt;=&lt;/span&gt; date.split(&lt;span&gt;&quot; &quot;&lt;/span&gt;)[&lt;span&gt;0&lt;/span&gt;]
  &lt;span&gt;if&lt;/span&gt; tags[e]
    &lt;span&gt;$tag&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; tags[e]
    list_order &lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt; {&lt;span&gt;:id&lt;/span&gt; &lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt; &lt;span&gt;$tag&lt;/span&gt;}
  &lt;span&gt;end&lt;/span&gt;
  id &lt;span&gt;=&lt;/span&gt; &lt;span&gt;&quot;&lt;span&gt;#{date}&lt;/span&gt;\t&lt;span&gt;#{author}&lt;/span&gt;&quot;&lt;/span&gt;
  uid &lt;span&gt;=&lt;/span&gt; &lt;span&gt;&quot;&lt;span&gt;#{date}&lt;/span&gt;\t&lt;span&gt;#{author}&lt;/span&gt;\t&lt;span&gt;#{$tag}&lt;/span&gt;&quot;&lt;/span&gt;
  &lt;span&gt;if&lt;/span&gt; &lt;span&gt;not&lt;/span&gt; list[uid]
    list[uid] &lt;span&gt;=&lt;/span&gt; []
    list_order &lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt; {&lt;span&gt;:id&lt;/span&gt; &lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt; id, &lt;span&gt;:value&lt;/span&gt; &lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt; list[uid]}
  &lt;span&gt;end&lt;/span&gt;
  list[uid] &lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt; subject
&lt;span&gt;end&lt;/span&gt;

list_order.each &lt;span&gt;do&lt;/span&gt; &lt;span&gt;|&lt;/span&gt;i&lt;span&gt;|&lt;/span&gt;
  id &lt;span&gt;=&lt;/span&gt; i[&lt;span&gt;:id&lt;/span&gt;]
  value &lt;span&gt;=&lt;/span&gt; i[&lt;span&gt;:value&lt;/span&gt;]

  &lt;span&gt;if&lt;/span&gt; value
    puts &lt;span&gt;&quot;&lt;span&gt;#{id}&lt;/span&gt;&quot;&lt;/span&gt;
    puts value.map { &lt;span&gt;|&lt;/span&gt;e&lt;span&gt;|&lt;/span&gt; &lt;span&gt;&quot;\t* &lt;span&gt;#{e}&lt;/span&gt;&quot;&lt;/span&gt; }.join(&lt;span&gt;&quot;\n&quot;&lt;/span&gt;)
    puts &lt;span&gt;&quot;\n&quot;&lt;/span&gt;
  &lt;span&gt;else&lt;/span&gt;
    puts &lt;span&gt;&quot;== Release &lt;span&gt;#{id}&lt;/span&gt; ==\n\n&quot;&lt;/span&gt;
  &lt;span&gt;end&lt;/span&gt;
&lt;span&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you are familiar with Ruby, you would see that there&amp;#8217;s &lt;b&gt;tons&lt;/b&gt; of things that don&amp;#8217;t make sense there, unnecessary complexity, simpler idioms, etc. So I decided to clean it up:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;#!/usr/bin/env ruby&lt;/span&gt;

&lt;span&gt;require&lt;/span&gt; 'date'

tags &lt;span&gt;=&lt;/span&gt; {}
tag &lt;span&gt;=&lt;/span&gt; &lt;span&gt;nil&lt;/span&gt;
commits &lt;span&gt;=&lt;/span&gt; []

&lt;span&gt;class&lt;/span&gt; &lt;span&gt;Commit&lt;/span&gt;
  &lt;span&gt;attr_reader&lt;/span&gt; &lt;span&gt;:author&lt;/span&gt;, &lt;span&gt;:date&lt;/span&gt;, &lt;span&gt;:tag&lt;/span&gt;

  &lt;span&gt;def&lt;/span&gt; &lt;span&gt;initialize&lt;/span&gt;(id, subject, author, date, tag)
    &lt;span&gt;@id&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; id
    &lt;span&gt;@author&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; author
    &lt;span&gt;@date&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;Date&lt;/span&gt;.parse(date)
    &lt;span&gt;@subject&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; subject
    &lt;span&gt;@tag&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; tag[&lt;span&gt;1&lt;/span&gt;..&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;] &lt;span&gt;if&lt;/span&gt; tag
  &lt;span&gt;end&lt;/span&gt;

  &lt;span&gt;def&lt;/span&gt; &lt;span&gt;to_s&lt;/span&gt;
    &lt;span&gt;return&lt;/span&gt; &lt;span&gt;@subject&lt;/span&gt;
  &lt;span&gt;end&lt;/span&gt;

&lt;span&gt;end&lt;/span&gt;

open(&lt;span&gt;&quot;|git for-each-ref --format='%(objectname) %(refname:short)' refs/tags&quot;&lt;/span&gt;).each &lt;span&gt;do&lt;/span&gt; &lt;span&gt;|&lt;/span&gt;l&lt;span&gt;|&lt;/span&gt;
  commit, id &lt;span&gt;=&lt;/span&gt; l.chomp.split(&lt;span&gt;&quot; &quot;&lt;/span&gt;)
  tags[commit] &lt;span&gt;=&lt;/span&gt; id
&lt;span&gt;end&lt;/span&gt;

open(&lt;span&gt;&quot;|git log --oneline --format='%H%x00%an %x00%ai%x00%s'&quot;&lt;/span&gt;).each &lt;span&gt;do&lt;/span&gt; &lt;span&gt;|&lt;/span&gt;l&lt;span&gt;|&lt;/span&gt;
  commit, author, date, subject &lt;span&gt;=&lt;/span&gt; l.chomp.split(&lt;span&gt;&quot;&quot;&lt;/span&gt;)
  tag &lt;span&gt;=&lt;/span&gt; tags[commit] &lt;span&gt;if&lt;/span&gt; tags[commit]
  commits &lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span&gt;Commit&lt;/span&gt;.&lt;span&gt;new&lt;/span&gt;(commit, subject, author, date, tag)
&lt;span&gt;end&lt;/span&gt;

commits.group_by(&amp;amp;&lt;span&gt;:tag&lt;/span&gt;).each &lt;span&gt;do&lt;/span&gt; &lt;span&gt;|&lt;/span&gt;tag, commits&lt;span&gt;|&lt;/span&gt;
    puts &lt;span&gt;&quot;== Release &lt;span&gt;#{tag}&lt;/span&gt; ==\n\n&quot;&lt;/span&gt;
    commits.group_by(&amp;amp;&lt;span&gt;:date&lt;/span&gt;).sort.reverse.each &lt;span&gt;do&lt;/span&gt; &lt;span&gt;|&lt;/span&gt;date, commits&lt;span&gt;|&lt;/span&gt;
      commits.group_by(&amp;amp;&lt;span&gt;:author&lt;/span&gt;).each &lt;span&gt;do&lt;/span&gt; &lt;span&gt;|&lt;/span&gt;author, commits&lt;span&gt;|&lt;/span&gt;
        puts &lt;span&gt;&quot;&lt;span&gt;#{date}&lt;/span&gt;\t&lt;span&gt;#{author}&lt;/span&gt;\n&quot;&lt;/span&gt;
        puts commits.map { &lt;span&gt;|&lt;/span&gt;e&lt;span&gt;|&lt;/span&gt; &lt;span&gt;&quot;\t* &lt;span&gt;#{e}&lt;/span&gt;&quot;&lt;/span&gt; }.join(&lt;span&gt;&quot;\n&quot;&lt;/span&gt;)
        puts &lt;span&gt;&quot;\n&quot;&lt;/span&gt;
      &lt;span&gt;end&lt;/span&gt;
    &lt;span&gt;end&lt;/span&gt;
&lt;span&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So we went from code that took more than 10s to complete, to one that barely took 100ms, it&amp;#8217;s much easier to read, smaller, and it&amp;#8217;s actually more correct (there was a bug in sorted dates). Not bad!&lt;/p&gt;
&lt;p&gt;I was particularly surprised by the method &lt;code&gt;group_by&lt;/code&gt;, which takes any Enumeratable and does what the name says:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[
  {&lt;span&gt;:id&lt;/span&gt; &lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt; &lt;span&gt;0&lt;/span&gt;, &lt;span&gt;:name&lt;/span&gt; &lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt; 'foo'},
  {&lt;span&gt;:id&lt;/span&gt; &lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt; &lt;span&gt;0&lt;/span&gt;, &lt;span&gt;:name&lt;/span&gt; &lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt; 'bar'},
  {&lt;span&gt;:id&lt;/span&gt; &lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt; &lt;span&gt;1&lt;/span&gt;, &lt;span&gt;:name&lt;/span&gt; &lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt; 'roo'} ].group_by { &lt;span&gt;|&lt;/span&gt;e&lt;span&gt;|&lt;/span&gt; e[&lt;span&gt;:id&lt;/span&gt;] }
&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt; {
  &lt;span&gt;0&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;[{&lt;span&gt;:id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;, &lt;span&gt;:name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;foo&quot;&lt;/span&gt;}, {&lt;span&gt;:id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;, &lt;span&gt;:name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;bar&quot;&lt;/span&gt;}],
  &lt;span&gt;1&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;[{&lt;span&gt;:id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;, &lt;span&gt;:name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;roo&quot;&lt;/span&gt;}] }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then, in the functional tradition, you can sort, reverse, etc. the result.&lt;/p&gt;
&lt;p&gt;Moreover, instead of getting the full output of a command with &lt;code&gt;`git command`&lt;/code&gt;, it&amp;#8217;s much better to pipe it with &lt;code&gt;open(&quot;|git command&quot;)&lt;/code&gt;, something obvious, but a bit tedious to do in other languages.&lt;/p&gt;
&lt;p&gt;The rest is git magick&amp;#8211;I&amp;#8217;ve been progressing on that front as well &lt;img src=&quot;http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Did I mention I love ruby?&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/felipec.wordpress.com/1357/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/felipec.wordpress.com/1357/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=felipec.wordpress.com&amp;blog=62686&amp;post=1357&amp;subd=felipec&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2012-10-14T01:30:27+00:00</dc:date>
</item>
<item rdf:about="http://www.advogato.org/person/ensonic/diary.html?start=133">
	<title>Stefan Kost: 1 Oct 2012</title>
	<link>http://www.advogato.org/person/ensonic/diary.html?start=133</link>
	<content:encoded>&lt;b&gt;buzztard&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
After a discussion on IRC about tunings I looked into adding some of those to the ToneConversion class which so far only implemented the usual equal temperament. I have to say the wikipedia articles on this matter are awesome, detailed and plentiful. I added two &lt;a href=&quot;http://en.wikipedia.org/wiki/Just_intonation#Twelve_tone_scale&quot; title=&quot;12tone tunings&quot; target=&quot;_blank&quot;&gt;12tone tunings&lt;/a&gt; to the ToneConversion class now and implemented tuning in sidsyn and simsyn.&lt;br /&gt;
&lt;br /&gt;
I also had a look at the TODO comments and planned items on the wiki. When I was writing the list model classes I did not wrote ones for the wavetable and wave-level-list. I did this now. The list models can also be tested separately from the UI (which is harder to test). I wrote basic tests for all model classes which bumps the test coverage in the ui by 10% (61% classes have tests now, 105 ui tests).&lt;br /&gt;
&lt;br /&gt;
IRC was quite active this month. Another chat was on the wave-table page and wave-preview. The workflow was indeed needless complicated. Now preview is a toggle and if it is active, moving the selection in the file-browser will play sounds. Other discussion motivated me to implement audio-device selection in the settings. So far one could only select the protocol. Now for e.g. alsa or pulseaudio one can also choose to which device to play the audio. While working on the settings I started to make the interaction controller setting more useful. So far the only use of this settings-tab was to list the detected settings. I added a couple of messages to help the user to know what to do when e.g. the list of devices is empty. And I started to implement batch-learning of controls to the settings.&lt;br /&gt;
&lt;br /&gt;
84 files changed, 4199 insertions(+), 1653 deletions(-)&lt;br /&gt;</content:encoded>
	<dc:date>2012-10-01T18:18:34+00:00</dc:date>
</item>
<item rdf:about="http://codeanticode.wordpress.com/?p=1674">
	<title>Gustavo Orrillo: ac</title>
	<link>http://codeanticode.wordpress.com/2012/09/24/shaders-in-processing-2-0-beta/</link>
	<content:encoded>Processing 2.0 beta was finally released a couple of weeks ago, with the 2.0b3 version being the latest release in the beta series at this time. The new shader API described in the previous posts (1, 2, and 3) received some tweaking and cleaning-up, so the examples mentioned earlier might not work properly. Check below [&amp;#8230;]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=codeanticode.wordpress.com&amp;blog=2105126&amp;post=1674&amp;subd=codeanticode&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2012-09-24T14:50:43+00:00</dc:date>
</item>
<item rdf:about="http://blog.mikeasoft.com/?p=586">
	<title>Michael Sheldon: Firestarter now called Erudite and version 1.2 released</title>
	<link>http://blog.mikeasoft.com/2012/09/12/firestarter-now-called-erudite-and-version-1-2-released/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://mikeasoft.com/~mike/erudite.png&quot;&gt;&lt;img alt=&quot;Erudite displaying a book fullscreen&quot; src=&quot;http://mikeasoft.com/~mike/erudite-small.png&quot; title=&quot;Erudite displaying a book fullscreen&quot; class=&quot;alignright&quot; width=&quot;253&quot; height=&quot;450&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Overview&lt;/h3&gt;
&lt;p&gt;Erudite makes it possible to use Amazon’s Cloud Reader service under MeeGo. You can either read books online, or download them for reading offline. Your progress in a book is kept synchronised between your N9 and other Kindle devices.&lt;/p&gt;
&lt;h3&gt;Name change&lt;/h3&gt;
&lt;p&gt; Unfortunately since Amazon own a wide range of &amp;#8220;Fire&amp;#8221; themed trademarks, and the application&amp;#8217;s operation is heavily related to the same areas that these trademarks are used in, Amazon couldn&amp;#8217;t really let me carry on using the name &amp;#8220;Firestarter&amp;#8221;. It was entirely my own foolishness that caused this hassle by going for a &amp;#8220;clever&amp;#8221; name without even considering the potential trademark implications, thankfully the lawyer who got in touch with me was very understanding and patiently helped me work through the various issues. I&amp;#8217;m just glad that Amazon handled everything so amicably, rather than wading in with heavy-handed legal threats as some companies might.&lt;/p&gt;
&lt;p&gt; So from now on the application is called &amp;#8220;Erudite&amp;#8221;, a name that&amp;#8217;s clever in a different way.&lt;/p&gt;
&lt;h3&gt;New features&lt;/h3&gt;
&lt;p&gt;Added in 1.2:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The application name has now changed to Erudite.&lt;/li&gt;
&lt;li&gt;A number of buttons and menu entries have been made larger and easier to press.&lt;/li&gt;
&lt;li&gt;You can now switch in to and out of fullscreen mode by pressing a toggle button in the bottom right hand corner of the screen.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Added in 1.1:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The application can now start up completely offline. You still need to be online for the very first usage and to download books, but once you&amp;#8217;ve downloaded some books you can now always access them offline.&lt;/li&gt;
&lt;li&gt;A progress indicator shows when the application is loading.&lt;/li&gt;
&lt;li&gt;Keyboard bug is fixed. Previously you needed to tap on text fields twice to bring up the virtual keyboard, now it pops up on the first tap.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Download&lt;/h3&gt;
&lt;p&gt;Available for the Nokia N9 and N950 in the Ovi Store: &lt;a href=&quot;http://store.ovi.com/content/307241&quot;&gt;http://store.ovi.com/content/307241&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2012-09-12T15:58:08+00:00</dc:date>
</item>
<item rdf:about="http://www.advogato.org/person/ensonic/diary.html?start=132">
	<title>Stefan Kost: 11 Sep 2012</title>
	<link>http://www.advogato.org/person/ensonic/diary.html?start=132</link>
	<content:encoded>&lt;b&gt;buzztard: presets, tests &amp;amp; live playback&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
I worked a bit on preset handling in gstreamer. Now machines with variable number of parameters with save their properties correctly. One example is the parametric equalizer. I needed this for sidsyn in buzztard too. I also updated the preset handling for buzzmachines. They now store presets in user-data-dir. This avoids that those get overwritten when the plugins get updated. The preset handling logic will read user-presets first and then merge in system wide presets. One shortcoming here is that we would need a flag on each preset whether it comes from a preset file in user-data-dir (and thus is writable) or comes from a system dir (and thus is read-only). This would allow the UI to require that users pick a new uniqe name when changing a system preset.&lt;br /&gt;
&lt;br /&gt;
Songs in buzztard now also store their non-dynamic settings. This will fix fluidsynth forgetting the selected patch file and is also needed for e.g. setting the chip-type in sidsyn. I refactored the code a bit and now we don't show empty properties dialogs anymore and instead gray out the menu item that would invoke them.&lt;br /&gt;
&lt;br /&gt;
The build system now can show the class-coverage of the tests. As this is just a few shell commands it quickly shows untested classes. It relies on naming conventions for tests. To make that work I also cleaned up the whole UI tests. Those are now more robust and actually verify a lot more things (we went from 54 to 92 ui tests).&lt;br /&gt;
&lt;br /&gt;
 77 % (24/31) lib/core/&lt;br /&gt;
 40 % ( 4/10) lib/ic&lt;br /&gt;
100 % ( 1/ 1) ui/cmd&lt;br /&gt;
 51 % (27/52) ui/edit&lt;br /&gt;
&lt;br /&gt;
The last thing I worked was to progress on live machine playback. And hell yes, it works! One can bind e.g. midi keyboards to machines and play them live. This includes a round-robin voice management for polyphonic generators. It is a lot of fun to play with. &lt;br /&gt;
 &lt;br /&gt;
Tom made good progress on the pattern control source. Most of the tests now pass. We hope to be able to merge it soon and to remove the complicated 2step controller updating code.&lt;br /&gt;
&lt;br /&gt;
151 files changed, 8453 insertions(+), 6451 deletions(-)</content:encoded>
	<dc:date>2012-09-11T20:11:37+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-2750852840563144504.post-3687123827138394966">
	<title>Mathieu Duponchelle: KSE 0.1 released !</title>
	<link>http://mathieuduponchelle.blogspot.com/2012/09/kse-01-released.html</link>
	<content:encoded>I just finished fixing the blocker bugs for the open source assets' manager KSE, and I pushed a release there : https://github.com/MathieuDuponchelle/Kerious-Resource-Editor on the branch 0.1.&lt;br /&gt;&lt;br /&gt;I recorded this screencast to make a demo of the features included in this release.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I want to say thank you to Simon Corsin for his work on the windows port and manual management.&lt;br /&gt;&lt;br /&gt;I'd be glad to see pull-requests on github, or comments, critics and feature requests here.&lt;br /&gt;&lt;br /&gt;Here is the text of the video for those with no audio:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;Hi, my name is Mathieu Duponchelle and I am glad to present you the first release of kse, which is&lt;br /&gt;a tool to simplify asset's management written in python.&lt;br /&gt;&lt;br /&gt;This release covers spritesheet creation, sprite naming, automatic sprites detection in an existing spritesheet,&lt;br /&gt;animation referencing and tons of other stuff.&lt;br /&gt;&lt;br /&gt;Spritesheet creation.&lt;br /&gt;&lt;br /&gt;Let's create a new spritesheet, and start importing resources.&lt;br /&gt;First we create what we call an &quot;atlas&quot;, specify its width and height and the location of the resulting file.&lt;br /&gt;Then we can specify the size we wish the next sprite to have, and start adding sprites by double-clicking.&lt;br /&gt;Next step is to start naming all these sprites, for now the naming part is a bit tedious, but it works.&lt;br /&gt;&lt;br /&gt;Animation referencing.&lt;br /&gt;Another cool feature of KSE is that we can reference animations easily, using multiple selection.&lt;br /&gt;Let's say these sprites belong to the same animation.&lt;br /&gt;&lt;br /&gt;We now save the project, and have a look at the xml that was produced.&lt;br /&gt;&lt;br /&gt;We can see that a simple xml parser could easily extract coordinates for a given name, here X.&lt;br /&gt;&lt;br /&gt;Automatic sprite detection.&lt;br /&gt;&lt;br /&gt;Let's now say that we want to use an already existing spritesheet. I have this one, which will make for a good&lt;br /&gt;demonstration.&lt;br /&gt;A really cool feature is automatic sprite detection, which can be configured with this button.&lt;br /&gt;Match-size will specify the desired width and height multiples for the resulting sprites.&lt;br /&gt;Now let's try it out !&lt;br /&gt;As you can see, KSE detected the sprites and automatically highlighted them. However, if the position or size&lt;br /&gt;of any sprite does not match what we intend, we can easily resize and move them using the mouse or, if we want &lt;br /&gt;a more fine-grained control the comboboxes that we have here.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Conclusion.&lt;br /&gt;&lt;br /&gt;With some friends of mine, we already developed a space shooter using KSE.&lt;br /&gt;This helped me finding out the features that were most needed.&lt;br /&gt;It can greatly improve the collaboration between designers and developers, by reducing the number of back and forth&lt;br /&gt;trial and errors, allowing the programmer to only parse the xml file looking for the sprite or the animation name,&lt;br /&gt;and thus not having to hardcode coordinates, which is an obvious advantage, and allowing the designer to try things&lt;br /&gt;without having to modify the code or asking the programmer to do so.&lt;br /&gt;&lt;br /&gt;KSE now works on both linux and Windows, it has not been tested on OSX yet.&lt;br /&gt;&lt;br /&gt;My thoughts for future features are listed in the poll on the right-hand side of the blog, don't hesitate to comment if you have other ideas/remarks/critics. Thanks for watching !&lt;/blockquote&gt;</content:encoded>
	<dc:date>2012-09-03T15:07:50+00:00</dc:date>
	<dc:creator>Mathieu Duponchelle</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8516651997079965154.post-7806435650452973002">
	<title>Thiago Sousa Santos: Cheese live from GStreamer Conference 2012</title>
	<link>http://thiagossantos.blogspot.com/2012/08/cheese-live-from-gstreamer-conference.html</link>
	<content:encoded>Greetings from San Diego!&lt;br /&gt;&lt;br /&gt;Had a good time at the GStreamer Conference, seeing folks from &lt;a href=&quot;http://www.collabora.com/&quot; target=&quot;_blank&quot;&gt;Collabora&lt;/a&gt;, chatting, having a few beers, watching talks and some hacking. Good days :)&lt;br /&gt;&lt;br /&gt;That's not what I want to talk about. I just want to announce this picture:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-ziHgKGchUG4/UD1jKWDIClI/AAAAAAAAAXA/JCXqDFQpnL0/s1600/2012-08-28-210719.jpg&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;http://2.bp.blogspot.com/-ziHgKGchUG4/UD1jKWDIClI/AAAAAAAAAXA/JCXqDFQpnL0/s320/2012-08-28-210719.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;It is (likely) the first picture taken with Cheese using GStreamer 1.0 :)&lt;br /&gt;&lt;br /&gt;Here's a fast wrap up on the changes:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Camerabin2 is now mostly ported, just a annoying bug left on video recording.&lt;/li&gt;&lt;li&gt;I believe most video effects were already ported some months ago (and they work, see the picture ^)&lt;/li&gt;&lt;li&gt;Very easy to port Cheese to 1.0. Seriously, application's API hasn't changed much.&lt;/li&gt;&lt;li&gt;There will be bugs and there are still some critical asserts being printed, but the hardest part is over now.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The ported version is in a branch at&amp;nbsp;&lt;a href=&quot;http://cgit.collabora.com/git/user/thiagoss/cheese.git/&quot;&gt;http://cgit.collabora.com/git/user/thiagoss/cheese.git/&lt;/a&gt;, I'll get it reviewed by Cheese developers before putting it into the official repository.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's it, time for the last talk of the conference and then have some fun. o/&lt;/div&gt;</content:encoded>
	<dc:date>2012-08-28T18:57:11+00:00</dc:date>
	<dc:creator>thiagoss</dc:creator>
</item>
<item rdf:about="http://wingolog.org/2012/08/15/quasiconf-2012-lisp-froscon">
	<title>Andy Wingo: quasiconf 2012: lisp @ froscon</title>
	<link>http://wingolog.org/archives/2012/08/15/quasiconf-2012-lisp-froscon</link>
	<content:encoded>&lt;div&gt;&lt;p&gt;Are you a Lisper, in the big-tent sense of the term?  You within a day's transport of St. Augustin in Germany?  Well shucks, have I got a thing for you: &lt;a href=&quot;http://quasiconf.twoticketsplease.de/&quot;&gt;Quasiconf&lt;/a&gt;, a lisp sub-conference of FrOSCon, held next weekend (25-26 August 2012).&lt;/p&gt;&lt;p&gt;The full program isn't quite out yet, but they invited yours truly to talk there, and talk I will.  In fact I'll talk thrice: they gave me 90 minutes, so I'll do three little presentations.&lt;/p&gt;&lt;p&gt;In the first, I'll finally give that talk I've been threatening to do for years, about why delimited continuations are the bee's knees, how they can be implemented, and what kind of lovely code they enable.  The example will be a small memcached server and client.&lt;/p&gt;&lt;p&gt;Next I'll talk about things that implementing JavaScript has taught me about Scheme implementations.  They were very surprising lessons to me, so I hope they will entertain the attendees.  No spoilers, though!&lt;/p&gt;&lt;p&gt;Finally, now that Guile 2.0 has been out for a year and a half or so, it's a good time to look back at what worked well and what didn't.  If you are even remotely interested about what it takes to maintain and enhance a mature language implementation, this will be an interesting talk for you.  I'll also take the opportunity to summarize the progress on the development branch, which will probably be Guile 2.2.&lt;/p&gt;&lt;p&gt;So that's the thing.  It's somewhat of a late announcement, but hey, if you can go, it's pretty much free and should be an interesting get-together.  See you there!&lt;/p&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2012-08-15T21:34:25+00:00</dc:date>
	<dc:creator>Andy Wingo</dc:creator>
</item>
<item rdf:about="http://wingolog.org/2012/08/15/lakewards">
	<title>Andy Wingo: lakewards</title>
	<link>http://wingolog.org/archives/2012/08/15/lakewards</link>
	<content:encoded>&lt;div&gt;&lt;p&gt;Time passes!  And it takes us along with it: now a lazy float, now the running rapids, now an eerie calm.&lt;/p&gt;&lt;p&gt;And now, for me, a rising white noise of waterfall.  In a month my partner and I move to Geneva.  It's exciting and terrifying and anxiety-producing, but the nice thing about time is that I know it will carry me over the stress of, you know, learning French and such things.&lt;/p&gt;&lt;p&gt;I have loved my time in Barcelona, since moving here in 2005.  The city has been pretty good to me.  While I am indeed ready to go and try new things, I won't be leaving it without regret.&lt;/p&gt;&lt;p&gt;As a practical matter, I'll be (quite happily) staying on with Igalia, in their compilers group.  Practically speaking, my move doesn't change much, work-wise; I've always met with customers over the net or on-site, never in Barcelona itself.&lt;/p&gt;&lt;p&gt;There are loads of practicalities to sort out, but if you have any knowledge about the town, I'm all digital ears.  Also, if you happen to need some responsible caretakers for your alpine villa, do let me know.  It doesn't even have to have a hot tub.  I'm not particular.  Just sayin'.&lt;/p&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2012-08-15T21:10:07+00:00</dc:date>
	<dc:creator>Andy Wingo</dc:creator>
</item>
<item rdf:about="http://www.advogato.org/person/ensonic/diary.html?start=131">
	<title>Stefan Kost: 15 Aug 2012</title>
	<link>http://www.advogato.org/person/ensonic/diary.html?start=131</link>
	<content:encoded>&lt;b&gt;buzztard goes retro&lt;/b&gt;&lt;br /&gt;
I started the month with some preparational work for the 2nd GSoc task - to use GstEncodeBin for recording. The first change was to streamline the recording UI. Instead of two dialog - one for setting and one for the progress - we now just show one. This causes less noise on the screen and avoids us some data passing. I also added a bunch of unit tests for sink bin to provide a means to check for regressions when switching the implementation. This also uncovered some&lt;br /&gt;
unimplemented code path on the gstreamer side. Those are now fixed or handled on our side.&lt;br /&gt;
&lt;br /&gt;
In the mid of the month I could merge the encodebin transition. It is a very decent code simplification (68 insertions(+), 113 deletions(-)). Adding new output formats is a piece of cake now. And as a bonus, the code is now platform independent - instead of specifying the explicit elements to use, we now specify the container and audio track format. This way encodebin would pick suitable elements depending on what is available.&lt;br /&gt;
&lt;br /&gt;
After the audiosynth baseclass was added, I wanted to see how well it works and started with a long time todo - a c64 sid synthesizer plugin. This wraps the rsid library - an awesome cycle based sid emulation. The library API is quite simple; basically:&lt;br /&gt;
&lt;pre&gt;  init(); update(regs[29]); clock(*buffer, num_samples); release();&lt;/pre&gt;&lt;br /&gt;
I was really happy to also see a lot of technical information about the sid chip available on the net. When designing the gstreamer element API one needs to have a little understanding how the chip is use to still provide a convenient access to the parameters, but now hide important modes. That needs a bit of experiments to decide whether individual bits need to be exposed or only certain combinations make sense. In addition I implemented a couple of the typical effects. The normal timing resolution of a tracker song is not too high and thus one needs support from the element to provide things like arpeggio, portamento and vibrato.&lt;br /&gt;
&lt;br /&gt;
The sidsyn is the first more complex audio synth we have in buzztard. It is also the first one that uses more of the gst-buzztard API. This was a good opportunity to review and cleanup the APIs a bit. With those cleanups I also killed the help interface, as new enough gstreamer has the required feature on the element metadata side and the feature is not crucial any way.&lt;br /&gt;
&lt;br /&gt;
This month I skip the git stats, as I took the indent git commit hook into use and reformatted the buzztard code base. Voilà: buzztard - now with whitespace!&lt;br /&gt;</content:encoded>
	<dc:date>2012-08-15T09:19:51+00:00</dc:date>
</item>

</rdf:RDF>
