<?xml version="1.0"?>
<rss version="2.0">

<channel>
	<title>Planet GStreamer</title>
	<link>http://gstreamer.freedesktop.org/planet/</link>
	<language>en</language>
	<description>Planet GStreamer - http://gstreamer.freedesktop.org/planet/</description>

<item>
	<title>Andy Wingo: but that would be anarchy!</title>
	<guid>http://wingolog.org/2013/06/13/but-that-would-be-anarchy</guid>
	<link>http://wingolog.org/archives/2013/06/13/but-that-would-be-anarchy</link>
	<description>&lt;div&gt;&lt;p&gt;Good morning, internets!&lt;/p&gt;&lt;p&gt;This is the second of a series of articles on what it's like to work for/in/with a cooperative; the first one is &lt;a href=&quot;http://wingolog.org/archives/2013/06/05/no-master&quot;&gt;here&lt;/a&gt;.  Eventually I'll update the first one to link to the whole series, whereever it goes.&lt;/p&gt;&lt;p&gt;I work for a worker's cooperative, &lt;a href=&quot;http://www.igalia.com/&quot;&gt;Igalia&lt;/a&gt;.  This article series is about moving beyond theory to practice: to report on our experience with collective self-determination, for the curious and for the interested.  It's a kind of exercise in marketing the revolution :)  I hope I can be free from accusations of commercial interest, however; for better or for worse, our customers couldn't care less how we are organized internally.&lt;/p&gt;&lt;p&gt;&lt;b&gt;the ties that bind&lt;/b&gt;&lt;/p&gt;&lt;p&gt;The essence of a worker's cooperative is to enable people to make decisions about their work to the degree to which they are affected by those decisions.  For decisions affecting the whole group, you need collective deliberation.  You could think of it as workplace democracy, if you understand democracy to go beyond simple voting and referenda.&lt;/p&gt;&lt;p&gt;Collective decision-making works, but you need some preconditions -- see for example &lt;a href=&quot;http://www.seedsforchange.org.uk/consensus#conditions&quot;&gt;conditions for consensus&lt;/a&gt;, from this &lt;a href=&quot;http://www.seedsforchange.org.uk/consensus&quot;&gt;excellent article on consensus&lt;/a&gt;.  More so than any other enterprise, a cooperative needs to have a set of goals or principles that binds all of its members together.  In Igalia, we have a rather wordy document internally, but it's basically a commitment to finding a way to let hackers work on interesting things, centered around free software, in a self-organized way.  Everything else is just strategy.&lt;/p&gt;&lt;p&gt;&lt;b&gt;structure&lt;/b&gt;&lt;/p&gt;&lt;p&gt;There are two more-or-less parallel structures in Igalia: one for decision-making and one for work.  There is also a legal structure that is largely vestigial; more on that at the end.&lt;/p&gt;&lt;p&gt;The most important structure in Igalia is the &quot;assembly&quot;.  It's composed of all workers that have been in Igalia for a certain amount of time (currently 1 year, though there are discussions to shorten that period).&lt;/p&gt;&lt;p&gt;The assembly is the ultimate decision-making body, with power over all things: bank accounts, salary levels, budgets, strategies, team assignments, etc.  All company information is open to all assembly members, which currently comprises all of the people in Igalia.&lt;/p&gt;&lt;p&gt;The assembly meets in person every two months at the head office in A Coruña, with the option for people to dial in.  Since many of us work in remote locations and just communicate over mail and jabber, it's good to see people in person to renew the kind of personal connections that help make agreement easier.  Incidentally, this requirement for group face-to-face meetings influenced the architecture of our head office; there is a dividable room there that can be expanded into a kind of &quot;round table&quot; with microphones at all the posts.  You can see a picture of it on the &lt;a href=&quot;http://www.igalia.com/about-us/&quot;&gt;about page&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The in-person assemblies are usually a bit abstracted over day-to-day operations and focus more on proposals that people have brought up or on strategy.  Sometimes they are easy and quick and sometimes they go late into the night.  The ones associated with longer-term planning like the yearly budgeting assemblies are the longest.&lt;/p&gt;&lt;p&gt;How well does this work, you ask?  I would summarize by saying that it works OK.  There are so many advantages to collective decision-making that I now take for granted that it is difficult to imagine other ways.  However, making decisions is hard on a personal level: it's a challenge to hold all of the ideas in your head at one time, and to feel the right level of responsibility for the success of the business.  I'll write another article on this point, I think, because it is also part of the cooperative working experience.&lt;/p&gt;&lt;p&gt;&quot;The assembly&quot; is both the bimonthly meeting and also the body of people.  We're all on a mailing list and a jabber channel, which is where a lot of the other day-to-day business decisions get made, like &quot;do we accept this contract&quot;, &quot;should we hire people soon&quot;, &quot;should we hire X person in particular&quot;, etc.  However with some 40 people it's tricky to establish an active consensus on a mailing list, so it's usually the people that lead with proposals and actively round up people to help them implement that get things done.&lt;/p&gt;&lt;p&gt;&lt;b&gt;work groups&lt;/b&gt;&lt;/p&gt;&lt;p&gt;So that's the power structure in Igalia.  However on a day-to-day level, unless a thread is really active on the assembly mailing list, folks just do their jobs.  Sounds silly but it has to happen.  We're organized into teams, like in a normal company, but without managers -- we also do consensus on a smaller, more informal level within the teams.&lt;/p&gt;&lt;p&gt;Since we're a consulting shop, most people write code all day, but there are also people that primarily focus on other things: sales, team coordination (who's available for what work when?), administrative work, finance and cash-flow monitoring, etc.  This broader team allocation is also a result of consensus.  (You can see the theme here.)  Ideally we rotate around the &quot;coordinator&quot;-type jobs so everyone stays fresh, hacking-wise, and we don't entrench these informal power structures.  We've done some of that but could do more.&lt;/p&gt;&lt;p&gt;I've heard people say that &quot;if you don't have a boss, the customer is your boss&quot;, but that's simply not true for us in any of the ways that matter.  Our working conditions, pay, holidays, hours -- all of this is up to us.  Yes, we have to do good work, but that's already an expectation we have of ourselves as hackers.  It's a much healthier perspective to consider your customer to be your partner: both providing value for the other.  If this isn't the case, we should find other partners, and happily in our particular industry this is a possibility.  (More on cooperatives, capitalism, and crisis in a future post.)&lt;/p&gt;&lt;p&gt;&lt;b&gt;legalities&lt;/b&gt;&lt;/p&gt;&lt;p&gt;As I said in the beginning, the important thing is that a group share principles, and agree periodically on the strategy to implement them.  In that light, the particular legal structure of Igalia is an afterthought, though an important one.&lt;/p&gt;&lt;p&gt;Although Spanish law explicitly provides for cooperatives as a kind of legal entity, Igalia is organized as a limited-liability corporation.  The reasons are not entirely clear to me, and periodically come up for debate.  One of the issues, though, is that in a cooperative, 85% of your partners have to be Spanish residents, and we did not want that restriction.&lt;/p&gt;&lt;p&gt;Spanish workers are employees of Igalia, and folks outside of Spain are freelancers.  However once you've been in the assembly for an amount of time, currently 2 years (way too long IMO), you have the option to become a legal partner in the business, purchasing an equal share of the business at a fixed price.  I say &quot;option&quot; but it's also an expectation; the idea is that being a partner is a logical and natural outcome of working at/with/on/in Igalia.  We have partners in a number of countries now.&lt;/p&gt;&lt;p&gt;You see my confusion with prepositions, and it's because you have to fit all of these ideas in your head at the same time: working for Igalia as an employee, on it as a project, with it as a partner, at it as a social experiment, etc.&lt;/p&gt;&lt;p&gt;Partners are the legal owners of Igalia, and there are about 30 of them now.  They meet every few months, mostly to assess the progression of &quot;prepartners&quot; (those in the assembly but not yet partners, like myself).  Ideally they don't discuss other things, and I think that works out in practice.  There is a small power differential there between the partners and the assembly.  However all the really important things get done in the assembly.&lt;/p&gt;&lt;p&gt;Finally, since Igalia is an S.L. (like an LLC), there is a legal administrator as well -- someone who's theoretically responsible for the whole thing and has to sign certain legal papers.  In fact we have three of them, and the positions rotate around every three years.  If we were a legal cooperative we could remove this need, which would be convenient.  But that's how it is right now.&lt;/p&gt;&lt;p&gt;&lt;b&gt;domination&lt;/b&gt;&lt;/p&gt;&lt;p&gt;I want a society without hierarchical power: no state, no military, no boss.  But that would be anarchy, right?  Well yes, of course that's what it would be!  &quot;Anarchy&quot; doesn't equate to a lack of structure, though.  It's true that Igalia is embedded in capitalism, but I think it and other cooperatives are a kind of practical anarchy, or at least a step along the path.&lt;/p&gt;&lt;p&gt;I'll close this epistle with a quote, in Chomsky's halting but endearing style.  The whole interview is well worth a read.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Anarchism is quite different from that. It calls for an elimination to tyranny, all kinds of tyranny. Including the kind of tyranny that's internal to private power concentrations. So why should we prefer it? Well I think because freedom is better than subordination. It's better to be free than to be a slave. Its' better to be able to make your own decisions than to have someone else make decisions and force you to observe them. I mean, I don't think you really need an argument for that. It seems like ... transparent.&lt;/p&gt;&lt;p&gt;The thing you need an argument for, and should give an argument for, is, How can we best proceed in that direction? And there are lots of ways within the current society. One way, incidentally, is through use of the state, to the extent that it is democratically controlled. I mean in the long run, anarchists would like to see the state eliminated. But it exists, alongside of private power, and the state is, at least to a certain extent, under public influence and control -- could be much more so. And it provides devices to constrain the much more dangerous forces of private power. Rules for safety and health in the workplace for example. Or insuring that people have decent health care, let's say. Many other things like that. They're not going to come about through private power. Quite the contrary. But they can come about through the use of the state system under limited democratic control ... to carry forward reformist measures. I think those are fine things to do. they should be looking forward to something much more, much beyond, -- namely actual, much larger-scale democratization. And that's possible to not only think about, but to work on. So one of the leading anarchist thinkers, Bakunin in the 19th cent, pointed out that it's quite possible to build the institutions of a future society within the present one. And he was thinking about far more autocratic societies than ours. And that's being done. So for example, worker- and community- controlled enterprises are germs of a future society within the present one. And those not only can be developed, but are being developed.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://chomsky.info/interviews/20130528.htm&quot;&gt;The Kind of Anarchism I Believe In&lt;/a&gt;, Noam Chomsky, 28 May 2013 &lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 13 Jun 2013 07:55:24 +0000</pubDate>
</item>
<item>
	<title>Felipe Contreras: gnome-3</title>
	<guid>http://felipec.wordpress.com/?p=1467</guid>
	<link>http://felipec.wordpress.com/2013/06/12/the-problem-with-gnome-3/</link>
	<description>&lt;p&gt;Since I started using Linux I used GNOME, v1.2 in those times. It has always done what I needed, maybe not perfectly, and not fully, but for the most part. GNOME 3 changed all that.&lt;/p&gt;
&lt;p&gt;I complained about GNOME 3 since day one, and I discussed with GNOME 3 developers many problems with their rationale about why what they were doing made sense, and I foresaw many of the problems they are now facing.&lt;/p&gt;
&lt;p&gt;I even started the &lt;a href=&quot;http://www.phoronix.com/scan.php?page=article&amp;item=gnome_2012_res&amp;num=1&quot;&gt;GNOME user survey&lt;/a&gt;, in an effort to make GNOME developers see the light.&lt;/p&gt;
&lt;p&gt;I &lt;a href=&quot;http://felipec.wordpress.com/2011/06/16/after-two-weeks-of-using-gnome-3-i-officially-hate-it/&quot;&gt;blogged once before&lt;/a&gt; about GNOME 3, but only superficially, and even then GNOME developers didn&amp;#8217;t take it well. Some GNOME developers might be tired of my arguments in Google+ and other media, but it&amp;#8217;s time to dive into the issues with GNOME 3 in this blog.&lt;/p&gt;
&lt;p&gt;Two years after the first release of GNOME 3, once GNOME developers have had the time to polish the rough edges, it&amp;#8217;s time to make the call; GNOME 3 sucks. Here&amp;#8217;s why.&lt;/p&gt;
&lt;h2&gt;The purpose of GNOME&lt;/h2&gt;
&lt;p&gt;Before we start, we need to clarify the purpose of GNOME, or rather; the purpose of any software project in general, which is to be useful to the users. Your software might the most efficient at doing certain task, it might have the simpler code, and the best development practices, but it&amp;#8217;s all for naught if it&amp;#8217;s not useful to anybody.&lt;/p&gt;
&lt;p&gt;Software has to be useful for other people, otherwise nobody will use your software, and nobody will contribute to your software. Quite likely there will always be other software that does something similar to yours, so you need to convince users that your software is better than the alternatives, usually by providing a good user experience.&lt;/p&gt;
&lt;p&gt;Once the user has spent time analyzing the alternatives and has chosen your software, the user expects your software to &lt;b&gt;keep working&lt;/b&gt;, and in the same way. If the software keeps changing the way it behaves from one version to the next, it&amp;#8217;s not achieving it&amp;#8217;s main goal; to be useful to the users. If you do this, your users will move on to another project that might not have as many features, but at least they can rely on it and they don&amp;#8217;t have to spend any more of their valuable time learning what broke now in the new release.&lt;/p&gt;
&lt;p&gt;More important than providing a good user experience, is to not break existing user expectations.&lt;/p&gt;
&lt;p&gt;You would think this is as obvious as a leopard&amp;#8217;s spots, yet many software projects, including GNOME, don&amp;#8217;t seem to understand this fact.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;No project is more important than the users of the project. &amp;#8212; Linus Torvalds&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2&gt;What users want&lt;/h2&gt;
&lt;p&gt;The problems I&amp;#8217;ll talk about are not my invention, but conformed by GNOME user surveys, which show &lt;a href=&quot;http://www.phoronix.net/image.php?id=gnome_2012_res&amp;image=gnome_2012_09&quot;&gt;the most important issues according to the users&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Lack of configuration options&lt;/li&gt;
&lt;li&gt;Developers don&amp;#8217;t listen to users&lt;/li&gt;
&lt;li&gt;Bring back traditional interface&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I knew these were important issues myself before the survey, but a survey was needed in order to know for sure. Of course, even after the survey, GNOME developers reject these issues are important to their users.&lt;/p&gt;
&lt;h2&gt;Developer attitude&lt;/h2&gt;
&lt;p&gt;In my opinion the main problem with GNOME is not just the code, code can be fixed, but the attitude from the developers (which is reflected in the code), and as users made it clear in the survey.&lt;/p&gt;
&lt;p&gt;Many open source projects would kill to have the user-base GNOME had, and welcome their input with open arms, but GNOME neglected their users, they thought they were irrelevant, and they tried to dismiss their complaints with typical defenses, which of course don&amp;#8217;t make sense.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://felipec.files.wordpress.com/2013/06/no-feedback.png&quot;&gt;&lt;img src=&quot;http://felipec.files.wordpress.com/2013/06/no-feedback.png?w=600&amp;h=450&quot; alt=&quot;no-feedback&quot; width=&quot;600&quot; height=&quot;450&quot; class=&quot;aligncenter size-large wp-image-1460&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;People hate new things&lt;/h3&gt;
&lt;p&gt;By far the most widely used defense for the changes in GNOME 3 is that some people are backwards, and &lt;b&gt;always&lt;/b&gt; hate new things, so it&amp;#8217;s no surprise that they hate GNOME 3.&lt;/p&gt;
&lt;p&gt;Any rational person would see the problem with this claim, but unfortunately I must spell it, because I had to explain it at great length to GNOME developers, and based on the responses, one would think they are incapable of seeing hasty generalization fallacies.&lt;/p&gt;
&lt;p&gt;Say 50% of users &lt;i&gt;hate&lt;/i&gt; GNOME 3, how many of them have legitimate reasons, and how many hate it just because they always hate new things? It&amp;#8217;s impossible to know. So to dismiss every complaint saying &amp;#8220;people hate new things&amp;#8221; is totally stupid; you cannot know beforehand if they belong to this group or not, you first need to hear their complaints, and &lt;b&gt;then&lt;/b&gt; decide if the complaints are invalid or not.&lt;/p&gt;
&lt;p&gt;Saying &amp;#8220;Jon doesn&amp;#8217;t have legitimate complaints&amp;#8221; makes sense (after analyzing his complaints), saying &amp;#8220;people hate new things&amp;#8221; does &lt;b&gt;not&lt;/b&gt;, and GNOME developers do the later when people complain about GNOME 3.&lt;/p&gt;
&lt;h3&gt;Users don&amp;#8217;t know what they want&lt;/h3&gt;
&lt;p&gt;Really? People don&amp;#8217;t know if they want a punch in the face or not? &lt;i&gt;Some&lt;/i&gt; people might not know what they want, but they definitely know what they &lt;b&gt;don&amp;#8217;t&lt;/b&gt; want.&lt;/p&gt;
&lt;p&gt;Moreover, that&amp;#8217;s a very rudimentary notion of user choice. Malcolm Gladwell &lt;a href=&quot;http://www.youtube.com/watch?v=iIiAAhUeR6Y&quot;&gt;explains rather well&lt;/a&gt; how it&amp;#8217;s true that people don&amp;#8217;t know what they want, or rather; they can&amp;#8217;t tell you what they want, but when they get a taste of it, they most definitely can tell you: &lt;b&gt;this&lt;/b&gt; is what I want.&lt;/p&gt;
&lt;p&gt;If it wasn&amp;#8217;t clear by now; GNOME 3 is &lt;strong&gt;not&lt;/strong&gt; what a lot of people wanted.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://amplicate.com/hate/gnome3&quot;&gt;&lt;img src=&quot;http://felipec.files.wordpress.com/2013/06/gnome-hate.png?w=660&quot; alt=&quot;gnome-hate&quot; class=&quot;aligncenter size-full wp-image-1486&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;People complained about GNOME 2 too&lt;/h3&gt;
&lt;p&gt;Did this actually happen? If you google &lt;a href=&quot;https://www.google.com/search?q=gnome+2&amp;tbs=cdr:1,cd_min:1/1/2002,cd_max:1/1/2004&quot;&gt;GNOME 2 for results between 2002 and 2004&lt;/a&gt; you would find barely (if any) results that show negative comments, so if it did happen, the backlash probably wasn&amp;#8217;t &lt;strong&gt;that&lt;/strong&gt; bad, and it probably died rather quickly. Check the &lt;a href=&quot;http://tech.slashdot.org/story/02/06/26/1813231/gnome-20-released&quot;&gt;thread in Slashdot&lt;/a&gt;, and try to find one comment suggesting to go back to GNOME 1; I couldn&amp;#8217;t find any.&lt;/p&gt;
&lt;p&gt;Did anybody create forks after GNOME 2 was released the same way people forked after GNOME 3? No.&lt;/p&gt;
&lt;p&gt;Yes, people complained about GNOME 2, but not nearly as much as they do about GNOME 3. There&amp;#8217;s even an entire wikipedia article dedicated to the &lt;a href=&quot;http://en.wikipedia.org/wiki/Controversy_over_GNOME_3&quot;&gt;controversy over GNOME 3&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Sorry GNOME developers, none of your excuses for not listening to your users make sense. You should always listen to your users. Without them your project is nothing.&lt;/p&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;The biggest complaint users had was the lack of configuration options, which could have been solved very easily, if the developers had more than two neurons in their brain, but instead, there&amp;#8217;s only sub-par alternatives.&lt;/p&gt;
&lt;h3&gt;Advanced mode&lt;/h3&gt;
&lt;p&gt;GNOME 3 got rid of a bunch of useful configurations users relied on, and to defend themselves they said you could use gsettings manually, or install (or write) an extension, and so on, but I argued that there should be an &amp;#8220;advanced mode&amp;#8221; that the user can optionally turn on in order to further configure the system the way they wanted.&lt;/p&gt;
&lt;p&gt;GNOME developers argued that this was a bad idea, because more code would need to be maintained which is absolutely not true for gsettings; the configurations are already there in the code, the only thing missing is the UI. Then they argued that it would mess up the configuration UI, which they wanted to keep clean, but adding a single check box can&amp;#8217;t possibly mess with anything. In the end, I never received a single satisfactory answer of why an advanced mode didn&amp;#8217;t make sense.&lt;/p&gt;
&lt;h3&gt;Tweak tool&lt;/h3&gt;
&lt;p&gt;The tweak tool is the closest thing to a sane configuration interface, however, it should be cleaned up, distributed by default, and integrated in the GNOME control center by adding an &amp;#8220;Advanced mode&amp;#8221; checkbox that when switched on enables these settings which should be distributed among the different &amp;#8220;capplets&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Even then, the amount of configurations available is not enough.&lt;/p&gt;
&lt;h3&gt;Shell extensions&lt;/h3&gt;
&lt;p&gt;Finally, there&amp;#8217;s shell extensions which sound like a great idea at first, but if you think about it for thirty seconds, you realize the problem; there&amp;#8217;s no APIs for extensions. This means extensions bring many problems.&lt;/p&gt;
&lt;p&gt;First, there&amp;#8217;s no guarantee that an extension will work the next version of GNOME, because it&amp;#8217;s modifying the JavaScript code directly, and there&amp;#8217;s no guarantee that the code will remain the same. There&amp;#8217;s no extension API like with Chrome, or Firefox. The result is not unexpected; extensions break very easily from one version of GNOME to the next.&lt;/p&gt;
&lt;p&gt;The second issue is that extensions can easily break GNOME, because they can modify absolutely anything in the shell.&lt;/p&gt;
&lt;h3&gt;gsettings&lt;/h3&gt;
&lt;p&gt;Another option is to manually change the configurations through the command line. This is obviously not user-friendly, and not ideal either.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;GNOME developers made the mistake of not allowing configurability directly into GNOME, and as a result they have made the much needed configurations second class citizens, than no matter what you do, they don&amp;#8217;t work as expected. The problem is very easy to solve; the configurations should be integrated into GNOME, and activated by a single switch, so their normal configurations are not disturbed. But talking sense to these guys is next to impossible.&lt;/p&gt;
&lt;h2&gt;Classic mode&lt;/h2&gt;
&lt;p&gt;Finally, after so much backlash from the users for &lt;b&gt;years&lt;/b&gt;, GNOME developers had to implement the classic mode, so users could be able to run their beloved GNOME 2 interface with GNOME 3 technology.&lt;/p&gt;
&lt;p&gt;Unfortunately, GNOME classic is more of a hack than anything else; it&amp;#8217;s full of bugs and inconsistencies. Sure, this mode is still in its infancy, and will probably improve in the next releases, but it&amp;#8217;s safe to bet that it would &lt;b&gt;never&lt;/b&gt; be as polished and usable as GNOME 2 was.&lt;/p&gt;
&lt;p&gt;Sorry GNOME devs; too little, too late.&lt;/p&gt;
&lt;h1&gt;Suckage&lt;/h1&gt;
&lt;p&gt;I am not going to list every single reason why GNOME 3 sucks, I would never finish this post, and there&amp;#8217;s plenty of people that have already added their share (I&amp;#8217;ll list some of them).&lt;/p&gt;
&lt;p&gt;Personally for me the most obvious way to see that GNOME 3 defaults are brain-dead is the way alt+tab works. The whole purpose of work-spaces is to &lt;strong&gt;separate&lt;/strong&gt; work, instead of having all your browser windows, terminals, editors, email client, and so on, on the same work-space, you split them among different ones. Even their own &lt;a href=&quot;https://live.gnome.org/GnomeShell/Design/References&quot;&gt;design references&lt;/a&gt; for GNOME shell say so. So, to make alt-tab cycle through the windows in all works-paces instead of only the current one is idiotic; it undermines the whole purpose of work-spaces.&lt;/p&gt;
&lt;span class=&quot;embed-youtube&quot;&gt;&lt;/span&gt;
&lt;p&gt;Instead of accepting this obvious fact (which many users complained about), they disregard any feedback, and say &amp;#8220;oh, you can use an extension for that&amp;#8221;. Never mind the fact that a huge percentage of their users need to install the extension just to have a sane behavior, and that the extension can break at any moment.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://felipec.files.wordpress.com/2013/06/gnome-3-is.png&quot;&gt;&lt;img src=&quot;http://felipec.files.wordpress.com/2013/06/gnome-3-is.png?w=660&quot; alt=&quot;gnome-3-is&quot; class=&quot;aligncenter size-large wp-image-1480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Another quite obviously stupid behavior is to switch to an already running &amp;#8220;application&amp;#8221; instead of opening a new one. For example; if I press the Windows key, and type chromium, I expect a new browser window to open, but no, instead I&amp;#8217;m unexpectedly dragged to another work-space where there&amp;#8217;s already a browser window. This makes sense on single-window applications, but not on other ones.&lt;/p&gt;
&lt;p&gt;Linus Torvalds and others complained about this, and I proposed a solution; add a menu item when right clicking on the application that says &amp;#8220;Always open new window&amp;#8221;; problem solved. Now each time the user tries to open this application, it&amp;#8217;s done in a new window. But no, users don&amp;#8217;t know what they want; GNOME developers know better what&amp;#8217;s best for us.&lt;/p&gt;
&lt;p&gt;The list of stupidities in GNOME 3 is never ending:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=jX5H6uuhWYc&quot;&gt;Gnome 3.8 Review&amp;#8230; Still Sucks!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://igurublog.wordpress.com/2012/11/05/gnome-et-al-rotting-in-threes/&quot;&gt;GNOME (et al): Rotting In Threes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.zdnet.com/blog/virtualization/i-hate-unity-i-hate-gnome-i-hate-windows-8-the-ultimate-desktop-search-continues/4089&quot;&gt;I hate Unity. I hate GNOME. I hate Windows 8. The ultimate desktop search continues.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.tomshardware.com/reviews/fedora-16-gnome-3-review,3155-27.html&quot;&gt;GNOME 3: Why It Failed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://arstechnica.com/open-source/reviews/2011/04/ars-reviews-gnome-30-a-shiny-new-ornament-for-your-linux-lawn.ars/&quot;&gt;A shiny new ornament for your Linux lawn: Ars reviews GNOME 3.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://lwn.net/Articles/433579/&quot;&gt;The Grumpy Editor&amp;#8217;s GNOME 3 experience&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://lwn.net/Articles/447457/&quot;&gt;GNOME Shell, extensions, and control&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://arstechnica.com/open-source/news/2011/06/howto-four-tweaks-to-bring-back-missing-functionality-in-gnome-30.ars/&quot;&gt;Four tweaks to bring back missing functionality in GNOME 3.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.theregister.co.uk/2011/11/09/xcfe_for_gnome_refugees/&quot;&gt;Why GNOME refugees love Xfce&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ingeek.com/yes-gnome-3-sucks/&quot;&gt;Yes, Gnome 3 Sucks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://k3rnel.net/2011/07/03/why-gnome-3s-fallback-mode-sucks/&quot;&gt;Why Gnome 3′s Fallback mode sucks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mishmich.wordpress.com/2011/11/04/if-it-aint-broke-dont-fix-it/&quot;&gt;If it ain’t broke, don’t fix it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.lylebackenroth.com/blog/2011/11/08/ubuntu-has-jumped-the-shark/&quot;&gt;Ubuntu has jumped the shark and may soon be bitten by it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.jwz.org/blog/2011/10/has-gnome-3-decided-that-people-shouldnt-want-screen-savers/&quot;&gt;Has Gnome 3 decided that people shouldn&amp;#8217;t want screen savers?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.christoph-wickert.de/blog/2011/06/25/gnome-developer-quote-of-the-day/&quot;&gt;GNOME developer quote of the day&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://onezerothrice.com/?p=233&quot;&gt;GNOME 3 – Built for people who would never use Linux in the first place&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.pcworld.com/businesscenter/article/237516/five_linux_desktops_that_arent_unity_or_gnome_3.html&quot;&gt;Five Linux Desktops That Aren&amp;#8217;t Unity or GNOME 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jeffhoogland.blogspot.com/2011/09/something-gnome3-and-unity-could-stand.html&quot;&gt;Something Gnome3 and Unity could Stand to Learn from Windows 8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://technorati.com/technology/article/debian-beckons-ubuntu-refugees-to-come/&quot;&gt;Debian Beckons Ubuntu Refugees to Come Home&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blogs.gnome.org/otte/2012/07/27/staring-into-the-abyss/&quot;&gt;Staring into the abyss&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://felipec.files.wordpress.com/2013/06/gnome-3.png&quot;&gt;&lt;img src=&quot;http://felipec.files.wordpress.com/2013/06/gnome-3.png?w=450&amp;h=253&quot; alt=&quot;gnome-3&quot; width=&quot;450&quot; height=&quot;253&quot; class=&quot;aligncenter size-large wp-image-1484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;The Linux way&lt;/h1&gt;
&lt;p&gt;What GNOME should have done is simple; don&amp;#8217;t ever, &lt;strong&gt;ever&lt;/strong&gt; break user experience. This is how the Linux project has managed to become &lt;a href=&quot;http://felipec.wordpress.com/2011/03/06/why-linux-is-the-most-important-software-project-in-history/&quot;&gt;the most successful software project in history&lt;/a&gt;. There are no forks of the Linux kernel, simply because there&amp;#8217;s no need; user experience is never broken; what works in v2.0, works in v3.0, and will work in v4.0. New features are added carefully, making sure nothing breaks, and users &lt;strong&gt;always&lt;/strong&gt; have a way to make the system work the way they expect it to work.&lt;/p&gt;
&lt;p&gt;GNOME shell should have been developed alongside GNOME 2 and users should have given the option to turn this mode on and off. Slowly, GNOME shell would get more features from GNOME 2, until it was a full replacement, and at the same time GNOME 2 would evolve to integrate GNOME 3 technologies (like GTK+ 3.0). Eventually GNOME shell becomes the default, but always with the option to use the classic interface. After some cycles, the GNOME shell interface is bound to be a full replacement for the classic one.&lt;/p&gt;
&lt;p&gt;Unfortunately, they chose not to do this.&lt;/p&gt;
&lt;p&gt;Going this way requires more effort, of course, but it&amp;#8217;s the only way to move forward without loosing developers and users along the way. GNOME developers argued that they didn&amp;#8217;t have the resources to do such careful move, but that is clearly false, as the developers working on MATE, Cinnamon and GNOME classic show; there&amp;#8217;s developers interested in making things work for the traditional mode.&lt;/p&gt;
&lt;p&gt;They chose not to listen to the warnings, and they became impatient and went forward with a move that had the potential of angering a lot of users. Well, this potential was fully realized, and now they are paying the consequences.&lt;/p&gt;
&lt;h1&gt;They were wrong&lt;/h1&gt;
&lt;p&gt;They argued this was like GNOME 2; the people complaining about it will eventually learn the new ways, and most will be happy. They were wrong.&lt;/p&gt;
&lt;p&gt;Even to this day people keep complaining about GNOME 3, how the interface doesn&amp;#8217;t make sense, how the developers don&amp;#8217;t listen, and how the design is brain-dead.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s no other way to put it; GNOME 3 was a mistake.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/felipec.wordpress.com/1467/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/felipec.wordpress.com/1467/&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=1467&amp;subd=felipec&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 12 Jun 2013 15:39:39 +0000</pubDate>
</item>
<item>
	<title>Andy Wingo: ecmascript generators from a performance perspective</title>
	<guid>http://wingolog.org/2013/06/11/ecmascript-generators-from-a-performance-perspective</guid>
	<link>http://wingolog.org/archives/2013/06/11/ecmascript-generators-from-a-performance-perspective</link>
	<description>&lt;div&gt;&lt;p&gt;It's been really gratifying to see the recent interest in &lt;a href=&quot;http://wingolog.org/archives/2013/05/08/generators-in-v8&quot;&gt;ES6 generators in V8&lt;/a&gt;.  I'm still a Schemer at heart, but one thing all language communities should learn from JS is its enthusiasm and sense of joyful play.  One can't spend much time around folks like &lt;a href=&quot;http://jlongster.com/&quot;&gt;James Long&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/domenic&quot;&gt;Domenic Denicola&lt;/a&gt; without feeling the urge to go out and build something fun.&lt;/p&gt;&lt;p&gt;&lt;b&gt;perfie perf perf perf&lt;/b&gt;&lt;/p&gt;&lt;p&gt;But this is a blog about nargery!  A lot of people have been speculating about the performance impact of using generators, and I've been meaning to write about it, so perhaps this article will tickle your neuron.&lt;/p&gt;&lt;p&gt;A generator is a function that can suspend.  So the first perf question to ask yourself is, does the performance of generators matter at all?  If your generator spends more time suspended than active, then probably not.  Though it's not the only application of generators, if you are using generators for asynchronous programming, then probably generator performance matters not at all.&lt;/p&gt;&lt;p&gt;But that's not very satisfying, right?  Even though it probably doesn't matter, maybe it does, and then you need to make sure your mental model of what is fast and what is slow corresponds to reality.&lt;/p&gt;&lt;p&gt;&lt;b&gt;crankshaft&lt;/b&gt;&lt;/p&gt;&lt;p&gt;So, the skinny: as implemented in V8, the primary perf impact of generators is that they do not get optimized by Crankshaft.&lt;/p&gt;&lt;p&gt;As you probably know, Crankshaft is V8's optimizing compiler.  There are two ways a function can be optimized: on entry, because the function is called many times, or within a loop, because the loop is taking too long.  In the first case it's fairly easy: you kick off a parallel task to recompile the function, reading the type feedback collected by the inline caches from the baseline compiler.  Once you've made the optimized function, you swap the function's code pointer, and the next time you call the function you get the optimized version instead of the generic version.&lt;/p&gt;&lt;p&gt;The other way is if you are in a function, in a hot loop, and you decide to optimize the function while you are in it.  This is called on-stack replacement (OSR), and is important for functions that are only called once but do have hot loops.  (Cough KRAKEN cough.)  It's trickier to do parallel compilation with OSR, as the function might have left the loop by the time recompilation finishes, but oh well.&lt;/p&gt;&lt;p&gt;So in summary, when V8 goes to optimize a function it will be in one of two states: &lt;i&gt;inactive&lt;/i&gt;, because it hasn't started to run yet, or &lt;i&gt;active&lt;/i&gt;, because it's stuck in a tight loop.&lt;/p&gt;&lt;p&gt;Generators introduce a new state for functions: &lt;i&gt;suspended&lt;/i&gt;.  You can know whether a function is active or inactive, but you can't know how many suspended generator activations are out in the JS heap.  So you have multiple potential entry points to the function, which complicates the optimizer as it has to work on graphs with irreducible loops.  Perhaps it's still possible to optimize, as OSR is a form of irreducible loops; I suspect though that you would end up compiling as many optimized functions as there are yield points, plus one for the function entry (and possibly another for OSR).  Anyway it's a bit complicated.&lt;/p&gt;&lt;p&gt;Also, deoptimization (bailout) becomes more difficult if you can have suspended activations, and as a technical detail, it's tricky for V8 to efficiently capture the state of an activation in a way that the garbage collector can understand.&lt;/p&gt;&lt;p&gt;The upshot is that tight loops in generators won't run fast.  If you need speed in a loop in a generator, you will need to call out to some other function (which itself would get optimized).&lt;/p&gt;&lt;p&gt;&lt;b&gt;baseline&lt;/b&gt;&lt;/p&gt;&lt;p&gt;On the other hand, I should note that generators &lt;i&gt;are&lt;/i&gt; optimized for quick suspend and resume.  In a generator function, V8 stores local variables on the heap instead of on the stack.  You would think this would make things slow, but that is not the case.  Access to locals has the same speed characteristics: both stack and heap locals are accessed by index from a register (the stack pointer or the context pointer).&lt;/p&gt;&lt;p&gt;There is an allocation overhead when you enter a generator to create the heap storage, but it is almost never the case that you need to copy or allocate when suspending a generator.  Since the locals are on the heap already, there is nothing to do!  You just write the current instruction pointer (something you know at compile-time) into a slot in the generator object and return the result.&lt;/p&gt;&lt;p&gt;Similarly, when resuming you have to push on a few words to rebuild the stack frame, but after that's done you just jump back to where you were and all is good.&lt;/p&gt;&lt;p&gt;The exception to this case is when you yield and there are temporaries on the stack.  Recall in my &lt;a href=&quot;http://wingolog.org/archives/2013/04/18/inside-full-codegen-v8s-baseline-compiler&quot;&gt;article on V8's baseline compiler&lt;/a&gt; that the full-codegen is a stack machine.  It allocates slots to named locals, but temporary values go on the stack at run-time, and unfortunately V8's baseline compiler is too naive even to know what the stack height is at compile-time.  So each suspension checks the stack height, and if it is nonzero, it calls out to a runtime helper to store the operands.&lt;/p&gt;&lt;p&gt;This run-time save would be avoidable in register machines like JavaScriptCore's baseline compiler, which avoids pushing and popping on the stack.  Perhaps this note might spur the competitive urges of some fine JSC hacker, to show up V8's generators performance.  I would accept JSC having faster generators if that's what it took to get generators into WebKit, at least for a while anyway :)&lt;/p&gt;&lt;p&gt;&lt;b&gt;abstract musings&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Many of you have read about the &lt;a href=&quot;http://en.wikipedia.org/wiki/Partial_evaluation#Futamura_projections&quot;&gt;Futamura projections&lt;/a&gt;, in which one compiles a program via partial application of an interpreter with respect to a given input program.  Though in the real world this does not appear to be a good strategy for implementing compilers, as so much of compilation is not simply about program structure but also about representation, there is a kernel of deep truth in this observation: the essence of compilation is partial evaluation of a strategy with respect to a particular program.&lt;/p&gt;&lt;p&gt;This observation most often helps me in the form of its converse.  Whenever I find myself implementing some sort of generic evaluation strategy, there's a sign in my head that start blinking the word &quot;interpreter&quot;.  (Kinda like the &quot;on-air&quot; signs in studios.)  That means I'm doing something that's probably not as efficient as it could be.  I find myself wondering how I can make the strategy specific to a particular program.&lt;/p&gt;&lt;p&gt;In this case, we can think of suspending and resuming not as copying a stack frame out and in, but instead compiling specific stubs to copy out only the values that are needed, in the representations that we know that they have.  Instead of looping from the bottom to the top of a frame, you emit code for each element.  In this way you get a specific program, and if you manage to get here, you have a program that can be inlined too: the polymorphic &quot;next&quot; reduces to a monomorphic call of a particular continuation.&lt;/p&gt;&lt;p&gt;Anyway, &lt;a href=&quot;http://en.wikipedia.org/wiki/Amdahl's_law&quot;&gt;Amdahl's law&lt;/a&gt; limits the juice we can squeeze from this orange.  For a tight for-of loop with a couple of optimizations that should land soon in V8, I see generator performance that is only 2 times slower that the corresponding hand-written iterators that use stateful closures or objects: 25 nanoseconds per suspend/resume versus 12 for a hand-written iterator.&lt;/p&gt;&lt;p&gt;25 &lt;i&gt;nanoseconds&lt;/i&gt;, people.  You're using jQuery and asking for data from a server in the next country.  It is highly unlikely that generators will be a bottleneck in your program :)&lt;/p&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 11 Jun 2013 13:48:00 +0000</pubDate>
</item>
<item>
	<title>GStreamer: GStreamer 1.0.7 binaries for Windows, Mac OS X and Android</title>
	<guid>http://gstreamer.freedesktop.org/news/#2013-06-10T20:00:00Z</guid>
	<link>http://gstreamer.freedesktop.org/news/#2013-06-10T20:00:00Z</link>
	<description>&lt;p&gt;
The GStreamer team is pleased to announce binary builds for GStreamer
1.0.7, the plugin modules and all their dependencies. In future the team
hopes to update these binary builds shortly after every stable GStreamer
release. Builds are currently provided for Windows (32/64 bit), Mac OS X
(32/64 bit x86) and Android (ARM). Future releases will include support
for iOS.
       &lt;/p&gt;&lt;p&gt;
        &lt;/p&gt;&lt;p&gt;
Check out the &lt;a href=&quot;http://lists.freedesktop.org/archives/gstreamer-devel/2013-June/041449.html&quot;&gt;release announcement mail&lt;/a&gt; for
additional information or download the files for &lt;a href=&quot;http://gstreamer.freedesktop.org/data/pkg/windows/1.0.7/&quot;&gt;Windows&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/data/pkg/osx/1.0.7/&quot;&gt;Mac OS X&lt;/a&gt; and
&lt;a href=&quot;http://gstreamer.freedesktop.org/data/pkg/android/1.0.7/&quot;&gt;Android&lt;/a&gt;.
        &lt;/p&gt;</description>
	<pubDate>Mon, 10 Jun 2013 20:00:00 +0000</pubDate>
</item>
<item>
	<title>Jean-François Fortin Tam: Status update — new Pitivi timeline, GSoC projects, etc</title>
	<guid>http://jeff.ecchi.ca/blog/?p=2418</guid>
	<link>http://jeff.ecchi.ca/blog/2013/06/08/status-update-new-pitivi-timeline-gsoc-projects-etc/</link>
	<description>&lt;p&gt;Dear &lt;del&gt;shareholders&lt;/del&gt; fans, here is the quarterly report from the frontlines of Pitivi, your favorite futuretrocyberpunk video editor.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-2418&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;attachment_2419&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;img class=&quot;size-full wp-image-2419&quot; alt=&quot;2013-06-08&quot; src=&quot;http://jeff.ecchi.ca/blog/wp-content/uploads/2013-06-08.jpg&quot; width=&quot;500&quot; height=&quot;284&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;A typical day in my life as of late&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;I will cover the following from a very high-level view (I&amp;#8217;ll have to make separate blog posts to cover them in detail, there&amp;#8217;s too much to say):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The state of our multimedia stack&lt;/li&gt;
&lt;li&gt;Our new timeline canvas and how you can help&lt;/li&gt;
&lt;li&gt;This year&amp;#8217;s accepted Summer of Code projects&lt;/li&gt;
&lt;li&gt;Upcoming GUADEC presentation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also, a small announcement: for those who also want some shorter, less formal status updates and occasional feedback probes, you can look at the new &lt;a href=&quot;https://plus.google.com/+pitivi&quot;&gt;PiTiVi G+ page&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;Clutter timeline canvas&lt;/h1&gt;
&lt;p&gt;In preparation for the Summer of Code, but mostly just to help us and demonstrate how much of a badass he is, Mathieu Duponchelle killed our goocanvas-based timeline and redid the whole thing with &lt;a href=&quot;http://en.wikipedia.org/wiki/Clutter_%28toolkit%29&quot;&gt;Clutter&lt;/a&gt;. In &lt;em&gt;two weeks&lt;/em&gt;. This is what it looks like at the moment:&lt;/p&gt;

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

&lt;h1&gt;The state of our multimedia stack&lt;/h1&gt;
&lt;p&gt;We fixed some initial bugs in GNonLin &lt;a title=&quot;GStreamer Hackfest 2013: Moving Images&quot; href=&quot;http://jeff.ecchi.ca/blog/2013/04/03/gstreamer-hackfest-2013-moving-images/&quot;&gt; in Milan&lt;/a&gt;. Since then, further investigation revealed that most of the issues we are encountering are actually generic bugs in GStreamer. Mathieu is now working full time on fixing bugs everywhere in the stack. We hope to have something showable (beta) for GUADEC and a release this fall — as you can imagine however, I&amp;#8217;m unable to make solid promises at this point.&lt;/p&gt;
&lt;p&gt;There are still many things that we need to rearchitect in GNonLin, but that&amp;#8217;s a story for another blog post.&lt;/p&gt;
&lt;p&gt;We recently started using Github&amp;#8217;s bug tracking tool to keep a more easily manageable list of &lt;a href=&quot;https://github.com/pitivi/pitivi/issues/&quot;&gt;issues we have to deal with&lt;/a&gt; in the development version. Please note:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This is &lt;em&gt;not&lt;/em&gt; a replacement for GNOME Bugzilla. It is meant as a temporary measure for our extended development version, for stuff that is too small, fluid or uncertain to be filed as proper bug reports. Once we release, we&amp;#8217;ll move remaining issues to Bugzilla. Upstream issues in GStreamer, once properly identified, are always filed in GStreamer&amp;#8217;s (GNOME) Bugzilla.&lt;/li&gt;
&lt;li&gt;We welcome your help in fixing or investigating these issues. There&amp;#8217;s also an &amp;#8220;&lt;a href=&quot;https://github.com/pitivi/pitivi/issues?labels=Easy&quot;&gt;easy&lt;/a&gt;&amp;#8221; tag for those of you looking for bitesized stuff.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Stuff you can fix in Pitivi, right now.&lt;/h1&gt;
&lt;p&gt;If working on GStreamer and GES is not your cup of tea, we still have a ton of fun little projects for you to do on Pitivi itself, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A bunch of little &lt;a href=&quot;https://github.com/pitivi/pitivi/issues?labels=%28Clutter%29+timeline+canvas&quot;&gt;nitpicks/papercuts for our Clutter timeline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;During the port to Clutter, Daniel Thul helped Mathieu by rearchitecturing and fixing the timeline clip thumbnailer module. It works, but there are &lt;a href=&quot;https://bugzilla.gnome.org/show_bug.cgi?id=700610&quot;&gt;some remaining, significant performance issues&lt;/a&gt;. This is a &lt;em&gt;great&lt;/em&gt; project if you&amp;#8217;re looking for finite, concrete, &lt;a href=&quot;https://git.gnome.org/browse/pitivi/tree/pitivi/timeline/previewers.py&quot;&gt;self-contained&lt;/a&gt; work to improve performance with a &lt;em&gt;very&lt;/em&gt; highly visible impact on the UI. You would get a ton of love points for this.&lt;/li&gt;
&lt;li&gt;We have a title editor UI, but it needs some love. You don&amp;#8217;t want us to ship with an unrefined UI, do you?&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://wiki.pitivi.org/wiki/Test_suite_wishlist&quot;&gt;UI tests&lt;/a&gt;!&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;This Summer of Code&amp;#8217;s projects&lt;/h1&gt;
&lt;p&gt;We have four students working on Pitivi this summer, thanks to GNOME kindly offering us an extra slot to be able to achieve our mission. Here&amp;#8217;s our ambitious list of project goals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;General bug fixing in the entire GStreamer + GES + Pitivi stack, to be able to make a Pitivi release.&lt;/li&gt;
&lt;li&gt;Motion ramping (keyframable fast/slow motion, allowing the speed of clips to be changed over time, ideally with smooth frame interpolation)&lt;/li&gt;
&lt;li&gt;Finish the enablement of our new timeline layers management UI&lt;/li&gt;
&lt;li&gt;Reimplement audio waveforms. Better, faster, stronger.&lt;/li&gt;
&lt;li&gt;Video compositing&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.gnome.org/show_bug.cgi?id=609136&quot;&gt;Proxy editing&lt;/a&gt;. I&amp;#8217;m currently writing a design and API requirements brainstorming page to help plan this feature. I will share it in my next blog post, where I&amp;#8217;ll present some of the dilemmas I&amp;#8217;m encountering (particularly around codecs).&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Presenting at GUADEC&lt;/h1&gt;
&lt;p&gt;&lt;img class=&quot;alignnone&quot; alt=&quot;&quot; src=&quot;https://www.guadec.org/wp-content/themes/wordcamp-base/images/guadec2012.png&quot; width=&quot;564&quot; height=&quot;259&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Come to &lt;a href=&quot;http://guadec.org&quot;&gt;GUADEC&lt;/a&gt; and attend my presentation at the beginning of August. Plans are a bit fuzzy for the time being, but you can expect my typical &lt;a title=&quot;GUADEC talk video published&quot; href=&quot;http://jeff.ecchi.ca/blog/2012/08/12/guadec-talk-video-published/&quot;&gt;award-winning&lt;/a&gt; presentation style. Also, as usual, we&amp;#8217;ll be having a &lt;strong&gt;Pitivi hackfest&lt;/strong&gt; there. Czech it out.&lt;/p&gt;</description>
	<pubDate>Sat, 08 Jun 2013 21:32:57 +0000</pubDate>
</item>
<item>
	<title>Thomas Vander Stichele: So then that happened</title>
	<guid>http://thomas.apestaart.org/log/?p=1552</guid>
	<link>http://thomas.apestaart.org/log/?p=1552</link>
	<description>&lt;p&gt;I&amp;#8217;ve been more quiet than usual lately.  I guess that&amp;#8217;s what happens when you get married.&lt;/p&gt;
&lt;p&gt;Oh, yeah, so that happened.&lt;/p&gt;
&lt;div class=&quot;wpg2tag-image&quot;&gt;&lt;a href=&quot;http://thomas.apestaart.org/log/?page_id=862&amp;g2_itemId=71250&quot; title=&quot;natalia-thomas-060-low&quot;&gt;&lt;img src=&quot;http://thomas.apestaart.org/gallery/main.php?g2_view=core.DownloadItem&amp;g2_itemId=71251&amp;g2_serialNumber=2&quot; width=&quot;150&quot; height=&quot;100&quot; id=&quot;IFid2&quot; class=&quot;ImageFrame_None&quot; alt=&quot;natalia-thomas-060-low&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;When I first met her years ago at a friend&amp;#8217;s birthday drink she sat next to me all night and completely ignored me.&lt;/p&gt;
&lt;p&gt;Years later I crashed a women only outing where she happened to be as well.&lt;/p&gt;
&lt;p&gt;A random party, a six-o&amp;#8217;clock-in-the-morning omelette on a terrace watching the sun come up, a birthday party, a jaunt to the Gentse Feesten and a long Christmas in august later, we were already together for two months before we knew it.  I took her to my sister&amp;#8217;s wedding, and not even three years later we went to our own, three weeks after I proposed.  (Tip for anyone thinking of proposing: maybe the sauna isn&amp;#8217;t the best place after all)&lt;/p&gt;
&lt;p&gt;Getting married to her ended up being the most natural decision I&amp;#8217;ve ever taken.  And the answer to the most-asked question? Yes, it does make a difference.  No, I didn&amp;#8217;t expect it to.  But it does.&lt;/p&gt;
&lt;p&gt;Thank you to everyone who ever dumped me &amp;#8211; I had no idea better things were coming.&lt;/p&gt;</description>
	<pubDate>Fri, 07 Jun 2013 16:04:44 +0000</pubDate>
</item>
<item>
	<title>GStreamer: GStreamer Core and Plugins 1.1.1 development release</title>
	<guid>http://gstreamer.freedesktop.org/news/#2013-06-05T19:00:00Z</guid>
	<link>http://gstreamer.freedesktop.org/news/#2013-06-05T19:00:00Z</link>
	<description>&lt;p&gt;
The GStreamer team is pleased to announce a new development release with feature additions for the 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.1.1.html&quot;&gt;GStreamer core&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-plugins-base/1.1.1.html&quot;&gt;gst-plugins-base&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-plugins-good/1.1.1.html&quot;&gt;gst-plugins-good&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-plugins-ugly/1.1.1.html&quot;&gt;gst-plugins-ugly&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-plugins-bad/1.1.1.html&quot;&gt;gst-plugins-bad&lt;/a&gt;, or
&lt;a href=&quot;http://gstreamer.freedesktop.org/releases/gst-libav/1.1.1.html&quot;&gt;gst-libav&lt;/a&gt;,
or download tarballs for
&lt;a href=&quot;http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.1.1.tar.xz&quot;&gt;gstreamer&lt;/a&gt;,
&lt;a href=&quot;http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.1.1.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.1.1.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.1.1.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.1.1.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.1.1.tar.xz&quot;&gt;gst-libav&lt;/a&gt;,
        &lt;/p&gt;&lt;p&gt;
	Check the &lt;a href=&quot;http://lists.freedesktop.org/archives/gstreamer-devel/2013-June/041320.html&quot;&gt;release announcement mail&lt;/a&gt; for a
	list of changes.
        &lt;/p&gt;</description>
	<pubDate>Wed, 05 Jun 2013 19:00:00 +0000</pubDate>
</item>
<item>
	<title>Andy Wingo: no master</title>
	<guid>http://wingolog.org/2013/06/05/no-master</guid>
	<link>http://wingolog.org/archives/2013/06/05/no-master</link>
	<description>&lt;div&gt;&lt;p&gt;It's difficult for anyone with an open heart and a fresh mind to look at the world without shuddering at its injustices: police brutality, obscene gaps between rich and poor, war and bombs and land mines, people without houses and houses without people.  So much wrong!  It is right and natural not only to feel revulsion, but to revolt as well.  Fight the man!  Down with the state!  No god, no master!&lt;/p&gt;&lt;p&gt;So to those working against foreclosures and evictions of families in your neighborhoods, more power to you.  Fight the good fight.&lt;/p&gt;&lt;p&gt;However, revolt is unfortunately not sufficient.  We must also think beyond the now and imagine a better world: life after the revolution.&lt;/p&gt;&lt;p&gt;I'm sure I've lost some of you now, and that's OK.  We are all at different points of political consciousness, and you can't speak to all at the same time.  Some of the words like &quot;revolution&quot; probably bother some people.  It sounds strident, right?  But if you agree (and perhaps you do not) that there are fundamental problems with the way the world works, and that symptoms like banks kicking families out of houses using riot police are ultimately caused by those problems, then any real change must also be fundamental: at the foundation, where the roots are.  Radical problems need radical solutions.  Revolution is no more (and no less!) than a radically different world.&lt;/p&gt;&lt;p&gt;For me, one of these roots to dig up is hierarchy.  I take as a principle that people should have power over and responsibility for decisions to the extent that they are affected, and hierarchy is all about some people having more power than others.  Even if you do away with capitalism, as in the early Soviet Union, if you don't directly address the issue of hierarchy, classes will emerge again.  A world in which some people are coordinators and other people are workers will result in a coordinator class that gradually accretes more and more power.  Hierarchy is in essence tyrannical, though any specific instance may be more or less so.&lt;/p&gt;&lt;p&gt;On the other side of things, hierarchy deadens those at the bottom: the listless students, the mechanical workers, the passive and cynical voters.  The revolution has to come about in a way that leaves people more alive and curious and energetic, and that seems to correspond not only with greater freedom but also with personal responsibility.  I think that a world without hierarchy would be a world whose people would be more self-actualized and self-aware, as they would have more responsibility over the situations that affect their lives and those around them.&lt;/p&gt;&lt;p&gt;Well.  I don't want to wax too theoretical here, in what I meant to be an introduction.  I've been having these thoughts for a while and finally a couple years ago I decided to join in a collective experiment:  to practice my chosen craft of computer programming within a cooperative context.  I haven't had a boss since then, and I haven't been the boss of anyone.  I'm not even my own boss.  There are no masters!&lt;/p&gt;&lt;p&gt;I've gotten so used to this way of working that sometimes I forget how unusual it is to work in a cooperative.  Also, we're usually too busy hacking to write about it ;) So in the next few articles I'll take a look at the internal structure of our company, &lt;a href=&quot;http://www.igalia.com/&quot;&gt;Igalia&lt;/a&gt;, and try to give some insight into what it's like working in a cooperative.&lt;/p&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 05 Jun 2013 13:35:31 +0000</pubDate>
</item>
<item>
	<title>Gustavo Orrillo: ac</title>
	<guid>http://codeanticode.wordpress.com/?p=1681</guid>
	<link>http://codeanticode.wordpress.com/2013/06/04/processing-2-0-is-out-processing-2-0-is-in/</link>
	<description>Yesterday was a very important day for the Processing project, as a new stable version, &amp;#8220;the 2.0&amp;#8243;, has been released. This release is the result of the hard work of a small team of volunteers over the course of the past two years, plus the fundamental support and contributions from the entire Processing community. For [&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=1681&amp;subd=codeanticode&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 05 Jun 2013 00:24:51 +0000</pubDate>
</item>
<item>
	<title>Arun Raghavan: PulseAudio 4.0 and more</title>
	<guid>http://arunraghavan.net/?p=1433</guid>
	<link>http://arunraghavan.net/2013/06/pulseaudio-4-0-and-more/</link>
	<description>&lt;p&gt;And we&amp;#8217;re back &amp;#8230; PulseAudio 4.0 is &lt;a href=&quot;http://lists.freedesktop.org/archives/pulseaudio-discuss/2013-June/017467.html&quot;&gt;out&lt;/a&gt;! There&amp;#8217;s both a short and super-detailed changelog in the &lt;a href=&quot;http://www.freedesktop.org/wiki/Software/PulseAudio/Notes/4.0&quot;&gt;release notes&lt;/a&gt;. For the lazy, this release brings a bunch of Bluetooth stability updates, better low latency handling, performance improvements, and a whole lot more. :)&lt;/p&gt;

&lt;p&gt;One interesting thing is that for this release, we kept a parallel &lt;code&gt;next&lt;/code&gt; branch open while &lt;code&gt;master&lt;/code&gt; was frozen for stabilising and releasing. As a result, we&amp;#8217;re already well on our way to 5.0 with 52 commits since 4.0 already merged into &lt;code&gt;master&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;And finally, I&amp;#8217;m excited to announce PulseAudio is going to be carrying out two great projects this summer, as part of the Google Summer of Code! We are going to have Alexander Couzens (lynxis) working on a rewrite of module-tunnel using libpulse, mentored by Tanu Kaskinen. In addition to this, Damir Jelić (poljar) working on improvements to resampling, mentored by Peter Meerwald.&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s just some of the things to look forward to in coming months. I&amp;#8217;ve got a few more things I&amp;#8217;d like to write about, but I&amp;#8217;ll save that for another post.&lt;/p&gt;</description>
	<pubDate>Tue, 04 Jun 2013 02:45:41 +0000</pubDate>
</item>
<item>
	<title>GStreamer: GStreamer Conference 2013: Registration now open, Call for Papers</title>
	<guid>http://gstreamer.freedesktop.org/news/#2013-05-21T23:00:00Z</guid>
	<link>http://gstreamer.freedesktop.org/news/#2013-05-21T23:00:00Z</link>
	<description>&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;</description>
	<pubDate>Tue, 21 May 2013 23:00:00 +0000</pubDate>
</item>
<item>
	<title>Thomas Vander Stichele: Organizing photo libraries</title>
	<guid>http://thomas.apestaart.org/log/?p=1550</guid>
	<link>http://thomas.apestaart.org/log/?p=1550</link>
	<description>&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;</description>
	<pubDate>Sat, 18 May 2013 11:51:02 +0000</pubDate>
</item>
<item>
	<title>Stefan Kost: 15 May 2013</title>
	<guid>http://www.advogato.org/person/ensonic/diary.html?start=139</guid>
	<link>http://www.advogato.org/person/ensonic/diary.html?start=139</link>
	<description>&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;</description>
	<pubDate>Wed, 15 May 2013 12:10:04 +0000</pubDate>
</item>
<item>
	<title>Thomas Vander Stichele: morituri and Hidden Track One Audio</title>
	<guid>http://thomas.apestaart.org/log/?p=1545</guid>
	<link>http://thomas.apestaart.org/log/?p=1545</link>
	<description>&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;</description>
	<pubDate>Fri, 10 May 2013 20:08:31 +0000</pubDate>
</item>
<item>
	<title>Andy Wingo: generators in v8</title>
	<guid>http://wingolog.org/2013/05/08/generators-in-v8</guid>
	<link>http://wingolog.org/archives/2013/05/08/generators-in-v8</link>
	<description>&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;</description>
	<pubDate>Wed, 08 May 2013 19:31:42 +0000</pubDate>
</item>
<item>
	<title>Thomas Vander Stichele: Votes for talks at open source conferences</title>
	<guid>http://thomas.apestaart.org/log/?p=1537</guid>
	<link>http://thomas.apestaart.org/log/?p=1537</link>
	<description>&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;</description>
	<pubDate>Tue, 07 May 2013 11:53:26 +0000</pubDate>
</item>
<item>
	<title>Thomas Vander Stichele: If I was 16 years younger…</title>
	<guid>http://thomas.apestaart.org/log/?p=1533</guid>
	<link>http://thomas.apestaart.org/log/?p=1533</link>
	<description>&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;</description>
	<pubDate>Fri, 03 May 2013 21:30:25 +0000</pubDate>
</item>
<item>
	<title>Jean-François Fortin Tam: No more stuck rendering dialogs!</title>
	<guid>http://jeff.ecchi.ca/blog/?p=2405</guid>
	<link>http://jeff.ecchi.ca/blog/2013/04/28/no-more-stuck-render-dialogs/</link>
	<description>&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;</description>
	<pubDate>Sun, 28 Apr 2013 04:19:25 +0000</pubDate>
</item>
<item>
	<title>GStreamer: GStreamer Core and Plugins 1.0.7 bug-fix release</title>
	<guid>http://gstreamer.freedesktop.org/news/#2013-04-26T14:00:00Z</guid>
	<link>http://gstreamer.freedesktop.org/news/#2013-04-26T14:00:00Z</link>
	<description>&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;</description>
	<pubDate>Fri, 26 Apr 2013 14:00:00 +0000</pubDate>
</item>
<item>
	<title>Christian Schaller: Brno GUADEC Call for Papers!</title>
	<guid>http://blogs.gnome.org/uraeus/?p=2140</guid>
	<link>http://blogs.gnome.org/uraeus/2013/04/19/brno-guadec-call-for-papers/</link>
	<description>&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;</description>
	<pubDate>Fri, 19 Apr 2013 10:29:01 +0000</pubDate>
</item>
<item>
	<title>Michael Sheldon: Erudite now available for Symbian Belle</title>
	<guid>http://blog.mikeasoft.com/?p=618</guid>
	<link>http://blog.mikeasoft.com/2013/04/19/erudite-now-available-for-symbian-belle/</link>
	<description>&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;</description>
	<pubDate>Fri, 19 Apr 2013 09:51:34 +0000</pubDate>
</item>
<item>
	<title>Andy Wingo: inside full-codegen, v8's baseline compiler</title>
	<guid>http://wingolog.org/2013/04/18/inside-full-codegen-v8s-baseline-compiler</guid>
	<link>http://wingolog.org/archives/2013/04/18/inside-full-codegen-v8s-baseline-compiler</link>
	<description>&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;</description>
	<pubDate>Thu, 18 Apr 2013 15:45:20 +0000</pubDate>
</item>
<item>
	<title>Jean-François Fortin Tam: PiTiVi and the 2013 Summer of Code</title>
	<guid>http://jeff.ecchi.ca/blog/?p=2397</guid>
	<link>http://jeff.ecchi.ca/blog/2013/04/11/pitivi-and-the-2013-summer-of-code/</link>
	<description>&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;</description>
	<pubDate>Thu, 11 Apr 2013 19:09:26 +0000</pubDate>
</item>
<item>
	<title>Arun Raghavan: PulseAudio in GSoC 2013</title>
	<guid>http://arunraghavan.net/?p=1426</guid>
	<link>http://arunraghavan.net/2013/04/pulseaudio-in-gsoc-2013/</link>
	<description>&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;</description>
	<pubDate>Thu, 11 Apr 2013 11:34:48 +0000</pubDate>
</item>
<item>
	<title>Stefan Kost: 9 Apr 2013</title>
	<guid>http://www.advogato.org/person/ensonic/diary.html?start=138</guid>
	<link>http://www.advogato.org/person/ensonic/diary.html?start=138</link>
	<description>&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(-)</description>
	<pubDate>Tue, 09 Apr 2013 20:31:51 +0000</pubDate>
</item>
<item>
	<title>Christian Schaller: No GStreamer in this years Google Summer of Code</title>
	<guid>http://blogs.gnome.org/uraeus/?p=2133</guid>
	<link>http://blogs.gnome.org/uraeus/2013/04/09/no-gstreamer-in-this-years-goolge-summer-of-code/</link>
	<description>&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;</description>
	<pubDate>Tue, 09 Apr 2013 09:29:36 +0000</pubDate>
</item>
<item>
	<title>Jean-François Fortin Tam: Le nipponophone de l’autobus</title>
	<guid>http://jeff.ecchi.ca/blog/?p=2392</guid>
	<link>http://jeff.ecchi.ca/blog/2013/04/05/le-nipponophone-de-lautobus/</link>
	<description>&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;</description>
	<pubDate>Fri, 05 Apr 2013 23:08:17 +0000</pubDate>
</item>
<item>
	<title>Andy Wingo: thoughts on blink</title>
	<guid>http://wingolog.org/2013/04/04/thoughts-on-blink</guid>
	<link>http://wingolog.org/archives/2013/04/04/thoughts-on-blink</link>
	<description>&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;</description>
	<pubDate>Thu, 04 Apr 2013 06:43:17 +0000</pubDate>
</item>
<item>
	<title>Bastien Nocera: Geocluing the desktop, slowly</title>
	<guid>tag:blogger.com,1999:blog-977684764667858073.post-2470648344711224589</guid>
	<link>http://www.hadess.net/2013/04/geocluing-desktop-slowly.html</link>
	<description>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.</description>
	<pubDate>Thu, 04 Apr 2013 02:40:56 +0000</pubDate>
	<author>noreply@blogger.com (Bastien Nocera)</author>
</item>
<item>
	<title>Jean-François Fortin Tam: GStreamer Hackfest 2013: Moving Images</title>
	<guid>http://jeff.ecchi.ca/blog/?p=2386</guid>
	<link>http://jeff.ecchi.ca/blog/2013/04/03/gstreamer-hackfest-2013-moving-images/</link>
	<description>&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;</description>
	<pubDate>Wed, 03 Apr 2013 16:33:09 +0000</pubDate>
</item>
<item>
	<title>Phil Normand: GStreamer hackfest in Milan</title>
	<guid>http://base-art.net/Articles/123/</guid>
	<link>http://base-art.net/Articles/123/</link>
	<description>&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;</description>
	<pubDate>Mon, 01 Apr 2013 10:29:37 +0000</pubDate>
</item>
<item>
	<title>Andy Wingo: sexuality and sexism</title>
	<guid>http://wingolog.org/2013/03/26/sexuality-and-sexism</guid>
	<link>http://wingolog.org/archives/2013/03/26/sexuality-and-sexism</link>
	<description>&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;</description>
	<pubDate>Tue, 26 Mar 2013 20:07:10 +0000</pubDate>
</item>
<item>
	<title>Jean-François Fortin Tam: La carte Opus et les points de service qui n’en sont pas vraiment</title>
	<guid>http://jeff.ecchi.ca/blog/?p=2381</guid>
	<link>http://jeff.ecchi.ca/blog/2013/03/25/la-carte-opus-et-les-points-de-service-qui-nen-sont-pas-vraiment/</link>
	<description>&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;</description>
	<pubDate>Tue, 26 Mar 2013 03:25:05 +0000</pubDate>
</item>
<item>
	<title>GStreamer: GStreamer OpenMAX IL wrapper plugin 1.0.0 release</title>
	<guid>http://gstreamer.freedesktop.org/news/#2013-03-22T17:40:00Z</guid>
	<link>http://gstreamer.freedesktop.org/news/#2013-03-22T17:40:00Z</link>
	<description>&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;</description>
	<pubDate>Fri, 22 Mar 2013 17:40:00 +0000</pubDate>
</item>
<item>
	<title>GStreamer: GStreamer Core and Plugins 1.0.6 bug-fix release</title>
	<guid>http://gstreamer.freedesktop.org/news/#2013-03-22T16:00:00Z</guid>
	<link>http://gstreamer.freedesktop.org/news/#2013-03-22T16:00:00Z</link>
	<description>&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;</description>
	<pubDate>Fri, 22 Mar 2013 16:00:00 +0000</pubDate>
</item>
<item>
	<title>Zeeshan Ali: New in Boxes 3.8</title>
	<guid>http://zee-nix.blogspot.com/feeds/3409133375404325321/comments/default</guid>
	<link>http://www.advogato.org/person/zeenix/diary.html?start=317</link>
	<description>&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;</description>
	<pubDate>Wed, 20 Mar 2013 03:06:58 +0000</pubDate>
</item>
<item>
	<title>Stefan Kost: 14 Mar 2013</title>
	<guid>http://www.advogato.org/person/ensonic/diary.html?start=137</guid>
	<link>http://www.advogato.org/person/ensonic/diary.html?start=137</link>
	<description>&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;</description>
	<pubDate>Thu, 14 Mar 2013 20:13:40 +0000</pubDate>
</item>
<item>
	<title>Michael Sheldon: Ogre3D on Jolla’s SailfishOS</title>
	<guid>http://blog.mikeasoft.com/?p=598</guid>
	<link>http://blog.mikeasoft.com/2013/02/28/ogre3d-on-jollas-sailfishos/</link>
	<description>&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;</description>
	<pubDate>Thu, 28 Feb 2013 21:26:10 +0000</pubDate>
</item>
<item>
	<title>Andy Wingo: on generators</title>
	<guid>http://wingolog.org/2013/02/25/on-generators</guid>
	<link>http://wingolog.org/archives/2013/02/25/on-generators</link>
	<description>&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;</description>
	<pubDate>Mon, 25 Feb 2013 16:17:25 +0000</pubDate>
</item>
<item>
	<title>Andy Wingo: opengl particle simulation in guile</title>
	<guid>http://wingolog.org/2013/02/16/opengl-particle-simulation-in-guile</guid>
	<link>http://wingolog.org/archives/2013/02/16/opengl-particle-simulation-in-guile</link>
	<description>&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;</description>
	<pubDate>Sat, 16 Feb 2013 19:20:14 +0000</pubDate>
</item>
<item>
	<title>Stefan Kost: 14 Feb 2013</title>
	<guid>http://www.advogato.org/person/ensonic/diary.html?start=136</guid>
	<link>http://www.advogato.org/person/ensonic/diary.html?start=136</link>
	<description>&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;</description>
	<pubDate>Thu, 14 Feb 2013 20:57:17 +0000</pubDate>
</item>
<item>
	<title>Guillaume Emont: Migrating to Jekyll</title>
	<guid>http://guij.emont.org/blog/2013/02/10/migrating-to-jekyll</guid>
	<link>http://guij.emont.org/blog/2013/02/10/migrating-to-jekyll/</link>
	<description>&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;</description>
	<pubDate>Sat, 09 Feb 2013 23:00:00 +0000</pubDate>
</item>
<item>
	<title>Andy Wingo: knocking on private back doors with the web browser</title>
	<guid>http://wingolog.org/2013/02/04/knocking-on-private-back-doors-with-the-web-browser</guid>
	<link>http://wingolog.org/archives/2013/02/04/knocking-on-private-back-doors-with-the-web-browser</link>
	<description>&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;</description>
	<pubDate>Mon, 04 Feb 2013 08:47:09 +0000</pubDate>
</item>
<item>
	<title>Bastien Nocera: Power management in GNOME 3.8</title>
	<guid>tag:blogger.com,1999:blog-977684764667858073.post-8662099044968413313</guid>
	<link>http://www.hadess.net/2013/02/power-management-in-gnome-38.html</link>
	<description>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;</description>
	<pubDate>Fri, 01 Feb 2013 08:45:32 +0000</pubDate>
	<author>noreply@blogger.com (Bastien Nocera)</author>
</item>
<item>
	<title>Bastien Nocera: Office-runner 1.0</title>
	<guid>tag:blogger.com,1999:blog-977684764667858073.post-3924434265297821536</guid>
	<link>http://www.hadess.net/2013/01/office-runner-10.html</link>
	<description>&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 ;)</description>
	<pubDate>Mon, 28 Jan 2013 21:45:24 +0000</pubDate>
	<author>noreply@blogger.com (Bastien Nocera)</author>
</item>
<item>
	<title>Thomas Vander Stichele: measuring puppet</title>
	<guid>http://thomas.apestaart.org/log/?p=1529</guid>
	<link>http://thomas.apestaart.org/log/?p=1529</link>
	<description>&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;</description>
	<pubDate>Thu, 24 Jan 2013 19:58:17 +0000</pubDate>
</item>
<item>
	<title>Thomas Vander Stichele: mach 1.0.2 “ears” released</title>
	<guid>http://thomas.apestaart.org/log/?p=1527</guid>
	<link>http://thomas.apestaart.org/log/?p=1527</link>
	<description>&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;</description>
	<pubDate>Tue, 22 Jan 2013 21:32:41 +0000</pubDate>
</item>
<item>
	<title>Andy Wingo: an opinionated guide to scheme implementations</title>
	<guid>http://wingolog.org/2013/01/07/an-opinionated-guide-to-scheme-implementations</guid>
	<link>http://wingolog.org/archives/2013/01/07/an-opinionated-guide-to-scheme-implementations</link>
	<description>&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;</description>
	<pubDate>Mon, 07 Jan 2013 13:43:35 +0000</pubDate>
</item>
<item>
	<title>Stefan Kost: 1 Jan 2013</title>
	<guid>http://www.advogato.org/person/ensonic/diary.html?start=135</guid>
	<link>http://www.advogato.org/person/ensonic/diary.html?start=135</link>
	<description>&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(-)</description>
	<pubDate>Tue, 01 Jan 2013 18:02:31 +0000</pubDate>
</item>
<item>
	<title>Bastien Nocera: Settings news</title>
	<guid>tag:blogger.com,1999:blog-977684764667858073.post-3646838049593350613</guid>
	<link>http://www.hadess.net/2012/12/settings-news.html</link>
	<description>&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;</description>
	<pubDate>Fri, 21 Dec 2012 15:22:48 +0000</pubDate>
	<author>noreply@blogger.com (Bastien Nocera)</author>
</item>
<item>
	<title>Arun Raghavan: PulseAudio 3.0</title>
	<guid>http://arunraghavan.net/?p=1412</guid>
	<link>http://arunraghavan.net/2012/12/pulseaudio-3-0/</link>
	<description>&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;</description>
	<pubDate>Tue, 18 Dec 2012 07:57:46 +0000</pubDate>
</item>
<item>
	<title>Phil Normand: WebKitGTK+ Hackfest, 2012 edition</title>
	<guid>http://base-art.net/Articles/122/</guid>
	<link>http://base-art.net/Articles/122/</link>
	<description>&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;</description>
	<pubDate>Sat, 15 Dec 2012 15:12:37 +0000</pubDate>
</item>
<item>
	<title>Andy Wingo: corps: bespoke text codecs</title>
	<guid>http://wingolog.org/2012/12/12/corps-bespoke-text-codecs</guid>
	<link>http://wingolog.org/archives/2012/12/12/corps-bespoke-text-codecs</link>
	<description>&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;</description>
	<pubDate>Wed, 12 Dec 2012 16:57:56 +0000</pubDate>
</item>
<item>
	<title>Andy Wingo: geneva</title>
	<guid>http://wingolog.org/2012/12/05/geneva</guid>
	<link>http://wingolog.org/archives/2012/12/05/geneva</link>
	<description>&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;</description>
	<pubDate>Wed, 05 Dec 2012 23:16:13 +0000</pubDate>
</item>
<item>
	<title>Zeeshan Ali: Boxes video tutorial</title>
	<guid>http://zee-nix.blogspot.com/feeds/8844118172235900197/comments/default</guid>
	<link>http://www.advogato.org/person/zeenix/diary.html?start=316</link>
	<description>&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;</description>
	<pubDate>Fri, 23 Nov 2012 17:05:56 +0000</pubDate>
</item>
<item>
	<title>Felipe Contreras: FelipeC</title>
	<guid>http://felipec.wordpress.com/?p=1377</guid>
	<link>http://felipec.wordpress.com/2012/11/13/git-remote-hg-bzr-2/</link>
	<description>&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;</description>
	<pubDate>Tue, 13 Nov 2012 02:28:17 +0000</pubDate>
</item>
<item>
	<title>Stefan Kost: 11 Nov 2012</title>
	<guid>http://www.advogato.org/person/ensonic/diary.html?start=134</guid>
	<link>http://www.advogato.org/person/ensonic/diary.html?start=134</link>
	<description>&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;</description>
	<pubDate>Sun, 11 Nov 2012 21:07:36 +0000</pubDate>
</item>
<item>
	<title>Bastien Nocera: Jobs change</title>
	<guid>tag:blogger.com,1999:blog-977684764667858073.post-4222597467555828089</guid>
	<link>http://www.hadess.net/2012/11/jobs-change.html</link>
	<description>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.</description>
	<pubDate>Fri, 09 Nov 2012 20:18:28 +0000</pubDate>
	<author>noreply@blogger.com (Bastien Nocera)</author>
</item>
<item>
	<title>Arun Raghavan: PulseConf 2012: Report</title>
	<guid>http://arunraghavan.net/?p=1380</guid>
	<link>http://arunraghavan.net/2012/11/pulseconf-2012-report/</link>
	<description>&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;</description>
	<pubDate>Tue, 06 Nov 2012 11:04:22 +0000</pubDate>
</item>
<item>
	<title>Aaron Bockover: From Rdio to Xamarin</title>
	<guid>http://abock.org/?p=518</guid>
	<link>http://abock.org/2012/10/24/from-rdio-to-xamarin</link>
	<description>&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;</description>
	<pubDate>Wed, 24 Oct 2012 18:40:15 +0000</pubDate>
</item>

</channel>
</rss>
