<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-US" xml:base="http://allievi.sssup.it/techblog/wp-atom.php">
	<title type="text">Technology Temple</title>
	<subtitle type="text">Random ideas and projects by a bunch of engineering students</subtitle>

	<updated>2013-04-15T23:04:23Z</updated>

	<link rel="alternate" type="text/html" href="http://allievi.sssup.it/techblog" />
	<id>http://allievi.sssup.it/techblog/?feed=atom</id>
	

	<generator uri="http://wordpress.org/">WordPress</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/sssuptech" /><feedburner:info uri="sssuptech" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Duetto: A faster and smarter alternative to Emscripten. And more.]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/YOrsiQDSMYM/" />
		<id>http://allievi.sssup.it/techblog/?p=798</id>
		<updated>2013-04-15T23:04:23Z</updated>
		<published>2013-04-15T23:02:56Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Leaningtech" />		<summary type="html"><![CDATA[We have seen a lot of hype on the Web recently after the announcement of Asm.js by Mozilla: a new “extraordinarily optimizable, low-level subset of JavaScript”. The system builds on the work that has been done on Emscripten: a LLVM-based solution which compiles C++ to JavaScript, allowing for an easy port of applications and games [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=798">&lt;p&gt;We have seen a lot of hype on the Web recently after the announcement of Asm.js by Mozilla: a new “extraordinarily optimizable, low-level subset of JavaScript”. The system builds on the work that has been done on Emscripten: a LLVM-based solution which compiles C++ to JavaScript, allowing for an easy port of applications and games to the Web. The excitement for Asm.js stems from the fact that, by using a special virtual machine integrated in Firefox, it can improve the performance of emscripten-generated code and get it even closer to native performance.&lt;/p&gt;
&lt;p&gt;We (Leaning Technologies Ltd) would like to introduce &lt;a href="http://leaningtech.com"&gt;Duetto&lt;/a&gt;, our own LLVM-based solution for programming the Web using C++. And by the Web, we mean both the client and server side of it, but let’s talk about the client side first.&lt;/p&gt;
&lt;p&gt;Emscripten handles C++ code by emulating a full byte-addressable address space. This is definitely a good solution, but suboptimal. Javascript is not based on a byte-addressable address model, but on an object-addressable model: all the accessible memory is contained in some object. But when you think about it, C++ is not that different.&lt;/p&gt;
&lt;p&gt;Our solution integrates with clang and the LLVM toolchain and is able to map C++ object-oriented constructs to native JavaScript objects. It turns out that accessing objects on modern JavaScript engines is faster than accessing arrays. By using this (and a few more) tricks we managed to get the following, preliminary, results on micro benchmarks.&lt;/p&gt;
&lt;div id="attachment_801" class="wp-caption alignnone" style="width: 618px"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2013/04/duetto-benchmark1.png"&gt;&lt;img class="wp-image-801  " alt="For each benchmark the best time in 10 runs has been selected. The V8 and Spidermonky JavaScript shells has been used. The respective commits are b13921fa78ce7d7a94ce74f6198db79e075a2e03 and b9d56a1e0a61. *The fasta benchmark has been modified by removing a memory allocation inside the main loop." src="http://allievi.sssup.it/techblog/wp-content/uploads/2013/04/duetto-benchmark1.png" width="608" height="329" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;For each benchmark the best time in 10 runs has been selected. The V8 and Spidermonky JavaScript shells has been used. The respective commits are b13921fa78ce7d7a94ce74f6198db79e075a2e03 and b9d56a1e0a61. *The fasta benchmark has been modified by removing a memory&lt;/p&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;We managed to do this by realizing that by disallowing some unsafe C++ capabilities (such as type unsafe pointer casting and pointer arithmetics inside structures) it’s actually possible to create more efficient, smaller and faster JavaScript code from C++. Interestingly enough, we discovered that, in most cases, the needed limitations on the language are actually specified as &lt;a href=" http://blog.regehr.org/archives/761"&gt;undefined behaviour&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;So, yes, Duetto does need some minimal porting to bring C++ code to the Web while emscripten makes it mostly free. What you get in exchange for that is faster performance with no need of a special VM and deep integration with the browser. Duetto creates a really seamless C++ programming experience for the Web:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Seamless integration with the browser environment, complete access to the DOM and HTML5 technologies including WebGL. You can even access and use your favourite JavaScript library or existing JavaScript from C++ by declaring the available interfaces in the C++ code using a simple convention.&lt;/li&gt;
&lt;li&gt;Seamless client/server programming, using transparent RPCs in single codebase. The compiler will split the code automatically in the client part (compiled to JavaScript) and server part (compiled to native code).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Duetto backend is already in a very advanced state, and we believe it’s already suitable to bring the first applications to the Web. Especially games, which are our primary target. Unfortunately our front end is not yet as polished as we would like, as we want to improve the error reporting to make the porting experience as smooth as possible.&lt;/p&gt;
&lt;p&gt;We are not yet ready to release Duetto, but we are eager to start opening collaborations, so if you are interested in bringing your C++ application or game to the web, feel free to contact me (&lt;a href="mailto:alessandro@leaningtech.com"&gt;alessandro@leaningtech.com&lt;/a&gt;). We believe that in six months or less from now we will be able to release a robust product, most probably capable of generating even faster code. And we want to release it as open source.&lt;/p&gt;
&lt;p&gt;For more information please visit our site:&lt;a href="http://www.leaningtech.com"&gt; http://www.leaningtech.com&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=YOrsiQDSMYM:x0mID_b1bgg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=YOrsiQDSMYM:x0mID_b1bgg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=YOrsiQDSMYM:x0mID_b1bgg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=YOrsiQDSMYM:x0mID_b1bgg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=YOrsiQDSMYM:x0mID_b1bgg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=YOrsiQDSMYM:x0mID_b1bgg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/YOrsiQDSMYM" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=798#comments" thr:count="11" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=798" thr:count="11" />
		<thr:total>11</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=798</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[A tale of hidden symbols, weakness and gold]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/4JH6A2eA7Eg/" />
		<id>http://allievi.sssup.it/techblog/?p=791</id>
		<updated>2013-03-08T00:04:49Z</updated>
		<published>2013-03-08T00:04:49Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Coding tricks" />		<summary type="html"><![CDATA[A few days ago I was profiling the startup time of the clang compiler. The callgrind report highlighted that a relatively high amount of time was being spent in the _dl_lookop_symbol_x. A quick gdb inspection of the call stack quickly pointed out that the dynamic linker was spending the time doing dynamic relocations. Tons of [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=791">&lt;p&gt;A few days ago I was profiling the startup time of the clang compiler. The callgrind report highlighted that a relatively high amount of time was being spent in the &lt;em&gt;_dl_lookop_symbol_x&lt;/em&gt;. A quick gdb inspection of the call stack quickly pointed out that the dynamic linker was spending the time doing dynamic relocations. Tons of them.&lt;/p&gt;
&lt;p&gt;Using &lt;code&gt;objdump -R clang&lt;/code&gt; I found out that a whopping &lt;strong&gt;42%&lt;/strong&gt; of them actually contained the word “clang” in the mangled symbol names. Demangling the names made it clear that they were mostly definitions of the C++ virtual tables for clang internal classes.&lt;/p&gt;
&lt;p&gt;Basically 42% of the relocations happening at run time were actually looking for symbols which are obviously defined inside the clang executable itself. So what’s happening here?&lt;/p&gt;
&lt;p&gt;Turns out the problem is a poor interaction between the traditional linker (&lt;em&gt;ld&lt;/em&gt;, from the binutils package) and C++‘s ODR rule.&lt;/p&gt;
&lt;p&gt;ODR stands for &lt;em&gt;One Definition Rule&lt;/em&gt; and says that any entity in C++ code must be defined only once. This is obviously trivial for methods, since if they are defined twice, even in different translation units, there will be an error at link time. There are, though, a few things that are implicity defined by the compiler, for example the virtual tables, which are defined whenever a class using virtual methods is declared. (Here I’m speaking informally, I suspect the terminology is not 100% correct) Since the vtable is potentially defined in more than a translation unit, the symbols for the vtable are flagged as &lt;strong&gt;weak&lt;/strong&gt;. Weak symbols will not conflict with each other and they will be all discarded but one (any one is fine). The surviving one will be used by the end product of the linker.&lt;/p&gt;
&lt;p&gt;Unfortunately, the compiler does not know if the compiled object file will be used as part of a dynamic library or as part of a main executable. This means that it has to treat the vtable symbols like any library method, since (if the target is a dynamic library) potentially such symbols may be overridden by another definition in a library or in the main executable. This has to happen since the ODR rule must also apply across the library borders for proper support of a few things, especially exception handling.&lt;/p&gt;
&lt;p&gt;So at compile time there is no way around using dynamic relocation on the vtable symbols. A possible workaroud would be to compile all the code with the &lt;code&gt;-fvisibility=hidden&lt;/code&gt; flag. Unfortunately this is actually wrong since it may break the ODR rule!&lt;/p&gt;
&lt;p&gt;At link time the linker has the chance of eliminating the dynamic relocation, since it does know if the target is a main executable and symbols defined in an executable cannot be overridden by anything (not even by LD_PRELOADed libraries). Unfortunately the traditional &lt;em&gt;ld&lt;/em&gt; linker does not apply this optimization.&lt;/p&gt;
&lt;p&gt;The new &lt;em&gt;gold&lt;/em&gt; linker, originally developed at Google, does tough! It is able to completely eradicate the dynamic relocations to internally defined symbols, effectively reducing the load time.&lt;/p&gt;
&lt;p&gt;Moral of the tale: use the gold linker. It should work in most cases (I think kernel code is a notable exception) and generate faster executables while consuming less memory and cpu time during linking.&lt;/p&gt;
&lt;p&gt;And please, dear debian/ubuntu maintainers, link &lt;em&gt;clang &lt;/em&gt;using &lt;em&gt;gold&lt;/em&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=4JH6A2eA7Eg:8ADupKJ6n2E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=4JH6A2eA7Eg:8ADupKJ6n2E:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=4JH6A2eA7Eg:8ADupKJ6n2E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=4JH6A2eA7Eg:8ADupKJ6n2E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=4JH6A2eA7Eg:8ADupKJ6n2E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=4JH6A2eA7Eg:8ADupKJ6n2E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/4JH6A2eA7Eg" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=791#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=791" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=791</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Linux support for Asus Xonar U1 USB audio device]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/c-pkceZCj_E/" />
		<id>http://allievi.sssup.it/techblog/?p=786</id>
		<updated>2013-01-15T16:10:17Z</updated>
		<published>2013-01-15T16:05:57Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Uncategorized" />		<summary type="html"><![CDATA[I got as a Christmas gift an external USB audio device: an Asus Xonar U1. It’s a nice device with a decent audio quality. The audio itself, both in and out works perfectly with the standard snd-usb-audio kernel module. Unfortunately the audio controls on the device are not standard, so I developed a simple daemon [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=786">&lt;p&gt;I got as a Christmas gift an external USB audio device: an Asus Xonar U1. It’s a nice device with a decent audio quality. The audio itself, both in and out works perfectly with the standard snd-usb-audio kernel module. Unfortunately the audio controls on the device are not standard, so I developed a simple daemon and accompanying udev and pm-utils script to get the device to work. I’ve published everything under the GPL hoping that they might be useful for someone else. Feel free to clone and fork my repository on github&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/alexp-sssup/asus-xonar-u1-utils"&gt;https://github.com/alexp-sssup/asus-xonar-u1-utils&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://flattr.com/thing/1101603/Linux-support-for-Asus-Xonar-U1-USB-audio-device" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=c-pkceZCj_E:EgdF7JpkJ6U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=c-pkceZCj_E:EgdF7JpkJ6U:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=c-pkceZCj_E:EgdF7JpkJ6U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=c-pkceZCj_E:EgdF7JpkJ6U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=c-pkceZCj_E:EgdF7JpkJ6U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=c-pkceZCj_E:EgdF7JpkJ6U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/c-pkceZCj_E" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=786#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=786" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=786</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.7.0 released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/WtedqwrwYnQ/" />
		<id>http://allievi.sssup.it/techblog/?p=780</id>
		<updated>2012-10-28T18:43:39Z</updated>
		<published>2012-10-28T16:22:10Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" />		<summary type="html"><![CDATA[Lightspark 0.7.0 has been released, including several months of improvements and bug fixes. Version 0.7.0: * Support LZMA compressed SWFs [Requires liblzma] * Improved BitmapData support * Improved ActionScript compatibility * Improved virtual machine performance and memory consumption * Improved XML support * Experimental support for bytecode optimization at runtime * Improved ExternalInterface (browser integration) [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=780">&lt;p&gt;Lightspark 0.7.0 has been released, including several months of improvements and bug fixes.&lt;/p&gt;
&lt;p&gt;Version 0.7.0:&lt;/p&gt;
&lt;p&gt;* Support LZMA compressed SWFs [Requires liblzma]&lt;br /&gt;
* Improved BitmapData support&lt;br /&gt;
* Improved ActionScript compatibility&lt;br /&gt;
* Improved virtual machine performance and memory consumption&lt;br /&gt;
* Improved XML support&lt;br /&gt;
* Experimental support for bytecode optimization at runtime&lt;br /&gt;
* Improved ExternalInterface (browser integration) support&lt;br /&gt;
* Improved performance of JPEG loading&lt;br /&gt;
* Support for XMLSocket&lt;br /&gt;
* Completely redesigned and improved masking support&lt;/p&gt;
&lt;p&gt;You can grab a copy of the sources from &lt;a href="https://launchpad.net/lightspark/+download"&gt;launchpad&lt;/a&gt; as usual.&lt;/p&gt;
&lt;p&gt;I would also like to ask for information on a specific problem the project is facing. We are encountering more sites that tries to load library code in the form of SWZ files, which seems to be undocumented (probably obfuscated/encrypted) flash files. Any information on how to parse/load them is appreciated.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=WtedqwrwYnQ:Mu_krmlUB7Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=WtedqwrwYnQ:Mu_krmlUB7Y:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=WtedqwrwYnQ:Mu_krmlUB7Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=WtedqwrwYnQ:Mu_krmlUB7Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=WtedqwrwYnQ:Mu_krmlUB7Y:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=WtedqwrwYnQ:Mu_krmlUB7Y:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/WtedqwrwYnQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=780#comments" thr:count="18" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=780" thr:count="18" />
		<thr:total>18</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=780</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.6.0.1 released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/6-FybR2iLoo/" />
		<id>http://allievi.sssup.it/techblog/?p=773</id>
		<updated>2012-06-11T09:29:44Z</updated>
		<published>2012-06-11T09:26:15Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Uncategorized" />		<summary type="html"><![CDATA[I’m very happy to annouce a new major release for Lightspark, the open source flash player implementation. This release includes quite a lot of fixes, both internal and visible to users. The most important ones from a user point of view are probably the improved support for PulseAudio flat volumes, which makes it impossible for [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=773">&lt;p&gt;I’m very happy to annouce a new major release for Lightspark, the open source flash player implementation. This release includes quite a lot of fixes, both internal and visible to users. The most important ones from a user point of view are probably the improved support for PulseAudio flat volumes, which makes it impossible for lightspark to manipulate the system volume and the newly added support for the BBC video player. To use BBC site you might need to use AdBlock, which is generally recommended since more often than not flash advertisements are not supported by Lightspark and causes failures in otherwise supported sites.&lt;/p&gt;
&lt;p&gt;From the ChangeLog:&lt;br /&gt;
* Enable RTMP support by default, requires librtmp&lt;br /&gt;
* Fixed support for IEventDispatcher implementation pattern&lt;br /&gt;
* Improved serialization robustness&lt;br /&gt;
* Improved matrix handling&lt;br /&gt;
* Implement string and namespace pooling to reduce memory consumption&lt;br /&gt;
* Proper support for private namespaces&lt;br /&gt;
* Improved support for fonts&lt;br /&gt;
* Support LLVM 3.1&lt;br /&gt;
* Fix full volume issue when PulseAudio flat volumes are enabled&lt;br /&gt;
* Initial support for AIR desktop applications&lt;br /&gt;
* Support for www.bbc.co.uk video player&lt;/p&gt;
&lt;p&gt;Source tarball is, as usual available from &lt;a href="https://launchpad.net/lightspark"&gt;Launchpad&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://flattr.com/thing/714778/Lightspark-0-6-0-1-released" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6-FybR2iLoo:AuHUJFWk628:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6-FybR2iLoo:AuHUJFWk628:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6-FybR2iLoo:AuHUJFWk628:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=6-FybR2iLoo:AuHUJFWk628:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6-FybR2iLoo:AuHUJFWk628:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=6-FybR2iLoo:AuHUJFWk628:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/6-FybR2iLoo" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=773#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=773" thr:count="5" />
		<thr:total>5</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=773</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 100% volume issue is now fixed]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/2OOsG3gkR5s/" />
		<id>http://allievi.sssup.it/techblog/?p=768</id>
		<updated>2012-05-27T16:26:12Z</updated>
		<published>2012-05-27T16:22:07Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="pulseaudio" />		<summary type="html"><![CDATA[For some time I’ve received a few reports about lightspark raising the system volume to 100% (and “killing ears”) whenever a YouTube clip was started. It took some time for me to figure out what was going on, since I was not able to reproduce the issue on my system and of course the code [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=768">&lt;p&gt;For some time I’ve received a few reports about lightspark raising the system volume to 100% (and “killing ears”) whenever a YouTube clip was started. It took some time for me to figure out what was going on, since I was not able to reproduce the issue on my system and of course the code was not willingly touching the system volume.&lt;/p&gt;
&lt;p&gt;It turns out that the issue was caused by the recently introduced “flat-volume” support in PulseAudio. When flat volume is enabled the volume of a stream is absolute and not relative to the system volume. Since the default volume in flash is 100% by spec then Lightspark was unwillingly setting the system volume to an extremely high value, and I’m really sorry for that.&lt;/p&gt;
&lt;p&gt;I’ve just committed a fix in git master that should fix this problem for good by properly virtualizing the volume seen by flash and scaling it by the system volume. I hope this helps people with flat volume enabled.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://flattr.com/thing/698862/Lightspark-100-volume-issue-is-now-fixed" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=2OOsG3gkR5s:ArJHp8ELC2E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=2OOsG3gkR5s:ArJHp8ELC2E:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=2OOsG3gkR5s:ArJHp8ELC2E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=2OOsG3gkR5s:ArJHp8ELC2E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=2OOsG3gkR5s:ArJHp8ELC2E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=2OOsG3gkR5s:ArJHp8ELC2E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/2OOsG3gkR5s" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=768#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=768" thr:count="4" />
		<thr:total>4</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=768</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.5.7 released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/iCrfe8v7RXg/" />
		<id>http://allievi.sssup.it/techblog/?p=763</id>
		<updated>2012-05-16T11:19:13Z</updated>
		<published>2012-05-16T11:15:54Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="release" />		<summary type="html"><![CDATA[A new version of Lightspark has been released yesterday. You can give it a try by getting the source code from launchpad. Ubuntu packages should be available shortly from our PPA Beside a lot of small improvements this new release improves the graphics capabilities, with a focus on Flash features used by games. Here is [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=763">&lt;p&gt;A new version of Lightspark has been released yesterday. You can give it a try by getting the source code from &lt;a href="https://launchpad.net/lightspark/+download"&gt;launchpad&lt;/a&gt;. Ubuntu packages should be available shortly from our &lt;a href="https://launchpad.net/~sparkers/+archive/ppa"&gt;PPA&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Beside a lot of small improvements this new release improves the graphics capabilities, with a focus on Flash features used by games.&lt;/p&gt;
&lt;p&gt;Here is the changelog:&lt;/p&gt;
&lt;p&gt;* Fixed a few memory leaks&lt;br /&gt;
* Improved support for BitmapData::draw&lt;br /&gt;
* Support for BitmapData::copyPixels&lt;br /&gt;
* Support for soft masking&lt;br /&gt;
* Support for memory usage profiling (massif compatible)&lt;/p&gt;
&lt;p&gt;Moreover, there has been some work on implementing fully accelerated Stage3D support, it’s still in early design phase... but stay tuned.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://flattr.com/thing/682087/Lightspark-0-5-7-released" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=iCrfe8v7RXg:O_eEPgimZLE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=iCrfe8v7RXg:O_eEPgimZLE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=iCrfe8v7RXg:O_eEPgimZLE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=iCrfe8v7RXg:O_eEPgimZLE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=iCrfe8v7RXg:O_eEPgimZLE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=iCrfe8v7RXg:O_eEPgimZLE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/iCrfe8v7RXg" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=763#comments" thr:count="10" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=763" thr:count="10" />
		<thr:total>10</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=763</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.5.6 released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/grAAgODMJbk/" />
		<id>http://allievi.sssup.it/techblog/?p=758</id>
		<updated>2012-04-12T17:49:02Z</updated>
		<published>2012-04-12T17:46:30Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" />		<summary type="html"><![CDATA[After a few months of great progresses under the stewardship of Jani Monoses Lightspark, the modern and open source flash player implementation is now again being maintained by me. And I’m very proud to announce the release of lightspark 0.5.6, that brings quite a few new features and a usual load of stability fixes. Source [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=758">&lt;p&gt;After a few months of great progresses under the stewardship of Jani Monoses Lightspark, the modern and open source flash player implementation is now again being maintained by me. And I’m very proud to announce the release of lightspark 0.5.6, that brings quite a few new features and a usual load of stability fixes. Source code is available of course from &lt;a href="https://launchpad.net/lightspark"&gt;Launchpad&lt;/a&gt;. Packages should be shortly available for various distros. I will also try to get an updated Windows build in the next few days.&lt;/p&gt;
&lt;p&gt;Here are the new features, from both 0.5.5 and 0.5.6, since I was too lazy to publish the previous release. My bad, it will not happen again.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix YouTube support for several videos&lt;/li&gt;
&lt;li&gt;Support for custom serialization/deserialization&lt;/li&gt;
&lt;li&gt;Support RPC (NetConnection::call)&lt;/li&gt;
&lt;li&gt;Support for PNG images&lt;/li&gt;
&lt;li&gt;Experimental support for Google Street View&lt;/li&gt;
&lt;li&gt;Support for Firefox 10&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As you can see experimental support for Google Street View is now available (kudos to Antti Ajanki for this). Moreover, the RPC and serialization support has been written in an ongoing effort by me to support FarmVille and similar highly interactive and complex flash games. We are definitely expanding the scope of what is considered supported, but there are still some unfinished corners in YouTube support, and many other video players do not work yet.&lt;/p&gt;
&lt;p&gt;This is way I would like to encourage young hackers, especially students, that are interested in contributing to a complex project like lightspark to choose their favorite site using flash to show videos and drop by the #lightspark IRC channel on Freenode. Me and the other lightspark developers will provide the guidance you may need in the first steps. Most often it just a matter of implementing or improving a few Flash APIs to see a player start working. And you favorite site (and your name) may be posted here in the next Lightspark release!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://flattr.com/thing/625867/Lightspark-0-5-6-released" target="_blank"&gt;&lt;br /&gt;
&lt;img title="Flattr this" src="http://api.flattr.com/button/flattr-badge-large.png" border="0" alt="Flattr this" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=grAAgODMJbk:Io4Bgw7DjM8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=grAAgODMJbk:Io4Bgw7DjM8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=grAAgODMJbk:Io4Bgw7DjM8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=grAAgODMJbk:Io4Bgw7DjM8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=grAAgODMJbk:Io4Bgw7DjM8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=grAAgODMJbk:Io4Bgw7DjM8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/grAAgODMJbk" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=758#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=758" thr:count="4" />
		<thr:total>4</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=758</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Gnome shell extension: GTG in the calendar panel]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/jAmK4E7Vor0/gnome-shell-extension-gtg-in-calendar.html" />
		<id>http://allievi.sssup.it/techblog/?guid=14caa84a90ecaefe0848be23851a5184</id>
		<updated>2011-12-24T16:34:37Z</updated>
		<published>2011-12-24T16:34:00Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="gtg" /><category scheme="http://allievi.sssup.it/techblog" term="planetgnome" />		<summary type="html"><![CDATA[Hello Gnome Shell lovers,from today, you can keep an eye on your tasks with style.Here's the pic:Here you can install it, here you can get the source code and report bugs.It works &#160;only with GTG 0.3 and above, that will be released in March. You c...]]></summary>
		<content type="html" xml:base="http://blog.lucainvernizzi.net/2011/12/gnome-shell-extension-gtg-in-calendar.html">Hello Gnome Shell lovers,&lt;br /&gt;from today, you can keep an eye on your tasks with style.&lt;br /&gt;Here's the pic:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-DCHv_R9JZpQ/TvX8CeDHHKI/AAAAAAAAT5M/k-HyTVkxOoM/s1600/gtg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="210" src="http://3.bp.blogspot.com/-DCHv_R9JZpQ/TvX8CeDHHKI/AAAAAAAAT5M/k-HyTVkxOoM/s320/gtg.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Here you can &lt;a href="https://extensions.gnome.org/extension/108/gtg-tasks-in-calendar-panel/"&gt;install&lt;/a&gt; it, here you can get the &lt;a href="https://github.com/invernizzi/Gnome-shell-GTG-extension"&gt;source code&lt;/a&gt; and report &lt;a href="https://github.com/invernizzi/Gnome-shell-GTG-extension"&gt;bugs&lt;/a&gt;.&lt;br /&gt;It works &amp;nbsp;only with GTG 0.3 and above, that will be released in March. You can also use Trunk, which is quite stable (all you have to do is&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt; bzr branch lp:gtg &amp;amp;&amp;amp; cd gtg &amp;amp;&amp;amp; ./gtg&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;One final thing: this is the first time I develop a gnome-shell extension, and I have to say I was impressed by how nice and easy is to code. Kudos Shell people!&lt;br /&gt;&lt;br /&gt;Happy holidays!&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=jAmK4E7Vor0:ETVSAXbDClY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=jAmK4E7Vor0:ETVSAXbDClY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=jAmK4E7Vor0:ETVSAXbDClY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=jAmK4E7Vor0:ETVSAXbDClY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=jAmK4E7Vor0:ETVSAXbDClY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=jAmK4E7Vor0:ETVSAXbDClY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/jAmK4E7Vor0" height="1" width="1"/&gt;</content>
<link href="" rel="enclosure" length="" type="" />
<source>
	<title>0x1BADFEED</title>
	<link rel="alternate" type="text/html" href="http://blog.lucainvernizzi.net/search/label/planetgnome" />
	<link rel="self" href="http://blog.lucainvernizzi.net/feeds/posts/default/-/planetgnome" />
	<id>tag:blogger.com,1999:blog-3551230072859397681</id>
	<updated>2012-07-25T20:59:06.166-07:00</updated>
</source>
		<link rel="replies" type="text/html" href="http://blog.lucainvernizzi.net/2011/12/gnome-shell-extension-gtg-in-calendar.html#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.lucainvernizzi.net/feeds/5166788739761683042/comments/default" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.lucainvernizzi.net/2011/12/gnome-shell-extension-gtg-in-calendar.html</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.5.0 — Bacchus released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/MUo17vmw9R4/" />
		<id>http://allievi.sssup.it/techblog/?p=749</id>
		<updated>2011-07-26T10:42:00Z</updated>
		<published>2011-07-26T10:40:52Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="release" />		<summary type="html"><![CDATA[After the last round of bug fixing and improvements over the release candidate I’m happy to announce that version 0.5.0 of Lightspark, a FOSS flash player implementation aimed at supporting newer flash files (SWF 9+), is finally released. Beside stability improvements there is no new great new feature since the last released candidate (see here [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=749">&lt;p&gt;After the last round of bug fixing and improvements over the release candidate I’m happy to announce that version 0.5.0 of Lightspark, a FOSS flash player implementation aimed at supporting newer flash files (SWF 9+), is finally released.&lt;/p&gt;
&lt;p&gt;Beside stability improvements there is no new great new feature since the last released candidate (see &lt;a title="Lightspark 0.5.0 RC1 is out!" href="http://allievi.sssup.it/techblog/?p=742"&gt;here&lt;/a&gt; for more info). You can grab your copy of the sources on &lt;a href="http://launchpad.net/lightspark"&gt;Launchpad&lt;/a&gt; as usual. Packages for both Ubuntu natty and oneiric are available from our &lt;a href="http://launchpad.net/~sparkers/+archive/ppa"&gt;PPA&lt;/a&gt;. Packages for your favorite distro will be probably available in a short time. I’d also like to say “thank you” to all downstream packagers for the critical work they have always done.&lt;/p&gt;
&lt;p&gt;As always bug reporting and testing is very appreciated. If you need any help you can drop into the #lightspark channel on Freenode.&lt;br /&gt;
&lt;a href="http://flattr.com/thing/353180/Lightspark-0-5-0-released" target="_blank"&gt;&lt;br /&gt;
&lt;img title="Flattr this" src="http://api.flattr.com/button/flattr-badge-large.png" border="0" alt="Flattr this" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=MUo17vmw9R4:UTfbRApJ7nA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=MUo17vmw9R4:UTfbRApJ7nA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=MUo17vmw9R4:UTfbRApJ7nA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=MUo17vmw9R4:UTfbRApJ7nA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=MUo17vmw9R4:UTfbRApJ7nA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=MUo17vmw9R4:UTfbRApJ7nA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/MUo17vmw9R4" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=749#comments" thr:count="8" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=749" thr:count="8" />
		<thr:total>8</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=749</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.5.0 RC1 is out!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/cPewaetsbrc/" />
		<id>http://allievi.sssup.it/techblog/?p=742</id>
		<updated>2011-07-05T19:50:59Z</updated>
		<published>2011-07-05T16:58:37Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="release" />		<summary type="html"><![CDATA[This is a great day for lightspark: the modern, open source, flash player implementation. I’m very happy to announce that the first release candidate for the 0.5.0 release (codenamed Bacchus) has been just released. There are many new features in this release (see below for a detailed changelog). For the end user the most visible [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=742">&lt;p&gt;This is a great day for lightspark: the modern, open source, flash player implementation. I’m very happy to announce that the first release candidate for the 0.5.0 release (codenamed Bacchus) has been just released. There are many new features in this release (see below for a detailed changelog). For the end user the most visible changes are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For YouTube: Play/Pause/Enlarge buttons are now working correctly&lt;/li&gt;
&lt;li&gt;Initial support for Grooveshark (currently the first song of the playlist works)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And under the hood:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improved XML support&lt;/li&gt;
&lt;li&gt;Improved FFMpeg based media playback&lt;/li&gt;
&lt;li&gt;Improved robustness&lt;/li&gt;
&lt;li&gt;Improved ExternalInterface (browser communication)&lt;/li&gt;
&lt;li&gt;Improved masking support&lt;/li&gt;
&lt;li&gt;Improved alpha support&lt;/li&gt;
&lt;li&gt;Improved shader performance&lt;/li&gt;
&lt;li&gt;Support capture phase of the event flow&lt;/li&gt;
&lt;li&gt;Support SimpleButton&lt;/li&gt;
&lt;li&gt;Support audio volume&lt;/li&gt;
&lt;li&gt;Support for introspection of ActionScript objects (describeType)&lt;/li&gt;
&lt;li&gt;Support for AMF3 serialization&lt;/li&gt;
&lt;li&gt;Support plugin resize&lt;/li&gt;
&lt;li&gt;Support for dynamic text&lt;/li&gt;
&lt;li&gt;Removed SDL, FontConfig and FTGL dependency from the core&lt;/li&gt;
&lt;li&gt;Added SDL based audio backend&lt;/li&gt;
&lt;li&gt;More GLES compliant&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source tarball is, as usual, available from &lt;a href="http://launchpad.net/lightspark/+download"&gt;Launchpad&lt;/a&gt;. Packages should be available for the major distributions in the next few days.&lt;/p&gt;
&lt;p&gt;Please test this release candidate and report any bug on the &lt;a href="http://bugs.launchpad.net/lightspark"&gt;Launchpad bug tracker&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Just a couple of warnings:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;there is an issue with FFMpeg 0.7 that causes a crash. We are aware of the issue and we are currently discussing a fix that should be available for the next release candidate. In the mean time please use FFMpeg 0.6.x&lt;/li&gt;
&lt;li&gt;The newly added support for dynamic text uses pango as the backend. Unfortunately pango is currently not thread safe. Lightspark itself correctly serialize the pango calls, but there is no sane way to synchronize with the calls made by the browser thread. This means that the only safe way to use lightspark is to employ out of process plugins. Luckily OOPP is now used by default on the major browser.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="http://flattr.com/thing/336603/Lightspark-0-5-0-RC1-released" target="_blank"&gt;&lt;br /&gt;
&lt;img title="Flattr this" src="http://api.flattr.com/button/flattr-badge-large.png" border="0" alt="Flattr this" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=cPewaetsbrc:1ZLaghjKmLk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=cPewaetsbrc:1ZLaghjKmLk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=cPewaetsbrc:1ZLaghjKmLk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=cPewaetsbrc:1ZLaghjKmLk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=cPewaetsbrc:1ZLaghjKmLk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=cPewaetsbrc:1ZLaghjKmLk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/cPewaetsbrc" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=742#comments" thr:count="11" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=742" thr:count="11" />
		<thr:total>11</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=742</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.8 released!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/-tBYL3V4cgQ/" />
		<id>http://allievi.sssup.it/techblog/?p=730</id>
		<updated>2011-05-27T12:07:13Z</updated>
		<published>2011-05-27T02:13:29Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="release" /><category scheme="http://allievi.sssup.it/techblog" term="Vimeo" /><category scheme="http://allievi.sssup.it/techblog" term="youtube" />		<summary type="html"><![CDATA[Just a quick note to announce that Lightspark 0.4.8 has been released! The main difference from the RC1 is that a nasty memory allocation bug has been fixed, greatly reducing the amount of memory used when playing video. This release of the free, high performance, flash player implementation officially supports YouTube (as usual) and Vimeo [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=730">&lt;p&gt;Just a quick note to announce that&lt;strong&gt; Lightspark 0.4.8&lt;/strong&gt; has been released!  The main difference from the RC1 is that a nasty memory allocation bug has been fixed, greatly reducing the amount of memory used when playing video.  This release of the free, high performance, flash player implementation officially supports &lt;strong&gt;YouTube&lt;/strong&gt; (as usual) and &lt;strong&gt;Vimeo&lt;/strong&gt; (new entry!)  You can find the code on &lt;a href="http://launchpad.net/lightspark"&gt;Launchpad&lt;/a&gt;. Testing and bug reporting is extremely welcome. You can also usually find (friendly) support on the #lightspark IRC channel on FreeNode.  As a last note, a regression of the NVIDIA proprietary driver forced me to start using nouveau and, although I was fairly skeptic, I’m pretty happy so far. This of course means lightspark will be finally developed and tested throughly on a completely free stack!&lt;/p&gt;
&lt;p&gt;Update: I forgot to cherry pick one commit before the release and so 0.4.8 don’t actually build. 0.4.8.1 fixes the issue. Sorry for the silly mistake.&lt;a href="http://flattr.com/thing/290038/Lightspark-0-4-8-released" target="_blank"&gt;&lt;br /&gt;
&lt;img title="Flattr this" src="http://api.flattr.com/button/flattr-badge-large.png" border="0" alt="Flattr this" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=-tBYL3V4cgQ:k1Yh8-r_bBk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=-tBYL3V4cgQ:k1Yh8-r_bBk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=-tBYL3V4cgQ:k1Yh8-r_bBk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=-tBYL3V4cgQ:k1Yh8-r_bBk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=-tBYL3V4cgQ:k1Yh8-r_bBk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=-tBYL3V4cgQ:k1Yh8-r_bBk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/-tBYL3V4cgQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=730#comments" thr:count="12" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=730" thr:count="12" />
		<thr:total>12</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=730</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.8 RC1 is out!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/XASq1cqwFuw/" />
		<id>http://allievi.sssup.it/techblog/?p=725</id>
		<updated>2011-05-22T19:26:33Z</updated>
		<published>2011-05-22T19:26:10Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="Vimeo" /><category scheme="http://allievi.sssup.it/techblog" term="youtube" />		<summary type="html"><![CDATA[A new release of lightspark, the free, high performance, flash player has been released! This is the first candidate for the 0.4.8 release. Beside the usual ton of fixes and improvements this release includes an initial support for Vimeo. As you can see form the screenshot the support is still experimental and the video is [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=725">&lt;p&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2011/05/vimeo-intial-support.png"&gt;&lt;img class="alignright size-medium wp-image-726" title="vimeo-intial-support" src="http://allievi.sssup.it/techblog/wp-content/uploads/2011/05/vimeo-intial-support-300x217.png" alt="" width="300" height="217" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A new release of lightspark, the free, high performance, flash player has been released! This is the first candidate for the 0.4.8 release. Beside the usual ton of fixes and improvements this release includes an initial support for Vimeo.&lt;/p&gt;
&lt;p&gt;As you can see form the screenshot the support is still experimental and the video is way smaller than it should be.&lt;/p&gt;
&lt;p&gt;Nevertheless this is a really important milestone for our project and proves what I’ve been saying for a long time: Lightspark is _not_ a YouTube specific hack, we are working hard to improve the amount of supported flash features and over time expect more and more sites to work.&lt;/p&gt;
&lt;p&gt;Please note that this is a release candidate as many changes has been done, so it’s definitely possible that some issues will come up. Please report bugs on &lt;a href="http://launchpad.net/lightspark"&gt;Launchpad&lt;/a&gt; as usual. You can find the source for this release on Launchpad as well.&lt;br /&gt;
&lt;a href="http://flattr.com/thing/284120/Lightspark-0-4-8-RC1-released" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=XASq1cqwFuw:kWF-JgLl4XU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=XASq1cqwFuw:kWF-JgLl4XU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=XASq1cqwFuw:kWF-JgLl4XU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=XASq1cqwFuw:kWF-JgLl4XU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=XASq1cqwFuw:kWF-JgLl4XU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=XASq1cqwFuw:kWF-JgLl4XU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/XASq1cqwFuw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=725#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=725" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=725</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.7.1 released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/NrNfr0Pl_R4/" />
		<id>http://allievi.sssup.it/techblog/?p=720</id>
		<updated>2011-05-06T21:56:11Z</updated>
		<published>2011-05-06T20:53:06Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="Hulu" /><category scheme="http://allievi.sssup.it/techblog" term="release" /><category scheme="http://allievi.sssup.it/techblog" term="Vimeo" /><category scheme="http://allievi.sssup.it/techblog" term="youtube" />		<summary type="html"><![CDATA[Hi everyone! After quite some time I’m proud to announce the release of a brand new version of the Lightspark open source flash player. The most visible feature for users is that YouTube support is now restored. Under the hood also the code base has been cleaned up a bit. You can get the updated [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=720">&lt;p&gt;Hi everyone! After quite some time I’m proud to announce the release of a brand new version of the Lightspark open source flash player. The most visible feature for users is that YouTube support is now restored. Under the hood also the code base has been cleaned up a bit. You can get the updated tarball on &lt;a href="http://launchpad.net/lightspark"&gt;Launchpad&lt;/a&gt; as usual&lt;/p&gt;
&lt;p&gt;The work to support &lt;a href="http://hulu.com"&gt;Hulu.com&lt;/a&gt; is currently on hold as rtmpdump/librtmp seems to be no more able to access Hulu’s contents and we’re waiting for an upstream fix. In the mean time I’m experimenting a bit to add &lt;a href="http://vimeo.com"&gt;Vimeo.com&lt;/a&gt; support and the results are fairly promising &lt;img src='http://allievi.sssup.it/techblog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /&gt;&lt;br /&gt;
&lt;a href="http://flattr.com/thing/185068/Lightspark-0-4-7-1-released" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NrNfr0Pl_R4:epjxk8gk_DY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NrNfr0Pl_R4:epjxk8gk_DY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NrNfr0Pl_R4:epjxk8gk_DY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=NrNfr0Pl_R4:epjxk8gk_DY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NrNfr0Pl_R4:epjxk8gk_DY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=NrNfr0Pl_R4:epjxk8gk_DY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/NrNfr0Pl_R4" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=720#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=720" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=720</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting things GNOME! is participating in GNOME Outreach Program for Women]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/6cuGRoKiLEc/" />
		<id>http://allievi.sssup.it/techblog/?p=716</id>
		<updated>2011-04-05T18:12:37Z</updated>
		<published>2011-04-05T18:12:37Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" /><category scheme="http://allievi.sssup.it/techblog" term="Google Summer of Code" />		<summary type="html"><![CDATA[If you are eligible and you are looking for a great summer internship, apply! The program is here, projects ideas and motivation to participate are in my previous post. Deadline is April 8 (I know, I’m terribly late).]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=716">&lt;p&gt;If you are eligible and you are looking for a great summer internship, apply!&lt;/p&gt;
&lt;p&gt;The program is &lt;a href="https://live.gnome.org/GnomeWomen/OutreachProgram2011"&gt;here&lt;/a&gt;, projects ideas and motivation to participate are in my &lt;a href="http://allievi.sssup.it/techblog/?p=711"&gt;previous&lt;/a&gt; post.&lt;/p&gt;
&lt;p&gt;Deadline is &lt;strong&gt;April 8 &lt;/strong&gt;(I know, I’m terribly late).&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6cuGRoKiLEc:x63vxPVuwBE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6cuGRoKiLEc:x63vxPVuwBE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6cuGRoKiLEc:x63vxPVuwBE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=6cuGRoKiLEc:x63vxPVuwBE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6cuGRoKiLEc:x63vxPVuwBE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=6cuGRoKiLEc:x63vxPVuwBE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/6cuGRoKiLEc" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=716#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=716" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=716</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Get paid to FLOSS! Apply for the Google Summer of Code with GNOME and GTG!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/yvwlHxl8SUs/" />
		<id>http://allievi.sssup.it/techblog/?p=711</id>
		<updated>2011-04-05T18:02:30Z</updated>
		<published>2011-04-03T22:58:27Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" /><category scheme="http://allievi.sssup.it/techblog" term="Google Summer of Code" />		<summary type="html"><![CDATA[Hello fellow students! If you like to code and you have no plans for this summer, consider applying for the Google Summer of Code with GNOME! I did that last year, and it is a fantastic experience for lots of reasons. Here’s a few: You work from wherever you like, whenever you like (as long [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=711">&lt;p&gt;Hello fellow students!&lt;/p&gt;
&lt;p&gt;If you like to code and you have no plans for this summer, consider applying for the &lt;a href="http://www.google-melange.com/gsoc/homepage/google/gsoc2011"&gt;Google Summer of Code &lt;/a&gt;with GNOME!&lt;/p&gt;
&lt;p&gt;I did that last year, and it is a fantastic experience for lots of reasons. Here’s a few:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You work from wherever you like, whenever you like (as long as you Get Things &lt;del&gt;GNOME&lt;/del&gt; Done, it’s great)&lt;/li&gt;
&lt;li&gt;You get &lt;strong&gt;paid to contribute&lt;/strong&gt; in a &lt;strong&gt;FLOSS&lt;/strong&gt; project! In three months, you have time to make an important contribution too!&lt;/li&gt;
&lt;li&gt;It &lt;strong&gt;looks great on you CV&lt;/strong&gt;, and your works gets great visibility&lt;/li&gt;
&lt;li&gt;You get Google’s swag&lt;/li&gt;
&lt;li&gt;You get to go to &lt;strong&gt;GUADEC&lt;/strong&gt; (the Gnome conference), with is an awesome experience itself!&lt;/li&gt;
&lt;li&gt;You can fully enjoy almost all August&lt;/li&gt;
&lt;li&gt;You get to blog on planet Gnome, and show your contribution to the world&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You become a better coder&lt;/strong&gt;!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now that I got your attention, have a look at the &lt;a href="https://live.gnome.org/SummerOfCode2011/Ideas"&gt;project ideas&lt;/a&gt; for GNOME. These are just ideas, you are free (and encouraged too) to come up with your idea: if the idea is awesome, you are more likely to get chosen!&lt;/p&gt;
&lt;p&gt;Personally, I am rooting for you to come by and help us improve &lt;a href="http://gtg.fritalk.com/"&gt;Getting Things Gnome&lt;/a&gt;. New ideas and great people are very welcome!&lt;/p&gt;
&lt;p&gt;Don’t postpone, the &lt;strong&gt;deadline is April 8&lt;/strong&gt;, and a great proposal can be written in just a few hours. You don’t have to have previous experience in FLOSS development (although it helps). If you are not chosen, consider contributing anyway: your next year proposal will be great!&lt;/p&gt;
&lt;p&gt;Ps: if you have ideas for gtg, talk to me on IRC (GIMPNet/#gtg is our channel, I’m also available on freenode as invernizzi)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=yvwlHxl8SUs:XFNnYd9exyQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=yvwlHxl8SUs:XFNnYd9exyQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=yvwlHxl8SUs:XFNnYd9exyQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=yvwlHxl8SUs:XFNnYd9exyQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=yvwlHxl8SUs:XFNnYd9exyQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=yvwlHxl8SUs:XFNnYd9exyQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/yvwlHxl8SUs" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=711#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=711" thr:count="4" />
		<thr:total>4</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=711</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[A C++ feature I would love to have: custom type modifiers]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/IZM07tVowHc/" />
		<id>http://allievi.sssup.it/techblog/?p=705</id>
		<updated>2011-03-18T16:09:58Z</updated>
		<published>2011-03-18T16:08:07Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Bar discussions" /><category scheme="http://allievi.sssup.it/techblog" term="C++" /><category scheme="http://allievi.sssup.it/techblog" term="deadlocks" /><category scheme="http://allievi.sssup.it/techblog" term="threading" />		<summary type="html"><![CDATA[In C++ the const type modifiers when applied to methods has the nice property of making it impossible by default (e.g. without a const_cast) to call non-const methods. A similar feature is provided by C++0x keyword constexpr. It would be very nice if this property could be applied to custom classes of functions. The idea would [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=705">&lt;p&gt;In C++ the &lt;strong&gt;const &lt;/strong&gt;type modifiers when applied to methods has the nice property of making it impossible by default (e.g. without a const_cast) to call non-const methods. A similar feature is provided by C++0x keyword &lt;strong&gt;constexpr&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It would be very nice if this property could be applied to custom classes of functions. The idea would be to &lt;em&gt;tag&lt;/em&gt; method definitions with a custom keyword, or a type. &lt;em&gt;Tagged&lt;/em&gt; methods would then only be able to call method tagged with the same type.&lt;/p&gt;
&lt;p&gt;A nice usage I could find for this would be to define a &lt;em&gt;non-blocking &lt;/em&gt;class of methods. Non blocking methods are such if they never blocks for a potentially unbounded amount of time waiting for an event. Using the tags the compiler will be able to detect if a method supposed to be non-blocking is trying to call some potentially blocking code and this would be very useful to detect possible deadlocks at compile time. Another usage would be to tag all the methods that are supposed to be used by a specific thread with the same tag. With such setup methods that access shared data would be untagged and using them would require a cast or some special syntax, hopefully helping the programmer remember that some synchronization is needed.&lt;/p&gt;
&lt;p&gt;A possible approach to (ab)use the &lt;strong&gt;volatile&lt;/strong&gt; keyword to detect race conditions was described &lt;a href="http://drdobbs.com/cpp/184403766"&gt;here&lt;/a&gt; in 2001. But maybe this approach could be more general. Any comment?&lt;br /&gt;
&lt;a href="http://flattr.com/thing/150561/A-C-feature-I-would-love-to-have-custom-type-modifiers" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=IZM07tVowHc:wB4ygsXMkmo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=IZM07tVowHc:wB4ygsXMkmo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=IZM07tVowHc:wB4ygsXMkmo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=IZM07tVowHc:wB4ygsXMkmo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=IZM07tVowHc:wB4ygsXMkmo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=IZM07tVowHc:wB4ygsXMkmo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/IZM07tVowHc" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=705#comments" thr:count="6" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=705" thr:count="6" />
		<thr:total>6</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=705</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.6.1 released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/wIRbb8wEnGU/" />
		<id>http://allievi.sssup.it/techblog/?p=701</id>
		<updated>2011-03-18T04:17:01Z</updated>
		<published>2011-03-18T04:15:01Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="compatibility" /><category scheme="http://allievi.sssup.it/techblog" term="Hulu" /><category scheme="http://allievi.sssup.it/techblog" term="release" /><category scheme="http://allievi.sssup.it/techblog" term="wine" /><category scheme="http://allievi.sssup.it/techblog" term="youtube" />		<summary type="html"><![CDATA[Version 0.4.6 was released no more than a free days ago, but unfortunately a change in the YouTube player exposed a bug that could cause browser crashes. Version 0.4.6.1 fixes the issue and updating is recommended. I’d also like to share some though and explain why we need to make so many point releases to [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=701">&lt;p&gt;Version 0.4.6 was released no more than a free days ago, but unfortunately a change in the YouTube player exposed a bug that could cause browser crashes. Version 0.4.6.1 fixes the issue and updating is recommended.&lt;/p&gt;
&lt;p&gt;I’d also like to share some though and explain why we need to make so many point releases to keep things working. Lightspark shares a lot of similarity with the Wine project in my opinion, as both projects aims at reimplementing from scratch a large (&lt;strong&gt;huge&lt;/strong&gt; for Wine, of course) platform for third party applications.&lt;/p&gt;
&lt;p&gt;The “advantage” for Wine is that executables for installed programs (e.g. Microsoft Word) change not so often, and usually updating is under the control of the user. A user that is interested in keeping Wine compatible with a certain application is, most often, free to delay the update until Wine catches up.&lt;/p&gt;
&lt;p&gt;Lightspark, on the other hand, needs to execute contents (e.g. YouTube video player) that are mostly out of the user control and new, incompatible, versions of the contents may pop out at anytime and there is very little we can do about it.&lt;/p&gt;
&lt;p&gt;The only way we can be faithful to the advertised “YouTube[*] support” is to improve our code whenever a breakage pops up. I understand this is also challenging for distros and packagers because the life span of our stable releases is linked to quite unpredictable events and I’d like to say “thank you” to all the people packaging lightspark for distros in the wild. Your work is exceptional.&lt;/p&gt;
&lt;p&gt;[*] As a side note, although currently only YouYube support is stable enough to be used daily, Lightspark &lt;strong&gt;is not an YT specific hack&lt;/strong&gt;. Support for other sites is coming along slowly given our limited workforce. I’ve done some work to have hulu working and I think we’re now 80% done in supporting it. If anyone is interested in contributing to lightspark to have Hulu (or any other popular site) supported, please drop by #lightspark IRC channel on Freenode&lt;br /&gt;
&lt;a href="http://flattr.com/thing/150204/Lightspark-0-4-6-1-released" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=wIRbb8wEnGU:CV5PYnaX1bc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=wIRbb8wEnGU:CV5PYnaX1bc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=wIRbb8wEnGU:CV5PYnaX1bc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=wIRbb8wEnGU:CV5PYnaX1bc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=wIRbb8wEnGU:CV5PYnaX1bc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=wIRbb8wEnGU:CV5PYnaX1bc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/wIRbb8wEnGU" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=701#comments" thr:count="6" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=701" thr:count="6" />
		<thr:total>6</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=701</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.6 released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/PdBUS1BV8lA/" />
		<id>http://allievi.sssup.it/techblog/?p=696</id>
		<updated>2011-03-15T14:47:27Z</updated>
		<published>2011-03-15T14:45:44Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="release" />		<summary type="html"><![CDATA[I’m happy to announce that a new version of Lightspark flash player has been released. The release features improved stability and graphics: Gradient support has been vastly improved Graphical glitches are greatly reduced Added support for the upcoming gnash 0.8.9 release Added support for profiling ActionScript code Added support for muting all sound by pressing [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=696">&lt;p&gt;I’m happy to announce that a new version of Lightspark flash player has been released. The release features improved stability and graphics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gradient support has been vastly improved&lt;/li&gt;
&lt;li&gt;Graphical glitches are greatly reduced&lt;/li&gt;
&lt;li&gt;Added support for the upcoming gnash 0.8.9 release&lt;/li&gt;
&lt;li&gt;Added support for profiling ActionScript code&lt;/li&gt;
&lt;li&gt;Added support for muting all sound by pressing ‘m’&lt;/li&gt;
&lt;li&gt;Added support for copying error messages to the clipboard by pressing ”c’&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The tarball is, as usual, available on &lt;a href="http://launchpad.net/lightspark"&gt;LaunchPad&lt;/a&gt;. Binary packages for Ubuntu maverick and natty are available from the &lt;a href="https://edge.launchpad.net/~sparkers/+archive/ppa"&gt;Sparkers Team PPA&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Packages for Debian and Fedora will be available soon.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://flattr.com/thing/148479/Lightspark-0-4-6-released" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=PdBUS1BV8lA:3KBfkhF3PrI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=PdBUS1BV8lA:3KBfkhF3PrI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=PdBUS1BV8lA:3KBfkhF3PrI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=PdBUS1BV8lA:3KBfkhF3PrI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=PdBUS1BV8lA:3KBfkhF3PrI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=PdBUS1BV8lA:3KBfkhF3PrI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/PdBUS1BV8lA" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=696#comments" thr:count="9" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=696" thr:count="9" />
		<thr:total>9</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=696</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[FOSDEM!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/YgXlmDkoIBE/" />
		<id>http://allievi.sssup.it/techblog/?p=690</id>
		<updated>2011-01-10T18:24:22Z</updated>
		<published>2011-01-10T18:21:59Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="Meetings and nice people" /><category scheme="http://allievi.sssup.it/techblog" term="fosdem" />		<summary type="html"><![CDATA[Having bought the flights I’m now sure I’ll be in Bruxelles, Belgium the 5 and 6 February to visit FOSDEM. As I always do I’ve organized this too late, well after the dealines to apply for lightning talks. I’ve asked anyway if there are still 10 free minutes, so there is a small chance that [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=690">&lt;p&gt;Having bought the flights I’m now sure I’ll be in Bruxelles, Belgium the 5 and 6 February to visit FOSDEM. As I always do I’ve organized this too late, well after the dealines to apply for lightning talks.&lt;/p&gt;
&lt;p&gt;I’ve asked anyway if there are still 10 free minutes, so there is a small chance that I’ll be able to give a short talk about lightspark while I’m there.&lt;br /&gt;
&lt;a href="http://flattr.com/thing/114817/Ill-be-at-FOSDEM" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=YgXlmDkoIBE:Om2cLUuBbU4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=YgXlmDkoIBE:Om2cLUuBbU4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=YgXlmDkoIBE:Om2cLUuBbU4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=YgXlmDkoIBE:Om2cLUuBbU4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=YgXlmDkoIBE:Om2cLUuBbU4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=YgXlmDkoIBE:Om2cLUuBbU4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/YgXlmDkoIBE" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=690#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=690" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=690</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.5.1, with experimental PowerPC support]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/Px47AvHGl7A/" />
		<id>http://allievi.sssup.it/techblog/?p=681</id>
		<updated>2010-12-16T22:24:19Z</updated>
		<published>2010-12-16T22:21:49Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="ppc" /><category scheme="http://allievi.sssup.it/techblog" term="release" />		<summary type="html"><![CDATA[Only a few days have passed since the 0.4.5 and a new Lightspark release is already out! With big news for PowerPC users. The main new feature of this release is experimental support for the PPC platform! Currently the performance of the video playback is far from ideal as some very inefficient code is used [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=681">&lt;div id="attachment_683" class="wp-caption aligncenter" style="width: 663px"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/12/lightspark-ppc1.png"&gt;&lt;img class="size-full wp-image-683 " title="lightspark-ppc" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/12/lightspark-ppc1.png" alt="" width="653" height="449" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Lightspark standalone executing YouTube on a ppc64 Debian machine&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Only a few days have passed since the 0.4.5 and a new Lightspark release is already out! With big news for PowerPC users. The main new feature of this release is &lt;strong&gt;experimental support for the PPC platform&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Currently the performance of the video playback is far from ideal as some very inefficient code is used on a critical path, and will be rewritten in an efficient manner. Nonetheless tests and bug reports from PowerPC users are very welcome.&lt;/p&gt;
&lt;p&gt;Beside this feature the release include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A fix to restore YouTube support&lt;/li&gt;
&lt;li&gt;A new &lt;strong&gt;AMF3&lt;/strong&gt; parser that will be used to provide &lt;strong&gt;Local Shared Object&lt;/strong&gt; (flash cookies) support in a following release.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Packages will be as usually available for Ubuntu Maverick from the &lt;a href="http://launchpad.net/~sssup/+archive/sssup-ppa"&gt;PPA&lt;/a&gt; for the i386 and amd64 architecture. Packages for PPC are not currently available as launchpad does not support ppc packages.&lt;br /&gt;
&lt;a href="http://flattr.com/thing/101921/Lightspark-0-4-5-1-with-experimental-PowerPC-support" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=Px47AvHGl7A:q0B2FlQeq1w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=Px47AvHGl7A:q0B2FlQeq1w:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=Px47AvHGl7A:q0B2FlQeq1w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=Px47AvHGl7A:q0B2FlQeq1w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=Px47AvHGl7A:q0B2FlQeq1w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=Px47AvHGl7A:q0B2FlQeq1w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/Px47AvHGl7A" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=681#comments" thr:count="19" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=681" thr:count="19" />
		<thr:total>19</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=681</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.5 Release]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/urltA3l7FHE/" />
		<id>http://allievi.sssup.it/techblog/?p=677</id>
		<updated>2010-12-14T01:27:45Z</updated>
		<published>2010-12-14T01:25:02Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="release" /><category scheme="http://allievi.sssup.it/techblog" term="wine" />		<summary type="html"><![CDATA[Lightspark 0.4.5 is out! No big changes from the last Release Candidate, beside a –version switch that will make it easier to assess if the last and best version is being used. In the mean time work has not stopped. A brand new parser for the AMF3 is already upstream and will be used to [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=677">&lt;p&gt;Lightspark 0.4.5 is out! No big changes from the last Release Candidate, beside a &lt;strong&gt;–version&lt;/strong&gt; switch that will make it easier to assess if the last and best version is being used.&lt;/p&gt;
&lt;p&gt;In the mean time work has not stopped. A brand new parser for the &lt;strong&gt;AMF3&lt;/strong&gt; is already upstream and will be used to implement ByteArray::readObject and support for Local shared Objects. Moreover work is under way to build a supported application database where users will be able to report successes/failures and vote for applications to be supported. This system is being customized having Wine’s &lt;a href="http://appdb.winehq.org"&gt;AppDB &lt;/a&gt;as a base, so thanks the the Wine team for their work!&lt;br /&gt;
&lt;a href="http://flattr.com/thing/99723/Lightspark-0-4-5-Release-Announcement" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=urltA3l7FHE:VvN059TPE3I:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=urltA3l7FHE:VvN059TPE3I:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=urltA3l7FHE:VvN059TPE3I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=urltA3l7FHE:VvN059TPE3I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=urltA3l7FHE:VvN059TPE3I:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=urltA3l7FHE:VvN059TPE3I:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/urltA3l7FHE" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=677#comments" thr:count="8" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=677" thr:count="8" />
		<thr:total>8</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=677</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[iCTF hacking competition 2010: solution of some challenges]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/A8t3oIsRxTo/" />
		<id>http://allievi.sssup.it/techblog/?p=651</id>
		<updated>2010-12-10T22:36:18Z</updated>
		<published>2010-12-10T22:30:15Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Uncategorized" />		<summary type="html"><![CDATA[This year, having joined the computer security group at UCSB for my phd, I’ve helped in the organization of the 2010rh edition of the iCTF, the biggest international online hacking competition. It has been plenty of fun, with more than 70 teams participating from all over the world. The CMU team “Plaid parliament of pwning” [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=651">&lt;p&gt;This year, having joined the &lt;a href="http://www.cs.ucsb.edu/~seclab/"&gt;computer security group at UCSB&lt;/a&gt; for my phd, I’ve helped in the organization of the 2010rh edition of the &lt;a href="http://ictf.cs.ucsb.edu/"&gt;iCTF&lt;/a&gt;, the biggest international online hacking competition. It has been plenty of fun, with more than 70 teams participating from all over the world. The CMU team “&lt;a href="http://ppp.cylab.cmu.edu/wordpress/"&gt;Plaid parliament of pwning&lt;/a&gt;” won it,  getting the  1000$ price (thanks Adobe and &lt;a href="https://newton.computer.org/sssubs.nsf/application?openform&amp;amp;promocode=sp&amp;amp;disc=ictf"&gt;IEEE Security &amp;amp; Privacy magazine&lt;/a&gt; for the sponsorships!).&lt;/p&gt;
&lt;p&gt;Since people have been asking for the solutions of the two challenges I wrote, so here they are.&lt;/p&gt;
&lt;h2&gt;challenge 5:&lt;/h2&gt;
&lt;p&gt;This challenge is easy, I encourage you to give it a try, it’s fun!&lt;/p&gt;
&lt;p&gt;Question: “Who’re you’re gonna call?”&lt;/p&gt;
&lt;p&gt;File: &lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/12/call.wav"&gt;call&lt;/a&gt;&lt;br /&gt;
Points: 300&lt;br /&gt;
Teams that have completed it: 44 (congrats!)&lt;/p&gt;
&lt;p&gt;Solution: in an html comment following this line&lt;br /&gt;
&lt;!--You are given a wav file that contains the recording of a phone&lt;br /&gt;
dialing. Using either audacity or one of the many tools available&lt;br /&gt;
online (eg: [0]), it is possible to decode the DTMF codes (ref:&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling" mce_href="http://en.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling" target="_blank"&gt;http://en.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling&lt;/a&gt;). In&lt;br /&gt;
particular, with audacity you have to retrieve the two principal&lt;br /&gt;
frequencies in each tone being dialed, ad look them up in the table on&lt;br /&gt;
wikipedia.&lt;br /&gt;
You now have a telephone number. The number has to be converted to a&lt;br /&gt;
string (as if someone was writing&lt;br /&gt;
on the keypad) to get the solution (tool available, [1]). The solution&lt;br /&gt;
is "bender".&lt;/p&gt;
&lt;p&gt;[0] dtmf tones decoding: &lt;a href="http://www.polar-electric.com/DTMF/Index.html" mce_href="http://www.polar-electric.com/DTMF/Index.html" target="_blank"&gt;http://www.polar-electric.com/DTMF/Index.html&lt;/a&gt;&lt;br /&gt;
[1] cracking the phone number: &lt;a href="http://www.csgnetwork.com/phonenumcvt.html" mce_href="http://www.csgnetwork.com/phonenumcvt.html" target="_blank"&gt;http://www.csgnetwork.com/phonenumcvt.html&lt;/a&gt;&lt;br /&gt;
--&gt;&lt;/p&gt;
&lt;h2&gt;challenge 4:&lt;/h2&gt;
&lt;p&gt;This challenge is a little more difficult, but if you know python you have all the skills necessary to beat it.&lt;br /&gt;
Question:&lt;/p&gt;
&lt;address&gt;Hello Anonymous,&lt;/address&gt;
&lt;address&gt;it has come to our knowledge that the Lityvan Secret Service (note: this was part of a more complex story that ran across all the CTF)&lt;/address&gt;
&lt;address&gt;is installing a remote control system on their submarines. This would&lt;/address&gt;
&lt;address&gt;allow a handful of man to launch a massive attack from a secure&lt;/address&gt;
&lt;address&gt;location.&lt;/address&gt;
&lt;address&gt;This threat is not acceptable: your mission is to break into one&lt;/address&gt;
&lt;address&gt;submarine remote control system and launch a missile against Navy Control Center,&lt;/address&gt;
&lt;address&gt;so to shut down the system for good.&lt;/address&gt;
&lt;address&gt;The details of this systems are unknown, but we have recovered from a&lt;/address&gt;
&lt;address&gt;stolen usb device two files that might give some insights to you: they&lt;/address&gt;
&lt;address&gt;are attached. We discovered what we suspect to be one of the entry point&lt;/address&gt;
&lt;address&gt;of this system: it is located at 10.15.42.42, on TCP port 5000.&lt;/address&gt;
&lt;address&gt;Should you complete this mission, you will be lavishly remunerated.&lt;/address&gt;
&lt;address&gt;Good luck!&lt;/address&gt;
&lt;address&gt;X&lt;/address&gt;
&lt;p&gt;To make it run, unpack &lt;a href="http://cs.ucsb.edu/~invernizzi/storage/challenge.tgz"&gt;this file&lt;/a&gt; and run server.py (it’s all python, you can check it for backdoors). To start the challenge, you should read only the content of the “pub” directory: that was the material that was given in the ctf.&lt;/p&gt;
&lt;p&gt;Points: 500&lt;br /&gt;
Teams that have completed it: 0, as most of the difficult challenges — because of the structure of the iCTF 2010, it turned out that it was more convenient to focus  only on the easy challenges. We’ll have to fix it next year!&lt;/p&gt;
&lt;p&gt;Solution: in an html comment following this line. The given file also contains a script that can solve the challenge (the test_* files)&lt;/p&gt;
&lt;p&gt;For the solution of another difficult challenge, head over to Bryce’s &lt;a href="http://www.bryceboe.com/2010/12/09/ucsbs-international-capture-the-flag-competition-2010-challenge-6-fear-the-ear/"&gt;blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;!--&lt;br /&gt;
To login to the telnet service on port 5000, you have to look at one of the two&lt;br /&gt;
file given (the .pyc one). Decompile  it to reveal the login function:&lt;/p&gt;
&lt;p&gt;successful_login = True&lt;br /&gt;
try:&lt;br /&gt;
if unicode(self.__user.get_command(), 'utf-8') != \&lt;br /&gt;
unicode(configuration.MASTER_PASSWORD, 'utf-8'):&lt;br /&gt;
successful_login = False&lt;br /&gt;
except Exception:&lt;br /&gt;
pass&lt;br /&gt;
Sending a non-unicode string will get you to log in, obtaining a command line.&lt;br /&gt;
Now, using the "help" command you can learn how to launch a missile.&lt;br /&gt;
The "launch" command apparently requires to be given 10 launch codes,&lt;br /&gt;
3 digits each. By reading the .py file (the other one given at the&lt;br /&gt;
beginning):&lt;br /&gt;
'''&lt;br /&gt;
#!/usr/local/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*&lt;br /&gt;
# iCTF 2010 submarine simulator hacking challenge.&lt;/p&gt;
&lt;p&gt;import hashlib&lt;/p&gt;
&lt;p&gt;import configuration&lt;/p&gt;
&lt;p&gt;class LaunchCodes:&lt;/p&gt;
&lt;p&gt;cleartext_codes = []&lt;br /&gt;
hashed_codes = []&lt;/p&gt;
&lt;p&gt;def __init__(self, *codes):&lt;br /&gt;
if len(set(codes)) != configuration.LAUNCH_CODES_COUNT:&lt;br /&gt;
print "Incorrect number of launch codes"&lt;br /&gt;
raise ValueError&lt;br /&gt;
codes = [c for c in codes if self.is_valid_code(c)]&lt;br /&gt;
if not codes:&lt;br /&gt;
print "No valid code provided"&lt;br /&gt;
raise ValueError&lt;br /&gt;
self.cleartext_codes += codes&lt;br /&gt;
self.hashed_codes = []&lt;br /&gt;
for code in self.cleartext_codes:&lt;br /&gt;
hashed =  hashlib.sha1(code).hexdigest()&lt;br /&gt;
self.hashed_codes.append(code)&lt;br /&gt;
if not configuration.DEBUG:&lt;br /&gt;
self.cleartext_codes = []&lt;/p&gt;
&lt;p&gt;def is_valid_code(self, code):&lt;br /&gt;
try:&lt;br /&gt;
code_int = int(code)&lt;br /&gt;
except ValueError:&lt;br /&gt;
print "Launch codes must be numbers"&lt;br /&gt;
return False&lt;br /&gt;
if code_int &lt; 0 or code_int&gt;= 10 ** configuration.LAUNCH_CODES_DIGITS:&lt;br /&gt;
print "Launch does must be positive numbers " + \&lt;br /&gt;
"with less than %d digits", configuration.LAUNCH_CODES_DIGITS&lt;br /&gt;
return False&lt;br /&gt;
return True&lt;/p&gt;
&lt;p&gt;def get_hashes(self):&lt;br /&gt;
return self.hashed_codes[:]&lt;/p&gt;
&lt;p&gt;def __eq__(self, launch_codes):&lt;br /&gt;
return set(self.get_hashes()) == set(launch_codes.get_hashes())&lt;/p&gt;
&lt;p&gt;class LaunchCodesVerifier(object):&lt;/p&gt;
&lt;p&gt;def __init__(self):&lt;br /&gt;
#create launch codes&lt;br /&gt;
self.launch_codes = LaunchCodes(*configuration.LAUNCH_CODES)&lt;br /&gt;
if configuration.DEBUG == 0:&lt;br /&gt;
configuration.LAUNCH_CODES = []&lt;/p&gt;
&lt;p&gt;def verify(self, *launch_codes):&lt;br /&gt;
try:&lt;br /&gt;
wannabe_launch_codes = LaunchCodes(*launch_codes)&lt;br /&gt;
except:&lt;br /&gt;
return False&lt;br /&gt;
return wannabe_launch_codes == self.launch_codes&lt;br /&gt;
'''&lt;br /&gt;
one can realize that it is possible to bypass all security checks by&lt;br /&gt;
sending nine character and one launch code. That one has to match one&lt;br /&gt;
of the real launch codes, but it can be brute-forced in a matter of&lt;br /&gt;
seconds.&lt;br /&gt;
The answer is:&lt;br /&gt;
Russians don't take a dump, son, without a plan&lt;br /&gt;
--&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=A8t3oIsRxTo:gBnrAnqOYXs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=A8t3oIsRxTo:gBnrAnqOYXs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=A8t3oIsRxTo:gBnrAnqOYXs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=A8t3oIsRxTo:gBnrAnqOYXs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=A8t3oIsRxTo:gBnrAnqOYXs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=A8t3oIsRxTo:gBnrAnqOYXs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/A8t3oIsRxTo" height="1" width="1"/&gt;</content>
<link href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/12/call.wav" rel="enclosure" length="9644" type="audio/wav" />
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=651#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=651" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=651</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Setting IP options in Scapy]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/eRfOcZ53ztc/" />
		<id>http://allievi.sssup.it/techblog/?p=631</id>
		<updated>2010-12-06T10:06:36Z</updated>
		<published>2010-12-06T09:48:01Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Networking" /><category scheme="http://allievi.sssup.it/techblog" term="Security" />		<summary type="html"><![CDATA[During this year iCTF (the world largest online hacking competition — very cool) my team faced the problem of setting an IP header option in Scapy. That was needed to break a service that was relying on IP addresses for authentication. Now, Scapy is an awesome project, but it lacks a bit on the documentation side, [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=631">&lt;p&gt;During this year &lt;a href="http://ictf.cs.ucsb.edu/"&gt;iCTF&lt;/a&gt; (the world largest online hacking competition — very cool) my team faced the problem of setting an IP header option in &lt;a href="http://www.secdev.org/projects/scapy/"&gt;Scapy&lt;/a&gt;. That was needed to break a service that was relying on IP addresses for authentication.&lt;/p&gt;
&lt;p&gt;Now, Scapy is an awesome project, but it lacks a bit on the documentation side, as most of it is composed by a bunch of slides. Since IP options are overlooked in the docs and there is nothing findable on the web that shows how to set them, I’ll post it here hoping to help some future fellow googler — that might as well be future me.&lt;/p&gt;
&lt;p&gt;Option to set: ﻿&lt;a href="http://www.networksorcery.com/enp/protocol/ip/option003.htm"&gt;Loose Route/Record Route&lt;/a&gt; (the others work just the same):&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #66cc66;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; ip&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;IP&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;src&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;&amp;quot;1.1.1.1&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; dst&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;&amp;quot;8.8.8.8&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; options&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;IPOption&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;'&lt;span style="color: #000099; font-weight: bold;"&gt;\x&lt;/span&gt;83&lt;span style="color: #000099; font-weight: bold;"&gt;\x&lt;/span&gt;03&lt;span style="color: #000099; font-weight: bold;"&gt;\x&lt;/span&gt;10'&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;


&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #66cc66;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; ip.&lt;span style="color: black;"&gt;show2&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;


&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #808080; font-style: italic;"&gt;###[ IP ]###&lt;/span&gt;
version&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; 4L
ihl&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; 6L
tos&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #ff4500;"&gt;0x0&lt;/span&gt;
&lt;span style="color: #008000;"&gt;len&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #ff4500;"&gt;24&lt;/span&gt;
&lt;span style="color: #008000;"&gt;id&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #ff4500;"&gt;1&lt;/span&gt;
flags&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;
frag&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; 0L
ttl&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #ff4500;"&gt;64&lt;/span&gt;
proto&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; ip
chksum&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #ff4500;"&gt;0xd4d0&lt;/span&gt;
src&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; 1.1.1.1
dst&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; 8.8.8.8
\options\
|&lt;span style="color: #808080; font-style: italic;"&gt;###[ IP Option Loose Source and Record Route ]###&lt;/span&gt;
|  copy_flag&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; 1L
|  optclass&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; control
|  option&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; loose_source_route
|  length&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #ff4500;"&gt;3&lt;/span&gt;
|  pointer&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #ff4500;"&gt;16&lt;/span&gt;
|  routers&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;
|&lt;span style="color: #808080; font-style: italic;"&gt;###[ IPOption_EOL ]###&lt;/span&gt;
|  copy_flag&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; 0L
|  optclass&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; contro
|  option&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; end_of_list&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The ‘\x83\x03\x10’ has been created following the linked specs  (\x83 is the type of the option, \x03 is the length, \x10 is the pointer).&lt;/p&gt;
&lt;p&gt;Note that if you forget the IPOption() bit, your packet will be printed correctly with show()/show2() but will refuse to be sent on the network. Instead, it will show this error (here for the sake of search engine indexing):&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #66cc66;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; send&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;IP&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;src&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;&amp;quot;1.1.1.1&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; dst&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;&amp;quot;8.8.8.8&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; options&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;'&lt;span style="color: #000099; font-weight: bold;"&gt;\x&lt;/span&gt;83&lt;span style="color: #000099; font-weight: bold;"&gt;\x&lt;/span&gt;03&lt;span style="color: #000099; font-weight: bold;"&gt;\x&lt;/span&gt;10'&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;


&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;Traceback &lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;most recent call last&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
  File &lt;span style="color: #483d8b;"&gt;&amp;quot;&amp;lt;console&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; line &lt;span style="color: #ff4500;"&gt;1&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;lt;&lt;/span&gt;module&lt;span style="color: #66cc66;"&gt;&amp;gt;&lt;/span&gt;
  File &lt;span style="color: #483d8b;"&gt;&amp;quot;/usr/lib/pymodules/python2.6/scapy/sendrecv.py&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; line &lt;span style="color: #ff4500;"&gt;247&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; send
    __gen_send&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;conf.&lt;span style="color: black;"&gt;L3socket&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;*args&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; **kargs&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; x&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; inter&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;inter&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; loop&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;loop&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; count&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;count&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt;verbose&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;verbose&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; realtime&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;realtime&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
  File &lt;span style="color: #483d8b;"&gt;&amp;quot;/usr/lib/pymodules/python2.6/scapy/sendrecv.py&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; line &lt;span style="color: #ff4500;"&gt;230&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; __gen_send
    s.&lt;span style="color: black;"&gt;send&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;p&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
  File &lt;span style="color: #483d8b;"&gt;&amp;quot;/usr/lib/pymodules/python2.6/scapy/arch/linux.py&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; line &lt;span style="color: #ff4500;"&gt;384&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; send
    sx &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;str&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;ll&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;x&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
  File &lt;span style="color: #483d8b;"&gt;&amp;quot;/usr/lib/pymodules/python2.6/scapy/arch/linux.py&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; line &lt;span style="color: #ff4500;"&gt;382&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;lt;&lt;/span&gt;lambda&lt;span style="color: #66cc66;"&gt;&amp;gt;&lt;/span&gt;
    ll &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;lambda&lt;/span&gt; x:conf.&lt;span style="color: black;"&gt;l2types&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt;sn&lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff4500;"&gt;3&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;/x
  File &lt;span style="color: #483d8b;"&gt;&amp;quot;/usr/lib/pymodules/python2.6/scapy/packet.py&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; line &lt;span style="color: #ff4500;"&gt;260&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; &lt;span style="color: #0000cd;"&gt;__div__&lt;/span&gt;
    cloneB &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; other.&lt;span style="color: #dc143c;"&gt;copy&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
  File &lt;span style="color: #483d8b;"&gt;&amp;quot;/usr/lib/pymodules/python2.6/scapy/packet.py&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; line &lt;span style="color: #ff4500;"&gt;140&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;copy&lt;/span&gt;
    clone.&lt;span style="color: black;"&gt;fields&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt;k&lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #008000;"&gt;self&lt;/span&gt;.&lt;span style="color: black;"&gt;get_field&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;k&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: black;"&gt;do_copy&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;clone.&lt;span style="color: black;"&gt;fields&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt;k&lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
  File &lt;span style="color: #483d8b;"&gt;&amp;quot;/usr/lib/pymodules/python2.6/scapy/fields.py&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; line &lt;span style="color: #ff4500;"&gt;401&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; do_copy
    &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; &lt;span style="color: #008000;"&gt;map&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;lambda&lt;/span&gt; p:p.&lt;span style="color: #dc143c;"&gt;copy&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; x&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
  File &lt;span style="color: #483d8b;"&gt;&amp;quot;/usr/lib/pymodules/python2.6/scapy/fields.py&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; line &lt;span style="color: #ff4500;"&gt;401&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;lt;&lt;/span&gt;lambda&lt;span style="color: #66cc66;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; &lt;span style="color: #008000;"&gt;map&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;lambda&lt;/span&gt; p:p.&lt;span style="color: #dc143c;"&gt;copy&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; x&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #008000;"&gt;AttributeError&lt;/span&gt;: &lt;span style="color: #483d8b;"&gt;'str'&lt;/span&gt; &lt;span style="color: #008000;"&gt;object&lt;/span&gt; has no attribute &lt;span style="color: #483d8b;"&gt;'copy'&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=eRfOcZ53ztc:_WIDd-PwTYE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=eRfOcZ53ztc:_WIDd-PwTYE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=eRfOcZ53ztc:_WIDd-PwTYE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=eRfOcZ53ztc:_WIDd-PwTYE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=eRfOcZ53ztc:_WIDd-PwTYE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=eRfOcZ53ztc:_WIDd-PwTYE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/eRfOcZ53ztc" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=631#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=631" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=631</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[About Sant’Anna School of Advanced Studies]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/1c1KLbT4PlM/" />
		<id>http://allievi.sssup.it/techblog/?p=627</id>
		<updated>2010-11-29T16:59:29Z</updated>
		<published>2010-11-29T15:42:59Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Bar discussions" /><category scheme="http://allievi.sssup.it/techblog" term="sssup" /><category scheme="http://allievi.sssup.it/techblog" term="university" />		<summary type="html"><![CDATA[As a departure from the usual technical articles and release announcements I’d like to talk a bit about my university: the Sant’Anna School of Advanced Studies (Scuola Superiore Sant’Anna in Italian). This place is quite unique in Italy, the only similar institution being the Scuola Normale Superiore. I’ve never heard about similar institutions in other [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=627">&lt;p&gt;As a departure from the usual technical articles and release announcements I’d like to talk a bit about my university: the Sant’Anna School of Advanced Studies (Scuola Superiore Sant’Anna in Italian). This place is quite unique in Italy, the only similar institution being the Scuola Normale Superiore. I’ve never heard about similar institutions in other countries. I’d love to hear if anyone knows about something like this somewhere else.&lt;/p&gt;
&lt;p&gt;At a first glance the Sant’Anna of Advanced Studies could be descibed as a very small, state owned (public) university. By “very small” I mean that the grand total of the students attending bachelors and master classes is no more than 250. Each year around 45 students are selected in a very strict nationwide selection from around  1000 applicants in the fields of Engineering, Economics, Medicine, Agriculture, Political Science and Law. Selected applicants have access to the school services completely free of charge, including lodging and canteen.&lt;/p&gt;
&lt;p&gt;The high level of selectivity (the peak is 1 admitted each 20 applicants) makes it possible to gather some of the most talented people graduated in the nation’s high schools. As the school provides all needed infrastructure to the students people are able to leave their home and come to Pisa independently of the economic and social status of their families. There is no way to access the School other than the official selection, not even paying a fee.&lt;/p&gt;
&lt;p&gt;As students we live in collegiate structure.  The rooms are assigned following our own internal regulation, this is an example of the large amount of management that is delegated to students. Several commissions are elected each year to manage a variety of things, from network infrastructure to public relations. Living in common structures and sharing the responsibility of their maintenance generate a very peculiar and often long term bonding between students. During the five years that most people spend in the school a net of relations forms that connects people that are very different for interests  and experiences. Living in a interdisciplinary environment is an extraordinary experience. It’s very common to see people discussing about anything from philosophy and politics to trappist beers with the same commitment, most often while eating together at the canteen.&lt;/p&gt;
&lt;p&gt;From the academic point of view the School is also pretty unique. Although it’s a full state recognized university it does not offers full courses. We are at the same time Pupils of the Sant’Anna School and students of the University of Pisa. We attends regular classes at the University of Pisa and classes on more advanced modern research topics. Anyway most people feel that the most important part of what we learn comes from living with older students and research experiences abroad. I’ve myself worked in California and Switzerland during the last couple of summers.&lt;/p&gt;
&lt;p&gt;Feel free to comment and share your opinions about such particular kind of university.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=1c1KLbT4PlM:eq4ZSkB1zhc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=1c1KLbT4PlM:eq4ZSkB1zhc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=1c1KLbT4PlM:eq4ZSkB1zhc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=1c1KLbT4PlM:eq4ZSkB1zhc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=1c1KLbT4PlM:eq4ZSkB1zhc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=1c1KLbT4PlM:eq4ZSkB1zhc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/1c1KLbT4PlM" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=627#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=627" thr:count="5" />
		<thr:total>5</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=627</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.5 RC is out!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/6cilQT3IhW0/" />
		<id>http://allievi.sssup.it/techblog/?p=622</id>
		<updated>2010-11-27T16:52:04Z</updated>
		<published>2010-11-27T16:50:26Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Uncategorized" />		<summary type="html"><![CDATA[Finally, after a long delay caused by several issues Lightspark 0.4.5 is out. Here it is a brief Changelog. Include the new Advanced Graphics Engine, that should provide smoother and faster graphics and support for clipping More robust input support (makes it possible to use Play/Pause on YouTube) The work on this released has been [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=622">&lt;p&gt;Finally, after a long delay caused by several issues Lightspark 0.4.5 is out. Here it is a brief Changelog.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Include the new Advanced Graphics Engine, that should provide smoother and faster graphics and support for clipping&lt;/li&gt;
&lt;li&gt;More robust input support (makes it possible to use Play/Pause on YouTube)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The work on this released has been especially slowed down by an issue found in libxml++ and another one found in mesa. Packagers should pay attention to fulfill the following dependency requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Libxml++ version 2.33.1 or better. If an older version on libxml++ must be supported some commits must be backported. More info about this in the README file&lt;/li&gt;
&lt;li&gt;Mesa should include the fix for &lt;a href="http://bugs.freedesktop.org/show_bug.cgi?id=31827"&gt;this bug&lt;/a&gt;. The issue affects some radeon and maybe intel cards.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Packages will be available for Fedora Rawhide and are already uploaded on the PPA for Ubuntu Maverick&lt;br /&gt;
&lt;a href="http://flattr.com/thing/89444/Lightspark-0-4-5-RC" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6cilQT3IhW0:scS2DeqSX0o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6cilQT3IhW0:scS2DeqSX0o:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6cilQT3IhW0:scS2DeqSX0o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=6cilQT3IhW0:scS2DeqSX0o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6cilQT3IhW0:scS2DeqSX0o:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=6cilQT3IhW0:scS2DeqSX0o:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/6cilQT3IhW0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=622#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=622" thr:count="5" />
		<thr:total>5</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=622</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[See you in a week!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/pt3hMwxcDt8/" />
		<id>http://allievi.sssup.it/techblog/?p=617</id>
		<updated>2010-11-16T22:58:41Z</updated>
		<published>2010-11-16T22:55:52Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Uncategorized" />		<summary type="html"><![CDATA[Me and most of my engineering colleagues here at Sant’Anna School for Advanced Studies are leaving tomorrow morning for a week long tour of universities and labs in Belgium and Netherlands. This means I’ll have no time to work on Lightspark, sorry Anyway the 0.4.5 release will be probably out in the last days of [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=617">&lt;p&gt;Me and most of my engineering colleagues here at Sant’Anna School for Advanced Studies are leaving tomorrow morning for a week long tour of universities and labs in Belgium and Netherlands. This means I’ll have no time to work on Lightspark, sorry &lt;img src='http://allievi.sssup.it/techblog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;Anyway the 0.4.5 release will be probably out in the last days of the month. The critical bug in libxml++ is now fixed as my patch was accepted &lt;a href="http://git.gnome.org/browse/libxml++/"&gt;upstream&lt;/a&gt;. If (as I believe) a new version of the library will be released and packaged before i get back there will be no reason to hold the release anymore.&lt;br /&gt;
&lt;a href="http://flattr.com/thing/84865/See-you-in-a-week" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=pt3hMwxcDt8:FXoJAkptx84:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=pt3hMwxcDt8:FXoJAkptx84:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=pt3hMwxcDt8:FXoJAkptx84:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=pt3hMwxcDt8:FXoJAkptx84:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=pt3hMwxcDt8:FXoJAkptx84:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=pt3hMwxcDt8:FXoJAkptx84:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/pt3hMwxcDt8" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=617#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=617" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=617</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[On the road to Lightspark 0.4.5]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/ueMn_RQJQkU/" />
		<id>http://allievi.sssup.it/techblog/?p=613</id>
		<updated>2010-11-07T23:09:52Z</updated>
		<published>2010-11-07T16:23:18Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" />		<summary type="html"><![CDATA[The last week have been pretty busy for lightspark development. As the Advanced Graphics Engine is now merged in master the upcoming 0.4.5 release will feature better looking graphics and reduced CPU consumptions. Moreover, input support has been completely redesigned. The new approach is very robust, even of the very complex and crowded YouTube interface [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=613">&lt;p&gt;The last week have been pretty busy for lightspark development. As the Advanced Graphics Engine is now merged in master the upcoming 0.4.5 release will feature better looking graphics and reduced CPU consumptions.&lt;/p&gt;
&lt;p&gt;Moreover, input support has been completely redesigned. The new approach is very robust, even of the very complex and crowded YouTube interface and with lightspark 0.4.5 it will be finally possible to click the pause button.&lt;/p&gt;
&lt;p&gt;Currently the release is on hold because of a &lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=634123"&gt;bug&lt;/a&gt; in &lt;a href="http://libxmlplusplus.sourceforge.net/"&gt;libxml++&lt;/a&gt;, the library used in lightspark to handle XML files. I’ve submitted some patches that correct the bug (that caused random crashes inside firefox code) but they’re still waiting for a review. I’m considering and discussing with packagers if bundling a patched libxml++ inside lightspark could be a good temporary solution, until the library gets patched upstream. More news about this in the next few days.&lt;/p&gt;
&lt;p&gt;As a last note, I’ve received some feedback from the developer working on the PPC port and I’m happy to show a first &lt;a href="http://yfrog.com/g9screenshotkp"&gt;image&lt;/a&gt; of Lightspark running on a PPC machine. There are still issues with graphics and some remaining endianess swapping to be done, but the port is taking a reasonable shape finally.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://flattr.com/thing/81453/On-the-road-to-Lightspark-0-4-5" target="_blank"&gt;&lt;br /&gt;
&lt;img title="Flattr this" src="http://api.flattr.com/button/flattr-badge-large.png" border="0" alt="Flattr this" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ueMn_RQJQkU:kDskQF3MGZA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ueMn_RQJQkU:kDskQF3MGZA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ueMn_RQJQkU:kDskQF3MGZA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=ueMn_RQJQkU:kDskQF3MGZA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ueMn_RQJQkU:kDskQF3MGZA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=ueMn_RQJQkU:kDskQF3MGZA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/ueMn_RQJQkU" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=613#comments" thr:count="7" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=613" thr:count="7" />
		<thr:total>7</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=613</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[RFC: is OpenGL not the Right Thing (TM)?]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/JZOr7tp2pWM/" />
		<id>http://allievi.sssup.it/techblog/?p=607</id>
		<updated>2010-10-02T13:33:38Z</updated>
		<published>2010-10-02T00:57:37Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Insane Projects" /><category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="gallium" /><category scheme="http://allievi.sssup.it/techblog" term="OpenGL" /><category scheme="http://allievi.sssup.it/techblog" term="random ideas" />		<summary type="html"><![CDATA[It’s late at night and I’m back in Pisa for my last year of master. And, as often happens, a weird idea struck my mind. What if OpenGL is not the right thing for Lightspark? No, I’m not talking about dropping hardware accelerated rendering as that’s surely the right way to go, but using OpenGL [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=607">&lt;p&gt;It’s late at night and I’m back in Pisa for my last year of master. And, as often happens, a weird idea struck my mind. What if OpenGL is not the right thing for Lightspark? No, I’m not talking about dropping hardware accelerated rendering as that’s surely the right way to go, but using OpenGL really looks unnatural. In the design of the advanced graphics engine OpenGL is being basically used only to upload images rendered with cairo to the VRAM, and to blit and composite all the rendered chunks together... do we really need all the OpenGL complexity to do this??&lt;/p&gt;
&lt;p&gt;Well... OpenGL is basically the only thing we have, the only way to talk with the graphics hardware. But, here it comes the gallium project! As gallium splits the API from the driver it could be possible, in theory, to write a specialized gallium state tracker to do only the work we need... and maybe do it better.&lt;/p&gt;
&lt;p&gt;I’m writing here first because I’m not (yet) experienced enough with the gallium platform to know if the idea is sane, and second because I somehow feel the same approach could be useful for other apps... for example Lightspark and compositing window managers have similar needs. So I’d like to have some feedback about writing a small API and a gallium state tracker to do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DMA accelerated transfers of rendered image data&lt;/li&gt;
&lt;li&gt;Blitting and compositing of such data on screen&lt;/li&gt;
&lt;li&gt;Notify the application when asynchronous work (such as DMA transfers) has ended (BTW: what’s the right way of doing this in OpenGL?)&lt;/li&gt;
&lt;li&gt;Enqueue to-be-uploaded-to-vram images and have them sequentially transfered&lt;/li&gt;
&lt;li&gt;Apply simple but programmable (shader-like) transformation to pixel data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Big disclaimer: I’ve not yet started working on this idea. I’ve not even seriously though about it’s feasibility. I’d just like to have some feedback on this.&lt;br /&gt;
&lt;a href="http://flattr.com/thing/68810/Is-OpenGL-not-the-right-thing-for-Lightspark" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/button-static-50x60.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=JZOr7tp2pWM:zq8Rcg-5_gg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=JZOr7tp2pWM:zq8Rcg-5_gg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=JZOr7tp2pWM:zq8Rcg-5_gg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=JZOr7tp2pWM:zq8Rcg-5_gg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=JZOr7tp2pWM:zq8Rcg-5_gg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=JZOr7tp2pWM:zq8Rcg-5_gg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/JZOr7tp2pWM" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=607#comments" thr:count="14" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=607" thr:count="14" />
		<thr:total>14</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=607</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark new release and Advanced Graphics Engine progresses]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/P6jKAegQiEw/" />
		<id>http://allievi.sssup.it/techblog/?p=601</id>
		<updated>2010-09-25T18:06:50Z</updated>
		<published>2010-09-25T18:06:50Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="advanced graphics engine" /><category scheme="http://allievi.sssup.it/techblog" term="release" /><category scheme="http://allievi.sssup.it/techblog" term="youtube" />		<summary type="html"><![CDATA[A new point release in the 0.4.4 series has been released yesterday (0.4.4.3). There are not many effects visible to end users, beside a small fix to restore YouTube compatibility. Under the hood much work has been done to support policy files one of the security oriented features of the flash platform. I’d also like [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=601">&lt;p&gt;A new point release in the 0.4.4 series has been released yesterday (0.4.4.3). There are not many effects visible to end users, beside a small fix to restore YouTube compatibility. Under the hood much work has been done to support &lt;em&gt;policy files&lt;/em&gt; one of the security oriented features of the flash platform.&lt;/p&gt;
&lt;div id="attachment_602" class="wp-caption alignright" style="width: 310px"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/09/lightspark-gradients.png"&gt;&lt;img class="size-medium wp-image-602" title="lightspark-gradients" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/09/lightspark-gradients-300x149.png" alt="" width="300" height="149" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Although we still miss some stuff (e.g. Text), the Advanced Graphics Engine is able to render gradients&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;I’d also like to give some insight about what is going on the &lt;em&gt;advanced graphics engine &lt;/em&gt;branch. The roadmap is being walked without major issues. Now the texture real estate for graphics elements is allocated from a single large texture, geometries are drawn asynchronously using &lt;a href="http://www.cairographics.org/"&gt;cairo&lt;/a&gt; on the CPU side and the resulting raster data is uploaded to the right chunks of texture using PBO based transfers that are (hopefully, this is dependent of the OpenGL implementation) handled through DMA by the graphics card.&lt;/p&gt;
&lt;p&gt;The new engine is not yet on feature parity with the old one, but to showcase the new possibilities i’ve added support for color gradients. It’s also interesting to note that, after the first rough measurements, the new engine is fairly faster than the previous one.&lt;/p&gt;
&lt;div id="attachment_603" class="wp-caption alignleft" style="width: 310px"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/09/ls-youtube-rendering.png"&gt;&lt;img class="size-medium wp-image-603" title="ls-youtube-rendering" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/09/ls-youtube-rendering-300x240.png" alt="" width="300" height="240" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;YouTube video sample&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Another advantage of the new design is that OpenGL code will be pretty much condensed in a few locations. Moreover, it will be used only for accelerated blitting, compositing and upload of data to video memory. This opens new interesting possibilities for other graphics backends.&lt;/p&gt;
&lt;p&gt;As a closing news on Friday I had the first chance to physically meet another member of the lightspark community, namely our Debian packager Didier Raboud, as we discovered we are both working at EPFL. It has been a nice coffee-based meeting and we had a change to shake hands and discuss about some long term plans for the project.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=P6jKAegQiEw:ys5QSKv7aCs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=P6jKAegQiEw:ys5QSKv7aCs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=P6jKAegQiEw:ys5QSKv7aCs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=P6jKAegQiEw:ys5QSKv7aCs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=P6jKAegQiEw:ys5QSKv7aCs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=P6jKAegQiEw:ys5QSKv7aCs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/P6jKAegQiEw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=601#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=601" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=601</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.4.2 released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/sCpst9Y8_C8/" />
		<id>http://allievi.sssup.it/techblog/?p=597</id>
		<updated>2010-09-12T13:53:47Z</updated>
		<published>2010-09-12T08:55:32Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Uncategorized" />		<summary type="html"><![CDATA[Another week, another bugfix release for Lightspark! Apart from restoring the support for YouTube this release features the new plugin based audio framework that makes it possible to support other backends beside PulseAudio. At the moment both an ALSA and OpenAL plugins are being worked on. As always you can grab the release here on [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=597">&lt;p&gt;Another week, another bugfix release for Lightspark! Apart from restoring the support for YouTube this release features the new &lt;strong&gt;plugin based audio framework &lt;/strong&gt;that makes it possible to support other backends beside PulseAudio. At the moment both an ALSA and OpenAL plugins are being worked on.&lt;/p&gt;
&lt;p&gt;As always you can grab the release here on &lt;a href="http://launchpad.net/lightspark"&gt;Launchpad&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://flattr.com/thing/61245/Lightspark-0-4-4-2-released" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/button-static-50x60.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=sCpst9Y8_C8:ShJGsi8jObk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=sCpst9Y8_C8:ShJGsi8jObk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=sCpst9Y8_C8:ShJGsi8jObk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=sCpst9Y8_C8:ShJGsi8jObk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=sCpst9Y8_C8:ShJGsi8jObk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=sCpst9Y8_C8:ShJGsi8jObk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/sCpst9Y8_C8" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=597#comments" thr:count="21" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=597" thr:count="21" />
		<thr:total>21</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=597</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[GTG for old fashioned people]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/Jlu6dhXUa_A/" />
		<id>http://allievi.sssup.it/techblog/?p=589</id>
		<updated>2010-09-12T13:12:51Z</updated>
		<published>2010-09-06T07:41:58Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" />		<summary type="html"><![CDATA[This insomniac night I’ve added a little nice thing to Getting Things GNOME, which is the possibility to export and print a to-do list in a PocketMod format. This is nothing more than a little foldable booklet, so that you can carry around your grocery list without needing anything more technological than a pen (you [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=589">&lt;p style="text-align: left;"&gt;This insomniac night I’ve added a little nice thing to &lt;a href="http://gtg.fritalk.com"&gt;Getting Things GNOME&lt;/a&gt;, which is the possibility to export and print a to-do list in a &lt;a href="http://www.pocketmod.com/"&gt;PocketMod&lt;/a&gt; format. This is nothing more than a little foldable booklet, so that you can carry around your grocery list without needing anything more technological than a pen (you can also use strawberry juice to mark your tasks, which is way more recyclable and a little gory).&lt;/p&gt;
&lt;p style="text-align: left;"&gt;This all comes from a &lt;a href="https://bugs.edge.launchpad.net/gtg/+bug/630404"&gt;bug&lt;/a&gt; reported by Jan Girlich, so kudos to him!&lt;/p&gt;
&lt;p style="text-align: left;"&gt;Obligatory screenshot:&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/09/Screenshot.png"&gt;&lt;img class="aligncenter size-full wp-image-591" title="Screenshot" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/09/Screenshot.png" alt="" width="494" height="420" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;By the way, GTG export plugin supports templates, so creating your own webpage/pdf/t-shirt with your own tasks is easy. I’ll be glad to help anyone interested in that.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=Jlu6dhXUa_A:k8qKsXP9sMA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=Jlu6dhXUa_A:k8qKsXP9sMA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=Jlu6dhXUa_A:k8qKsXP9sMA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=Jlu6dhXUa_A:k8qKsXP9sMA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=Jlu6dhXUa_A:k8qKsXP9sMA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=Jlu6dhXUa_A:k8qKsXP9sMA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/Jlu6dhXUa_A" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=589#comments" thr:count="10" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=589" thr:count="10" />
		<thr:total>10</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=589</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.4.1 released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/CSHFTd85fOk/" />
		<id>http://allievi.sssup.it/techblog/?p=583</id>
		<updated>2010-09-02T17:56:06Z</updated>
		<published>2010-09-02T17:54:21Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="flattr" /><category scheme="http://allievi.sssup.it/techblog" term="release" /><category scheme="http://allievi.sssup.it/techblog" term="youtube" />		<summary type="html"><![CDATA[Hi, version 0.4.4.1 of the lightspark player has been just released. It’s mainly a bug fix release, the most relevant news are: Fixed a crash when using flashblock Restore support for YouTube Moreover, from this release large downloads are cached to disk to reduce memory pressure. As you may have noticed lightspark is now on [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=583">&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;version 0.4.4.1 of the lightspark player has been just released. It’s mainly a bug fix release, the most relevant news are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed a crash when using flashblock&lt;/li&gt;
&lt;li&gt;Restore support for YouTube&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Moreover, from this release large downloads are cached to disk to reduce memory pressure.&lt;/p&gt;
&lt;p&gt;As you may have noticed lightspark is now on &lt;a href="http://flattr.com"&gt;Flattr&lt;/a&gt; and the last few posts about lightspark included the “Flattr this” button. Moreover, the &lt;a href="http://raphaelhertzog.com/flattr-foss/"&gt;Flattr-foss&lt;/a&gt; project (that suggest free software to be supported using flattr) has &lt;a href="http://raphaelhertzog.com/2010/09/01/free-software-to-flattr-sep-2010/"&gt;recommended Lightspark for september&lt;/a&gt;. Thanks a lot to the Flattr-foss team for their interest and support! Many people flattered lightspark the last month and that is really appreciated. I’m not of course talking about the (little) money, what is awesome is the large support received from the community and even the smallest donation is greatly motivating. Thanks to everyone&lt;/p&gt;
&lt;p&gt;&lt;a href="http://flattr.com/thing/57565/Lightspark-0-4-4-1-released" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/button-static-50x60.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=CSHFTd85fOk:ldsT5fv-CyM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=CSHFTd85fOk:ldsT5fv-CyM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=CSHFTd85fOk:ldsT5fv-CyM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=CSHFTd85fOk:ldsT5fv-CyM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=CSHFTd85fOk:ldsT5fv-CyM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=CSHFTd85fOk:ldsT5fv-CyM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/CSHFTd85fOk" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=583#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=583" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=583</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.4 released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/M4hkvC5FJqk/" />
		<id>http://allievi.sssup.it/techblog/?p=578</id>
		<updated>2010-08-29T16:32:08Z</updated>
		<published>2010-08-29T16:28:48Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="graphics" /><category scheme="http://allievi.sssup.it/techblog" term="localization" /><category scheme="http://allievi.sssup.it/techblog" term="release" />		<summary type="html"><![CDATA[Lightspark 0.4.4 has been released today. Thanks a lot to all the people that made this release possible. Beside the usual amount of bug fixes several new features have been included Localization support (using gettext) ActionScript exception handling support More robust network handling Streams controls (Play/Pause/Stop) It should be noted that, although now video streams [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=578">&lt;div id="attachment_579" class="wp-caption aligncenter" style="width: 655px"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/08/age.png"&gt;&lt;img class="size-large wp-image-579" title="age" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/08/age-1024x408.png" alt="" width="645" height="257" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Architecture of the proposed upcoming Advanced Graphics Engine&lt;/p&gt;&lt;/div&gt;
&lt;p style="text-align: left;"&gt;Lightspark 0.4.4 has been released today. Thanks a lot to all the people that made this release possible. Beside the usual amount of bug fixes several new features have been included&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Localization support (using gettext)&lt;/li&gt;
&lt;li&gt;ActionScript exception handling support&lt;/li&gt;
&lt;li&gt;More robust network handling&lt;/li&gt;
&lt;li&gt;Streams controls (Play/Pause/Stop)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It should be noted that, although now video streams controls are supported they’ll be not usable in most YouTube videos as mouse event dispatching to controls is still clobbered by missing masking support.&lt;/p&gt;
&lt;p&gt;Lightspark now supports localized error messages, but we miss translations! So I’d like to invite any user (non developers included) willing to help Lightspark to contribute the translation for his/her native language.&lt;/p&gt;
&lt;p&gt;I’d also like to give some insight what is being worked on for the next release (0.4.5). First of all the pluginized audio backend is now mature enough to be merged upstream, this is the first step toward support for multiple audio backends. That said anyway Lightspark will always focus on functionality and not on the amount of backends offered. We’ll work to offer a very small number of fully working backends.&lt;/p&gt;
&lt;p&gt;In the mean time we’re also discussing a new faster and more powerful graphics architecture. My proposal is a mixed software/hardware rendering pipeline, somehow inspired by modern compositing window mangers. Static (defined in the SWF file) and dynamic (generated using ActionScript code) geometries will be rendered in software using cairo and exploiting the thread pool to be scalable on multi core architectures. The resulting surfaces and decoded video frames (if any) will be uploaded using Pixel Buffer Objects to offload the work to the video card (this usually involves a DMA transfer). OpenGL will then be used to blit the various rendered components on screen, while applying filters, effects and blending.&lt;/p&gt;
&lt;p&gt;That’s all folks. As always testing from as many people as possible is critical for the success of the project, so please try out this release and report any crashes/weird issues and anything you don’t like. I’d like to put an emphasis about this: &lt;strong&gt;never assume a bug is already known. &lt;/strong&gt;If you hit a crash take a look at&lt;a href="http://bugs.launchpad.net/lightspark"&gt; launchpad bug tracker&lt;/a&gt;. If your issue is not already reported, please do it!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://flattr.com/thing/55803/Lightspark-0-4-4-released" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/button-static-50x60.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=M4hkvC5FJqk:_xQWIdJrxqg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=M4hkvC5FJqk:_xQWIdJrxqg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=M4hkvC5FJqk:_xQWIdJrxqg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=M4hkvC5FJqk:_xQWIdJrxqg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=M4hkvC5FJqk:_xQWIdJrxqg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=M4hkvC5FJqk:_xQWIdJrxqg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/M4hkvC5FJqk" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=578#comments" thr:count="11" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=578" thr:count="11" />
		<thr:total>11</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=578</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting things GNOME and Remember the milk: call for testers!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/FrW70YoUjvc/" />
		<id>http://allievi.sssup.it/techblog/?p=569</id>
		<updated>2010-09-06T07:26:43Z</updated>
		<published>2010-08-25T17:02:30Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" />		<summary type="html"><![CDATA[Aloha planet, as you may know, Getting Things GNOME is a todo-manager software that, among other things, can synchronize the things-you-really-should-be-doing-instead-of-reading-this-post with various sources. One of its most popular features is the ability to synchronize with Remember the Milk. For the next release of GTG, I’ve written a new version of that synchronization, with features [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=569">&lt;p&gt;Aloha planet,&lt;/p&gt;
&lt;p&gt;as you may know, Getting Things GNOME is a todo-manager software that, among other things, can synchronize the things-you-really-should-be-doing-instead-of-reading-this-post with various sources.&lt;/p&gt;
&lt;p&gt;One of its most popular features is the ability to synchronize with &lt;a href="http://rememberthemilk.com"&gt;Remember the Milk&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For the next release of GTG, I’ve written a new version of that synchronization, with features a variety of nice things. Among those:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;background sync (set up once and forget about it)&lt;/li&gt;
&lt;li&gt;support for RTM recurrent tasks&lt;/li&gt;
&lt;li&gt;rollbacking of partial syncs&lt;/li&gt;
&lt;li&gt;on-the-fly sync from GTG to RTM&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before releasing that, however, I’d like to do have it well tested,  to ensure that no harm is done to your precious todo items, so.. I’m &lt;strong&gt;looking for testers!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you have the 5 minutes necessary and you’re interested in trying new stuff even before it hits a PPA, execute&lt;/p&gt;
&lt;pre&gt;tar czf gtg_backup.tgz .local/share/gtg/  #just in case, backup of your gtg install (if any)
sudo aptitude install bzr
bzr branch lp:~gtg-user/gtg/all_the_backends_merge_requests  gtg_backends
cd gtg_backends
./scripts/debug.sh -d #this lauches a debug version of GTG that doesn't touch your own GTG tasks&lt;/pre&gt;
&lt;p&gt;And go to Edit-&amp;gt;Backends to start (your existing GTG tasks won’t be touched, so you’re safe).&lt;/p&gt;
&lt;p&gt;You’re more than welcome to play with the other backends as well (and report bugs, as they should be ready for being released as well). Those are, at the moment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;twitter&lt;/li&gt;
&lt;li&gt;identi.ca&lt;/li&gt;
&lt;li&gt;tomboy&lt;/li&gt;
&lt;li&gt;gnote (needs development version of gnote)&lt;/li&gt;
&lt;li&gt;launchpad&lt;/li&gt;
&lt;li&gt;local file&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you find a bug, please report it to &lt;a href="https://bugs.edge.launchpad.net/gtg"&gt;https://bugs.edge.launchpad.net/gtg&lt;/a&gt; (linking this post).&lt;/p&gt;
&lt;p&gt;If you don’t fine any, leave a comment here, so we can know that we’re good (^_^).&lt;/p&gt;
&lt;p&gt;Thanks!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=FrW70YoUjvc:DBfOMFholJ0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=FrW70YoUjvc:DBfOMFholJ0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=FrW70YoUjvc:DBfOMFholJ0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=FrW70YoUjvc:DBfOMFholJ0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=FrW70YoUjvc:DBfOMFholJ0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=FrW70YoUjvc:DBfOMFholJ0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/FrW70YoUjvc" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=569#comments" thr:count="12" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=569" thr:count="12" />
		<thr:total>12</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=569</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.3 final release]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/346t3ioxqtc/" />
		<id>http://allievi.sssup.it/techblog/?p=557</id>
		<updated>2010-08-10T18:24:01Z</updated>
		<published>2010-08-10T18:17:43Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="gnash" /><category scheme="http://allievi.sssup.it/techblog" term="release" />		<summary type="html"><![CDATA[I’m officially announcing Lightspark 0.4.3. A couple of interesting features as been added since the RC and a good amount of bug fixes thanks to user reports. The aggregate changelog since 0.4.2 is huge! Here it is: Liquid layout support Faster rendering of the input layer Reduced memory consumption Support for H263/MP3 videos Smoother playback [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=557">&lt;p&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/08/g170.png"&gt;&lt;img class="aligncenter size-medium wp-image-558" title="g170" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/08/g170-300x217.png" alt="" width="300" height="217" /&gt;&lt;/a&gt;I’m officially announcing Lightspark 0.4.3. A couple of interesting features as been added since the RC and a good amount of bug fixes thanks to user reports. The aggregate changelog since 0.4.2 is huge! Here it is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Liquid layout support&lt;/li&gt;
&lt;li&gt;Faster rendering of the input layer&lt;/li&gt;
&lt;li&gt;Reduced memory consumption&lt;/li&gt;
&lt;li&gt;Support for H263/MP3 videos&lt;/li&gt;
&lt;li&gt;Smoother playback of audio and video&lt;/li&gt;
&lt;li&gt;Fallback on Gnash for older clips&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Many users asked why vimeo, hulu and many others video sharing sites don’t work while youtube does. The answer is, although flash based video players looks simple a lot of action script code is actually being executed under the hood. Support for youtube has been a priority given it’s huge popularity but I’d like to clarify that lightspark is not a youtube specific hack and that over time support will come for any site.&lt;/p&gt;
&lt;p&gt;As a way to help new developer join my effort I’d like to launch a “site adopting” campaign. Developers that are willing to work on lightspark, but are scared by the complexity of the challenge can choose a site using flash that is important/useful for them and work to implement the needed features. To help them I’m most always online in the #lightspark IRC channel and available to tutor them.&lt;/p&gt;
&lt;p&gt;As a closing news, after the last post a radeon user helped to shed some light over the ati related issues. radeon users are urged to upgrade at least the mesa 7.8.2 to try lightspark as the support for the needed GL features got definitely better. Keep reporting bugs if anything is not working even after the upgrade. Moreover, I’ve discovered today that firefox older than version 3.5.11 will not work as it misses a needed plugin interface, so keep your systems updated!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://flattr.com/thing/46811/Lightspark-0-4-3-released" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/button-static-50x60.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=346t3ioxqtc:L6vUGb7mmts:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=346t3ioxqtc:L6vUGb7mmts:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=346t3ioxqtc:L6vUGb7mmts:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=346t3ioxqtc:L6vUGb7mmts:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=346t3ioxqtc:L6vUGb7mmts:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=346t3ioxqtc:L6vUGb7mmts:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/346t3ioxqtc" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=557#comments" thr:count="22" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=557" thr:count="22" />
		<thr:total>22</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=557</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.3 RC1]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/out2sSBvGKo/" />
		<id>http://allievi.sssup.it/techblog/?p=553</id>
		<updated>2010-08-08T22:19:51Z</updated>
		<published>2010-08-08T22:17:13Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="OpenGL" /><category scheme="http://allievi.sssup.it/techblog" term="radeon" /><category scheme="http://allievi.sssup.it/techblog" term="release" />		<summary type="html"><![CDATA[Today has been published the first release candidate of Lightspark 0.4.3. Source tarballs are available as usual from launchpad. Prebuild packages for Ubuntu Lucid and Maverick are available from the PPA as usual. The new features in this release are Faster rendering Reduced memory consumption Support for H263/MP3 video (using FFmpeg) Smoother audio and video [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=553">&lt;p&gt;Today has been published the first release candidate of Lightspark 0.4.3. Source tarballs are available as usual from &lt;a href="http://launchpad.net/lightspark/"&gt;launchpad&lt;/a&gt;. Prebuild packages for Ubuntu Lucid and Maverick are available from the &lt;a href="http://launchpad.net/~sssup/+archive/sssup-ppa"&gt;PPA&lt;/a&gt; as usual.&lt;/p&gt;
&lt;p&gt;The new features in this release are&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Faster rendering&lt;/li&gt;
&lt;li&gt;Reduced memory consumption&lt;/li&gt;
&lt;li&gt;Support for H263/MP3 video (using &lt;strong&gt;FFmpeg&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Smoother audio and video playback&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Be sure to try this out and report bugs in launchpad and our irc channel (&lt;em&gt;irc://irc.freenode.org/lightspark&lt;/em&gt;). Users of radeon cards (and the open source radeon driver) are especially invited to try lightspark. Many radeon users complained about crashes and weird renderings which are often caused by missing features in the drivers. It would be nice to gather as much information as possible on working/non working cards to open a unique bug report upstream.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://flattr.com/thing/45979/Lightspark-0-4-3-RC1-announcement" target="_blank"&gt;&lt;img src="http://api.flattr.com/button/button-static-50x60.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=out2sSBvGKo:NpP-mDCswzM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=out2sSBvGKo:NpP-mDCswzM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=out2sSBvGKo:NpP-mDCswzM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=out2sSBvGKo:NpP-mDCswzM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=out2sSBvGKo:NpP-mDCswzM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=out2sSBvGKo:NpP-mDCswzM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/out2sSBvGKo" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=553#comments" thr:count="17" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=553" thr:count="17" />
		<thr:total>17</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=553</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting Things GNOME!         —         GSoC review (#11)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/GnWlnVl_XdE/" />
		<id>http://allievi.sssup.it/techblog/?p=542</id>
		<updated>2010-08-06T18:33:18Z</updated>
		<published>2010-08-06T18:16:30Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Uncategorized" />		<summary type="html"><![CDATA[Hello planet! I’m back from GUADEC. It was my first conference about open source and it was great. I’ve found particularly inspiring the talk by Guillaume Desmottes about Telepathy and Epiphany, which can be great to extend GTG possibilities in collaboration. The talk by Jake Edge about promoting free software projects was also very interesting, [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=542">&lt;p&gt;Hello planet!&lt;br /&gt;
I’m back from GUADEC. It was my first conference about open source and it was great.&lt;br /&gt;
I’ve found particularly inspiring the talk by Guillaume Desmottes about Telepathy and Epiphany, which can be great to extend GTG possibilities in collaboration.&lt;br /&gt;
The talk by Jake Edge about promoting free software projects was also very interesting, in particular for the young Lightspark project (that went completely unnoticed for a few months before showing up on planet GNOME).&lt;/p&gt;
&lt;p&gt;Thanks to the exciting talks and people at GUADEC,   the GTG team (even the people who were not there!) has been working fervently on a nice rewrite of some parts of GTG core, along with a lot of unit-tests. Hopefully, a lot of bugs will be closed thanks to this, and GTG will be nicer to code.&lt;/p&gt;
&lt;div id="attachment_547" class="wp-caption aligncenter" style="width: 624px"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/08/IMG_4452.jpg"&gt;&lt;img class="size-large wp-image-547 " title="IMG_4452" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/08/IMG_4452-1024x682.jpg" alt="" width="614" height="409" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Some of the GTG people at GUADEC. From left to right: Bertrand Rousseau, Karlo Jez, Lionel Dricot and me.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;As for my Google Summer of Code on Getting Things Gnome support for multiple backends, this week has seen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a port of my Evolution plugin as a backend (that was the last one planned)&lt;/li&gt;
&lt;li&gt;refactoring of the Twitter plugin to get authorization through Oauth (using  the tweepy library, thanks Tante for the hint)&lt;/li&gt;
&lt;li&gt;docs, docs, docs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next week, I’ll keep documenting and testing. I should also write a guide on how to write new backends. See you next week!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=GnWlnVl_XdE:bDLg-jJMwO8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=GnWlnVl_XdE:bDLg-jJMwO8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=GnWlnVl_XdE:bDLg-jJMwO8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=GnWlnVl_XdE:bDLg-jJMwO8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=GnWlnVl_XdE:bDLg-jJMwO8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=GnWlnVl_XdE:bDLg-jJMwO8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/GnWlnVl_XdE" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=542#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=542" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=542</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.2.3 bug fix release]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/JuRFaTaV5pE/" />
		<id>http://allievi.sssup.it/techblog/?p=539</id>
		<updated>2010-08-04T17:42:22Z</updated>
		<published>2010-08-04T17:42:22Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="bugs" />		<summary type="html"><![CDATA[Just a brief announcement for release 0.4.2.3 of the Lightspark project, the modern, open source flash player This release will not show off huge user visible changing but fixes a number of stability problems, give it a try. The current focus of development is testing lightspark’s VM against the ActionScript testsuite provided by tamarin. In [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=539">&lt;p&gt;Just a brief announcement for release 0.4.2.3 of the Lightspark project, the modern, open source flash player&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/08/g169.png"&gt;&lt;img class="alignright size-full wp-image-540" title="g169" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/08/g169.png" alt="" width="192" height="192" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This release will not show off huge user visible changing but fixes a number of stability problems, give it a try.&lt;/p&gt;
&lt;p&gt;The current focus of development is testing lightspark’s VM against the ActionScript testsuite provided by &lt;a href="http://www.mozilla.org/projects/tamarin/"&gt;tamarin&lt;/a&gt;. In the meanwhile I’ve also found a way to reduce lightspark memory consumption while increasing performances, but the solution is not stable yet for prime time.&lt;/p&gt;
&lt;p&gt;Stay tuned.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=JuRFaTaV5pE:D9fes4Vian4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=JuRFaTaV5pE:D9fes4Vian4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=JuRFaTaV5pE:D9fes4Vian4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=JuRFaTaV5pE:D9fes4Vian4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=JuRFaTaV5pE:D9fes4Vian4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=JuRFaTaV5pE:D9fes4Vian4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/JuRFaTaV5pE" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=539#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=539" thr:count="5" />
		<thr:total>5</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=539</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting Things GNOME!        —        GSoC review (#10)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/uHKQXi0y7Oo/" />
		<id>http://allievi.sssup.it/techblog/?p=527</id>
		<updated>2010-07-30T08:32:19Z</updated>
		<published>2010-07-30T08:30:44Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" /><category scheme="http://allievi.sssup.it/techblog" term="Google Summer of Code" />		<summary type="html"><![CDATA[I’m at GUADEC! It’s been awesomely great so far. I’ve finally met the guys I’ve been working with and new people from all over GNOME. Thanks to them and to the talks I’ve been following we have new ideas for GTG! I’ll tell you about them as they get a little more polished, but they [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=527">&lt;p style="text-align: left;"&gt;I’m at &lt;a href="http://www.guadec.org/index.php/guadec/index"&gt;GUADEC&lt;/a&gt;!&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/07/IMAG0523.jpg"&gt;&lt;img class="aligncenter size-large wp-image-528" title="IMAG0523" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/07/IMAG0523-613x1024.jpg" alt="" width="429" height="717" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;It’s been awesomely great so far. I’ve finally met the guys I’ve been working with and new people from all over GNOME. Thanks to them and to the talks I’ve been following we have new ideas for GTG! I’ll tell you about them as they get a little more polished, but they will involve Telepathy.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;As for my GSoC work, the first version of the Remember the milk backend is now complete. A couple of small bugs still need to be fixed &lt;img src='http://allievi.sssup.it/techblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p style="text-align: left;"&gt;Thanks to the first days GUADEC wifi, I’ve been able to test my backends on an unreliable link (now the network works perfectly).&lt;/p&gt;
&lt;p style="text-align: left;"&gt;We’ve also been having a small GTG hackfest to fix the nastiest bugs in trunk.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;See you next week, and thanks for all the people organizing GUADEC, giving talks or just being here!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=uHKQXi0y7Oo:p6I-jIDN4Nk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=uHKQXi0y7Oo:p6I-jIDN4Nk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=uHKQXi0y7Oo:p6I-jIDN4Nk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=uHKQXi0y7Oo:p6I-jIDN4Nk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=uHKQXi0y7Oo:p6I-jIDN4Nk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=uHKQXi0y7Oo:p6I-jIDN4Nk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/uHKQXi0y7Oo" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=527#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=527" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=527</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.2.2 released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/03V4HUp2lTM/" />
		<id>http://allievi.sssup.it/techblog/?p=525</id>
		<updated>2010-07-27T03:34:07Z</updated>
		<published>2010-07-27T03:34:07Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Uncategorized" />		<summary type="html"><![CDATA[Trying to keep up with the old rule “Release early, release often” I’ happy to announce release 0.4.2.2 open source flash player. This apparently small point release actually includes the biggest feature plannend for the upcoming 0.4.3 release, namely Gnash fallback on older SWF clips.  Lightspark currently relies no Gnash for any Flash content that [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=525">&lt;p&gt;Trying to keep up with the old rule “Release early, release often” I’ happy to announce release 0.4.2.2 open source flash player.&lt;/p&gt;
&lt;p&gt;This apparently small point release actually includes the biggest feature plannend for the upcoming 0.4.3 release, namely &lt;strong&gt;Gnash fallback&lt;/strong&gt; on older SWF clips.  Lightspark currently relies no Gnash for any Flash content that does not require AVM2 (ActionScript 3) support.&lt;/p&gt;
&lt;p&gt;I would also like to explain an issue that many users and testers reported. Firefox is not able to handle multiple plugin for the same file type! Not even if only one of those plugins is actually enabled. So, if lightspark is installed alongside adobe’s player or Gnash no flash content will be displayed. This is a firefox bug, I’ve reported the bug and proposed a patch that is currently waiting the review.&lt;/p&gt;
&lt;p&gt;The source of the release is as always available on &lt;a href="http://launchpad.net/lightspark"&gt;launchpad&lt;/a&gt;. Binary packages for Ubuntu Lucid and Maverick will be available on the usual &lt;a href="http://launchpad.net/~sssup/+archive/sssup-ppa"&gt;PPA&lt;/a&gt; (in a couple hours from now, Launchpad seems pretty busy at the moment). Moreover, since the last announcement lightspark has been also included in the debian &lt;a href="http://packages.debian.org/search?keywords=lightspark&amp;amp;searchon=names&amp;amp;suite=experimental&amp;amp;section=all"&gt;experimental&lt;/a&gt; suite (thanks to Didier Raboud and Luca Falavigna).&lt;/p&gt;
&lt;p&gt;Stay tuned, and follow the &lt;a href="http://sourceforge.net/apps/trac/lightspark/wiki/RoadMap"&gt;roadmap&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=03V4HUp2lTM:uauvlxZ3zaY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=03V4HUp2lTM:uauvlxZ3zaY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=03V4HUp2lTM:uauvlxZ3zaY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=03V4HUp2lTM:uauvlxZ3zaY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=03V4HUp2lTM:uauvlxZ3zaY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=03V4HUp2lTM:uauvlxZ3zaY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/03V4HUp2lTM" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=525#comments" thr:count="9" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=525" thr:count="9" />
		<thr:total>9</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=525</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting Things GNOME!       —       GSoC review (#9)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/NsUpKnEl7b4/" />
		<id>http://allievi.sssup.it/techblog/?p=517</id>
		<updated>2010-07-23T17:57:29Z</updated>
		<published>2010-07-23T17:51:36Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Uncategorized" />		<summary type="html"><![CDATA[This week in “Getting Things Gnome!” development of multiple backends: As for yesterday’s post, we can now automatically import (some) Evolution mails in GTG I’ve been working on the Remember The Milk backend to speed it up. Since RTM allows only one API call per second, anything cacheable must be cached. I’ve been testing and [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=517">&lt;p&gt;This week in “Getting Things Gnome!” development of multiple backends:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As for yesterday’s post, we can now automatically import (some) Evolution mails in GTG&lt;/li&gt;
&lt;li&gt;I’ve been working on the Remember The Milk backend to speed it up. Since RTM allows only one API call per second, anything cacheable must be cached.&lt;/li&gt;
&lt;li&gt;I’ve been testing and fixing the couchdb backend. Now it syncs on ubuntu one without error &lt;a href="http://www.codinghorror.com/blog/2007/03/the-works-on-my-machine-certification-program.html"&gt;on my machine&lt;/a&gt;. It would be great if someone is willing to test it. Keep in mind that ubuntu one is syncing couchdb databases every ten minutes or so. Instructions on how to test are &lt;a href="http://live.gnome.org/gtg/soc2010_invernizzi_portfolio"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next week, I’ll be at GUADEC! I really don’t know if I’ll have the time to work on this at all, but if I do, it will be all about the RTM backend.&lt;/p&gt;
&lt;p&gt;See you in &lt;em&gt;Den Haag (&lt;/em&gt;or &lt;em&gt;L’Aia&lt;/em&gt;, in Italian. I wonder why..)!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NsUpKnEl7b4:Zg_O8gw6_Xc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NsUpKnEl7b4:Zg_O8gw6_Xc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NsUpKnEl7b4:Zg_O8gw6_Xc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=NsUpKnEl7b4:Zg_O8gw6_Xc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NsUpKnEl7b4:Zg_O8gw6_Xc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=NsUpKnEl7b4:Zg_O8gw6_Xc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/NsUpKnEl7b4" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=517#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=517" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=517</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Automatically convert a new mail in Evolution to a GTG task]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/Eb_JKN7P3yQ/" />
		<id>http://allievi.sssup.it/techblog/?p=500</id>
		<updated>2010-07-22T14:52:12Z</updated>
		<published>2010-07-22T14:52:12Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" /><category scheme="http://allievi.sssup.it/techblog" term="Google Summer of Code" />		<summary type="html"><![CDATA[A GTG user, Damiano Venturin, asked me if it was possible to convert a mail stored in Evolution to a GTG task, as it can be done in mutt. This is a pretty interesting question. There are two different ways: automatic conversion of new mails tagged in some way (e.g. “Note to self: go to [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=500">&lt;p&gt;A GTG user, &lt;a href="http://twitter.com/damko"&gt;Damiano Venturin&lt;/a&gt;, asked me if it was possible to convert a mail stored in Evolution to a GTG task, as it can be done in &lt;a href="http://www2.bryceharrington.org:8080/drupal6/node/105"&gt;mutt&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is a pretty interesting question. There are two different ways:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 13.3333px;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: 13.3333px;"&gt;automatic conversion of new mails tagged in some way (e.g. “Note to self: go to surf tomorrow #TODO”)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13.3333px;"&gt;manual conversion of the mail currently being read&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both of them work. I’ll show you how:&lt;/p&gt;
&lt;h4&gt;Automatic conversion of new mails&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Download &lt;a href="http://www.uweb.ucsb.edu/~invernizzi/temp/gtg_new_mail"&gt;this script&lt;/a&gt;, place it anywhere you like and make sure you give it executing permission (that is, chmod +x &amp;lt;script-name&amp;gt;)&lt;/li&gt;
&lt;li&gt;Open Evolution, in the mail tab&lt;/li&gt;
&lt;li&gt;From the menu, select Edit-&amp;gt;Message Filters&lt;/li&gt;
&lt;li&gt;add a new filter&lt;/li&gt;
&lt;li&gt;Edit the filter such that it catches only the mails you want to transform in tasks&lt;/li&gt;
&lt;li&gt;Edit the filter such that it executes the downloaded script&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size: 13.3333px;"&gt;This screenshot shows all these steps&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/07/Screenshot.png"&gt;&lt;img class="aligncenter size-full wp-image-502" title="Screenshot" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/07/Screenshot.png" alt="" width="562" height="632" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;Here, when a new mail containing the text #task is received, the user is notified via the usual notifier bubbles and a new gtg task is created.&lt;/p&gt;
&lt;h4&gt;Manual conversion of  mails&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;In GTG, enable the Evolution plugin&lt;/li&gt;
&lt;li&gt;In Evolution, activate the Mail-to-Task plugin (via the menu bar: Edit-&amp;gt;Plugins)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now, each time you want to import a mail in GTG, you should:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;in Evolution, from the global mail view (that is, not from an opened mail), right click and select “Create a task”&lt;/li&gt;
&lt;li&gt;in GTG, synchronize with evolution.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/07/Screenshot-12.png"&gt;&lt;img class="aligncenter size-full wp-image-507" title="Screenshot-1" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/07/Screenshot-12.png" alt="" width="500" height="425" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Evolution plugin for GTG will soon be transformed in a backend, which will make the synchronization completely automatic (removing the need for the second step).&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=Eb_JKN7P3yQ:_3f_jM0CdH0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=Eb_JKN7P3yQ:_3f_jM0CdH0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=Eb_JKN7P3yQ:_3f_jM0CdH0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=Eb_JKN7P3yQ:_3f_jM0CdH0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=Eb_JKN7P3yQ:_3f_jM0CdH0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=Eb_JKN7P3yQ:_3f_jM0CdH0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/Eb_JKN7P3yQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=500#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=500" thr:count="4" />
		<thr:total>4</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=500</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.2 released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/0NuBTwLHMeA/" />
		<id>http://allievi.sssup.it/techblog/?p=496</id>
		<updated>2010-07-20T18:47:51Z</updated>
		<published>2010-07-20T18:30:44Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="chrome" /><category scheme="http://allievi.sssup.it/techblog" term="release" />		<summary type="html"><![CDATA[Version 0.4.2 of Lightspark, the modern, efficient, open source Flash player is now officially released, with a couple of last moment fixes and improvements. The main features of this new release are: Use fontconfig to select fonts Greater compatibility with youtube video Sound synchronization Chrome/Chromium support Firefox’s OOPP support If you use a version of [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=496">&lt;p&gt;Version 0.4.2 of Lightspark, the modern, efficient, open source Flash player is now officially released, with a couple of last moment fixes and improvements.&lt;/p&gt;
&lt;p&gt;The main features of this new release are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use fontconfig to select fonts&lt;/li&gt;
&lt;li&gt;Greater compatibility with youtube video&lt;/li&gt;
&lt;li&gt;Sound synchronization&lt;/li&gt;
&lt;li&gt;Chrome/Chromium support&lt;/li&gt;
&lt;li&gt;Firefox’s OOPP support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you use a version of firefox newer than 3.6.4 you can ensure a crash free experience by enabling OOPP mode for lightspark, for instructions see &lt;a href="http://sourceforge.net/apps/trac/lightspark/wiki/Building"&gt;the wiki&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Package for Ubuntu Lucid and debian testing/unstable are provided as usually by the PPA. Packages for Fedora 13 are also available (currently only for the i686 platoform). See the &lt;a href="http://sourceforge.net/apps/trac/lightspark/wiki/Building"&gt;installation page&lt;/a&gt; for more information.&lt;/p&gt;
&lt;p&gt;To test lightspark install it from packages or sources and try one of the following pages:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=4N2YWRJ-ppo"&gt;http://www.youtube.com/watch?v=4N2YWRJ-ppo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=XITHbsUUlYI"&gt;http://www.youtube.com/watch?v=XITHbsUUlYI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=-j7c0u9yZ8M"&gt;http://www.youtube.com/watch?v=-j7c0u9yZ8M&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=0NuBTwLHMeA:5gBUCXEKW8g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=0NuBTwLHMeA:5gBUCXEKW8g:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=0NuBTwLHMeA:5gBUCXEKW8g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=0NuBTwLHMeA:5gBUCXEKW8g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=0NuBTwLHMeA:5gBUCXEKW8g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=0NuBTwLHMeA:5gBUCXEKW8g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/0NuBTwLHMeA" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=496#comments" thr:count="37" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=496" thr:count="37" />
		<thr:total>37</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=496</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.2 RC3... almost ready]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/zjgXAmGDR0M/" />
		<id>http://allievi.sssup.it/techblog/?p=492</id>
		<updated>2010-07-18T14:53:43Z</updated>
		<published>2010-07-17T18:48:40Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="chrome" /><category scheme="http://allievi.sssup.it/techblog" term="chromium" /><category scheme="http://allievi.sssup.it/techblog" term="Flash" /><category scheme="http://allievi.sssup.it/techblog" term="ppc" />		<summary type="html"><![CDATA[Having now sound synchronization fully working Lightspark has all the feature programmed for the 0.4.2 release! So no new big changes will be introduced, except for critical bugs reported. But there are more big news! As I’ve revamped the plugin by switching from the old deprecated Xt interface to GTK, Lightspark has also gained Chrome/Chromium [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=492">&lt;p&gt;Having now sound synchronization fully working Lightspark has all the feature programmed for the 0.4.2 release! So no new big changes will be introduced, except for critical bugs reported.&lt;/p&gt;
&lt;p&gt;But there are more big news! As I’ve revamped the plugin by switching from the old deprecated Xt interface to GTK, Lightspark has also gained &lt;strong&gt;Chrome/Chromium Plugin&lt;/strong&gt; support and support for the new Out Of Process mode offered by newer versions of Firefox for improved stability and crash free experience.&lt;/p&gt;
&lt;p&gt;Moreover, a contributor is currently porting Lightspark for the &lt;strong&gt;PowerPC&lt;/strong&gt; platform and the work is currently in a very advanced stage. So PPC guys cheer up, Flash is coming!&lt;/p&gt;
&lt;p&gt;I’m not sure those feature will be stable enough for the final 0.4.2 but will be surely included in the early 0.4.3 release cycle.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=zjgXAmGDR0M:vC5sdsGLZn0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=zjgXAmGDR0M:vC5sdsGLZn0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=zjgXAmGDR0M:vC5sdsGLZn0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=zjgXAmGDR0M:vC5sdsGLZn0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=zjgXAmGDR0M:vC5sdsGLZn0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=zjgXAmGDR0M:vC5sdsGLZn0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/zjgXAmGDR0M" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=492#comments" thr:count="9" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=492" thr:count="9" />
		<thr:total>9</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=492</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting Things GNOME!       —       GSoC review (#8)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/yxD4vmgbOtA/" />
		<id>http://allievi.sssup.it/techblog/?p=483</id>
		<updated>2010-07-23T17:33:35Z</updated>
		<published>2010-07-16T16:25:26Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" /><category scheme="http://allievi.sssup.it/techblog" term="Google Summer of Code" />		<summary type="html"><![CDATA[Hello and welcome to my GSoC report for my eighth week of work about supporting multiple backends in “Getting Things Gnome!”. This week, I’ve finished the first complete version of the couchdb backend. This one is supporting all GTG’s features (subtasks, tags, fuzzy dates...), so it can be used as default backend (instead of the [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=483">&lt;p&gt;Hello and welcome to my GSoC report for my eighth week of work about supporting multiple backends in “Getting Things Gnome!”.&lt;/p&gt;
&lt;p&gt;This week, I’ve finished the first complete version of the couchdb backend. This one is supporting all GTG’s features (subtasks, tags, fuzzy dates...), so it can be used as default backend (instead of the xml one).&lt;/p&gt;
&lt;p&gt;Its performances are fairly good: for small and medium sets of tasks (I’ve been testing it with ~500 tasks) it’s a tad slower than the xml one, but I suspect that for big tasks sets there are speed advantages. Anyway, being GTG 0.3 fully asyncronous, users shouldn’t even notice it.&lt;/p&gt;
&lt;p&gt;I’ve written a unit-test for it, and started to check how it behaves with replicating couchdb databases. It works quite well (a few crashes occur from time to time), but I’ll test it a bit more next week.&lt;/p&gt;
&lt;p&gt;I haven’t been able to get automatic replication of the database via Ubuntu One so far. I’m starting to think that something is wrong in my installation.&lt;/p&gt;
&lt;p&gt;Next week, I’ll keep on testing the couchdb backend and I’ll work on finishing the RTM one (which should be the last big one, since the Evolution one is very easy, thanks to the nice api).&lt;/p&gt;
&lt;p&gt;Ciao!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=yxD4vmgbOtA:agfiRk-Oiag:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=yxD4vmgbOtA:agfiRk-Oiag:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=yxD4vmgbOtA:agfiRk-Oiag:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=yxD4vmgbOtA:agfiRk-Oiag:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=yxD4vmgbOtA:agfiRk-Oiag:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=yxD4vmgbOtA:agfiRk-Oiag:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/yxD4vmgbOtA" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=483#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=483" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=483</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting Things GNOME!      —      GSoC review (#7)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/vQZpYkHEMrI/" />
		<id>http://allievi.sssup.it/techblog/?p=465</id>
		<updated>2010-07-09T21:15:30Z</updated>
		<published>2010-07-09T21:13:58Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" /><category scheme="http://allievi.sssup.it/techblog" term="Google Summer of Code" />		<summary type="html"><![CDATA[This week, I’ve started to work on  two backends planned for my GSoC on “Getting Things Gnome!”. One is the Remember The Milk backend, for which I’ve written the authentication system and started to sync task titles (I already have the code for the rest in the old plugin, but it will need a bit [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=465">&lt;p style="text-align: left;"&gt;This week, I’ve started to work on  two backends planned for my GSoC on “Getting Things Gnome!”.&lt;br /&gt;
One is the Remember The Milk backend, for which I’ve written the authentication system and started to sync task titles (I already have the code for the rest in the old plugin, but it will need a bit of refactoring to make it easier to read and compatible to the new backend system).&lt;br /&gt;
The more interesting backend is the one based on couchdb, which should enable to keep two GTG installations in sync. This backend should also work on the Ubuntu, which has a couchdb implementation which differs a little bit from the standard (e.g. deleted records are not really deleted, but are “marked” as deleted — FYI, a good tutorial on Couchdb and Python is the &lt;a href="http://arstechnica.com/open-source/guides/2009/12/code-tutorial-make-your-application-sync-with-ubuntu-one.ars"&gt;one&lt;/a&gt; on Ars by Ryan Paul). Anyway, so far, it’s working nicely, although it’s not yet supporting all the features of a  gtg Task.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;span style="font-size: 13.3333px;"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/07/Screenshot-11.png"&gt;&lt;img class="aligncenter size-large wp-image-474" style="display: block; margin-left: auto; margin-right: auto; border: 0px initial initial;" title="Screenshot-1" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/07/Screenshot-11-1024x321.png" alt="" width="655" height="206" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id="_mcePaste" style="text-align: left;"&gt;Next week, I’m planning to expand GTG Dates module to make serializing dates easier. I’ll also have to finish and test threads destruction upon closing GTG, to ensure tasks operations to be atomic.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;ps: it seems that an API for Google Tasks should be announced &lt;a href="http://code.google.com/p/gdata-issues/issues/detail?id=987"&gt;soon&lt;/a&gt;. That would be a great backend for GTG!&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=vQZpYkHEMrI:clX0oNBnwgE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=vQZpYkHEMrI:clX0oNBnwgE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=vQZpYkHEMrI:clX0oNBnwgE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=vQZpYkHEMrI:clX0oNBnwgE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=vQZpYkHEMrI:clX0oNBnwgE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=vQZpYkHEMrI:clX0oNBnwgE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/vQZpYkHEMrI" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=465#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=465" thr:count="4" />
		<thr:total>4</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=465</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.2 RC2... it shines!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/LAvUg7sqmJg/" />
		<id>http://allievi.sssup.it/techblog/?p=449</id>
		<updated>2010-07-03T23:20:13Z</updated>
		<published>2010-07-03T23:10:14Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Uncategorized" />		<summary type="html"><![CDATA[I’m very proud to announce the the second release candidate of Lightspark 0.4.2: the modern, efficient and open source Flash Player implementation. Thanks to all the people that tested the project and reported feedback on the bug tracker and on the IRC channel, without their help this awesome results would have not been possible. Although [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=449">&lt;p style="text-align: center;"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/07/ls-youtube-avatar.png"&gt;&lt;img class="size-full wp-image-451 aligncenter" title="ls-youtube-avatar" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/07/ls-youtube-avatar.png" alt="" width="549" height="430" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;I’m very proud to announce the the second release candidate of &lt;strong&gt;Lightspark 0.4.2: &lt;/strong&gt;the modern, efficient and open source &lt;strong&gt;Flash Player implementation&lt;/strong&gt;. Thanks to all the people that tested the project and reported feedback on the &lt;a href="http://bugs.launchpad.net/lightspark"&gt;bug tracker&lt;/a&gt; and on the &lt;a href="irc://irc.freenode.net/lightspark"&gt;IRC channel&lt;/a&gt;, without their help this awesome results would have not been possible.&lt;/p&gt;
&lt;p&gt;Although we’re still missing a couple of feature before the real 0.4.2 most of the pieces are already in place. Let’s see what you can expect from this release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Youtube support for H264 videos&lt;/strong&gt;. Currently only those are supported as they are played using the Action Script 3 based player. This may seem a huge limitation, but actually a huge part of the YouTube contents are available in H264 format. This limitation will go away when lightspark will be able to fall back to Gnash. This feature is scheduled for 0.4.3&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Even faster video presentation &lt;/strong&gt;after a bit of refinement of the SSE2 based video packer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sound support&lt;/strong&gt; using pulseaudio. If you want to try Lightspark without installing the pulse server that’s ok, as Lightspark detects at runtime if the  server is available and if not it just politely disables sound.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As usual you can grab the source from &lt;a href="http://launchpad.net/lightspark"&gt;Launchpad&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Official binary packages for Ubuntu Lucid and Debian testing are available from my PPA &lt;a href="http://launchpad.net/~sssup/+archive/sssup-ppa"&gt;http://launchpad.net/~sssup/+archive/sssup-ppa&lt;/a&gt; (in launchpad build queue as I’m writing)&lt;/p&gt;
&lt;p&gt;Packages for Fedora 13 are also available &lt;a href="http://hicham.fedorapeople.org/lightspark/"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As I mentioned before we’re not yet ready for the final release as the following issues needs to be fixed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sound is not synchronized&lt;/li&gt;
&lt;li&gt;Sound sample rate is not always correctly detected&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Beside those known issue, everything should be pretty ok. So go on, give it a try!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=LAvUg7sqmJg:swPL4XkwTw0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=LAvUg7sqmJg:swPL4XkwTw0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=LAvUg7sqmJg:swPL4XkwTw0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=LAvUg7sqmJg:swPL4XkwTw0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=LAvUg7sqmJg:swPL4XkwTw0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=LAvUg7sqmJg:swPL4XkwTw0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/LAvUg7sqmJg" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=449#comments" thr:count="39" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=449" thr:count="39" />
		<thr:total>39</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=449</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting Things GNOME!     —     GSoC review (#6)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/X5ShkxufOEE/" />
		<id>http://allievi.sssup.it/techblog/?p=427</id>
		<updated>2010-07-02T19:19:57Z</updated>
		<published>2010-07-02T19:19:57Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" /><category scheme="http://allievi.sssup.it/techblog" term="Google Summer of Code" />		<summary type="html"><![CDATA[This week has been busy for me, since I have (just a few hours ago) discussed my master thesis. Anyway, now I’m going to be working full time on GTG, which is nice. So, this week I have finished the first version of the Launchpad backend (importing in a read-only fashion launchpad bugs assigned to [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=427">&lt;p&gt;This week has been busy for me, since I have (just a few hours ago) discussed my master thesis. Anyway, now I’m going to be working full time on GTG, which is nice.&lt;/p&gt;
&lt;p&gt;So, this week I have finished the first version of the Launchpad backend (importing in a read-only fashion launchpad bugs assigned to somebody in GTG). I’m thinking if it would be interesting to have the possibility of changing something about the bug through its task in GTG, but I haven’t found nice ideas so far. I’ll  look into making a bugzilla backend, since many people requested that.&lt;/p&gt;
&lt;p&gt;Secondly, I’ve written an export backend to Zeitgeist, so that tasks that have been completed are also visible there. This makes it easy to see what it has been done day by day. Another approach would be informing Zeitgeist when a task gets modified, created and so on (like a regular document). While this second approach is more “zeitgeisty” (since it leaves a trace of the activity of the user), I think that for todo items the important information to keep trace of is when they get done. I’ll see what users prefer when they start using it, or you can leave your opinion in the comments here.&lt;/p&gt;
&lt;p&gt;I’ve also written a patch to gnome-activity-journal to support TODO items (which are supported in Zeitgeist 0.4 which has just been released, and GAJ is being updated to use that).&lt;br /&gt;
That’s what you should get in September (~ planned GTG release time):&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/07/zeitgeist1.jpg"&gt;&lt;img class="aligncenter size-full wp-image-429" title="zeitgeist1" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/07/zeitgeist0.jpg" alt="" width="515" height="322" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/07/zeitgeist0.jpg"&gt;&lt;img class="aligncenter size-full wp-image-429" title="zeitgeist1" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/07/zeitgeist1.jpg" alt="" width="515" height="322" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next week, I’ve a lot of things to do. A few of them are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: 13.3333px;"&gt;I’ll add a “remember the milk” backend, which will have a series of advantages versus my old plugin (automatic syncing is one of them)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13.3333px;"&gt;I’ll review and ask for merging to trunk the code for my UI and the tomboy backend, so that other developers and brave users can start using my code&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13.3333px;"&gt;I’ll make order among my threads, since a few libraries that I used have a series of synchronous calls which can make closing GTG slower than normal. I’ve discussed this with a friend (the creator of Lightspark), and a few interesting ideas have come out.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=X5ShkxufOEE:WvPTagbgpvs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=X5ShkxufOEE:WvPTagbgpvs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=X5ShkxufOEE:WvPTagbgpvs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=X5ShkxufOEE:WvPTagbgpvs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=X5ShkxufOEE:WvPTagbgpvs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=X5ShkxufOEE:WvPTagbgpvs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/X5ShkxufOEE" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=427#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=427" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=427</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting Things GNOME!    —    GSoC review (#5)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/PT6DR9tMfvM/" />
		<id>http://allievi.sssup.it/techblog/?p=412</id>
		<updated>2010-06-24T21:50:39Z</updated>
		<published>2010-06-24T21:50:39Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" /><category scheme="http://allievi.sssup.it/techblog" term="Google Summer of Code" />		<summary type="html"><![CDATA[Another GSoC week has gone, and my project with “Getting Things Gnome!” has moved forward. We now have a complete tomboy backend. Tomboy notes matching a particular @tag (you can configure multiple tags, or get all notes) are imported in GTG. The synchronization is both ways: if you change  something in Tomboy, GTG will be updated [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=412">&lt;p&gt;Another GSoC week has gone, and my project with &lt;a href="http://gtg.fritalk.com"&gt;“Getting Things Gnome!”&lt;/a&gt; has moved forward.&lt;/p&gt;
&lt;p&gt;We now have a complete tomboy backend. Tomboy notes matching a particular @tag (you can configure multiple tags, or get all notes) are imported in GTG. The synchronization is both ways: if you change  something in Tomboy, GTG will be updated and vice versa (and GTG doesn’t need to be running when the modification is done).&lt;/p&gt;
&lt;p&gt;That backend comes with a unit test, which has helped me spot a few bugs. The tomboy dbus interface is synchronous, which coupled with the presence of a &lt;a href="http://en.wikipedia.org/wiki/Global_Interpreter_Lock"&gt;Global Interpreter Lock&lt;/a&gt; in python, has caused a few weird hangs during execution, as threads were not really indipendent. Anyway, now everything seems to work fine &lt;img src='http://allievi.sssup.it/techblog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;Secondly, the new backend framework has landed in GTG Trunk, so my work is starting to be tested by a few reckless testers. Thanks!&lt;/p&gt;
&lt;p&gt;Lastly, I’ve been working on a &lt;a href="http://launchpad.net"&gt;Launchpad&lt;/a&gt; backend, which imports (read only) the bugs assigned to you on that bug tracker. This one still needs a little work, as I’ve started working on it yesterday, but it will be ready and tested for next week. The synchronization engine, which is common for all backends (and generic, as the only requirements it has is that objects it syncs have unique id and a modification date), really does most of the work.&lt;/p&gt;
&lt;p&gt;As usual, a screenshot with the Launchpad backend at work:&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/06/Screenshot-11.png"&gt;&lt;img class="aligncenter size-full wp-image-413" title="Screenshot-1" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/06/Screenshot-11.png" alt="" width="507" height="403" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next week I’ll work a little less, as I have my “pre-degree” exam. I’ve already done most of the things I’ve put in my proposal (I’m missing the RTM and Evolution backends, which are just a matter of converting my old plugins, and a couchdb backend –which was optional, but I certantly have the time to do it), so I’m confident I will finish in time.&lt;/p&gt;
&lt;p&gt;Have a good weekend!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=PT6DR9tMfvM:luzGrP5UK34:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=PT6DR9tMfvM:luzGrP5UK34:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=PT6DR9tMfvM:luzGrP5UK34:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=PT6DR9tMfvM:luzGrP5UK34:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=PT6DR9tMfvM:luzGrP5UK34:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=PT6DR9tMfvM:luzGrP5UK34:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/PT6DR9tMfvM" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=412#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=412" thr:count="5" />
		<thr:total>5</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=412</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark, on the road to release 0.4.2]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/dxhhTGrcuuM/" />
		<id>http://allievi.sssup.it/techblog/?p=407</id>
		<updated>2010-06-20T17:39:13Z</updated>
		<published>2010-06-20T17:39:13Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Uncategorized" />		<summary type="html"><![CDATA[I’ve not been posting for a while, but development of Lightspark is going on fast and well. I’ve to iron out a couple of issues before we get back support for YouTube AS3 player, which was lost after another site update. Since the last release a lot of work has been done and basic sound [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=407">&lt;p&gt;I’ve not been posting for a while, but development of Lightspark is going on fast and well. I’ve to iron out a couple of issues before we get back &lt;strong&gt;support for YouTube AS3 player&lt;/strong&gt;, which was lost after another site update. Since the last release a lot of work has been done and basic sound support has been added using &lt;strong&gt;PulseAudio&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Please follow the project &lt;a href="https://sourceforge.net/apps/trac/lightspark/wiki/RoadMap"&gt;RoadMap&lt;/a&gt; to keep track of what’s going on. As you may have noticed I’ve moved the lightspark &lt;a href="http://lightspark.sourceforge.net"&gt;home page&lt;/a&gt; to &lt;a href="http://trac.edgewall.org/"&gt;trac&lt;/a&gt;, although only for the wiki. The &lt;a href="http://bugs.launchpad.net/lightspark"&gt;bug tracker&lt;/a&gt; is still on Launchpad. You may find interesting the &lt;a href="https://sourceforge.net/apps/trac/lightspark/wiki/WorkingSiteList"&gt;WorkingSiteList &lt;/a&gt;where I’m gathering a few sample flash applications which are known to work and a screenshot to verify that everything is working as expected.&lt;/p&gt;
&lt;p&gt;Expect news very soon!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=dxhhTGrcuuM:BdEy4Dnb9n0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=dxhhTGrcuuM:BdEy4Dnb9n0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=dxhhTGrcuuM:BdEy4Dnb9n0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=dxhhTGrcuuM:BdEy4Dnb9n0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=dxhhTGrcuuM:BdEy4Dnb9n0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=dxhhTGrcuuM:BdEy4Dnb9n0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/dxhhTGrcuuM" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=407#comments" thr:count="9" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=407" thr:count="9" />
		<thr:total>9</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=407</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting Things GNOME!   —   GSoC review (#4)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/c1CpFXeghvI/" />
		<id>http://allievi.sssup.it/techblog/?p=393</id>
		<updated>2010-06-24T20:38:44Z</updated>
		<published>2010-06-18T15:07:54Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" /><category scheme="http://allievi.sssup.it/techblog" term="Google Summer of Code" />		<summary type="html"><![CDATA[Another week has gone, and new ways to synchronize things to do have landed in my “Getting Things Gnome!” branch. First of all, there is a new two-way synchronization engine for tasks (complete with test cases), which will be the core of all the backends to come. The first backend using that is the new TOMBOY–GTG [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=393">&lt;p&gt;Another week has gone, &lt;span style="font-size: 13.3333px;"&gt;and new ways to synchronize things to do have landed in my &lt;a href="http://gtg.fritalk.com/"&gt;“Getting Things Gnome!”&lt;/a&gt; branch.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;First of all, there is a new two-way synchronization engine for tasks (complete with test cases), which will be the core of all the backends to come.&lt;/p&gt;
&lt;p&gt;The first backend using that is the new &lt;a href="http://projects.gnome.org/tomboy/"&gt;TOMBOY&lt;/a&gt;–GTG synchronization: the idea behind this one is that some of you are used to use tomboy to take quick notes, but then they realize that they also need that note in their todo list. With this backend, just adding a tag to the note (like “@tomboy-gtg”) will automatically add that note to GTG the next time you start it.&lt;/p&gt;
&lt;p&gt;So, basically, it’s a way to superpower some of your notes, giving them a way to get scheduled in your super-busy third-millennium life.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 13.3333px;"&gt;Screenshot is due:&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/06/tomboy.png"&gt;&lt;img class="aligncenter size-full wp-image-396" title="tomboy" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/06/tomboy.png" alt="" width="566" height="319" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;For now, two-way sync is working for all tasks (not filtering them yet), and a few bugs have to be ironed out, the most important of which is that GTG sometime issues the deletion of all tasks when it’s quitting (which is rather unpleasant).&lt;/p&gt;
&lt;p style="text-align: left;"&gt;Next week, I’m planning to get this plugin ready for the users. Then, I think the Remember The Milk backend will follow, and shortly after Evolution and CouchDb.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=c1CpFXeghvI:EKp-3_1xTXs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=c1CpFXeghvI:EKp-3_1xTXs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=c1CpFXeghvI:EKp-3_1xTXs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=c1CpFXeghvI:EKp-3_1xTXs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=c1CpFXeghvI:EKp-3_1xTXs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=c1CpFXeghvI:EKp-3_1xTXs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/c1CpFXeghvI" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=393#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=393" thr:count="5" />
		<thr:total>5</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=393</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[5 questions nearer to GUADEC]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/ncvR7oEFsU8/" />
		<id>http://allievi.sssup.it/techblog/?p=383</id>
		<updated>2010-06-24T20:39:13Z</updated>
		<published>2010-06-12T16:07:03Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Google Summer of Code" />		<summary type="html"><![CDATA[﻿1)Who are you and what do you do? I’m Luca Invernizzi, a quarter of a century old Italian student. In a couple of weeks I’ll be graduating in Control Engineering at the leaning University of Pisa and in the fall I’ll fly to California for a Ph.D. in Computer Science (at UCSB).  Right now, I’m a [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=383">&lt;p&gt;﻿&lt;span style="font-size: 13.3333px;"&gt;&lt;strong&gt;1)Who are you and what do you do?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I’m &lt;a href="http://lucainvernizzi.net/"&gt;Luca Invernizzi&lt;/a&gt;, a quarter of a century old Italian student. In a couple of weeks I’ll be graduating in Control Engineering at the leaning University of Pisa and in the fall I’ll fly to California for a Ph.D. in Computer Science (at UCSB).  Right now, I’m a Google Summer of Code student working on “Getting Things GNOME!”.&lt;/p&gt;
&lt;p&gt;Whow, lots of Capital Letters, my pinkie is hurting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2) How did you get into GNOME?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;It started as a way to keep my coding skills sharp, but then I got addicted to contributing. It’s great to work together and see our little app growing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3) Why are you coming to GUADEC?&lt;/strong&gt;&lt;br /&gt;
This will be my first FLOSS conference, and it will be an occasion to meet the people I’ll been collaborating with. AFAIK, they may be all very smart IRC bots &lt;img src='http://allievi.sssup.it/techblog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4) In 1 sentence, describe what your most favorite recent GNOME project has been.&lt;/strong&gt;&lt;br /&gt;
Getting Things GN... Jokosher! I just discovered  that I can plug in my acustic guitar and have fun with effects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5) Will this be your first time visiting the Netherlands?&lt;/strong&gt;&lt;br /&gt;
I’ve been to the Netherlands for just a little more than one day so far, so it will be like my first time.&lt;/p&gt;
&lt;p&gt;&lt;a title="GUADEC 2010" rel="external" href="http://guadec.org/"&gt;&lt;br /&gt;
&lt;img src="http://guadec.org/img/guadec-oranje.png" alt="I'm attending GUADEC" /&gt;&lt;/a&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/sponsored-badge-shadow.png"&gt;&lt;img class="size-full wp-image-298 alignright" title="guadec-sponsored-badge-shadow" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/sponsored-badge-shadow.png" alt="" width="230" height="230" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ncvR7oEFsU8:Fl0NFBye4Bg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ncvR7oEFsU8:Fl0NFBye4Bg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ncvR7oEFsU8:Fl0NFBye4Bg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=ncvR7oEFsU8:Fl0NFBye4Bg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ncvR7oEFsU8:Fl0NFBye4Bg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=ncvR7oEFsU8:Fl0NFBye4Bg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/ncvR7oEFsU8" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=383#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=383" thr:count="4" />
		<thr:total>4</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=383</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting Things GNOME!  —  GSoC review (#3)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/KiC_g61SwFM/" />
		<id>http://allievi.sssup.it/techblog/?p=368</id>
		<updated>2010-06-10T15:37:24Z</updated>
		<published>2010-06-10T15:36:28Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" /><category scheme="http://allievi.sssup.it/techblog" term="Google Summer of Code" />		<summary type="html"><![CDATA[I’m pleased to announce the first two new backends for “Getting Things Gnome!”: a twitter and an identi.ca backend. Those are import backends, meaning that your dents/tweets will appear in your GTG tasks. In particular, the message will be parsed like this: “this will be the task title, this will be the task description #sometag [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=368">&lt;p&gt;I’m pleased to announce the first two new backends for “Getting Things Gnome!”: a &lt;a href="http://twitter.com"&gt;twitter&lt;/a&gt; and an &lt;a href="http://identi.ca"&gt;identi.ca&lt;/a&gt; backend.&lt;/p&gt;
&lt;p&gt;Those are import backends, meaning that your dents/tweets will appear in your GTG tasks.  In particular, the message will be parsed like this:&lt;/p&gt;
&lt;p&gt;“this will be the task title, this will be the task description #sometag @alsoatag”.&lt;/p&gt;
&lt;p&gt;There is no support for start/due dates yet.&lt;/p&gt;
&lt;p&gt;Obviously you will not want &lt;em&gt;every&lt;/em&gt; dent/tweet in your GTG tasks, so you can choose to just import direct messages/@ replies/your own messages, and select only messages with one or more tags matching the a set of tags.&lt;/p&gt;
&lt;p&gt;Screenshots time!&lt;/p&gt;
&lt;p&gt;Adding a backend:&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/06/Screenshot.png"&gt;&lt;img class="aligncenter size-full wp-image-370" title="Screenshot" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/06/Screenshot.png" alt="" width="566" height="432" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Configuring it:&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/06/Screenshot-1.png"&gt;&lt;img class="aligncenter size-full wp-image-371" title="Screenshot-1" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/06/Screenshot-1.png" alt="" width="574" height="437" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you type your password incorrectly, you will be notified:&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/06/Screenshot-2.png"&gt;&lt;img class="aligncenter size-full wp-image-376" title="Screenshot-2" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/06/Screenshot-2.png" alt="" width="603" height="476" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;
&lt;p style="text-align: left;"&gt;&lt;span style="font-size: 13.3333px;"&gt;If the connection cannot be established, you will be notified in a similar way only if network-manager reports that at least one of your network devices is connected (otherwise, GTG assumes you know you’re offline &lt;img src='http://allievi.sssup.it/techblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt;  ). &lt;/span&gt;&lt;span style="font-size: 13.3333px;"&gt;Passwords are stored in the gnome-keyring.&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;span style="font-size: 13.3333px;"&gt;Apart from the new backends, this week has seen improvements in the backend framework and fixes, as always.&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;span style="font-size: 13.3333px;"&gt;Next week will be quite busy for me, as the deadline for my thesis is approaching. I’m planning to work on read/write backend support. I’m currently developing a directory-based backend (each file in the directory is a task) for testing purposes, but I’d like to start working on a Tomboy backend: notes in Tomboy having a particular tag (like @importfromtomboy) will be automatically imported in GTG.&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;
&lt;p style="text-align: left;"&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=KiC_g61SwFM:PdoGisUrbbA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=KiC_g61SwFM:PdoGisUrbbA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=KiC_g61SwFM:PdoGisUrbbA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=KiC_g61SwFM:PdoGisUrbbA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=KiC_g61SwFM:PdoGisUrbbA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=KiC_g61SwFM:PdoGisUrbbA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/KiC_g61SwFM" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=368#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=368" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=368</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.1 released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/WE0jpS60528/" />
		<id>http://allievi.sssup.it/techblog/?p=359</id>
		<updated>2010-06-05T01:57:03Z</updated>
		<published>2010-06-05T01:57:03Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="performance" /><category scheme="http://allievi.sssup.it/techblog" term="plugin" /><category scheme="http://allievi.sssup.it/techblog" term="youtube" />		<summary type="html"><![CDATA[Lightspark 0.4.1 has been released today, featuring initial YouTube support, and of course the usual performance improvements. As the plugin is currently very stable everyone is invited to test and measure the CPU consumption of lightspark versus Adobe’s player. During my preliminary tests lightspark resulted up to twice as fast! This is of course not [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=359">&lt;p&gt;Lightspark 0.4.1 has been released today, featuring &lt;strong&gt;initial YouTube support&lt;/strong&gt;, and of course the usual performance improvements. As the plugin is currently very stable everyone is invited to test and measure the CPU consumption of lightspark versus Adobe’s player. During my preliminary tests lightspark resulted up to twice as fast! This is of course not a completely fair comparison, as Lightspark is not feature complete yet.&lt;/p&gt;
&lt;p&gt;It should be noted that only the YouTube videos served using the new AS3 player are supported, those are the ones with the new UI. YouTube currently uses a legacy AS2/Flash8 player for older content and that should be fully supported by Gnash.&lt;/p&gt;
&lt;p&gt;Moreover, with this release, Lightspark has been relicensed from &lt;a href="http://en.wikipedia.org/wiki/GPL3"&gt;GPL3 &lt;/a&gt;to &lt;a href="http://en.wikipedia.org/wiki/LGPL"&gt;LGPL3 &lt;/a&gt;to avoid licensing issue when distributing the plugin with non GPLed browsers such as Chrome&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=WE0jpS60528:2f5-8nZtrAk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=WE0jpS60528:2f5-8nZtrAk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=WE0jpS60528:2f5-8nZtrAk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=WE0jpS60528:2f5-8nZtrAk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=WE0jpS60528:2f5-8nZtrAk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=WE0jpS60528:2f5-8nZtrAk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/WE0jpS60528" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=359#comments" thr:count="19" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=359" thr:count="19" />
		<thr:total>19</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=359</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting Things GNOME! — GSoC review (#2)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/SUKCVYlwT6E/" />
		<id>http://allievi.sssup.it/techblog/?p=352</id>
		<updated>2010-06-10T14:46:00Z</updated>
		<published>2010-06-04T13:31:31Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" /><category scheme="http://allievi.sssup.it/techblog" term="Google Summer of Code" />		<summary type="html"><![CDATA[Aloha again, planet Gnome! This has been a nice week for my Google Summer of Code project on Getting Things GNOME, featuring: A great speedup (via the refactoring of how the file containing all the tasks is handled): the time for adding 1000 tasks in GTG has been reduced from 30 to 5 seconds! A [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=352">&lt;p&gt;Aloha again, planet Gnome!&lt;br /&gt;
This has been a nice week for my Google Summer of Code project on &lt;a href="http://gtg.fritalk.com"&gt;Getting Things GNOME&lt;/a&gt;, featuring:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A great &lt;strong&gt;speedup&lt;/strong&gt; (via the refactoring of how the file containing all the tasks is handled): the time for adding 1000 tasks in GTG has been reduced from 30 to 5 seconds!&lt;/li&gt;
&lt;li&gt;A new &lt;strong&gt;testing class&lt;/strong&gt;, which helped me find-n-fix a few bugs (ehi! testing works!)&lt;/li&gt;
&lt;li&gt;The first request to &lt;strong&gt;merge&lt;/strong&gt; of part of my code  (~3600 lines). I have to thank my mentor Lionel Dricot, who has found the time to go through it.&lt;/li&gt;
&lt;li&gt;A new &lt;strong&gt;twitter&lt;/strong&gt; &lt;strong&gt;backend&lt;/strong&gt;. It still misses the UI to configure the username and password, but the basic functionality is there. Currently, it adds to GTG any direct message matching a set of chosen tags (e.g., #todo).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’m still working on twitter authentication. I’m currently doing it via the userid/password combo, but the correct way to go should be Oauth. Unfortunately, python-twitter does not support this. I’ve found a few libraries around the web, but none seem to work so far. Any hint  will be welcome.&lt;/p&gt;
&lt;p&gt;Next week I’m planning to finish the twitter backend, expanding the framework as I go. A nice thing is that, thanks to the framework, the twitter backend (which is all a developer should write to add a new backend) is less than 100 lines long.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=SUKCVYlwT6E:tCLQ0q1hU_U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=SUKCVYlwT6E:tCLQ0q1hU_U:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=SUKCVYlwT6E:tCLQ0q1hU_U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=SUKCVYlwT6E:tCLQ0q1hU_U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=SUKCVYlwT6E:tCLQ0q1hU_U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=SUKCVYlwT6E:tCLQ0q1hU_U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/SUKCVYlwT6E" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=352#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=352" thr:count="4" />
		<thr:total>4</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=352</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark 0.4.0 released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/6kjD4EqoFJw/" />
		<id>http://allievi.sssup.it/techblog/?p=345</id>
		<updated>2010-05-31T01:43:25Z</updated>
		<published>2010-05-30T03:10:51Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Insane Projects" /><category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="Uncategorized" /><category scheme="http://allievi.sssup.it/techblog" term="youtube" />		<summary type="html"><![CDATA[Just a quick update. I’ve released version 0.4.0 of Lightspark, a free flash player implementation. This release was focused on improving stability, so all the crashes found by many testers should be fixed now. Thanks a lot for testing, several issues were related to particular graphics hardware and I would have never found them without [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=345">&lt;p&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/g170.png"&gt;&lt;img class="aligncenter size-full wp-image-346" title="g170" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/g170.png" alt="" width="530" height="384" /&gt;&lt;/a&gt;Just a quick update. I’ve released version 0.4.0 of Lightspark, a free flash player implementation. This release was focused on improving stability, so all the crashes found by many testers should be fixed now. Thanks a lot for testing, several issues were related to particular graphics hardware and I would have never found them without your collaboration. Please keep testing and reporting any issue.&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/ls-youtube-WIP.png"&gt;&lt;img class="alignright size-medium wp-image-348" title="ls-youtube-WIP" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/ls-youtube-WIP-300x238.png" alt="" width="300" height="238" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now focus shift on YouTube support, which was lost after one of the last update of YouTube’s infrastructure. And believe me, we’re not far! I’m attaching a screen shot of the current status (in GIT master) as a proof. Full support will be delivered with release 0.5.0&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6kjD4EqoFJw:hKSajbjIqxI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6kjD4EqoFJw:hKSajbjIqxI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6kjD4EqoFJw:hKSajbjIqxI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=6kjD4EqoFJw:hKSajbjIqxI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6kjD4EqoFJw:hKSajbjIqxI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=6kjD4EqoFJw:hKSajbjIqxI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/6kjD4EqoFJw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=345#comments" thr:count="22" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=345" thr:count="22" />
		<thr:total>22</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=345</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting Things GNOME! — GSoC review (#1)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/vt8v67cAMXY/" />
		<id>http://allievi.sssup.it/techblog/?p=323</id>
		<updated>2010-06-10T14:46:18Z</updated>
		<published>2010-05-27T23:28:18Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" /><category scheme="http://allievi.sssup.it/techblog" term="Google Summer of Code" />		<summary type="html"><![CDATA[news dispatch: I’ve just been informed that a Getting Things GNOME! plugin is being added to Kupfer! That’s great. The real post: For the Google Summer of Code, the time to start coding has officially arrived. My work is about adding yet another feature to the personal organizer software Getting Things GNOME!, that will let [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=323">&lt;p&gt;&lt;strong&gt;news dispatch:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I’ve just been informed that a Getting Things GNOME! plugin is being added to &lt;a href="http://kaizer.se/wiki/kupfer/"&gt;Kupfer&lt;/a&gt;! That’s great.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The real post:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For the Google Summer of Code, the time to start coding has officially arrived.&lt;br /&gt;
My work is about adding yet another feature to the personal organizer software &lt;a href="http://gtg.fritalk.com/"&gt;Getting Things GNOME!&lt;/a&gt;, that will let you synchronize your tasks in a variety of online and offline backends (Remember the milk, Launchpad...). Details are &lt;a href="http://allievi.sssup.it/techblog/?p=246"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This week, I’ve been working in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;how backends are enabled and disabled&lt;/li&gt;
&lt;li&gt;a signaling framework for backends changes&lt;/li&gt;
&lt;li&gt;a nice ui for managing backends (which took most of the time)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here’s how you add a backend:&lt;/p&gt;
&lt;div&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/adding4.png"&gt;&lt;img class="aligncenter size-full wp-image-332" title="adding" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/adding4.png" alt="" width="583" height="443" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;And here’s how you configure it (yes, a lot of things are missing):&lt;/p&gt;
&lt;div&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/config1.png"&gt;&lt;img class="aligncenter size-full wp-image-336" title="config" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/config1.png" alt="" width="658" height="490" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;I think the UI is coming up pretty well: you can see which tags are associated with each backend and edit them, rename the backend, add and delete any number of backends...&lt;/p&gt;
&lt;p&gt;Next week, I’ll focus on hunting bugs down and writing the ui for a series of backends parameters (filenames, authentication via web pages, passwords stored in the gnome-keyring).&lt;/p&gt;
&lt;p&gt;The UI needs a lot of makup still (images, alignments etc..):  they will come in due time ^_^&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=vt8v67cAMXY:phdqyLPrDUU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=vt8v67cAMXY:phdqyLPrDUU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=vt8v67cAMXY:phdqyLPrDUU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=vt8v67cAMXY:phdqyLPrDUU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=vt8v67cAMXY:phdqyLPrDUU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=vt8v67cAMXY:phdqyLPrDUU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/vt8v67cAMXY" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=323#comments" thr:count="6" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=323" thr:count="6" />
		<thr:total>6</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=323</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark News: Progress on stability, Codenames and Logo Poll]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/-LjdCj-gaEA/" />
		<id>http://allievi.sssup.it/techblog/?p=308</id>
		<updated>2010-05-23T00:35:09Z</updated>
		<published>2010-05-23T00:34:15Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Projects" /><category scheme="http://allievi.sssup.it/techblog" term="assembly" /><category scheme="http://allievi.sssup.it/techblog" term="CPU architectures" /><category scheme="http://allievi.sssup.it/techblog" term="Flash" /><category scheme="http://allievi.sssup.it/techblog" term="Lightspark" />		<summary type="html"><![CDATA[First of all, thanks a lot to all those brave enough to try out this project. I’m sorry about all the (frequent) crashes but, with the help of all the people who filed bugs on launchpad, the stability of Lightspark is improving very fast. Please keep testing and reporting any issues. The next big release, [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=308">&lt;div id="attachment_311" class="wp-caption aligncenter" style="width: 584px"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/lightspark-logo-combined.png"&gt;&lt;img class="size-large wp-image-311  " title="lightspark-logo-combined" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/lightspark-logo-combined-1024x308.png" alt="" width="574" height="173" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;One of these will be the official logo of Lightspark&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;First of all, thanks a &lt;strong&gt;lot &lt;/strong&gt;to all those brave enough to try out this project. I’m sorry about all the (frequent) crashes but, with the help of all the people who filed bugs on &lt;a href="http://bugs.launchpad.net/lightspark"&gt;launchpad&lt;/a&gt;, the stability of Lightspark is improving very fast. Please keep testing and reporting any issues. The next big release, 0.4.0 codenamed “&lt;a href="http://en.wikipedia.org/wiki/Aeolus"&gt;Aeolus&lt;/a&gt;”, is planned for the first week of June. The focus for this release is the stability of the platform and no major features are being implemented. The release is also going to include a brand new logo! The call for logos of the previous post generated a lot of very nice works, and it was very hard to choose between them. In the end I managed to keep only two of them, and now it’s your turn! &lt;a href="http://fotoll.com/Choose_a_Logo_for_Lightspark"&gt;Vote&lt;/a&gt; for the one you prefer.&lt;/p&gt;
&lt;p&gt;Beside aesthetic things I’m also trying to define a bit the roadmap of the project. If the next release is only focused on stability, for the following one (0.5.0, codenamed “&lt;a href="http://en.wikipedia.org/wiki/Dionysus"&gt;Bacchus&lt;/a&gt;”) I’m planning &lt;strong&gt;working Youtube support &lt;/strong&gt;which was lost after one of the updates of the video player.&lt;/p&gt;
&lt;p&gt;I’ve also received a lot questions and interest about porting Lightspark to other OSs and architectures. The code is build using standard technologies, such as pthreads and STL and should be quite portable, but some critical code paths has been written in assembly to guarantee atomicity or improve performance. I’ve very little experience with anything beside x86/x86-64, so I prefer not to port such critical code. However I will gladly accept any contributions for other platforms, such as PPC and ARM. The good news is that a contributor managed to compile lightspark on FreeBSD/x86 with minimal changes to the build system and a windows port is also planned. Moreover, beside the Ubuntu PPA I’m maintaining, packages are being created for&lt;a href="http://aur.archlinux.org/packages.php?ID=37271"&gt; Arch Linux&lt;/a&gt; and &lt;a href="http://groups.google.com/group/linux.debian.devel/msg/e6059c46fe3ab876?pli=1"&gt;Debian&lt;/a&gt;, thanks a lot to the community.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=-LjdCj-gaEA:vyaF_1ns5WI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=-LjdCj-gaEA:vyaF_1ns5WI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=-LjdCj-gaEA:vyaF_1ns5WI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=-LjdCj-gaEA:vyaF_1ns5WI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=-LjdCj-gaEA:vyaF_1ns5WI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=-LjdCj-gaEA:vyaF_1ns5WI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/-LjdCj-gaEA" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=308#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=308" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=308</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting Things GNOME! — GSoC review (#0)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/ixqAvTkdTX0/" />
		<id>http://allievi.sssup.it/techblog/?p=307</id>
		<updated>2010-05-23T00:24:35Z</updated>
		<published>2010-05-23T00:23:57Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" /><category scheme="http://allievi.sssup.it/techblog" term="Google Summer of Code" />		<summary type="html"><![CDATA[Hello again, dear Planet! This one has been a busy week in both GTG mailing list(s) and my little branch. I have one thing I would like your opinion on, which is clearly marked, so you can skip some parts. You may not know that in the last month GTG lied on the surgeon table to [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=307">&lt;div&gt;
&lt;p&gt;Hello again, dear Planet!&lt;/p&gt;
&lt;p&gt;This one has been a busy week in both GTG mailing list(s) and my little branch. I have one thing I&lt;strong&gt; would like your opinion on&lt;/strong&gt;, which is &lt;strong&gt;clearly marked&lt;/strong&gt;, so you can skip some parts.&lt;/p&gt;
&lt;p&gt;You may not know that in the last month GTG lied on the surgeon table to undergo a huge refactoring, mostly by Lionel Dricot. That made GTG faster and asynchronous in task loading. Just for a measure of the improvements, we’ve lowered the time taken to load 1000 tasks from 40 to less than 30 seconds, and we haven’t even started profiling yet. The feels way faster than before, and we have lowered our startup time. We have also gained a strong division between our core and our UI, which makes it possible to write new UIs for GTG (that what Karlo Jez is doing for his GSoc, writing a GTG web service). KDE UI, anyone?&lt;/p&gt;
&lt;p&gt;Last Wednesday has been declared “Getting Bugs Done” day, so we worked in fixing all the regressions introduced in the trunk after the refactoring. We have now a trunk that can be used normally (if you don’t mind the occasional glitch). A few minor bugs are still unresolved, but the only “big” bug remaining is the breakage of the plugin API.&lt;/p&gt;
&lt;p&gt;Anyway, my branch, which is about having the support for multiple backends (Remember the milk, CouchDb (ubuntuone), lauchpad, zeitgeist, twitter...), has seen a complete refactoring of backends loading and storing, with the addition of a backend Factory. We can support multiple instances of the same backend, so right now you can save/load your tasks on multiple files at the same time. You can “attach” to each backend some tags, and the backend will sync only those (say, you want on your work computer only the tasks marked @work).&lt;/p&gt;
&lt;p&gt;I’ve also worked on laying out a well documented base class that each new backend should derive, in order to make the creation of new backends easier.&lt;/p&gt;
&lt;p&gt;The more eye-catching part is that we are currently discussing a &lt;strong&gt;mockup for the UI to add and edit backend&lt;/strong&gt;. The current design is this one (Empathy inspired). I’d like to hear your opinions on that, whether you like it or not.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/backends-ui-mockup.png"&gt;&lt;img class="aligncenter size-full wp-image-313" title="backends-ui-mockup" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/backends-ui-mockup.png" alt="" width="647" height="421" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ixqAvTkdTX0:kcdAtaSY_j4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ixqAvTkdTX0:kcdAtaSY_j4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ixqAvTkdTX0:kcdAtaSY_j4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=ixqAvTkdTX0:kcdAtaSY_j4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ixqAvTkdTX0:kcdAtaSY_j4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=ixqAvTkdTX0:kcdAtaSY_j4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/ixqAvTkdTX0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=307#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=307" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=307</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Going to Guadec!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/okmqT0i8-JE/" />
		<id>http://allievi.sssup.it/techblog/?p=297</id>
		<updated>2010-05-20T23:09:56Z</updated>
		<published>2010-05-20T21:44:38Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Meetings and nice people" />		<summary type="html"><![CDATA[I’ll soon be attending my first big FLOSS conference! GNOME developers, enthusiasts, users and passer-bies, we’ll meet at GUADEC at the end of June, and we’ll see how gnomish the future is. A big thank you to the GNOME foundation, that is sponsoring me to stay at GUADEC and created this nice green badge full [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=297">&lt;p&gt;&lt;a title="GUADEC 2010" rel="external" href="http://guadec.org/"&gt;&lt;br /&gt;
&lt;img class="alignright" src="http://guadec.org/img/guadec-oranje.png" alt="I'm attending GUADEC" width="134" height="46" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’ll soon be attending my first big FLOSS conference! GNOME developers, enthusiasts, users and passer-bies, we’ll meet at &lt;a href="http://guadec.org"&gt;GUADEC&lt;/a&gt; at the end of June, and we’ll see how gnomish the future is.&lt;/p&gt;
&lt;p&gt;A big thank you to the &lt;a href="http://www.gnome.org"&gt;GNOME&lt;/a&gt; foundation, that is sponsoring me to stay at GUADEC and created this nice green badge full of happy people (or people pushing up the GNOME logo? Maybe it’s falling down? Hope they’re fine).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/sponsored-badge-shadow.png"&gt;&lt;img class="aligncenter size-full wp-image-298" title="guadec-sponsored-badge-shadow" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/sponsored-badge-shadow.png" alt="" width="230" height="230" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/sponsored-badge-shadow.png"&gt;&lt;/a&gt;Meanwhile, I’ll keep trying making GTG more awesome!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;update:&lt;/strong&gt; Guess I’m still a beginner in blogging, since I’ve messed up the title. This is not my GSoC weekly report, obviously &lt;img src='http://allievi.sssup.it/techblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=okmqT0i8-JE:8vj4aKSRP94:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=okmqT0i8-JE:8vj4aKSRP94:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=okmqT0i8-JE:8vj4aKSRP94:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=okmqT0i8-JE:8vj4aKSRP94:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=okmqT0i8-JE:8vj4aKSRP94:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=okmqT0i8-JE:8vj4aKSRP94:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/okmqT0i8-JE" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=297#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=297" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=297</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark, an innovative FLOSS Flash player, reaches Beta Status]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/xrshH9ZoDk0/" />
		<id>http://allievi.sssup.it/techblog/?p=260</id>
		<updated>2010-06-18T14:26:51Z</updated>
		<published>2010-05-18T03:17:25Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Projects" /><category scheme="http://allievi.sssup.it/techblog" term="Ubuntu" /><category scheme="http://allievi.sssup.it/techblog" term="Flash" /><category scheme="http://allievi.sssup.it/techblog" term="launchpad" /><category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="release" />		<summary type="html"><![CDATA[More than a year has passed since the beginning of the Lightspark project. It was a long time indeed, but not wasted. I’m extremely pleased with the current level of support and the robustness of the system. You may be wondering “What the heck is lightspark?”, so let me introduce it. Lightspark is an open [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=260">&lt;p&gt;More than a year has passed since the beginning of the Lightspark project. It was a long time indeed, but not wasted. I’m extremely pleased with the current level of support and the robustness of the system. You may be wondering “What the heck is lightspark?”, so let me introduce it.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt; Lightspark is an open source Adobe Flash implementation, designed from the ground up to be efficient on current and (hopefully) future hardware.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The long term objective of this project is not only to deliver a free as in freedom flash player, but also to give to the Flash technology the dignity of a real open standard. I really believe Flash is a powerful technology, it’s main weakness being it’s closedness. Lightspark has been entirely designed after Adobe released the SWF file format documentation, so no reverse engineering has been done.&lt;/p&gt;
&lt;h3&gt;Features&lt;/h3&gt;
&lt;div id="_mcePaste"&gt;I’ll try to review and summarize what as been done so far, and what is planned for the future.&lt;/div&gt;
&lt;div id="_mcePaste"&gt;
&lt;div id="attachment_261" class="wp-caption alignright" style="width: 352px"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/ls-release-video.png"&gt;&lt;img class="size-full wp-image-261  " title="ls-release-video" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/ls-release-video.png" alt="" width="342" height="288" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Lightspark showing video. Profiling graphs can be overlayed on the movie.&lt;/p&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt; OpenGL based rendering&lt;/strong&gt; allows for fast rendering of geometries and video frames. Moreover, although those are not yet supported, blur and other effects can be implemented using shaders for maximum efficency. Using OpenGL textures to display video frames is a bit less efficent than using XVideo, but make it possible to support any overlaying/transformation effect that flash provides.&lt;/li&gt;
&lt;li&gt;Mostly complete support for the newer version of the flash scripting language: &lt;strong&gt;ActionScript 3.0&lt;/strong&gt;, introduced with Flash 9. Both an interpreter and a JIT engine based on LLVM are provided. The previous versions of the language (supported by Gnash, which does not support 3.0) run on a completely different, and quite weird, virtual machine. Currently Ligthspark does not support the older engine, but most sites (e.g, YouTube) are migrating to the newer engine, so we will be fine just with 3.0&lt;/li&gt;
&lt;li&gt;Beside the Virtual Machine Flash provides a huge runtime libraries that ranges from Video Rendering services to XML parsing. Implementation of the runtime is of course far from complete, but the architecture of the VM makes it possible to easily implement the various objects in plain C++. Moreover, an arbitrary degree of mixing between VM generated and C++ code is possible. This means that functions can be called from whatever context without worrying about their origin.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;mozilla compatible plugin&lt;/strong&gt; is provided, I’ve spent a lot of time trying to make the code robust to unexpected conditions and it should fail gracefully and display a gentle message. But, as plugins runs inside the browser process, there a not-so-slight possibility of crashes. Please report any crashes using the &lt;a href="http://launchpad.net/lightspark"&gt;bug reporting system of launchpad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;As an added bonus, during development I’ve also added a couple of interesting performance profiling/debugging features which are not provided by the original Adobe player. Keyboard shortcut can be used to enable a profiling overlay, and a primitive inspector of the objects on screen&lt;/li&gt;
&lt;/ul&gt;
&lt;div id="_mcePaste"&gt;Therefore I declare lightspark to be in beta status! Now the most important thing that is still missing is a nice Logo for the project. I’m very bad at art, so any contribution is very welcome. And of course the whole project, in a pure open phylosophy, is open to contribution! To have a quick glance at the current status it is possible to get lightspark packaged from our &lt;a href="http://launchpad.net/~sssup/+archive/sssup-ppa"&gt;PPA on launchpad&lt;/a&gt;.&lt;/div&gt;
&lt;div id="attachment_262" class="wp-caption aligncenter" style="width: 665px"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/ls-release-clean-fail.png"&gt;&lt;img class="size-large wp-image-262  " title="ls-release-clean-fail" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/05/ls-release-clean-fail-1024x871.png" alt="Lightspark should fail in a clean way on unsupported Flash movies" width="655" height="558" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Lightspark should fail in a clean way on unsupported Flash movies&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=xrshH9ZoDk0:NLA_vLre7YI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=xrshH9ZoDk0:NLA_vLre7YI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=xrshH9ZoDk0:NLA_vLre7YI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=xrshH9ZoDk0:NLA_vLre7YI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=xrshH9ZoDk0:NLA_vLre7YI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=xrshH9ZoDk0:NLA_vLre7YI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/xrshH9ZoDk0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=260#comments" thr:count="83" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=260" thr:count="83" />
		<thr:total>83</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=260</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting Things GNOME, supercharging procrastination since 2008. Now in the Cloud!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/XDD15yyOVSQ/" />
		<id>http://allievi.sssup.it/techblog/?p=246</id>
		<updated>2010-05-16T17:35:32Z</updated>
		<published>2010-05-16T17:35:32Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Getting Thing GNOME!" /><category scheme="http://allievi.sssup.it/techblog" term="Google Summer of Code" />		<summary type="html"><![CDATA[Hello there, Planet GNOME! I’m Luca, one of the developers of Getting Things GNOME!. I’m taking this little empty space between posts in your RSS reader of choice to present you to some of the awesome things that will be featured in the next major version of GTG (due next fall). Preorder your copy now! [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=246">&lt;p&gt;Hello there, Planet GNOME! I’m &lt;a href="http://lucainvernizzi.net"&gt;Luca&lt;/a&gt;, one of the developers of &lt;a href="http://gtg.fritalk.com/"&gt;Getting Things GNOME!&lt;/a&gt;. I’m taking this little empty space between posts in your RSS reader of choice to present you to some of the awesome things that will be featured in the next major version of GTG (due next fall). Preorder your copy now!&lt;/p&gt;
&lt;h3&gt;In the Cloud&lt;/h3&gt;
&lt;p&gt;In the near future, GTG will free your task from the cage of your hard disk. I know that some of you are already using the plugin for synchronization with Remember The Milk (that’s one of my most popular plugins &lt;img src='http://allievi.sssup.it/techblog/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /&gt; ), but we are talking about more serious business here.&lt;/p&gt;
&lt;p&gt;In short, you will be able to import/export/synchronize automatically all or part of your tasks into a variety of Back-ends. On top of that there will be an easy UI to rule them all.&lt;/p&gt;
&lt;p&gt;Back-ends will include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Remember the milk (full synchronization with notes, tags ...)&lt;/li&gt;
&lt;li&gt;Evolution Tasks&lt;/li&gt;
&lt;li&gt;Launchpad (automatic import of bugs assigned to you / all bugs in a project / all bugs with a certain tag..)&lt;/li&gt;
&lt;li&gt;Zeitgeist (exporting completed tasks — have you seen that Zeitgeist now&lt;a href="http://velourdrome.blogspot.com/2010/05/clickable-tags-and-hamster-support.html"&gt; supports hamster?&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Ubuntu one support (CouchDB)&lt;/li&gt;
&lt;li&gt;Twitter/Identi.ca (automatic import of direct messages tagged with #TODO — or something of your choice)&lt;/li&gt;
&lt;li&gt;Xml (for backups)&lt;/li&gt;
&lt;li&gt;Email&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You will choose what to export and where, by “attaching” tags to a back-end. That is, if you want all your work tasks to be on your Remember The Milk account,  just tag them @Work and add a RTM back-end synchronizing only the @Work tags.&lt;/p&gt;
&lt;p&gt;Therefore, be joyful! You will have your TODO list everywhere, even on your Windows machine we all know you’re keeping in your basement.&lt;/p&gt;
&lt;p&gt;All of this will be done thanks to the the  “&lt;a href="http://code.google.com/soc/"&gt;Google Summer of Code&lt;/a&gt;”, which kindly changes my “I should be working instead” thoughts to “hell, I’m working!”.&lt;/p&gt;
&lt;p&gt;Not a big fun of commercial online services, even if they are (beer) free? We have the FLOSS!&lt;/p&gt;
&lt;h3&gt;Snowy-like web service for GTG&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight: normal; font-size: 13.1944px;"&gt;This will be a child of Karlo Jez, as another GSoC project. We’ll soon be having our web interface! A mock-up to whet your appetite&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img class="aligncenter" title="snowy-like-gtg" src="http://live.gnome.org/gtg/soc2010_jez?action=AttachFile&amp;amp;do=get&amp;amp;target=mockup1.png" alt="" width="504" height="252" /&gt;&lt;/p&gt;
&lt;h3&gt;Speed&lt;/h3&gt;
&lt;p&gt;Big chunks of GTG have been rewritten to make you feel like your computer is getting more powerful as it gets old. Now you can procrastinate thousands of tasks!&lt;/p&gt;
&lt;h3&gt;UDS-inspired improvements&lt;/h3&gt;
&lt;p&gt;Projects: We heard your requests for a way to add “projects” to better categorize tasks! Nothing is decided yet, but we’re working on it &lt;img src='http://allievi.sssup.it/techblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; . We’ll be also working on the indicator icon, ... oh, too much work! Where is my beer?&lt;/p&gt;
&lt;h2&gt;Call For Ideas!&lt;/h2&gt;
&lt;p&gt;If you’ve read so far then, congratulations, you can tick off “Read  Luca’s GTG post” off your TODO List.  You could add another task, though. Some of you have told us that GTG icon set is too similar to a clipboard. We are thinking about renovating it, and it would be nice to see some proposals. So, sketch up, and post here there results!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=XDD15yyOVSQ:ZSjn-nPn3dc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=XDD15yyOVSQ:ZSjn-nPn3dc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=XDD15yyOVSQ:ZSjn-nPn3dc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=XDD15yyOVSQ:ZSjn-nPn3dc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=XDD15yyOVSQ:ZSjn-nPn3dc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=XDD15yyOVSQ:ZSjn-nPn3dc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/XDD15yyOVSQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=246#comments" thr:count="12" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=246" thr:count="12" />
		<thr:total>12</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=246</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[The quest for graphics performance: part II]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/eilkNIpYCHY/" />
		<id>http://allievi.sssup.it/techblog/?p=238</id>
		<updated>2010-03-16T22:09:37Z</updated>
		<published>2010-03-16T22:09:37Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Coding tricks" /><category scheme="http://allievi.sssup.it/techblog" term="Insane Projects" />		<summary type="html"><![CDATA[I’d like to talk a bit about the architecture I’ve using to efficiently render the video stream in Lightspark. As often happens the key in high performance computing is using the right tools for each job. First of all video decoding and rendering are asynchronous and executed by different threads. Decoding itself it’s done by [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=238">&lt;p&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/03/ls-video1.png"&gt;&lt;img class="aligncenter size-full wp-image-244" title="ls-video" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/03/ls-video1.png" alt="" width="485" height="465" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’d like to talk a bit about the architecture I’ve using to efficiently render the video stream in Lightspark. As often happens the key in high performance computing is using the right tools for each job. First of all video decoding and rendering are asynchronous and executed by different threads.&lt;/p&gt;
&lt;p&gt;Decoding itself it’s done by the widely known &lt;a href="http://ffmpeg.org"&gt;FFMpeg&lt;/a&gt;, no special tricks are played here. So the starting condition of the optimized fast path is a decoded frame data structure. The data structure is short lived and it is overwritten by the next decoded frame, so it must be copied to a more stable buffer. The decoding thread maintains a short array of decoded frames ready to be rendered, to account for variance in the decoding delay. The decoded frame is in YUV420 format, this means that resolution of color data is one half of the resolution of the luminance channel. The data is returned by FFmpeg as 3 distinct buffers, one for each of the &lt;em&gt;YUV&lt;/em&gt; channels, so we actually save 3 buffers per frame. This copy is necessary and it’s the only one that will be done on the data.&lt;/p&gt;
&lt;p&gt;Rendering is done using a textured quad and texture data is loaded using OpenGL &lt;em&gt;Pixel buffer objects&lt;/em&gt; (PBOs). PBOs are memory buffers managed by the GL and it’s possible to load texture data from them. Unfortunately they must be explicitly mapped to the client address space to be accessed, and unmapped when the updated. The advantage is that data transfer between PBOs and video or texture memory will be done by the GL using asynchronous DMA transfers. Using 2 PBOs it’s possible to guarantee a continuous stream of data to video memory: while one PBOs is being copied to texture memory by DMA, new data is been computed and transferred to the other using the CPU. This usage pattern is called &lt;em&gt;streaming textures&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;In this case such data is the next frame, taken from the decoded frames buffer. Textures data for OpenGL must be provided in planar form. So we must pack a 1-buffer-per-channel frame in a single buffer. This can be done in a zero-copy fashion using instruction provided by the &lt;em&gt;SSE2 &lt;/em&gt;extension. Data is loaded in 128 bit chunks from each of the Y, U and V channels, then using register only operations it is correctly packed and padded. Results are written back using &lt;em&gt;non-temporal &lt;/em&gt;moves. This means that the processor may feel free to postpone the actual commitment of data to memory, for example to exploit burst transfers on the bus. If we ever want to be sure that the changes has been committed in memory we have to call the &lt;em&gt;sfence&lt;/em&gt; instruction. For more information see the &lt;a href="http://www.intel.com/products/processor/manuals/"&gt;Intel reference manuals&lt;/a&gt; on &lt;em&gt;movapd&lt;/em&gt;, &lt;em&gt;movntpd&lt;/em&gt;, &lt;em&gt;sfence&lt;/em&gt;, &lt;em&gt;punpcklb.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The result is a single buffer with the format YUV0, padding has been added to increase texture transfer efficiency, as the video cards internally works with 32-bit data anyway. The destination buffer is one of the PBOs so, at the end of the conversion routine, data will be transferred to video memory using DMA.&lt;/p&gt;
&lt;p&gt;Using the streaming texture technique and SSE2 data packing we managed to efficiently move the frame data to texture memory, but it’s still in YUV format. Conversion to the RGB color space is basically a linear algebra operation, so it’s ideal to offload this computation to a pixel shader.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=eilkNIpYCHY:d8h8UYxAE9A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=eilkNIpYCHY:d8h8UYxAE9A:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=eilkNIpYCHY:d8h8UYxAE9A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=eilkNIpYCHY:d8h8UYxAE9A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=eilkNIpYCHY:d8h8UYxAE9A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=eilkNIpYCHY:d8h8UYxAE9A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/eilkNIpYCHY" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=238#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=238" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=238</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark gets video streaming]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/H_xb5HGBjaA/" />
		<id>http://allievi.sssup.it/techblog/?p=230</id>
		<updated>2010-03-15T03:18:33Z</updated>
		<published>2010-03-15T03:16:42Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Insane Projects" /><category scheme="http://allievi.sssup.it/techblog" term="Flash" /><category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="linux" /><category scheme="http://allievi.sssup.it/techblog" term="optimization" /><category scheme="http://allievi.sssup.it/techblog" term="performance" />		<summary type="html"><![CDATA[Just a brief news. It’s been a long way, and today I’m very proud to announce video streaming support for Lightspark, the efficient open source flash player. Moreover, performance looks very promising, I’m not going to publish any results right now as I’d like to do some testing before. Anyway, Lightspark seems to be outperforming [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=230">&lt;p&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/03/lightspark-youtube-2.jpeg"&gt;&lt;img class="aligncenter size-full wp-image-233" title="lightspark-youtube-2" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/03/lightspark-youtube-2.jpeg" alt="" width="488" height="417" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Just a brief news. It’s been a long way, and today I’m very proud to announce video streaming support for Lightspark, the efficient open source flash player. Moreover, performance looks very promising, I’m not going to publish any results right now as I’d like to do some testing before. Anyway, Lightspark seems to be outperforming Adobe’s player by a good extent, at least on linux.&lt;/p&gt;
&lt;p&gt;In the next post I’ll talk a bit about some performance tricks that made it possible to reach such result.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=H_xb5HGBjaA:X3oepQhc3pA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=H_xb5HGBjaA:X3oepQhc3pA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=H_xb5HGBjaA:X3oepQhc3pA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=H_xb5HGBjaA:X3oepQhc3pA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=H_xb5HGBjaA:X3oepQhc3pA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=H_xb5HGBjaA:X3oepQhc3pA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/H_xb5HGBjaA" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=230#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=230" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=230</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark’s news]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/LH9jC4onXnY/" />
		<id>http://allievi.sssup.it/techblog/?p=224</id>
		<updated>2010-02-26T15:26:42Z</updated>
		<published>2010-02-23T02:31:22Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Insane Projects" /><category scheme="http://allievi.sssup.it/techblog" term="actionscript" /><category scheme="http://allievi.sssup.it/techblog" term="Flash" /><category scheme="http://allievi.sssup.it/techblog" term="Lightspark" />		<summary type="html"><![CDATA[Lightspark progresses are never been so good. The last achievement was to correctly load, execute and partially render the YouTube player. As you may have seen YouTube has recently switched to Flash 10 and ActionScript 3.0 to serve some HD content, while keeping the old AS2 based player for lower quality videos. The old player [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=224">&lt;p&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/02/lightspark-youtube.jpeg"&gt;&lt;img class="aligncenter size-full wp-image-225" title="lightspark-youtube" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/02/lightspark-youtube.jpeg" alt="" width="488" height="417" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lightspark progresses are never been so good. The last achievement was to correctly load, execute and partially render the YouTube player. As you may have seen YouTube has recently switched to Flash 10 and ActionScript 3.0 to serve some HD content, while keeping the old AS2 based player for lower quality videos. The old player is supported by Gnash but, until now, there where no open source alternatives to play newer, high definition content. As Lightspark AS3 engine matures, that gap is almost closed. Stay tuned, as I’m planning to release a new technology demo very soon.&lt;/p&gt;
&lt;p&gt;UPDATE: Demo tarball released on &lt;a href="http://sourceforge.net/projects/lightspark/"&gt;sourceforge&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=LH9jC4onXnY:jEERGQahubc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=LH9jC4onXnY:jEERGQahubc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=LH9jC4onXnY:jEERGQahubc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=LH9jC4onXnY:jEERGQahubc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=LH9jC4onXnY:jEERGQahubc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=LH9jC4onXnY:jEERGQahubc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/LH9jC4onXnY" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=224#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=224" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=224</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Extreme FLEXibility]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/NW5vcSPAf-Y/" />
		<id>http://allievi.sssup.it/techblog/?p=217</id>
		<updated>2010-01-26T03:06:10Z</updated>
		<published>2010-01-26T03:06:10Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Insane Projects" /><category scheme="http://allievi.sssup.it/techblog" term="actionscript" /><category scheme="http://allievi.sssup.it/techblog" term="Flash" /><category scheme="http://allievi.sssup.it/techblog" term="JIT" /><category scheme="http://allievi.sssup.it/techblog" term="Lightspark" />		<summary type="html"><![CDATA[Although there has been no official news about Lightspark for several months, i’ve been doing a great deal of work under the hood. As my bachelor thesis, I’ve mostly completed and throughly tested my LLVM based Actionscript 3 .0 JIT engine and, during the last days, I’ve been working on polishing a bit the Virtual [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=217">&lt;p style="text-align: center;"&gt;&lt;a href="http://allievi.sssup.it/techblog/wp-content/uploads/2010/01/lightspark-flex1.jpeg"&gt;&lt;img class="size-full wp-image-218 aligncenter" title="lightspark-flex1" src="http://allievi.sssup.it/techblog/wp-content/uploads/2010/01/lightspark-flex1.jpeg" alt="" width="508" height="407" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Although there has been no official news about Lightspark for several months, i’ve been doing a great deal of work under the hood. As my bachelor thesis, I’ve mostly completed and throughly tested my LLVM based Actionscript 3 .0 JIT engine and, during the last days, I’ve been working on polishing a bit the Virtual Machine. I’m proudly announcing that, in some days, a new technical demo of Lightspark will be released, but this time we’re not talking about basic examples. Lightspark is now mature enough to run a simple application based on Flex.&lt;/p&gt;
&lt;p&gt;Flex is a rich open source framework written in Actionscript and developed mainly by Adobe. Even if right now the test application features only a progress bar and a square, there is a lot of stuff being done by the framework under the hood.&lt;/p&gt;
&lt;p&gt;If the framework works it means that the engine is now stable enough to move from a pre-alpha to an alpha status. The design is also now satisfying enough for me to allow other people to join the project and work on on subsystems without knowing the internal details of everything. As an added bonus preliminary support for the Windows platform will be included in the release.&lt;/p&gt;
&lt;p&gt;The screenshot above is the result of the execution of my test application, for curious people the flash file is generated using the &lt;em&gt;mxmlc&lt;/em&gt; compiler, from the following source file&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;
&amp;lt;mx:Application&lt;br /&gt;
xmlns:mx="http://www.adobe.com/2006/mxml"&lt;br /&gt;
horizontalAlign="center" verticalAlign="middle"&amp;gt;&lt;br /&gt;
&amp;lt;mx:VBox x="0" y="0" width="201" height="200" backgroundColor="0x0080C0" alpha="0.8"/&amp;gt;&lt;br /&gt;
&amp;lt;/mx:Application&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NW5vcSPAf-Y:4601p1ikxyw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NW5vcSPAf-Y:4601p1ikxyw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NW5vcSPAf-Y:4601p1ikxyw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=NW5vcSPAf-Y:4601p1ikxyw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NW5vcSPAf-Y:4601p1ikxyw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=NW5vcSPAf-Y:4601p1ikxyw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/NW5vcSPAf-Y" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=217#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=217" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=217</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Allocating aligned memory]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/5JBxpgq5Y6c/" />
		<id>http://allievi.sssup.it/techblog/?p=206</id>
		<updated>2009-10-29T20:56:36Z</updated>
		<published>2009-10-29T20:54:17Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Coding tricks" /><category scheme="http://allievi.sssup.it/techblog" term="aligned memory" /><category scheme="http://allievi.sssup.it/techblog" term="glibc" /><category scheme="http://allievi.sssup.it/techblog" term="linux" /><category scheme="http://allievi.sssup.it/techblog" term="MMX" /><category scheme="http://allievi.sssup.it/techblog" term="performance" /><category scheme="http://allievi.sssup.it/techblog" term="SSE" /><category scheme="http://allievi.sssup.it/techblog" term="x86" />		<summary type="html"><![CDATA[Just a quick note that may be useful to someone else. As you may know SSE2 introduced a new instruction: MOVDQA (MOVe Double Quadword Aligned). This is used to move 128 bit (16 bytes) of data from/to memory/xmm registers. This instruction only works if the data is aligned the the 16 byte boundary. There is [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=206">&lt;p&gt;Just a quick note that may be useful to someone else. As you may know SSE2 introduced a new instruction: MOVDQA (MOVe Double Quadword Aligned). This is used to move 128 bit (16 bytes) of data from/to memory/xmm registers. This instruction only works if the data is aligned the the 16 byte boundary. There is also another instruction for the unaligned case, but the aligned version is way faster. So let’s summarize some techniques to get an aligned memory area&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For local, static and member variables you can append __attribute__ (( aligned (16 ) ) to the type definition. Example:&lt;/li&gt;
&lt;p&gt;&lt;code&gt; struct A { int val; }  __attribute__ ((aligned ( 16 ) );&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;li&gt;For dynamically allocated memory the usual malloc is not enough, but there is a posix_memalign which has the semantics that we need. It is defined as:&lt;/li&gt;
&lt;p&gt;&lt;code&gt;int posix_memalign(void **memptr, size_t alignment, size_t size);&lt;/code&gt;&lt;/ul&gt;
&lt;p&gt;So we have to pass a pointer to the pointer that will receive the newly allocated memory, the required alignment (which has to be a power of two) and the allocation size. Memory allocated this way can (at least on the glibc implementation) be freed using the usual &lt;em&gt;free &lt;/em&gt;function.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=5JBxpgq5Y6c:_Vw6QfWn-xw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=5JBxpgq5Y6c:_Vw6QfWn-xw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=5JBxpgq5Y6c:_Vw6QfWn-xw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=5JBxpgq5Y6c:_Vw6QfWn-xw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=5JBxpgq5Y6c:_Vw6QfWn-xw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=5JBxpgq5Y6c:_Vw6QfWn-xw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/5JBxpgq5Y6c" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=206#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=206" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=206</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Talking about CPU architectures: Then it came assembly chain]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/h_cfRHgf108/" />
		<id>http://allievi.sssup.it/techblog/?p=200</id>
		<updated>2009-10-22T07:52:34Z</updated>
		<published>2009-10-22T07:47:47Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Bar discussions" /><category scheme="http://allievi.sssup.it/techblog" term="assembly" /><category scheme="http://allievi.sssup.it/techblog" term="Cpu architectir" /><category scheme="http://allievi.sssup.it/techblog" term="CPU architectures" /><category scheme="http://allievi.sssup.it/techblog" term="CPU de" /><category scheme="http://allievi.sssup.it/techblog" term="CPU design" /><category scheme="http://allievi.sssup.it/techblog" term="mips" /><category scheme="http://allievi.sssup.it/techblog" term="performance" /><category scheme="http://allievi.sssup.it/techblog" term="pipeline" /><category scheme="http://allievi.sssup.it/techblog" term="Verilog" /><category scheme="http://allievi.sssup.it/techblog" term="x86" />		<summary type="html"><![CDATA[As we’ve seen in the previous essay in a simple processor design each instruction needs several cycles to be completed. Each instruction passes several steps: first it’s loaded from memory (FETCH0 state), then it’s decoded (FETCH1 state) and the appropriate code path is selected to compute the operation results. In the my example I’ve not [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=200">&lt;p&gt;As we’ve seen in the previous essay in a simple processor design each instruction needs several cycles to be completed. Each instruction passes several steps: first it’s loaded from memory (FETCH0 state), then it’s decoded (FETCH1 state) and the appropriate code path is selected to compute the operation results. In the my example I’ve not included other two essential steps: operands fetching and results storing on memory. This sequential approach has a big drawback, as for most of the time the CPU circuits (such as the memory interface or the ALU) are not doing useful work. If on average each instruction takes five steps to complete, then the processor is only executing one instruction every five cycles. To solve this problem we can introduce the pipeline.&lt;/p&gt;
&lt;p&gt;The pipeline concept is borrowed from the industrial assembly line. The basic idea is to decouple the sequential steps of each instruction by inserting buffer registers in between. Each stage of the pipeline is isolated, and on each clock cycle it can take the input from the register upstream and output the results into the register downstream. Of course not every instruction needs processing by all stages (for example it may or may not access memory) and so each stage has to have some kind of No Operation mode to pass trough the unmodified input register to the output.&lt;/p&gt;
&lt;p&gt;A simple pseudo-verilog description of a pipelined processor follows. We are assuming that the instruction and data memory are physically separate: an &lt;a href="http://en.wikipedia.org/wiki/Harvard_architecture"&gt;Havard&lt;/a&gt; like architecture. This is not true in current mainstream architectures, as both instruction and data are stored in RAM, but may be considered true to a large extend if there is a fast instruction cache. Moreover it has to be noted that although the access_memory module is referenced both in the input fetching and output storing stages, it can only correctly serve one request at a time, and so some kind of arbitration has to be used. We can arbitrarily decide that reads are prioritized over write, but in case of a collision the operation will be for sure not correct, though safe for the electronics. The register_file module is just a multiplexer for the registers, it will output the value of the registers for the provided indexes. The module it’s used both in the operands fetching and writeback stages, but it’s safe because it allows two register reads and one write and the same time (three way access).&lt;/p&gt;
&lt;p&gt;This toy processor is inspired from &lt;a href="http://en.wikipedia.org/wiki/MIPS_architecture"&gt;MIPS&lt;/a&gt; architecture and as you can see it uses fixed length instructions. But I’ve also tried to design something more similar to an x86 processor. The instruction set (which I’m too lazy to define extensively) could allow both register-register and register-memory operation, and output to either memory or registers. No indirect memory access is allowed, sorry. As the instructions are four byte long probably only a 16 or 24 bit flat address space could be accessed.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
always @(posedge clock)&lt;br /&gt;
begin&lt;br /&gt;
//&lt;br /&gt;
//Instructrion fetch stage&lt;br /&gt;
FETCHED_INSTRUCTION &amp;lt;= get_instruction_memory(PC); PC &amp;lt;= PC+4;&lt;br /&gt;
//&lt;br /&gt;
//Instruction decoding stage&lt;br /&gt;
{OPCODE_0, OPERAND1_TYPE, REG1_INDEX, REG2_INDEX, MEM_ADDRESS_0, WRITE_TO_MEMORY_0, DEST_REG_0} &amp;lt;= decode_instruction(FETCHED_INSTRUCTION);&lt;br /&gt;
//&lt;br /&gt;
//Operands fecthing stage, some register will be forwarded to the next stages&lt;br /&gt;
OPERAND1 &amp;lt;= (OPERAND1_TYPE==REG) ?&lt;br /&gt;
read_register_file(REG1_INDEX, REG2_INDEX)[31:0] :&lt;br /&gt;
access_memory(MEM_ADDRESS_0,READ,UNSPECIFIED);&lt;br /&gt;
OPERAND2 &amp;lt;= register_file(REG1_INDEX,REG2_INDEX)[63:32];&lt;br /&gt;
MEM_ADDRESS_1 &amp;lt;= MEM_ADDRESS_0;&lt;br /&gt;
WRITE_TO_MEMORY_1 &amp;lt;= WRITE_TO_MEMORY_0;&lt;br /&gt;
DEST_REG_1 &amp;lt;= DEST_REG_0;&lt;br /&gt;
OPCODE_1 &amp;lt;= OPCODE_0;&lt;br /&gt;
//&lt;br /&gt;
//Execution stage&lt;br /&gt;
RESULT &amp;lt;= alu(OPCODE_1,OPERAND1,OPERAND2);&lt;br /&gt;
MEM_ADDRESS_2 &amp;lt;= MEM_ADDRESS_1;&lt;br /&gt;
WRITE_TO_MEMORY_2 &amp;lt;= WRITE_TO_MEMORY_1;&lt;br /&gt;
DEST_REG_2 &amp;lt;= DEST_REG_1;&lt;br /&gt;
//&lt;br /&gt;
//Writeback stage&lt;br /&gt;
(WRITE_TO_MEMORY_2) ? access_memory(MEM_ADDRESS_2,WRITE,RESULT) : write_register_file(DEST_REG_2, RESULT);&lt;br /&gt;
end&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Several considerations can be made on this design. First of all extreme care is needed from the compiler (or the user, if it’s crazy enough to write assembly manually), because there are several hazards, not only as said previously on concurrent read/write memory access, but also on registers. As the result of an instruction is written back to the register file only at the end of the pipeline it’s not legal to access a result before five more instruction has been executed. To guarantee memory access validity it’s enough to avoid issuing a memory write two instruction after a memory load. If no useful instruction can be issued during this forced waiting, a NOP should be inserted.&lt;/p&gt;
&lt;p&gt;Real world architecture employs interlocking techniques which takes care of stopping (stalling) the pipeline when an hazard could occur. I’ll describe stalling in more detail in another essay. Anyway if a pipeline stage, such us the ALU for complicated computation (for example integer division), needs more than a cycle to complete it will stall the provious stages of the pipeline, and insert so called bubbles into the later stage. Bubbles are basically safe No Operation input states, the NOP opcode in any architecture is just an explicit pipeline bubble. Even in modern interlocked architecture correct instruction scheduling is extremely useful to gain performance as pipeline bubbles actually waste execution time.&lt;/p&gt;
&lt;p&gt;That’s all for now, in the previous post I forgot to mention the ever failing, but very nice Very Long Instruction Word (&lt;a href="http://en.wikipedia.org/wiki/VLIW"&gt;VLIW&lt;/a&gt;) approach. I’m of course going to talk about that to sometime.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=h_cfRHgf108:gousN4PMcl4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=h_cfRHgf108:gousN4PMcl4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=h_cfRHgf108:gousN4PMcl4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=h_cfRHgf108:gousN4PMcl4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=h_cfRHgf108:gousN4PMcl4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=h_cfRHgf108:gousN4PMcl4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/h_cfRHgf108" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=200#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=200" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=200</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Talking about CPU architectures: The beginning]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/-Fx76IiVbuU/" />
		<id>http://allievi.sssup.it/techblog/?p=192</id>
		<updated>2009-10-21T01:47:44Z</updated>
		<published>2009-10-19T23:26:16Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Bar discussions" /><category scheme="http://allievi.sssup.it/techblog" term="assembly" /><category scheme="http://allievi.sssup.it/techblog" term="Cell" /><category scheme="http://allievi.sssup.it/techblog" term="Corsini" /><category scheme="http://allievi.sssup.it/techblog" term="CPU architectures" /><category scheme="http://allievi.sssup.it/techblog" term="CPU design" /><category scheme="http://allievi.sssup.it/techblog" term="Verilog" />		<summary type="html"><![CDATA[Some days ago I was talking about multicore systems and modern CPU technologies with a younger engineering student at Scuola Superiore Sant’Anna. I was quite surprised by how much misconceptions and hype surrounds this topic, even for people that actually study computer engineering. Especially considering that the courses of the University of Pisa are quite [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=192">&lt;p&gt;Some days ago I was talking about multicore systems and modern CPU technologies with a younger engineering student at Scuola Superiore Sant’Anna. I was quite surprised by how much misconceptions and hype surrounds this topic, even for people that actually study computer engineering. Especially considering that the courses of the University of Pisa are quite good when it comes to low level hardware stuff (computer engineering was born by branching electronic engineering, and the legacy is still quite evident).&lt;/p&gt;
&lt;p&gt;So I’ll try to write some articles about CPU architectures, from the basic to advanced topics... well... as advanced as my current knowledge goes, still better than nothing.&lt;/p&gt;
&lt;p&gt;Ok, for this essay I’ll basically reference the simple processor design that we study in our awesome Logic Circuits course (thanks Prof. Corsini, even if I’ve not seen a single class of it). The code presented is written is something hopefully similar to Verilog, the hardware description language.&lt;/p&gt;
&lt;p&gt;This processor is basically a simple state machine. The internal state is stored in some synchronous register, usually implemented using so called edge-triggered flip-flops. There is a clock source which generates a square wave. The clock is used as an input to registers, which are allowed to get a new value only on the raising edge of the wave. The new value of the registers is usually computed by stateless asynchronous circuits.&lt;/p&gt;
&lt;div id="attachment_193" class="wp-caption alignright" style="width: 310px"&gt;&lt;img class="size-medium wp-image-193" title="PC adder" src="http://allievi.sssup.it/techblog/wp-content/uploads/2009/10/PC-adder-300x251.png" alt="PC adder" width="300" height="251" /&gt;&lt;p class="wp-caption-text"&gt;A simple circuit to get the address of the next instruction: the new address is computed during the clock cycle by the asynchronous adder and assigned at the next rising edge of the clock&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;This means that the output depends only on the input, and the clock signal is not used. An example of this kind of circuits could be the adder, or the more complex ALU. Those circuits takes some time to complete their work, the adder, for example, has to propagate the carry information from the least significant bit to the most significant bit. Before the computation is complete the output state undergoes several spurious transitions (add gif) which will be ignored by the following register, as the new value will only be captured on the raising edge of the clock.&lt;/p&gt;
&lt;p&gt;This allows us to understand two concepts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; The faster the clock is, the more new states can be computed, and so the more operations can be done. So this is what the vendors are talking about when they market they several GhZ CPUs.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt; Why can’t the clock be infinitely fast? Because to guarantee that all the spurious transitions from asynchronous circuits will be discarted the clock cycle time has to be at least a little longer than the longest settle time of those circuits.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a long time during the previous years it was easy to pump up the clock speeds, from the 4 Mhz of the first 8088 to the 4 Ghz of the last Pentiums, as the progress in CMOS techlogies allowed to make the circuits smaller and smaller, which also means basically faster and faster. But after a while this had to stop, even if transistors are still getting smaller. The main problem right now is that power consumption and heat production go with the square of the clock frequency, which poses a very heavy upper limit to the reasonable clock speed, if you’re not willing to use liquid refrigeration.&lt;/p&gt;
&lt;div id="attachment_196" class="wp-caption alignleft" style="width: 475px"&gt;&lt;img class="size-full wp-image-196" title="animatedadder" src="http://allievi.sssup.it/techblog/wp-content/uploads/2009/10/animatedadder1.gif" alt="This simple 3 bit adder needs some time to add 011 (3) and 001 (1) beacuase it has to propagate carry information" width="465" height="300" /&gt;&lt;p class="wp-caption-text"&gt;This simple 3 bit adder needs some time to add 011 (3) and 001 (1) because it has to propagate carry information&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;So, back to the CPU internals. One of the registers has a special purpose: it keeps the state of the processor and it’s usually called STAR (STAtus Register). So the ipotetical pseudo-verilog for this processor would be:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
reg [31:0] MBR, STAR, EAX, PC;&lt;br /&gt;
always @(posedge clock)&lt;br /&gt;
begin&lt;br /&gt;
case(STAR)&lt;br /&gt;
FETCH0: MBR &amp;lt;= get_memory(PC); STAR &amp;lt;= FETCH1; PC &amp;lt;= PC+4;&lt;br /&gt;
FETCH1: STAR &amp;lt;= decode_opcode(MBR);&lt;br /&gt;
...&lt;br /&gt;
INC0: EAX &amp;lt;= alu(OP_ADD,EAX,1) STAR &amp;lt;= FETCH0;&lt;br /&gt;
...&lt;br /&gt;
HLT: STAR&amp;lt;=HLT;&lt;br /&gt;
end&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This would be a very simple, incomplete and totally useless fixed instruction length CPU, which can only increment the accumulator and halt itself. Let’s explain this code a bit. MBR, STAR, EAX and PC are defined as registers, in this case they are 32 bits wide. The STAR register could be larger or smaller depending on the number of possible internal state. The MBR is the Master Buffer Register and it’s used as a temporary storage for computations which should not be seen by the user, while EAX and PC are the accumulator and the program counter which we’re all used to. The \emph{always} syntax means that the actions has to be taken on the raising edge of the clock. Registers which are assigned in this block are usually implemented using an array of edge triggered flip-flops. The &amp;lt;= symbols means non blocking assignment. All those assignments are done in parallel and they will only be effective at the following cycle. The FETCH,INC and HLT are just symbolic version for some numerical constants, which represent the state. The get_memory, decode_opcode and alu symbols are all asynchronous circuits, they will take their inputs and generate the output after some time, hopefully before the next clock cycle. It must be noted that the get_memory in the real world cannot be modeled as an asynchronous circuit, as it usually takes several cycle to get some value out of memory.&lt;/p&gt;
&lt;p&gt;You can see that in the FETCH0 case we use the PC both as an input and output, but this is perfectly safe as all the computation will be based on the values at the beginning of the cycle, and the new values will be gathered at the end of it. How to implement the case in hardware? Well it’s quite easy because we can exploit the for free (modulo power consumption) parallelism of electronics to compute all the possible outcome from each instruction and then use multiplexer to get the desired one. Of course to avoid races in the inputs we also need multiplexer on the input side of common circuitry, such as the alu.&lt;/p&gt;
&lt;p&gt;So... this is really the basic simple way to build a computational machine. Much new interesting stuff has been added to this now, and I’ll spend some words on that in the next essays. The topics that I would like to cover are pipelined, superscalar, vectorial and multicore CPUs. Maybe I’ll also take a brief look at the new trend (or hype): heterogenous CPUs, such as IBMs Cell. Comment and suggestion are, as always, really welcome.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=-Fx76IiVbuU:u6fjm41QWMs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=-Fx76IiVbuU:u6fjm41QWMs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=-Fx76IiVbuU:u6fjm41QWMs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=-Fx76IiVbuU:u6fjm41QWMs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=-Fx76IiVbuU:u6fjm41QWMs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=-Fx76IiVbuU:u6fjm41QWMs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/-Fx76IiVbuU" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=192#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=192" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=192</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Getting things Gnome! gets Remember The Milk support]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/_NYsVZAbnHM/" />
		<id>http://allievi.sssup.it/techblog/?p=183</id>
		<updated>2009-10-13T20:49:57Z</updated>
		<published>2009-09-15T00:54:54Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Projects" />		<summary type="html"><![CDATA[I’m proud to announce that the plugin that enables the synchronization between Getting things gnome! and Remember The Milk has landed into trunk. Hopefully, it will be distributed in the upcoming release of gtg. The synchronization currently support tasks title and text, tags and due dates, while respecting all the unsyncable stuff (e.g.: rtm does [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=183">&lt;p&gt;&lt;img class="aligncenter size-full wp-image-184" title="rtm to gtg" src="http://allievi.sssup.it/techblog/wp-content/uploads/2009/09/rect2410.png" alt="rtm to gtg" width="70" height="27" /&gt;I’m proud to announce that the plugin that enables the synchronization between &lt;a href="http://gtg.fritalk.com/"&gt;Getting things gnome!&lt;/a&gt; and &lt;a href="http://www.rememberthemilk.com"&gt;Remember The Milk&lt;/a&gt; has landed into trunk. Hopefully, it will be distributed in the upcoming release of gtg.&lt;/p&gt;
&lt;p&gt;The synchronization currently support tasks title and text, tags and due dates, while respecting all the unsyncable stuff (e.g.: rtm does not have the concept of subtask).&lt;/p&gt;
&lt;p&gt;You can have a feel of what’s coming with these simple commands:&lt;/p&gt;
&lt;pre&gt;sudo apt-get install bazaar&lt;/pre&gt;
&lt;pre&gt;bzr branch lp:gtg&lt;/pre&gt;
&lt;pre&gt;cd gtg&lt;/pre&gt;
&lt;pre&gt;./gtg&lt;/pre&gt;
&lt;p&gt;A big “thank you” to the lovely gtg community (which has been a pleasure to work with) is absolutely due,  especially to &lt;a href="http://www.paulocabido..com"&gt;Paulo&lt;/a&gt;, who designed the plugin system.&lt;/p&gt;
&lt;p&gt;I’m currently working on other features to add to gtg, so stay tuned.&lt;/p&gt;
&lt;p&gt;PS: Mono haters, haven’t you noticed? gtg now replicates some of  &lt;a href="http://live.gnome.org/Tasque"&gt;Tasque&lt;/a&gt; features. And we all know that Tasque executable ends with .exe&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=_NYsVZAbnHM:am_CdRM-UkQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=_NYsVZAbnHM:am_CdRM-UkQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=_NYsVZAbnHM:am_CdRM-UkQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=_NYsVZAbnHM:am_CdRM-UkQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=_NYsVZAbnHM:am_CdRM-UkQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=_NYsVZAbnHM:am_CdRM-UkQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/_NYsVZAbnHM" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=183#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=183" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=183</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[West coast and binary code]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/ZTVNwW7WqKg/" />
		<id>http://allievi.sssup.it/techblog/?p=181</id>
		<updated>2009-09-15T06:33:30Z</updated>
		<published>2009-09-14T22:23:31Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Bar discussions" /><category scheme="http://allievi.sssup.it/techblog" term="Projects" /><category scheme="http://allievi.sssup.it/techblog" term="assembly" /><category scheme="http://allievi.sssup.it/techblog" term="instrumentation" /><category scheme="http://allievi.sssup.it/techblog" term="performance" /><category scheme="http://allievi.sssup.it/techblog" term="tainting" /><category scheme="http://allievi.sssup.it/techblog" term="UCSB" /><category scheme="http://allievi.sssup.it/techblog" term="x86" />		<summary type="html"><![CDATA[We’re back! Finally I’ve found some time to write, and something to write about too! Me and Jacopo temporarily changed timezone and ocean, as we are currently working at the Security Group of California University, Santa Barbara. Our current project is really interesting and could have far more applications than security. As it’s still in [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=181">&lt;p&gt;&lt;img class="size-medium wp-image-180 alignleft" title="g4515" src="http://allievi.sssup.it/techblog/wp-content/uploads/2009/09/g4515-268x300.png" alt="g4515" width="268" height="300" /&gt;We’re back! Finally I’ve found some time to write, and something to write about too! Me and Jacopo temporarily changed timezone and ocean, as we are currently working at the &lt;a href="http://www.cs.ucsb.edu/~seclab/"&gt;Security Group&lt;/a&gt; of California University, Santa Barbara.&lt;/p&gt;
&lt;p&gt;Our current project is really interesting and could have far more applications than security. As it’s still in an early development phase, I will not yet delve in the details of our approach; let’s just say that we are working on a &lt;strong&gt;very&lt;/strong&gt; efficient way to handle data tainting and general binary code instrumentation. As we are now getting to know very intimately the x86 machine code, we also found out that, even if a lot of opcodes are mapped in an almost sensible way, others are just scattered around in a seemingly random pattern. I guess that those were just added after the initial design, and are probably decoded by a WTF-is-this-instruction Unit. I cannot help thinking ‘&lt;em&gt;How simple life would be if x86 were RISC&lt;/em&gt;’...&lt;em&gt;’. &lt;/em&gt;Maybe we can still hope the &lt;a href="http://en.wikipedia.org/wiki/Itanium"&gt;Itanium&lt;/a&gt; stuff will come to the rescue&lt;sup&gt;&lt;a href="http://allievi.sssup.it/techblog/?p=181#footnote_0_181" id="identifier_0_181" class="footnote-link footnote-identifier-link" title="But I, Jacopo, do not believe so."&gt;1&lt;/a&gt;&lt;/sup&gt;, but probably we are going to stick to this legacy from the 16-bit era for a long time. More on this next, I hope.&lt;/p&gt;
&lt;ol class="footnotes"&gt;&lt;li id="footnote_0_181" class="footnote"&gt;But I, Jacopo, do &lt;em&gt;not&lt;/em&gt; believe so.&lt;/li&gt;&lt;/ol&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ZTVNwW7WqKg:pb5rAKLi6FE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ZTVNwW7WqKg:pb5rAKLi6FE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ZTVNwW7WqKg:pb5rAKLi6FE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=ZTVNwW7WqKg:pb5rAKLi6FE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=ZTVNwW7WqKg:pb5rAKLi6FE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=ZTVNwW7WqKg:pb5rAKLi6FE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/ZTVNwW7WqKg" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=181#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=181" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=181</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[The quest for graphics performance: part I]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/N98TlqdXCB4/" />
		<id>http://allievi.sssup.it/techblog/?p=174</id>
		<updated>2009-06-27T18:19:28Z</updated>
		<published>2009-06-27T17:59:08Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Coding tricks" /><category scheme="http://allievi.sssup.it/techblog" term="Cell" /><category scheme="http://allievi.sssup.it/techblog" term="Flash" /><category scheme="http://allievi.sssup.it/techblog" term="GLSL" /><category scheme="http://allievi.sssup.it/techblog" term="graphics" /><category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="OpenGL" /><category scheme="http://allievi.sssup.it/techblog" term="optimization" /><category scheme="http://allievi.sssup.it/techblog" term="performance" />		<summary type="html"><![CDATA[An example of graphics performance optimization taken from the Lightspark project]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=174">&lt;p&gt;&lt;img class="aligncenter size-medium wp-image-178" title="lightspark-tech-demo2-revamp" src="http://allievi.sssup.it/techblog/wp-content/uploads/2009/06/lightspark-tech-demo2-revamp-300x157.png" alt="lightspark-tech-demo2-revamp" width="300" height="157" /&gt;&lt;/p&gt;
&lt;p&gt;Developing and optimizing &lt;a href="http://www.sf.net/projects/lightspark"&gt;Lightspark&lt;/a&gt;, the modern Flash player, I’m greatly expanding my knowledge and understanding of GPU internals. In the last few days I’ve managed to find out a couple of nice tricks that boosted up performance and, as nice side effects, saved CPU time and added features &lt;img src='http://allievi.sssup.it/techblog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;First of all, I’d like to introduce a bit of the Lightspark graphics architecture&lt;/p&gt;
&lt;p&gt;The project is designed from the ground up to make use of the features offered by modern graphics hardware. Namely 3D acceleration and programmable shaders. The Flash file format encodes the geometries to be drawn as set of edges. This representation is quite different from the one understood by GPUs. So the geometries are first &lt;a href="http://en.wikipedia.org/wiki/Polygon_triangulation"&gt;&lt;em&gt;triangulated &lt;/em&gt;&lt;/a&gt;(reduced to a set of triangles). This operation is done on the CPU and is quite computationally intensive, but the results are cached, so overall this does not hit performance.&lt;/p&gt;
&lt;p&gt;Moreover Flash offer several different&lt;em&gt; fill styles&lt;/em&gt; that should be applied on geometry, for example solid color and various kind of gradients. Lightspark handles all those possibilities using a single fragment shader, a little piece of code that is invoked on every pixel to compute the desired color. Of course the shader has to know about the current fill style. This information along with several other parameters could be passed with different methods. More on this on the next issue.&lt;/p&gt;
&lt;p&gt;There is one peculiar thing about the shader though, let’s look at a simple pseudo code:&lt;br /&gt;
&lt;code&gt;gl_FragColor=solid_color()*selector[0]+linear_gradient()*selector[1]+circular_gradient()*selector[2]...;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Selector is a binary array, the only allowed values are zero or one. Moreover only one value is one. This means that the current fragment (pixel) color is computed for &lt;strong&gt;every&lt;/strong&gt; possible fill style and only afterward the correct result is selected. This may look like  a waste of computing power, but it is actually more efficient than something like this:&lt;/p&gt;
&lt;pre&gt;if(selector[0])
       gl_FragColor=solid_color();
else if(selector[1])
       gl_FragColot=linear_gradient();
...&lt;/pre&gt;
&lt;p&gt;This counter intuitive fact comes from the nature of the graphics hardware. GPUs are very different from CPUs and are capable of cruching tons of vectorial operations blindingly fast. But they totally fall down on their knees when encountering branches in the code. This is actually quite common on deeply pipelined architecture which misses complex branch prediction circuitry, not only GPUs but also number crunching devices and multimedia monsters such as IBM Cell. Keep this in mind when working on such platforms.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=N98TlqdXCB4:2J4sUJDNC2A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=N98TlqdXCB4:2J4sUJDNC2A:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=N98TlqdXCB4:2J4sUJDNC2A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=N98TlqdXCB4:2J4sUJDNC2A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=N98TlqdXCB4:2J4sUJDNC2A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=N98TlqdXCB4:2J4sUJDNC2A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/N98TlqdXCB4" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=174#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=174" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=174</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Lightspark second technical demo announcement]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/oSve1UVsOHs/" />
		<id>http://allievi.sssup.it/techblog/?p=171</id>
		<updated>2009-06-13T04:11:08Z</updated>
		<published>2009-06-13T04:11:08Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Insane Projects" /><category scheme="http://allievi.sssup.it/techblog" term="actionscript" /><category scheme="http://allievi.sssup.it/techblog" term="Flash" /><category scheme="http://allievi.sssup.it/techblog" term="JIT" /><category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="llvm" /><category scheme="http://allievi.sssup.it/techblog" term="OpenGL" />		<summary type="html"><![CDATA[I’m currently finishing some last cleanups and enhancements before releasing a second technical demo of the Lightspark Project. Much time is passed from the first demo, and the project is growing healty. This release aims at rendering the following movie, selected from adobe demo. The results may not be very impressive. But many things are [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=171">&lt;p&gt;&lt;img class="aligncenter size-medium wp-image-172" title="lightspark-techdemo2" src="http://allievi.sssup.it/techblog/wp-content/uploads/2009/06/lightspark-techdemo2-300x157.png" alt="lightspark-techdemo2" width="300" height="157" /&gt;&lt;/p&gt;
&lt;p&gt;I’m currently finishing some last cleanups and enhancements before releasing a second technical demo of the Lightspark Project. Much time is passed from the first demo, and the project is growing healty. This release aims at rendering the following &lt;a href="http://www.adobe.com/devnet/flash/samples/drawing_1/index.html"&gt;movie&lt;/a&gt;, selected from adobe demo. The results may not be very impressive. But many things are going on under the hood.&lt;/p&gt;
&lt;p&gt;The most interesting feature in this release are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GLSL based rendering of fill styles (eg. gradients)&lt;/li&gt;
&lt;li&gt;LLVM based ActionScript execution. Code is compiled just in time&lt;/li&gt;
&lt;li&gt;A few tricks are also played to decrease the stack traffic tipical of stack machines.&lt;/li&gt;
&lt;li&gt;First, although simple, framerate timing&lt;/li&gt;
&lt;li&gt;Framework to handle ActionScript asynchronous events. Currently only the enterFrame event works, as the input subsystem is not yet in place. But stay tuned, as I’ve some nice plan about that.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The code will be released in a couple of more days, or at least I hope so &lt;img src='http://allievi.sssup.it/techblog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=oSve1UVsOHs:eB_BYi_3DMA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=oSve1UVsOHs:eB_BYi_3DMA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=oSve1UVsOHs:eB_BYi_3DMA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=oSve1UVsOHs:eB_BYi_3DMA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=oSve1UVsOHs:eB_BYi_3DMA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=oSve1UVsOHs:eB_BYi_3DMA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/oSve1UVsOHs" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=171#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=171" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=171</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[ActionScript meets LLVM: part II]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/rDTnPWEjhoc/" />
		<id>http://allievi.sssup.it/techblog/?p=167</id>
		<updated>2010-02-11T11:38:14Z</updated>
		<published>2009-06-10T10:30:14Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Insane Projects" />		<summary type="html"><![CDATA[Just a quick update. The nice tricks I’m playing to build a fast ActionScript VM using LLVM are now the topic of my bachelor thesis, the completion of which will still need an handful of months. If you are interested in the development you may follow the git changelog here or contact me privately.]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=167">&lt;p&gt;Just a quick update. The nice tricks I’m playing to build a fast ActionScript VM using LLVM are now the topic of my bachelor thesis, the completion of which will still need an handful of months. If you are interested in the development you may follow the git changelog &lt;a href="http://lightspark.git.sourceforge.net/git/gitweb.cgi?p=lightspark;a=shortlog;h=refs/heads/llvm"&gt;here&lt;/a&gt; or contact me privately.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=rDTnPWEjhoc:onB7jgTdGzI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=rDTnPWEjhoc:onB7jgTdGzI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=rDTnPWEjhoc:onB7jgTdGzI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=rDTnPWEjhoc:onB7jgTdGzI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=rDTnPWEjhoc:onB7jgTdGzI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=rDTnPWEjhoc:onB7jgTdGzI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/rDTnPWEjhoc" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=167#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=167" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=167</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[The misterious Web Proxy Automatic Discovery (WPAD) Italian exploit — Part IV]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/gtVOhjqu_ow/" />
		<id>http://allievi.sssup.it/techblog/?p=164</id>
		<updated>2009-06-03T00:17:28Z</updated>
		<published>2009-05-31T00:53:44Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Security" />		<summary type="html"><![CDATA[If you use firefox on a GNU/Linux machine, you can help us in finding which sites are the targets of the Wpad exploit we blogged about (see part 3, part 2 and part 1 ). Alessandro and I have written a script that checks the WPAD italian regular expression, function FindProxyForURL(url, host) { //regular expression/complexity [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=164">&lt;p&gt;If you use firefox on a GNU/Linux machine, you can help us in finding which sites are the targets of the Wpad exploit we blogged about (see &lt;a href="http://allievi.sssup.it/techblog/?p=142"&gt;part 3&lt;/a&gt;, &lt;a href="http://allievi.sssup.it/techblog/?p=115"&gt;part 2&lt;/a&gt; and &lt;a href="http://allievi.sssup.it/techblog/?p=81"&gt;part 1&lt;/a&gt; ).&lt;/p&gt;
&lt;p&gt;Alessandro and I have written a script that checks the WPAD italian regular expression,&lt;/p&gt;
&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; FindProxyForURL&lt;span style="color: #009900;"&gt;(&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; host&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
        &lt;span style="color: #006600; font-style: italic;"&gt;//regular expression/complexity supported?&lt;/span&gt;
        &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;shExpMatch&lt;span style="color: #009900;"&gt;(&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"http://*g*ad*nd*c*m*sh*ds*js"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;shExpMatch&lt;span style="color: #009900;"&gt;(&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"http*//*s*st*mp*tn*sk*p*"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&lt;/span&gt;amp&lt;span style="color: #339933;"&gt;;&amp;amp;&lt;/span&gt;amp&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #339933;"&gt;!&lt;/span&gt;shExpMatch&lt;span style="color: #009900;"&gt;(&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"http*//*n*o.*"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"PROXY 72.55.164.182:80; DIRECT"&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;
        &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"DIRECT"&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;against the browser history. Please make sure to close firefox before running the script (since it accesses directly its history database, which is locked when the browser is running), and please report any positive matches. Download the script by following this &lt;a href="http://allievi.sssup.it/user/guillo/downloads/wpad_decypher"&gt;link&lt;/a&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=gtVOhjqu_ow:d5O3XeyJHL8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=gtVOhjqu_ow:d5O3XeyJHL8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=gtVOhjqu_ow:d5O3XeyJHL8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=gtVOhjqu_ow:d5O3XeyJHL8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=gtVOhjqu_ow:d5O3XeyJHL8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=gtVOhjqu_ow:d5O3XeyJHL8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/gtVOhjqu_ow" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=164#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=164" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=164</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Jacopo Corbetta</name>
						<uri>http://allievi.sssup.it/jacopo/</uri>
					</author>
		<title type="html"><![CDATA[The misterious Web Proxy Automatic Discovery (WPAD) Italian exploit — Part III]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/iiFBLeC-IYw/" />
		<id>http://allievi.sssup.it/techblog/?p=142</id>
		<updated>2009-05-30T15:46:25Z</updated>
		<published>2009-05-30T14:50:38Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Security" /><category scheme="http://allievi.sssup.it/techblog" term="dns" /><category scheme="http://allievi.sssup.it/techblog" term="exploit" /><category scheme="http://allievi.sssup.it/techblog" term="proxy" /><category scheme="http://allievi.sssup.it/techblog" term="windows" /><category scheme="http://allievi.sssup.it/techblog" term="wpad" />		<summary type="html"><![CDATA[Some weeks ago I (Jacopo Corbetta) and Luca Invernizzi wrote about a curious Man-In-The-Middle potential attack exploting flaws in the Web Proxy Automatic Discovery (WPAD) and DNS protocols. Long story short, if you register a wpad.domain name you might be able to perform a very stealthy Man-In-The-Middle attack. Now, DNS is complicated and programs are [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=142">&lt;p&gt;Some weeks ago &lt;a href="http://allievi.sssup.it/techblog/?p=81"&gt;I&lt;/a&gt; (&lt;a href="http://allievi.sssup.it/jacopo/"&gt;Jacopo Corbetta&lt;/a&gt;) and &lt;a href="http://allievi.sssup.it/techblog/?p=115"&gt;Luca&lt;/a&gt; &lt;a href="http://allievi.sssup.it/user/guillo/"&gt;Invernizzi&lt;/a&gt; wrote about a curious Man-In-The-Middle potential attack exploting flaws in the &lt;a href="http://allievi.sssup.it/techblog/?p=81#wpad"&gt;Web Proxy Automatic Discovery (WPAD)&lt;/a&gt; and DNS protocols. Long story short, if you register a &lt;i&gt;wpad.domain&lt;/i&gt; name you might be able to perform a very stealthy Man-In-The-Middle attack. Now, &lt;a href="http://allievi.sssup.it/techblog/?p=81#dns"&gt;DNS is complicated&lt;/a&gt; and programs are buggy, so&lt;strong&gt; hijacking a &lt;em&gt;wpad.Top-Level-Domain&lt;/em&gt; name like &lt;a href="http://wpad.com"&gt;wpad.com&lt;/a&gt; (or &lt;em&gt;wpad.it&lt;/em&gt; or (!) &lt;em&gt;wroclaw.pl&lt;/em&gt;) could expose a lot of computers to your attack&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
You might recall that I was puzzled by the content of &lt;a href="http://wpad.it/wpad.dat"&gt;wpad.it/wpad.dat&lt;/a&gt; and wondered what Italian sites were targeted. Then &lt;a href="http://allievi.sssup.it/techblog/?p=115"&gt;Luca&lt;/a&gt; pointed out it was registered by a polish guy, and that he identified one of the possible targets as &lt;a href="http://systempartnerski.pl"&gt;systempartnerski.pl&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;We had in mind to run some analysis and then alert the registrars before posting again, but since the WPAD topic got attention &lt;a href="http://www.securityfocus.com/archive/1/503918"&gt;on BugTraq yesterday&lt;/a&gt; it may be more timely to publish our results now.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;big&gt;UPDATE:&lt;/big&gt; The wpad.dat served by the polish guy changed! It appears they removed the site identified by Luca!&lt;/b&gt; The file was still in the original form when we reported our findings to the Italian security mailing list &lt;a href="http://sikurezza.org"&gt;sikurezza.org&lt;/a&gt; (see &lt;a href="http://www.sikurezza.org/ml/05_09/msg00042.html"&gt;this message&lt;/a&gt; posted on 21/05, Alessandro posted our results on 18/05). This thing is getting interesting... Anyway, here’s the new file:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="javascript" style="font-family:monospace;"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;function&lt;/span&gt; FindProxyForURL&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; host&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;
        &lt;span style="color: #006600; font-style: italic;"&gt;//regular expressions supported?&lt;/span&gt;
        &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt; shExpMatch&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;http*//*g*ad*nd*c*m*sh*ds*js&amp;quot;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;PROXY 72.55.164.182:80&amp;quot;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
        &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;DIRECT&amp;quot;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;Hunting for WPAD exploits&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://allievi.sssup.it/techblog/?p=81#dns"&gt;As we wrote before&lt;/a&gt;, the only reliable list of &lt;em&gt;effective&lt;/em&gt; top level domains is &lt;a href="http://mxr.mozilla.org/mozilla/source/netwerk/dns/src/effective_tld_names.dat?raw=1"&gt;the one used in the Mozilla code&lt;/a&gt;, publicly maintained at &lt;a href="http://publicsuffix.org"&gt;publicsuffix.org&lt;/a&gt;. Each of these domains — if registered — could hide a malicious &lt;em&gt;wpad.dat&lt;/em&gt; with potentially wide reach.&lt;/p&gt;
&lt;p&gt;We think security-conscious DNS registrars should deny any request for these names — regardless of whether the underlying WPAD vulnerability is widespread or not, we should do everything in our power to reduce the attack potential.&lt;/p&gt;
&lt;p&gt;In our first random probes, we found the same strange &lt;em&gt;wpad.dat&lt;/em&gt; on &lt;em&gt;wpad.it&lt;/em&gt;, &lt;em&gt;wpad.cz&lt;/em&gt; and &lt;em&gt;wpad.pl&lt;/em&gt; But then we got curious: how common is this problem? How many &lt;em&gt;wpad.dat&lt;/em&gt;s are found in the wild? So I wrote a small python script which attempted to resolve all &lt;em&gt;wpad.tld&lt;/em&gt; names and to retrieve the associated &lt;em&gt;wpad.tld/wpad.dat&lt;/em&gt;s.&lt;/p&gt;
&lt;h3&gt;The TLD menace&lt;/h3&gt;
&lt;p&gt;There are something like 3370 top-level-domains in &lt;a href="http://publicsuffix.org/list/"&gt;the publicsuffix.org list&lt;/a&gt;. &lt;strong&gt;122 wpad.top-level-domain are actually registered&lt;/strong&gt; and return an IP address. &lt;strong&gt;62 of them return data&lt;/strong&gt; when asked for a wpad.dat over HTTP.&lt;/p&gt;
&lt;p&gt;11 of those &lt;em&gt;wpad.dat&lt;/em&gt;s look like generic “domain parking” pages. I am not completely sure, since I don’t speak all those languages. Here’s the list:&lt;/p&gt;
&lt;pre&gt;
.ar.com
.cm
.gouv.rw
.ph
.st
.tv
.cg
.co.st
.kiev.ua
.rw
.tk
&lt;/pre&gt;
&lt;p&gt;The &lt;em&gt;wpad.cn/wpad.dat&lt;/em&gt; and &lt;em&gt;wpad.net.ua/wpad.dat&lt;/em&gt; also look like some kind of redirect pages. &lt;strong&gt;This brings the total of innocuous&lt;sup&gt;&lt;a href="http://allievi.sssup.it/techblog/?p=142#footnote_0_142" id="identifier_0_142" class="footnote-link footnote-identifier-link" title="The wpad.dat file has to be in a special Java-Script like format, see findproxyforurl.com for details"&gt;1&lt;/a&gt;&lt;/sup&gt; domains to 13&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The wpad domains for Switzerland and Liechtenstein (.ch and .li) return a “neutral” &lt;em&gt;wpad.dat&lt;/em&gt; (that is, no proxy for any URL). For &lt;em&gt;.tsaritsyn.ru&lt;/em&gt; and &lt;em&gt;.volgograd.ru&lt;/em&gt; an empty file is returned. I don’t know if this means that the wpad domain name was claimed by some good guy (like the one who registered &lt;a href="http://wpad.com"&gt;wpad.com&lt;/a&gt;, for example). To be completely sure we would need to perform the query from Switzerland or Russia.&lt;sup&gt;&lt;a href="http://allievi.sssup.it/techblog/?p=142#footnote_1_142" id="identifier_1_142" class="footnote-link footnote-identifier-link" title="The wpad.ch server might be serving a harmless wpad.dat to foreign hunters and a malicious one to domestic victims (of course, this applies to all domains in this list &amp;mdash; with the possible exception of Italy, our home country) "&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;wpad.dat&lt;/em&gt;s for &lt;em&gt;vn.ua&lt;/em&gt;, &lt;em&gt;ptz.ru&lt;/em&gt; and &lt;em&gt;karelia.ru&lt;/em&gt; look quite complicated and might even be legitimate proxying attempts by a regional ISP. Additional investigation would be required. &lt;a href="http://wpad.vn.ua/wpad.dat"&gt;Here&lt;/a&gt; &lt;a href="http://wpad.ptz.ru/wpad.dat"&gt;are&lt;/a&gt; &lt;a href="http://wpad.karelia.ru/wpad.dat"&gt;the&lt;/a&gt; files.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The remaining 42 wpad domains were serving exactly the &lt;a href="http://wpad.pl/wpad.dat"&gt;same wpad.dat file&lt;/a&gt; (now they have changed it! See our update on top)&lt;/strong&gt; (indented for clarity):&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="javascript" style="font-family:monospace;"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;function&lt;/span&gt; FindProxyForURL&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; host&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;
        &lt;span style="color: #006600; font-style: italic;"&gt;//regular expression/complexity supported?&lt;/span&gt;
        &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;shExpMatch&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;http://*g*ad*nd*c*m*sh*ds*js&amp;quot;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; 
             &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;shExpMatch&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;http*//*s*st*mp*tn*sk*p*&amp;quot;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&lt;/span&gt;amp&lt;span style="color: #339933;"&gt;;&amp;amp;&lt;/span&gt;amp&lt;span style="color: #339933;"&gt;;&lt;/span&gt; 
             &lt;span style="color: #339933;"&gt;!&lt;/span&gt;shExpMatch&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;http*//*n*o.*&amp;quot;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; 
        &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt; 
                &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;PROXY 72.55.164.182:80; DIRECT&amp;quot;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
        &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;
        &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;DIRECT&amp;quot;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All of these domains look have probably been registered by the same guy (even if WHOIS records are inconclusive). The whois for &lt;em&gt;wpad.pl&lt;/em&gt; even has his name (don’t know if it is accurate, though, so we’ll avoid posting names). Here is the list of affected domains:&lt;/p&gt;
&lt;pre&gt;
.asia
.at
.be
.bialystok.pl
.biz.pl
.bydgoszcz.pl
.cc
.co.at
.com.es
.com.pl
.com.tw
.cz
.edu.pl
.es
.in
.it
.katowice.pl
.name
.net.cn
.net.in
.net.pl
.nom.es
.olsztyn.pl
.opole.pl
.org.cn
.org.es
.org.in
.org.pl
.org.tw
.pl
.radom.pl
.ro
.rzeszow.pl
.sk
.slask.pl
.szczecin.pl
.tw
.warszawa.pl
.waw.pl
.wroclaw.pl
.ws
.zgora.pl
&lt;/pre&gt;
&lt;p&gt;As you can see, our friend has been able to grab the global wpad domain for 12 countries including Poland, Italy, Spain, Austria, Belgium, the Czech Republic, Romania and India.&lt;/p&gt;
&lt;h3&gt;Final thoughts and mysteries&lt;/h3&gt;
&lt;p&gt;The most obvious recommendation is that you register &lt;em&gt;wpad.yourdomain.com&lt;/em&gt; in your organization DNS (e.g. since our beloved school has &lt;a href="http://www.sssup.it"&gt;sssup.it&lt;/a&gt; and we administrate the &lt;a href="http://allievi.sssup.it"&gt;allievi.sssup.it&lt;/a&gt; subdomain, we have associated &lt;em&gt;wpad.allievi.sssup.it&lt;/em&gt; with a meaningless IP and we’ll recommend the network staff to do the same with &lt;em&gt;wpad.sssup.it&lt;/em&gt;). This will immediately stop the search for a &lt;em&gt;wpad.dat&lt;/em&gt; by your clients.&lt;/p&gt;
&lt;p&gt;We would also recommend registrars to delete &lt;em&gt;wpad.domain&lt;/em&gt; entries or at least to avoid accepting new ones. As time allows (the exam session is near!) we’ll bring this matter to the attention of the registrar admins, let’s hope they listen to us. If someone with a big name is reading this (cool!), you might wish to contact some DNS authorities.&lt;/p&gt;
&lt;p&gt;While Luca cracked the second wildcard expression (&lt;tt&gt;http*//*s*st*mp*tn*sk*p*&lt;/tt&gt;), we still have no idea about which sites are targeted by the first one (&lt;tt&gt;http://*g*ad*nd*c*m*sh*ds*js&lt;/tt&gt;, maybe a JavaScript file?). And why did they use such a wide exclusion pattern (&lt;tt&gt;http*//*n*o.*&lt;/tt&gt;) in the original file? Also, the proxy isn’t working for us — maybe they are answering only to IPs in Poland?&lt;/p&gt;
&lt;p&gt;Now that some days ago the polish guys changed their &lt;em&gt;wpad.dat&lt;/em&gt; we wonder what should be our next move... and what will be &lt;em&gt;their&lt;/em&gt; next move! We’ll post updates here, so stay tuned.&lt;/p&gt;
&lt;ol class="footnotes"&gt;&lt;li id="footnote_0_142" class="footnote"&gt;The &lt;em&gt;wpad.dat&lt;/em&gt; file has to be in a special Java-Script like format, see &lt;a href="http://findproxyforurl.com"&gt;findproxyforurl.com&lt;/a&gt; for details&lt;/li&gt;&lt;li id="footnote_1_142" class="footnote"&gt;The &lt;em&gt;wpad.ch&lt;/em&gt; server might be serving a harmless &lt;em&gt;wpad.dat&lt;/em&gt; to foreign hunters and a malicious one to domestic victims (of course, this applies to all domains in this list — with the possible exception of Italy, our home country) &lt;/li&gt;&lt;/ol&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=iiFBLeC-IYw:324nFZeFgSs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=iiFBLeC-IYw:324nFZeFgSs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=iiFBLeC-IYw:324nFZeFgSs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=iiFBLeC-IYw:324nFZeFgSs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=iiFBLeC-IYw:324nFZeFgSs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=iiFBLeC-IYw:324nFZeFgSs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/iiFBLeC-IYw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=142#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=142" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=142</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Google Chrome bug #9007, should we care?]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/2rw1qyB1VkQ/" />
		<id>http://allievi.sssup.it/techblog/?p=136</id>
		<updated>2009-05-30T03:00:38Z</updated>
		<published>2009-05-29T14:05:50Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Bar discussions" /><category scheme="http://allievi.sssup.it/techblog" term="chrome" /><category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="MMX" /><category scheme="http://allievi.sssup.it/techblog" term="simd" /><category scheme="http://allievi.sssup.it/techblog" term="SSE" />		<summary type="html"><![CDATA[Much discussion spawned from Google Chrome bug #9007. The problem is actuallty quite simple: Chrome depends on SSE2 instructions and so, when run on processors which do not support such extension, will crash crying ‘Illegal instruction’ . This arcane looking message simply means: “Come on my friend, go buy a new computer.” To understand my [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=136">&lt;p&gt;Much &lt;a href="http://pollycoke.net/2009/05/29/il-bug-9007-di-chromium-sse2-diventa-commedia/"&gt;discussion&lt;/a&gt; spawned from Google Chrome &lt;a href="http://code.google.com/p/chromium/issues/detail?id=9007"&gt;bug #9007&lt;/a&gt;. The problem is actuallty quite simple: Chrome &lt;strong&gt;depends&lt;/strong&gt; on SSE2 instructions and so, when run on processors which do not support such extension, will crash crying &lt;em&gt;‘Illegal instruction’ . &lt;/em&gt;This arcane looking message simply means: “Come on my friend, go buy a new computer.”&lt;/p&gt;
&lt;p&gt;To understand my opinion, let me talk a bit about the SSE family of extensions.&lt;/p&gt;
&lt;p&gt;MMX/SSE introduced in mainstream computing the SIMD computational model. &lt;a href="http://en.wikipedia.org/wiki/SIMD"&gt;SIMD&lt;/a&gt; means ‘Single Instruction Multiple Data’, so for each instruction the same computation is executed over several indipendent data. This kind of instructions are extremely useful in  mathematics and multimedia applications. I don’t think SSE can be rightfully called an &lt;strong&gt;extension. &lt;/strong&gt;It’s actually a necessary feature which was missing in the early Intel desings. SSE2 was introduced back in 2001. And it’s currently supported on every modern processor, from Atoms to bleeding edge quad core Xeons. Keep in mind that by using SIMD instructions it is possible to speedup the code by a factor of 4 or 8. And this could make the difference between a realtime and an offline application.&lt;/p&gt;
&lt;p&gt;I really think there is no reason for Google developers to waste time and resource to support obsolescent machines. Good code should be efficent in terms of processor time, power consumption and memory allocation. To obtain such goals it is often necessary to exploit new features.&lt;/p&gt;
&lt;p&gt;This consideration is also the foundation of the &lt;a href="http://www.sf.net/projects/lightspark"&gt;lightspark&lt;/a&gt; project design. I’m making use of every feature a modern platform offers, such as heavy multithreading support, multiledia extensions and programmable graphic cards. All of this to obtain a software which is fast and lean on resources, even on limited platform such as Mobile Internet Deviced and sub-notebooks.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=2rw1qyB1VkQ:nOXRV9brTv0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=2rw1qyB1VkQ:nOXRV9brTv0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=2rw1qyB1VkQ:nOXRV9brTv0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=2rw1qyB1VkQ:nOXRV9brTv0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=2rw1qyB1VkQ:nOXRV9brTv0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=2rw1qyB1VkQ:nOXRV9brTv0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/2rw1qyB1VkQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=136#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=136" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=136</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Dual boot, the clean Debian way]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/pMOE2p4h8VU/" />
		<id>http://allievi.sssup.it/techblog/?p=134</id>
		<updated>2009-05-22T10:50:27Z</updated>
		<published>2009-05-22T10:50:27Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Debian" /><category scheme="http://allievi.sssup.it/techblog" term="Sysadmin Kung Fu" /><category scheme="http://allievi.sssup.it/techblog" term="grub" /><category scheme="http://allievi.sssup.it/techblog" term="linux" /><category scheme="http://allievi.sssup.it/techblog" term="vista" /><category scheme="http://allievi.sssup.it/techblog" term="windows" />		<summary type="html"><![CDATA[Just a little trick I’ve found while installing Windows Vista on a Debian powered pc. If you want Grub2 to find and configure dual boot automagically, just install the package os-prober. The update-grub command will now take care of  your  operating system pantheon for you.]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=134">&lt;p&gt;Just a little trick I’ve found while installing Windows Vista on a Debian powered pc. If you want Grub2 to find and configure dual boot automagically, just install the package &lt;em&gt;os-prober&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;update-grub&lt;/em&gt; command will now take care of  your  operating system pantheon for you.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=pMOE2p4h8VU:OxQz5MaHFeM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=pMOE2p4h8VU:OxQz5MaHFeM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=pMOE2p4h8VU:OxQz5MaHFeM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=pMOE2p4h8VU:OxQz5MaHFeM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=pMOE2p4h8VU:OxQz5MaHFeM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=pMOE2p4h8VU:OxQz5MaHFeM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/pMOE2p4h8VU" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=134#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=134" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=134</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[ActionScript meets LLVM: part I]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/NY49j0BsJw0/" />
		<id>http://allievi.sssup.it/techblog/?p=127</id>
		<updated>2009-05-20T00:22:22Z</updated>
		<published>2009-05-17T03:11:40Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Insane Projects" /><category scheme="http://allievi.sssup.it/techblog" term="actionscript" /><category scheme="http://allievi.sssup.it/techblog" term="assembly" /><category scheme="http://allievi.sssup.it/techblog" term="Flash" /><category scheme="http://allievi.sssup.it/techblog" term="JIT" /><category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="llvm" /><category scheme="http://allievi.sssup.it/techblog" term="optimization" />		<summary type="html"><![CDATA[One of the major challenges in the design of lightspark is the ActionScript execution engine. Most of the more recent flash content is almost completely build out of the ActionScript technology, which with version 3.0 matured enough to become a foundational block of the current, and probably future web. The same technology is going to [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=127">&lt;p&gt;One of the major challenges in the design of &lt;a title="The Lightspark Project" href="http://www.sf.net/projects/lightspark"&gt;lightspark&lt;/a&gt; is the ActionScript execution engine. Most of the more recent flash content is almost completely build out of the ActionScript technology, which with version 3.0 matured enough to become a foundational block of the current, and probably future web. The same technology is going to become also widespread offline if the Adobe AIR platform succeedes as a cross platform application framework.&lt;/p&gt;
&lt;p&gt;But what is ActionScript? Basically it is an almost &lt;a href="http://en.wikipedia.org/wiki/Ecmascript"&gt;ECMAscript &lt;/a&gt; complaiant language; the specification covers the language itself, a huge library of components and the bytecode format that is used to deliver code to the clients, usually as part of a SWF (flash) file.&lt;/p&gt;
&lt;p&gt;The bytecode models a &lt;a href="http://en.wikipedia.org/wiki/Stack_machine"&gt;stack-machine&lt;/a&gt; as most of the arguments are passed on the stack and not as operands in the code. This operational description — although quite dense — requires a lot of stack traffic, even for simple computations. It should be noted that modern x86/amd64 processors employ specific stack tracing units to optimize out such traffic, but this is highly architecture dependent and not guaranteed.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://llvm.org/"&gt;LLVM &lt;/a&gt;(which stands fot Low-Level Virtual Machine) is on the other hand based on an Intermediate Language in &lt;a href="http://en.wikipedia.org/wiki/Static_single_assignment_form"&gt;SSA&lt;/a&gt; form. This means that each symbol can be assigned only one time. This form is extremely useful when doing optimization over the code. LLVM offers a nice interface for a bunch of feature, most notably sophisticated optimization of the code and Just-In-Time compilation to native assemply.&lt;/p&gt;
&lt;p&gt;The challenge is: how to exploit llvm power to build a fast ActionScript engine.&lt;/p&gt;
&lt;p&gt;The answer is, as usual, a matter of compromises. Quite a lot of common usage patterns of the stack-machine can be heavily optimized with limited work, for example most of the data pushed on the stack is going to be used right away! More details on this on the next issue...&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NY49j0BsJw0:bjX7fGY4qGE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NY49j0BsJw0:bjX7fGY4qGE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NY49j0BsJw0:bjX7fGY4qGE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=NY49j0BsJw0:bjX7fGY4qGE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=NY49j0BsJw0:bjX7fGY4qGE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=NY49j0BsJw0:bjX7fGY4qGE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/NY49j0BsJw0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=127#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=127" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=127</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[The misterious Web Proxy Automatic Discovery (WPAD) Italian exploit — Part II]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/fcsOt_2rPq4/" />
		<id>http://allievi.sssup.it/techblog/?p=115</id>
		<updated>2009-05-31T00:31:04Z</updated>
		<published>2009-05-14T14:51:03Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Security" /><category scheme="http://allievi.sssup.it/techblog" term="dns" /><category scheme="http://allievi.sssup.it/techblog" term="exploit" /><category scheme="http://allievi.sssup.it/techblog" term="proxy" /><category scheme="http://allievi.sssup.it/techblog" term="windows" /><category scheme="http://allievi.sssup.it/techblog" term="wpad" />		<summary type="html"><![CDATA[After reading Jacopo’s article on WPAD, I’ve tried to understand the Italian global wpad.it/wpad.dat: function FindProxyForURL&#40;url, host&#41; &#123; //regular expression/complexity supported? if &#40; &#40;shExpMatch&#40;url, &#34;http://*g*ad*nd*c*m*sh*ds*js&#34;&#41;&#41; &#124;&#124; &#40;shExpMatch&#40;url, &#34;http*//*s*st*mp*tn*sk*p*&#34;&#41; &#38;amp;&#38;amp; !shExpMatch&#40;url, &#34;http*//*n*o.*&#34;&#41;&#41; &#41; &#123; return &#34;PROXY 72.55.164.182:80; DIRECT&#34;; &#125; return &#34;DIRECT&#34;; &#125; The proxy First thing that concerned me is that the IP address used as [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=115">&lt;p&gt;After reading Jacopo’s &lt;a href="http://allievi.sssup.it/techblog/?p=81"&gt;article&lt;/a&gt; on WPAD, I’ve tried to understand the Italian global &lt;a href="http://wpad.it/wpad.dat"&gt;wpad.it/wpad.dat&lt;/a&gt;:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="javascript" style="font-family:monospace;"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;function&lt;/span&gt; FindProxyForURL&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; host&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;
        &lt;span style="color: #006600; font-style: italic;"&gt;//regular expression/complexity supported?&lt;/span&gt;
        &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;shExpMatch&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;http://*g*ad*nd*c*m*sh*ds*js&amp;quot;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;shExpMatch&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;http*//*s*st*mp*tn*sk*p*&amp;quot;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&lt;/span&gt;amp&lt;span style="color: #339933;"&gt;;&amp;amp;&lt;/span&gt;amp&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #339933;"&gt;!&lt;/span&gt;shExpMatch&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;http*//*n*o.*&amp;quot;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;PROXY 72.55.164.182:80; DIRECT&amp;quot;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;
        &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;DIRECT&amp;quot;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;The proxy&lt;/h3&gt;
&lt;p&gt;First thing that concerned me is that the IP address used as proxy is polish:&lt;br /&gt;
$host 72.55.164.182&lt;br /&gt;
182.164.55.72.in-addr.arpa domain name pointer &lt;a href="http://wpad.pl"&gt;wpad.pl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It’s registered to a guy in Wloclawek, and it’s been up since December 2008, so it’s pretty new.  The hosted site is syndacated, which it’s usually a fishy sign.&lt;/p&gt;
&lt;h3&gt;The syntax&lt;/h3&gt;
&lt;p&gt;The scripts provides a fall back policy to direct connection to avoid server overload, as described in &lt;a href="http://en.wikipedia.org/wiki/Proxy_auto-config"&gt;wikipedia &lt;/a&gt;&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="javascript" style="font-family:monospace;"&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;PROXY 72.55.164.182:80; DIRECT&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;The regular expression&lt;/h3&gt;
&lt;p&gt;I’ve downloaded &lt;a href="http://www.alexa.com"&gt;Alexa&lt;/a&gt; top 1-million sites &lt;a href="http://s3.amazonaws.com/alexa-static/top-1m.csv.zip"&gt;list&lt;/a&gt;, which is daily updated, and I discovered that the second regular expression,&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="javascript" style="font-family:monospace;"&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;http*//*s*st*mp*tn*sk*p*&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;gets one and only one match: a &lt;a href="http://systempartnerski.pl"&gt;polish internet trading site&lt;/a&gt;.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="javascript" style="font-family:monospace;"&gt;$cat top&lt;span style="color: #339933;"&gt;-&lt;/span&gt;1m.&lt;span style="color: #660066;"&gt;csv&lt;/span&gt; &lt;span style="color: #339933;"&gt;|&lt;/span&gt;sed &lt;span style="color: #339933;"&gt;-&lt;/span&gt;ne &lt;span style="color: #3366CC;"&gt;&amp;quot;s/.*s.*st.*mp.*tn.*sk.*p.*/&amp;amp;amp;/p&amp;quot;&lt;/span&gt;
&lt;span style="color: #CC0000;"&gt;154967&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;systempartnerski.&lt;span style="color: #660066;"&gt;pl&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The first regular expression, even without the initial and final part, does not match any site in Alexa first million.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=fcsOt_2rPq4:AuJ6pUxpv6g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=fcsOt_2rPq4:AuJ6pUxpv6g:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=fcsOt_2rPq4:AuJ6pUxpv6g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=fcsOt_2rPq4:AuJ6pUxpv6g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=fcsOt_2rPq4:AuJ6pUxpv6g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=fcsOt_2rPq4:AuJ6pUxpv6g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/fcsOt_2rPq4" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=115#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=115" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=115</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Jacopo Corbetta</name>
						<uri>http://allievi.sssup.it/jacopo/</uri>
					</author>
		<title type="html"><![CDATA[The misterious Web Proxy Automatic Discovery (WPAD) Italian exploit — Part I]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/z8oF39mCaqA/" />
		<id>http://allievi.sssup.it/techblog/?p=81</id>
		<updated>2009-05-30T15:18:24Z</updated>
		<published>2009-05-13T21:06:05Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Security" /><category scheme="http://allievi.sssup.it/techblog" term="dns" /><category scheme="http://allievi.sssup.it/techblog" term="exploit" /><category scheme="http://allievi.sssup.it/techblog" term="proxy" /><category scheme="http://allievi.sssup.it/techblog" term="windows" /><category scheme="http://allievi.sssup.it/techblog" term="wpad" />		<summary type="html"><![CDATA[The network here at Sant’Anna School of Advanced Studies is quite complicated, so sometimes the only way to solve a connectivity problem is to open Wireshark and start looking around. As you may know, Windows boxes are quite chatty and they love to send out NetBIOS broadcast packets to resolve names, elect popes, fight back [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=81">&lt;p&gt;The network here at Sant’Anna School of Advanced Studies is quite complicated, so sometimes the only way to solve a connectivity problem is to open &lt;a href="http://www.wireshark.org/"&gt;Wireshark&lt;/a&gt; and start looking around. As you may know, Windows boxes are quite chatty and they love to send out NetBIOS broadcast packets to resolve names, elect popes, fight back with anti-popes, and so on. But this time I noticed something strange in the broadcast jam: a PC was continously trying to reach the inexistent &lt;em&gt;WPAD.SSSUP.IT&lt;/em&gt; machine.&lt;/p&gt;
&lt;p&gt;I got curious, looked up what WPAD is, and found a couple of interesting things.&lt;/p&gt;
&lt;h3&gt;&lt;a name="wpad"&gt;What the heck is this WPAD thing?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;It turns out Internet Explorer developers thought an organization might wish to set up elaborate rules for www proxying. Therefore, they devised a way for network admins to autoconfigure IE proxy settings: the &lt;a href="http://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol"&gt;Web Proxy Automatic Discovery Protocol (WPAD)&lt;/a&gt;.  All major browsers currently support this feature. Note that many applications on Windows default to following IE proxy settings, so the Man-In-The-Middle potential is very high.&lt;/p&gt;
&lt;p&gt;Basically, the browser issues a request for &lt;em&gt;http://wpad.yourdomain.com/wpad.dat &lt;/em&gt;&lt;sup&gt;&lt;a href="http://allievi.sssup.it/techblog/?p=81#footnote_0_81" id="identifier_0_81" class="footnote-link footnote-identifier-link" title="Windows can also read its settings from DHCP and even from a&amp;nbsp;special DNS entry. The official Microsoft documentation is somewhat sparse, but detailed information can be found in the&amp;nbsp;draft submitted for standardization (previous version), inTechNet, in&amp;nbsp;some knowledge base articles, and of course on&amp;nbsp;Wikipedia.&amp;nbsp;Another file which can be requested is&amp;nbsp;wspad.dat, which has&amp;nbsp;a different format."&gt;1&lt;/a&gt;&lt;/sup&gt;, which should contain a Javascript-like function called FindProxyForURL. The function can use wildcard matching to specify different proxies for different addresses. All the gory details are available at &lt;a href="http://www.findproxyforurl.com"&gt;www.findproxyforurl.com&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Exploiting WPAD&lt;/h3&gt;
&lt;p&gt;Things can get complicated if you have a subdomain (e.g. if your computer is called &lt;em&gt;bob.office.yourdomain.com&lt;/em&gt; then &lt;em&gt;wpad.office.yourdomain.com&lt;/em&gt; is tried too), but the key point is the same: &lt;strong&gt;if someone hijacks one of your &lt;em&gt;wpad&lt;/em&gt; names, sophisticated Man-In-The-Middle attacks are possible&lt;/strong&gt;. Since network admins often forget to setup a &lt;em&gt;wpad&lt;/em&gt; host for their domain, Windows may try to query in multiple ways — even by broadcasting a NetBIOS request, which is trivial to intercept on a local network.&lt;sup&gt;&lt;a href="http://allievi.sssup.it/techblog/?p=81#footnote_1_81" id="identifier_1_81" class="footnote-link footnote-identifier-link" title="Even when a WINS server is present, naming your computer WPAD.YOURDOMAIN.COM might do the trick."&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Now, auto-configuration of network parameters is very useful. Tools like DHCP and trasparent proxies are in wide use. However, this kind of auto-configuration brings risks: &lt;a href="http://en.wikipedia.org/wiki/Rogue_DHCP"&gt;rogue DHCP&lt;/a&gt; servers can be transparent to users and possibly avoid detection. DHCP is a very well known protocol and network admins have long learnt to watch out for suspicious DHCP activity. WPAD is — in comparison — a somewhat obscure protocol. Buggy programs (and lax policies by domain registrars) create a sneaky exploit opportunity.&lt;/p&gt;
&lt;h3&gt;&lt;a name="dns"&gt;The DNS beast&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;As you might have guessed, Windows should stop short of the top-level domain &lt;em&gt;.com&lt;/em&gt; in its quest for a &lt;em&gt;wpad.dat&lt;/em&gt;. However, two issues come into play:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;On certain buggy versions, the global &lt;a href="http://wpad.com/wpad.dat"&gt;&lt;em&gt;wpad.com/wpad.dat&lt;/em&gt;&lt;/a&gt; is requested. Now, the wpad.com domain has been taken by a (let’s hope) good guy, who chose not to serve a wpad.dat. But what about other Top-Level-Domains (TLDs) like wpad.cz or wpad.it?&lt;/li&gt;
&lt;li&gt;Some countries (like Italy) allow you to register domain names right under their national suffix (e.g. our beloved School has &lt;em&gt;sssup.it&lt;/em&gt;). Other countries (the United Kingdom, for instance) chose to mimic the global TLD structure, so their addresses look like &lt;em&gt;google.co.uk&lt;/em&gt;, &lt;em&gt;ox.ac.uk&lt;/em&gt;, and so on. Some even mix the two policies.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Combine these two facts, and you get a big mess. Issue #2 means that when you see a domain name it is very hard to tell which is the TLD and which is the specific domain name. It is not immediately obvious, for instance, that &lt;em&gt;pi.it&lt;/em&gt; is a global TLD (reserved for the italian province of Pisa) while &lt;em&gt;sns.it&lt;/em&gt; is the site of our arch-rival, the infamous Scuola Normale Superiore.&lt;/p&gt;
&lt;p&gt;There is &lt;a href="http://crisp.tweakblogs.net/blog/120/ie-and-2-letter-domain-names.html"&gt;no&lt;/a&gt; &lt;a href="http://weblogs.mozillazine.org/gerv/archives/2006/10/dns_structure.html"&gt;“good”&lt;/a&gt; &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=252342#c31"&gt;solution&lt;/a&gt; to this problem. &lt;a href="https://wiki.mozilla.org/Gecko:Effective_TLD_Service"&gt;Mozilla developers&lt;/a&gt; ended up creting a &lt;a href="http://mxr.mozilla.org/mozilla/source/netwerk/dns/src/effective_tld_names.dat?raw=1"&gt;list of “Effective TLDs“&lt;/a&gt;&lt;sup&gt;&lt;a href="http://allievi.sssup.it/techblog/?p=81#footnote_2_81" id="identifier_2_81" class="footnote-link footnote-identifier-link" title="Browsers need this list to enforce cookie restrictions (what if someone was able a cookie on all &amp;quot;.co.uk&amp;quot; domains?). The list is now publicly maintained at publicsuffix.org."&gt;3&lt;/a&gt;&lt;/sup&gt; which the browser treats like global TLDs.&lt;/p&gt;
&lt;p&gt;Each item on this list is an exploit opportunity for the WPAD bug. Just register the &lt;em&gt;wpad.it&lt;/em&gt; domain and you potentially have control of &lt;strong&gt;all&lt;/strong&gt; buggy machines with a &lt;em&gt;.it&lt;/em&gt; name&lt;/p&gt;
&lt;h3&gt;Attack on Italy: the wpad.it mistery&lt;/h3&gt;
&lt;p&gt;You might think registrars would think twice before assigning a “wpad.country” domain. It turns out that sometimes this is not the case.&lt;/p&gt;
&lt;p&gt;Some global wpad domains do exist and many of them serve a malicious &lt;em&gt;wpad.dat&lt;/em&gt;. I’m gathering data and I’ll post when I have enough to make an interesting summary.&lt;/p&gt;
&lt;p&gt;But take a look at this, the global &lt;a href="http://wpad.it/wpad.dat"&gt;wpad.it/wpad.dat&lt;/a&gt;:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="javascript" style="font-family:monospace;"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;function&lt;/span&gt; FindProxyForURL&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; host&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;
        &lt;span style="color: #006600; font-style: italic;"&gt;//regular expression/complexity supported?&lt;/span&gt;
        &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;shExpMatch&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;http://*g*ad*nd*c*m*sh*ds*js&amp;quot;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;shExpMatch&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;http*//*s*st*mp*tn*sk*p*&amp;quot;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&lt;/span&gt;amp&lt;span style="color: #339933;"&gt;;&amp;amp;&lt;/span&gt;amp&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #339933;"&gt;!&lt;/span&gt;shExpMatch&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;url&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;http*//*n*o.*&amp;quot;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;PROXY 72.55.164.182:80; DIRECT&amp;quot;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;
        &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;DIRECT&amp;quot;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;What the hell is this? It appears the attacker is targeting some specific websites, but the wildcard is quite complicated. Any idea of what it might be?&lt;/p&gt;
&lt;p&gt;UPDATE: found this same file on &lt;a href="http://wpad.cz/wpad.dat"&gt;wpad.cz&lt;/a&gt;, full analysis in progress.&lt;/p&gt;
&lt;p&gt;UPDATE: a more in depth analysis &lt;a href="http://allievi.sssup.it/techblog/?p=115"&gt;here&lt;/a&gt; and &lt;a href="http://allievi.sssup.it/techblog/?p=142"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;ol class="footnotes"&gt;&lt;li id="footnote_0_81" class="footnote"&gt;Windows can also read its settings from DHCP and even from a &lt;a href="http://www.wlug.org.nz/WPAD"&gt;special DNS entry&lt;/a&gt;. The official Microsoft documentation is somewhat sparse, but detailed information can be found in the &lt;a href="http://www.wrec.org/Drafts/draft-cooper-webi-wpad-00.txt"&gt;draft submitted for standardization&lt;/a&gt; (&lt;a href="http://www.ietf.org/proceedings/99nov/I-D/draft-ietf-wrec-wpad-01.txt"&gt;previous version&lt;/a&gt;), in&lt;a href="http://technet.microsoft.com/en-us/library/cc713344.aspx"&gt;TechNet&lt;/a&gt;, in &lt;a href="http://support.microsoft.com/kb/309814"&gt;some knowledge&lt;/a&gt; &lt;a href="http://msdn.microsoft.com/en-us/library/aa384240.aspx"&gt;base articles&lt;/a&gt;, and of course on &lt;a href="http://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol"&gt;Wikipedia&lt;/a&gt;. Another file which can be requested is &lt;em&gt;wspad.dat&lt;/em&gt;, which has &lt;a href="http://support.microsoft.com/kb/260210"&gt;a different format&lt;/a&gt;.&lt;/li&gt;&lt;li id="footnote_1_81" class="footnote"&gt;Even when a &lt;a href="http://en.wikipedia.org/wiki/Windows_Internet_Name_Service"&gt;WINS&lt;/a&gt; server is present, naming your computer &lt;em&gt;WPAD.YOURDOMAIN.COM&lt;/em&gt; might do the trick.&lt;/li&gt;&lt;li id="footnote_2_81" class="footnote"&gt;Browsers need this list to enforce cookie restrictions (what if someone was able a cookie on all “.co.uk” domains?). The list is now publicly maintained at &lt;a href="http://publicsuffix.org"&gt;publicsuffix.org&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=z8oF39mCaqA:7s4MGy8U0Ps:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=z8oF39mCaqA:7s4MGy8U0Ps:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=z8oF39mCaqA:7s4MGy8U0Ps:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=z8oF39mCaqA:7s4MGy8U0Ps:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=z8oF39mCaqA:7s4MGy8U0Ps:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=z8oF39mCaqA:7s4MGy8U0Ps:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/z8oF39mCaqA" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=81#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=81" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=81</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Three GDB tricks for the masses]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/6nPkZbc4Lxk/" />
		<id>http://allievi.sssup.it/techblog/?p=79</id>
		<updated>2009-05-13T15:58:12Z</updated>
		<published>2009-05-08T15:38:25Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Coding tricks" /><category scheme="http://allievi.sssup.it/techblog" term="debugging" /><category scheme="http://allievi.sssup.it/techblog" term="gdb" /><category scheme="http://allievi.sssup.it/techblog" term="reverse engineering" />		<summary type="html"><![CDATA[The GNU Debugger is a very powerful and fearsome beast. It seems that I’ve found a couple of useful tricks which are not popular as they should. The watch command: any script kiddie knows about breakpoints. Watchpoints are based on the same concept applied to not to code, but to data memory. You can set [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=79">&lt;p&gt;The GNU Debugger is a very powerful and fearsome beast. It seems that I’ve found a couple of useful tricks which are not popular as they should.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;em&gt;watch&lt;/em&gt; command: any script kiddie knows about breakpoints. Watchpoints are based on the same concept applied to not to code, but to data memory. You can set a watchpoint on a variable using the following syntax: &lt;code&gt;watch var.&lt;/code&gt; It is also possible to watch a specific memory address with the syntax: &lt;code&gt;watch *0xdeadbeaf&lt;/code&gt;. A watchpoint triggers when the contents of the memory location changes, so they are useful when trying to find out when a variable is modified. (remember that in C++ you should always use &lt;em&gt;private&lt;/em&gt; and &lt;em&gt;protected&lt;/em&gt; sections to stop variables from being accessed/modified outside the expected code flow). It is also possible to set &lt;em&gt;read watchpoints&lt;/em&gt; using the &lt;em&gt;rwatch&lt;/em&gt; command, which triggers when the location is accessed. This feature is mainly useful when reverse engineering compiled code, to find out which code path make use/are influenced by a certain variable/memory location. The major drawback of watchpoints is that common hardware support only a few of them. When gdb runs out of hardware watchpoints it resorts to software emulation, which is very slow, and not possible at all for the read ones. This also means that putting watchpoints on big structures and classes is highly discorauged.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;set print object&lt;/em&gt;: If you’ve ever made extensive use of polymorphic classes or otherwise complex class hierarchies, you will find this setting very useful. The &lt;em&gt;print&lt;/em&gt; command, when printing pointers of base classes, will take look at the virtual table to find out the actual object type, and print it beside the address. Moreover when dereferencing pointers it will print the full object contents, not only the base class members.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;info threads&lt;/em&gt; command: When you face a deadlock in your multithreaded code, the first step to understand the problem is to find out which threads are blocked. The deadlock is often not easily reproducible, so should at first attach gdb the the process using the &lt;em&gt;attach &amp;lt;pid&amp;gt;&lt;/em&gt; command, the typing &lt;em&gt;info threads&lt;/em&gt; you will get for each thread the function name where it is currently stopped. Threads involved in a deadlock conditions are usually stopped in &lt;em&gt;sem_wait&lt;/em&gt; or similar semaphore related functions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Well... I guess I’m using gdb way too much, maybe I’m not a good programmer &lt;img src='http://allievi.sssup.it/techblog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6nPkZbc4Lxk:sUvG8BM5wY4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6nPkZbc4Lxk:sUvG8BM5wY4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6nPkZbc4Lxk:sUvG8BM5wY4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=6nPkZbc4Lxk:sUvG8BM5wY4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6nPkZbc4Lxk:sUvG8BM5wY4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=6nPkZbc4Lxk:sUvG8BM5wY4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/6nPkZbc4Lxk" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=79#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=79" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=79</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Picking windows]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/S7dHCdcLwqI/" />
		<id>http://allievi.sssup.it/techblog/?p=75</id>
		<updated>2009-05-30T15:07:17Z</updated>
		<published>2009-05-04T03:25:06Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Ubuntu" /><category scheme="http://allievi.sssup.it/techblog" term="bugs" /><category scheme="http://allievi.sssup.it/techblog" term="linux" />		<summary type="html"><![CDATA[The Window Picker Applet is an GNOME applet (developed at Canonical) that displays the list of  running applications and allows you to switch between them. It’s a default applet in Ubuntu-netbook-remix, since on netbooks the screen real estate is essential. It’s a nice little applet, but unfortunately does not work well with vertical panels, since [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=75">&lt;p&gt;The Window Picker Applet is an GNOME applet (developed at Canonical) that displays the list of  running applications and allows you to switch between them. It’s a default applet in Ubuntu-netbook-remix, since on netbooks the screen real estate is essential.
&lt;/p&gt;
&lt;p&gt;
It’s a nice little applet, but unfortunately does not work well with vertical panels, since it tries to display the icon list of the running applications horizontally (see this &lt;a href="https://bugs.launchpad.net/window-picker-applet/+bug/264974"&gt;bug&lt;/a&gt;). I’ve developed a patch to window-picker-applet-0.4.22 that solves this issue.&lt;br /&gt;
To use it, do as follows:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="bash" style="font-family:monospace;"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;apt-get &lt;span style="color: #7a0874; font-weight: bold;"&gt;source&lt;/span&gt;&lt;/span&gt;  window-picker-applet
&lt;span style="color: #7a0874; font-weight: bold;"&gt;cd&lt;/span&gt; window-picker-applet-0.4.22
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;patch&lt;/span&gt; &lt;span style="color: #660033;"&gt;-p1&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #007800;"&gt;$PATH_TO_THE_PATCH_FILE&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;and then the usual:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="bash" style="font-family:monospace;"&gt;.&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;configure
&lt;span style="color: #7a0874; font-weight: bold;"&gt;cd&lt;/span&gt; src &lt;span style="color: #000000; font-weight: bold;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;make&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;make&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;killall&lt;/span&gt; gnome-panel&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Note that this patch *needs* gnome-panel to be restarted, since the panel orientation is chosen at initialization (I’ve not implemented yet the orientation change during execution).&lt;/p&gt;
&lt;p&gt;Download the patch from&lt;a href="http://launchpadlibrarian.net/26298305/window-picker-applet-patch"&gt; here&lt;/a&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=S7dHCdcLwqI:WebvLfBTR9c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=S7dHCdcLwqI:WebvLfBTR9c:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=S7dHCdcLwqI:WebvLfBTR9c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=S7dHCdcLwqI:WebvLfBTR9c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=S7dHCdcLwqI:WebvLfBTR9c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=S7dHCdcLwqI:WebvLfBTR9c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/S7dHCdcLwqI" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=75#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=75" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=75</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Fun with ptrace: system emulation]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/cN-8bjrgLAU/" />
		<id>http://allievi.sssup.it/techblog/?p=71</id>
		<updated>2009-05-03T23:35:08Z</updated>
		<published>2009-05-03T23:35:08Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Coding tricks" /><category scheme="http://allievi.sssup.it/techblog" term="gdb" /><category scheme="http://allievi.sssup.it/techblog" term="linux" /><category scheme="http://allievi.sssup.it/techblog" term="ptrace" />		<summary type="html"><![CDATA[The more I explore the interfaces deeply hidden in the linux kernel, the more a new world of opportunity opens. Today, while taking a look at the ptrace API, I found out the PTRACE_SYSEMU option. But what is ptrace? It’s a kernel interface to check and manipulate the information that crosses the user space-kernel space [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=71">&lt;p&gt;&lt;img class="size-full wp-image-72 alignleft" title="penguin_internals" src="http://allievi.sssup.it/techblog/wp-content/uploads/2009/05/penguin_internals.jpg" alt="penguin_internals" width="218" height="297" /&gt; The more I explore the interfaces deeply hidden in the linux kernel, the more a new world of opportunity opens. Today, while taking a look at the ptrace API, I found out the PTRACE_SYSEMU option.&lt;/p&gt;
&lt;p&gt;But what is ptrace? It’s a kernel interface to check and manipulate the information that crosses the user space-kernel space frontier. Its &lt;span style="text-decoration: line-through;"&gt;main&lt;/span&gt;... &lt;span style="text-decoration: line-through;"&gt;principal&lt;/span&gt;... only user is &lt;a title="The GNU debugger" href="http://www.gnu.org/software/gdb/"&gt;gdb&lt;/a&gt; usually. The PTRACE_SYSEMU option is quite peculiar, it was implemented mainly for the user mode linux project. It allows not only to monitor the system calls invoked by a process, but also to replace the system call sematics.&lt;/p&gt;
&lt;p&gt;So... how could this be useful? For example to experiment with different auditing/sandboxing strategies, or to build compatility layers at the system call level... but who knows what kind of funny things could be done!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=cN-8bjrgLAU:IwT96NIcrYQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=cN-8bjrgLAU:IwT96NIcrYQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=cN-8bjrgLAU:IwT96NIcrYQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=cN-8bjrgLAU:IwT96NIcrYQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=cN-8bjrgLAU:IwT96NIcrYQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=cN-8bjrgLAU:IwT96NIcrYQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/cN-8bjrgLAU" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=71#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=71" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=71</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Dodge this.]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/hY5TI8RYsdw/" />
		<id>http://allievi.sssup.it/techblog/?p=65</id>
		<updated>2009-05-01T07:39:51Z</updated>
		<published>2009-05-01T03:58:50Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Projects" /><category scheme="http://allievi.sssup.it/techblog" term="Player/Stage" />		<summary type="html"><![CDATA[The Player Project is a difficult beast to describe. On its site is it presented in this way The Player Project creates Free Software that enables research in robot and sensor systems. Even Wikipedia carefully avoids a definition: The Player Project (formerly the Player/Stage Project or Player/Stage/Gazebo Project) is a project to create free software [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=65">&lt;div id="attachment_67" class="wp-caption aligncenter" style="width: 309px"&gt;&lt;img class="size-medium wp-image-67" title="oa_example_snd_03_2" src="http://allievi.sssup.it/techblog/wp-content/uploads/2009/05/oa_example_snd_03_2-299x300.jpg" alt="Snd driver example" width="299" height="300" /&gt;&lt;p class="wp-caption-text"&gt;Snd driver example&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;The &lt;a href="http://playerstage.sourceforge.net/"&gt;Player Project&lt;/a&gt; is a difficult beast to describe. On its site is it presented in this way&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style="color: #808080;"&gt;The Player Project creates Free Software that enables research in robot and sensor systems.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Even Wikipedia carefully avoids a definition:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style="color: #808080;"&gt;The &lt;strong&gt;Player Project&lt;/strong&gt; (formerly the &lt;strong&gt;Player/Stage Project&lt;/strong&gt; or &lt;strong&gt;Player/Stage/Gazebo Project&lt;/strong&gt;) is a project to create &lt;a title="Free software" href="http://en.wikipedia.org/wiki/Free_software"&gt;free software&lt;/a&gt; for research into &lt;a title="Robotics" href="http://en.wikipedia.org/wiki/Robotics"&gt;robotics&lt;/a&gt; and &lt;a title="Sensor" href="http://en.wikipedia.org/wiki/Sensor"&gt;sensor&lt;/a&gt; systems. Its components include the &lt;em&gt;Player&lt;/em&gt;&lt;em&gt;Stage&lt;/em&gt; and &lt;em&gt;Gazebo&lt;/em&gt; robot platform simulators. Although accurate statistics are hard to obtain, Player is probably the most-used robot interface in research and post-secondary education.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Well, whatever this software framework is, it can speed up developing algorithms for moving robots quite a lot.&lt;/p&gt;
&lt;p&gt;From today on, I hope that this speed up will be a little bit greater, since &lt;em&gt;&lt;span style="color: #808080;"&gt;&amp;lt;trumpet blows&amp;gt;&lt;/span&gt;&lt;/em&gt; I’ve released the first version of the “Smooth Nearness Diagram Navigation” algorithm, which performs obstacle avoidance quite well (at least on simulated robots and on the &lt;a href="http://www.videredesign.com/robots/era_mobi.htm"&gt;Erratic&lt;/a&gt; robot). You can find the patch &lt;a href="https://sourceforge.net/tracker/?func=detail&amp;amp;aid=2784775&amp;amp;group_id=42445&amp;amp;atid=433166"&gt;here&lt;/a&gt; (against current svn), and hopefully someday it will be integrated in trunk.&lt;/p&gt;
&lt;p&gt;The SND algorithm, a creature of Joey Durham, is an improvement over the ND driver (that was already in Player). The paper which presents it is &lt;a href="http://motion.mee.ucsb.edu/pdf/2008a-db.pdf"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=hY5TI8RYsdw:qfDDpstMHNk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=hY5TI8RYsdw:qfDDpstMHNk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=hY5TI8RYsdw:qfDDpstMHNk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=hY5TI8RYsdw:qfDDpstMHNk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=hY5TI8RYsdw:qfDDpstMHNk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=hY5TI8RYsdw:qfDDpstMHNk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/hY5TI8RYsdw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=65#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=65" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=65</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luca Invernizzi</name>
						<uri>http://lucainvernizzi.net</uri>
					</author>
		<title type="html"><![CDATA[Why are we using last.fm anyway?]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/xeoeAEbimlE/" />
		<id>http://allievi.sssup.it/techblog/?p=61</id>
		<updated>2009-04-29T07:06:55Z</updated>
		<published>2009-04-29T06:59:27Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Projects" /><category scheme="http://allievi.sssup.it/techblog" term="sometimes tiny is good" />		<summary type="html"><![CDATA[Now that last.fm has become a paid internet radio service, I’d say that most of its appeal relies on the possibility of keeping track of what your personal music tastes are, and how they’re  changing over time. This is not easy to achieve with any desktop-based music library software, since the database that keeps your [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=61">&lt;p&gt;&lt;a href="http://projects.gnome.org/rhythmbox/"&gt;&lt;img class="alignleft" title="rhythmbox logo" src="http://allievi.sssup.it/user/guillo/altreimmagini/rhythmbox.png" alt="" width="143" height="143" /&gt;&lt;/a&gt;&lt;a href="http://last.fm"&gt;&lt;img class="alignright" title="last.fm" src="http://allievi.sssup.it/user/guillo/altreimmagini/lastfm.png" alt="" width="199" height="107" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now that &lt;a href="http://last.fm"&gt;last.fm&lt;/a&gt; has become a paid internet radio service, I’d say that most of its appeal relies on the possibility of keeping track of what your personal music tastes are, and how they’re  changing over time. This is not easy to achieve with any desktop-based music library software, since the database that keeps your preferences will be almost certainly lost as some point (changing distribution, laptop, random search when crossing the USA border, man-I-forgot-to-do-backups).&lt;/p&gt;
&lt;p&gt;It would be nice to be able to get that database of music preferences out of last.fm and back in your music library. It would be even nicer nowadays, since developers are putting a fair amount of effort in the creation of “smart playlists”, which take into account your music tastes, and it takes a lot of time to build a good dataset for that. Since the evil mac people have this feature, amarok seems to have it too, I decided to spend a night hacking out a first implementation of importing last.fm stats into Rhythmbox (which is, after all, the default music player for almost every gnome based distribution). The result is available &lt;a href="http://code.google.com/p/lastfm-stats-in-rhythmbox/"&gt;here&lt;/a&gt;, and it seems to work fine so far, even if it can/should still be improved a lot.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=xeoeAEbimlE:8afNMocO_N0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=xeoeAEbimlE:8afNMocO_N0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=xeoeAEbimlE:8afNMocO_N0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=xeoeAEbimlE:8afNMocO_N0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=xeoeAEbimlE:8afNMocO_N0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=xeoeAEbimlE:8afNMocO_N0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/xeoeAEbimlE" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=61#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=61" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=61</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[The Lightspark Project, a modern flash player implementation]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/6ACp7uoEg8A/" />
		<id>http://allievi.sssup.it/techblog/?p=54</id>
		<updated>2009-03-28T17:07:08Z</updated>
		<published>2009-03-28T17:05:04Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Insane Projects" /><category scheme="http://allievi.sssup.it/techblog" term="concurrency" /><category scheme="http://allievi.sssup.it/techblog" term="Flash" /><category scheme="http://allievi.sssup.it/techblog" term="Lightspark" /><category scheme="http://allievi.sssup.it/techblog" term="OpenGL" />		<summary type="html"><![CDATA[When some months ago Adobe released the complete SWF file format specification I though that it would be nice to develop a well designed open source flash player. Now I’ve been working for some time on this idea and I’ve recently relased the code on SourceForge. The project objectives are quite ambitious, as the flash [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=54">&lt;p&gt;&lt;img class="aligncenter size-medium wp-image-55" title="lighspark-demo1" src="http://allievi.sssup.it/techblog/wp-content/uploads/2009/03/lighspark-demo1-300x235.png" alt="lighspark-demo1" width="300" height="235" /&gt;When some months ago &lt;a href="http://www.adobe.com"&gt;Adobe&lt;/a&gt; released the &lt;a href="http://tech.slashdot.org/article.pl?sid=08/05/01/0628254"&gt;complete SWF file format specification&lt;/a&gt; I though that it would be nice to develop a well designed open source flash player. Now I’ve been working for some time on this idea and I’ve recently relased the &lt;a href="https://sourceforge.net/projects/lightspark/"&gt;code on SourceForge.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The project objectives are quite ambitious, as the flash specification are really complex. The project is designed to take advance of the feautures present on modern hadrware, so it not supposed to run on older machines. All the graphic rendering is done using OpenGL and in the future programmable shaders will be used to offload even more calculations on the GPU. Extensive multithreading is employed to make use of multicore and hyper-threading processors. I’ll write a more detailed post about some tricky and interesting part of the project soon.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6ACp7uoEg8A:q9CO15-OAGU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6ACp7uoEg8A:q9CO15-OAGU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6ACp7uoEg8A:q9CO15-OAGU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=6ACp7uoEg8A:q9CO15-OAGU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=6ACp7uoEg8A:q9CO15-OAGU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=6ACp7uoEg8A:q9CO15-OAGU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/6ACp7uoEg8A" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=54#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=54" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=54</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Jacopo Corbetta</name>
						<uri>http://allievi.sssup.it/jacopo/</uri>
					</author>
		<title type="html"><![CDATA[A Nice Little Book of Semaphores]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/VXkeaVKa4fc/" />
		<id>http://allievi.sssup.it/techblog/?p=49</id>
		<updated>2009-03-15T18:01:34Z</updated>
		<published>2009-03-15T17:52:19Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Coding tricks" /><category scheme="http://allievi.sssup.it/techblog" term="books" /><category scheme="http://allievi.sssup.it/techblog" term="concurrency" /><category scheme="http://allievi.sssup.it/techblog" term="links" /><category scheme="http://allievi.sssup.it/techblog" term="semaphores" />		<summary type="html"><![CDATA[We’re currently busy working on assignments for the internal exams here at Sant’Anna School1 and we (well, Mirko) found a nice book for our parallel programming project. It’s “A Little Book of Semaphores”, freely available here. It’s a very nice collection of concurrency problems, it deals with pretty much every one you could think of. [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=49">&lt;p&gt;We’re currently busy working on assignments for the internal exams here at Sant’Anna School&lt;sup&gt;&lt;a href="http://allievi.sssup.it/techblog/?p=49#footnote_0_49" id="identifier_0_49" class="footnote-link footnote-identifier-link" title="Well, we&amp;#039;re also working on the usual stuff (ways to make big money, strange web 2.0 applications, high-performance-emulators, big robots, small robots, our many-times-acclaimed editor for Wikipedia, world domination, ...)."&gt;1&lt;/a&gt;&lt;/sup&gt; and we (well, Mirko) found a nice book for our parallel programming project. It’s “A Little Book of Semaphores”, freely available &lt;a title="The Little Book of Semaphores" href="http://www.greenteapress.com/semaphores/"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It’s a very nice collection of concurrency problems, it deals with pretty much every one you could think of. So thank you professor Downey!&lt;/p&gt;
&lt;ol class="footnotes"&gt;&lt;li id="footnote_0_49" class="footnote"&gt;Well, we’re also working on the usual stuff (ways to make big money, strange web 2.0 applications, high-performance-emulators, big robots, small robots, our &lt;a href="http://allievi.sssup.it/jacopo/MeanEditor/"&gt;many-times-acclaimed editor for Wikipedia&lt;/a&gt;, world domination, ...).&lt;/li&gt;&lt;/ol&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=VXkeaVKa4fc:xeTnEEgYfP0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=VXkeaVKa4fc:xeTnEEgYfP0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=VXkeaVKa4fc:xeTnEEgYfP0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=VXkeaVKa4fc:xeTnEEgYfP0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=VXkeaVKa4fc:xeTnEEgYfP0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=VXkeaVKa4fc:xeTnEEgYfP0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/VXkeaVKa4fc" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=49#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=49" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=49</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[A little VIM trick]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/z8FJ1_DSBXQ/" />
		<id>http://allievi.sssup.it/techblog/?p=46</id>
		<updated>2009-03-02T02:56:05Z</updated>
		<published>2009-03-02T02:55:16Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Sysadmin Kung Fu" /><category scheme="http://allievi.sssup.it/techblog" term="VIM" />		<summary type="html"><![CDATA[This is a little useful trick for VIM users. As you may know VIM supports tabbed editing using the :tabnew command. It is then possible to switch between tabs using the :tabnext and :tabprev command. A faster shortcut is to add these two lines to the vimrc nnoremap &#60;F1&#62; :tabprev nnoremap &#60;F2&#62; :tabnext Now you [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=46">&lt;p&gt;This is a little useful trick for VIM users. As you may know VIM supports tabbed editing using the :tabnew  command. It is then possible to switch between tabs using the :tabnext and :tabprev command. A faster shortcut is to add these two lines to the vimrc&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
nnoremap &amp;lt;F1&amp;gt; :tabprev&lt;br /&gt;
nnoremap &amp;lt;F2&amp;gt; :tabnext&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now you can use F1/F2 keys to switch between tabs.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=z8FJ1_DSBXQ:h7KaAIlwLHE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=z8FJ1_DSBXQ:h7KaAIlwLHE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=z8FJ1_DSBXQ:h7KaAIlwLHE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=z8FJ1_DSBXQ:h7KaAIlwLHE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/sssuptech?a=z8FJ1_DSBXQ:h7KaAIlwLHE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/sssuptech?i=z8FJ1_DSBXQ:h7KaAIlwLHE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/z8FJ1_DSBXQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=46#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=46" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=46</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Samba upgrade headache]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/V8F9hjwe9qs/" />
		<id>http://allievi.sssup.it/techblog/?p=43</id>
		<updated>2009-02-11T04:25:26Z</updated>
		<published>2009-02-11T04:24:45Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Sysadmin Kung Fu" /><category scheme="http://allievi.sssup.it/techblog" term="Debian" /><category scheme="http://allievi.sssup.it/techblog" term="samba" /><category scheme="http://allievi.sssup.it/techblog" term="upgrade" />		<summary type="html"><![CDATA[Even a Debian machine when it’s not nursed by the loving hands of a system administrator for a long time could be a source of problems. I found myself upgrading samba from version 3.0.24 to 3.2.5 all at once, on our main fileserver. And suddenly all the windows machines here at school could not access [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=43">&lt;p&gt;Even a Debian machine when it’s not nursed by the loving hands of a system administrator for a long time could be a source of problems. I found myself upgrading samba from version 3.0.24 to 3.2.5 all at once, on our main fileserver. And suddenly all the windows machines here at school could not access the shares anymore. This problems seems not to be documented anywere. So I took a deep breath and start scrolling the huge samba changelog between the old and the new version. However I was lucky, the problematic change happened at version 3.0.25a. It seems that the default value of the &lt;code&gt;msdsf root&lt;/code&gt; option changed from true to false, but Windows cached this information. To solve the problem the solution is the usual: just reboot windows.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/sssuptech?a=WYFkKeOl"&gt;&lt;img src="http://feeds.feedburner.com/~f/sssuptech?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/sssuptech?a=cAoC5cPB"&gt;&lt;img src="http://feeds.feedburner.com/~f/sssuptech?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/V8F9hjwe9qs" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=43#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=43" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=43</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Case Study: Real Time video encoding on Via Epia, Part II]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/RGDrFLBWJJQ/" />
		<id>http://allievi.sssup.it/techblog/?p=19</id>
		<updated>2009-05-13T20:14:15Z</updated>
		<published>2009-02-06T03:40:30Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Coding tricks" /><category scheme="http://allievi.sssup.it/techblog" term="assembly" /><category scheme="http://allievi.sssup.it/techblog" term="MMX" /><category scheme="http://allievi.sssup.it/techblog" term="optimization" /><category scheme="http://allievi.sssup.it/techblog" term="pESApod" /><category scheme="http://allievi.sssup.it/techblog" term="RGB" /><category scheme="http://allievi.sssup.it/techblog" term="SSE" /><category scheme="http://allievi.sssup.it/techblog" term="Via Epia" /><category scheme="http://allievi.sssup.it/techblog" term="YUV" />		<summary type="html"><![CDATA[Once upon a time, there was the glorious empire of DOS. It was a mighty and fearful time, when people could still talk to the heart of the machines and write code in the forgotten language of assembly. We are now lucky enough to have powerful compilers that do most of this low level work [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=19">&lt;p&gt;Once upon a time, there was the glorious empire of DOS. It was a mighty and fearful time, when people could still talk to the heart of the machines and write code in the forgotten language of assembly. We are now lucky enough to have powerful compilers that do most of this low level work for us, and hand crafting assembly code is not needed anyomore. But the introduction of SIMD (Single Instruction Multiple Data) within the x86 instruction set made this ancient ability useful again.&lt;/p&gt;
&lt;p&gt;MMX/SSE are a very powerful and dangerous beast. We had almost no previous experience with low level assembly programming. And a critical problem to solve: how to convert from RGB colorspace to YUV, and do it fast on our very limited board.&lt;br /&gt;
As I’ve wrote on the &lt;a href="?p=5"&gt;previous article&lt;/a&gt; the conversion is conceptually simple and it’s basically a 3x3 matrix multiplication. That’s it, do 9 &lt;a href="http://en.wikipedia.org/wiki/Scalar_product"&gt;scalar products&lt;/a&gt; and you’re done!&lt;/p&gt;
&lt;p&gt;&lt;img class="aligncenter size-full wp-image-39" title="vect11" src="http://allievi.sssup.it/techblog/wp-content/uploads/2009/02/vect11.png" alt="vect11" width="644" height="194" /&gt;&lt;/p&gt;
&lt;p&gt;SIMD instructions operate on packed data: this means that more than one (usually 2/4) value is stored in a single register and operations on them are parallelized. For example you can do four sums with a single operation.&lt;br /&gt;
Unfortunately MMX/SSE is a vertical instruction set. This means you can do very little with the data packed in a single register. There are however instructions that do ‘half a scalar product’. We found out an approach to maximize the throughput using this.&lt;/p&gt;
&lt;p&gt;Our camera, a Pointgrey Bumblebee, delivers raw sensor data via Firewire, arranged in a pattern called Bayer Encoding. Color data is arranged in 2x2 cells, and there are twice the sensors for green than for the the other colors, since the human eye is more sensible to that color. We at first rearrange the input data in a strange but useful pattern, as in picture. The following assembler code then does the magic, two pixel at a time.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="asm" style="font-family:monospace;"&gt;&lt;span style="color: #339933;"&gt;//&lt;/span&gt;Loading &lt;span style="color: #46aa03; font-weight: bold;"&gt;mm0&lt;/span&gt; with &lt;span style="color: #ff0000;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; this will be useful to interleave &lt;span style="color: #0000ff; font-weight: bold;"&gt;data&lt;/span&gt; &lt;span style="color: #0000ff; font-weight: bold;"&gt;byte&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;pxor&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm0&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #339933;"&gt;//&lt;/span&gt;Loading &lt;span style="color: #ff0000;"&gt;8&lt;/span&gt; bytes from buffer&lt;span style="color: #339933;"&gt;.&lt;/span&gt; Assume &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;eax&lt;/span&gt; contains the address of the input buffer
&lt;span style="color: #339933;"&gt;//&lt;/span&gt;One &lt;span style="color: #00007f; font-weight: bold;"&gt;out&lt;/span&gt; of four bytes are zeros&lt;span style="color: #339933;"&gt;,&lt;/span&gt; but the overhead is well balanced by the aligned memory access&lt;span style="color: #339933;"&gt;.&lt;/span&gt;
&lt;span style="color: #339933;"&gt;//&lt;/span&gt;Those zeros will also be useful later on
&lt;span style="color: #b00040;"&gt;movd&lt;/span&gt; &lt;span style="color: #009900; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;eax&lt;/span&gt;&lt;span style="color: #009900; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm1&lt;/span&gt; &lt;span style="color: #339933;"&gt;//&lt;/span&gt; &amp;amp;lt&lt;span style="color: #666666; font-style: italic;"&gt;; R1, G1, B2, 0&amp;amp;gt;&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;movd&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;4&lt;/span&gt;&lt;span style="color: #009900; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;eax&lt;/span&gt;&lt;span style="color: #009900; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm2&lt;/span&gt; &lt;span style="color: #339933;"&gt;//&lt;/span&gt; &amp;amp;lt&lt;span style="color: #666666; font-style: italic;"&gt;; B1, 0, R2, G2&amp;amp;gt;&lt;/span&gt;
&lt;span style="color: #339933;"&gt;//&lt;/span&gt;Unpacking bytes to words&lt;span style="color: #339933;"&gt;,&lt;/span&gt; MMX registers are &lt;span style="color: #ff0000;"&gt;8&lt;/span&gt; bytes wide so we can interleave the &lt;span style="color: #0000ff; font-weight: bold;"&gt;data&lt;/span&gt; bytes with zeros&lt;span style="color: #339933;"&gt;.&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;punpcklbw&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm1&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;punpcklbw&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm2&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #339933;"&gt;//&lt;/span&gt;We need triple copy of each input&lt;span style="color: #339933;"&gt;,&lt;/span&gt; one for each output channel
&lt;span style="color: #b00040;"&gt;movq&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm3&lt;/span&gt; &lt;span style="color: #339933;"&gt;//&lt;/span&gt; &amp;amp;lt&lt;span style="color: #666666; font-style: italic;"&gt;; R1, G1, B2, 0&amp;amp;gt;&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;movq&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm2&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm4&lt;/span&gt; &lt;span style="color: #339933;"&gt;//&lt;/span&gt; &amp;amp;lt&lt;span style="color: #666666; font-style: italic;"&gt;; B1, 0, R2, G2&amp;amp;gt;&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;movq&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm5&lt;/span&gt; &lt;span style="color: #339933;"&gt;//&lt;/span&gt; &amp;amp;lt&lt;span style="color: #666666; font-style: italic;"&gt;; R1, G1, B2, 0&amp;amp;gt;&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;movq&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm2&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm6&lt;/span&gt; &lt;span style="color: #339933;"&gt;//&lt;/span&gt; &amp;amp;lt&lt;span style="color: #666666; font-style: italic;"&gt;; B1, 0, R2, G2&amp;amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #339933;"&gt;//&lt;/span&gt;Multiply &lt;span style="color: #00007f; font-weight: bold;"&gt;and&lt;/span&gt; accumulate&lt;span style="color: #339933;"&gt;,&lt;/span&gt; this does only half the work&lt;span style="color: #339933;"&gt;.&lt;/span&gt;
&lt;span style="color: #339933;"&gt;//&lt;/span&gt;We multiply the &lt;span style="color: #0000ff; font-weight: bold;"&gt;data&lt;/span&gt; with the right constants &lt;span style="color: #00007f; font-weight: bold;"&gt;and&lt;/span&gt; sums the results &lt;span style="color: #00007f; font-weight: bold;"&gt;in&lt;/span&gt; pair&lt;span style="color: #339933;"&gt;.&lt;/span&gt;
&lt;span style="color: #339933;"&gt;//&lt;/span&gt;The consts are four packed 16bit values &lt;span style="color: #00007f; font-weight: bold;"&gt;and&lt;/span&gt; contains the constants scaled by &lt;span style="color: #ff0000;"&gt;32768&lt;/span&gt;&lt;span style="color: #339933;"&gt;.&lt;/span&gt;
&lt;span style="color: #339933;"&gt;//&lt;/span&gt;&lt;span style="color: #009900; font-weight: bold;"&gt;&amp;#91;&lt;/span&gt;YUV&lt;span style="color: #009900; font-weight: bold;"&gt;&amp;#93;&lt;/span&gt;const &lt;span style="color: #00007f; font-weight: bold;"&gt;and&lt;/span&gt; &lt;span style="color: #009900; font-weight: bold;"&gt;&amp;#91;&lt;/span&gt;YUV&lt;span style="color: #009900; font-weight: bold;"&gt;&amp;#93;&lt;/span&gt;const_inv are the same apart from being arrenged to suit the layout of the even&lt;span style="color: #339933;"&gt;/&lt;/span&gt;odd inputs
&lt;span style="color: #b00040;"&gt;pmaddwd&lt;/span&gt; Yconst&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm1&lt;/span&gt; &lt;span style="color: #339933;"&gt;//&lt;/span&gt; &amp;amp;lt&lt;span style="color: #666666; font-style: italic;"&gt;; Y1*R1 + Y2*G1, Y3*B2 + 0&amp;amp;gt;&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;pmaddwd&lt;/span&gt; Uconst&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm3&lt;/span&gt; &lt;span style="color: #339933;"&gt;//&lt;/span&gt; &amp;amp;lt&lt;span style="color: #666666; font-style: italic;"&gt;; U1*R1 + U2*G1, U3*B2 + 0&amp;amp;gt;&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;pmaddwd&lt;/span&gt; Vconst&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm5&lt;/span&gt; &lt;span style="color: #339933;"&gt;//&lt;/span&gt; &amp;amp;lt&lt;span style="color: #666666; font-style: italic;"&gt;; V1*R1 + V2*G1, V3*B2 + 0&amp;amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #b00040;"&gt;pmaddwd&lt;/span&gt; Yconst_inv&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm2&lt;/span&gt; &lt;span style="color: #339933;"&gt;//&lt;/span&gt; &amp;amp;lt&lt;span style="color: #666666; font-style: italic;"&gt;; Y3*B1 + 0, Y1*R2 + Y2*G2&amp;amp;gt;&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;pmaddwd&lt;/span&gt; Uconst_inv&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm4&lt;/span&gt; &lt;span style="color: #339933;"&gt;//&lt;/span&gt; &amp;amp;lt&lt;span style="color: #666666; font-style: italic;"&gt;; U3*B1 + 0, U1*R2 + U2*G2&amp;amp;gt;&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;pmaddwd&lt;/span&gt; Vconst_inv&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm6&lt;/span&gt; &lt;span style="color: #339933;"&gt;//&lt;/span&gt; &amp;amp;lt&lt;span style="color: #666666; font-style: italic;"&gt;; V3*B1 + 0, V1*R2 + V2*G2&amp;amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #339933;"&gt;//&lt;/span&gt;&lt;span style="color: #00007f; font-weight: bold;"&gt;Add&lt;/span&gt; registers &lt;span style="color: #00007f; font-weight: bold;"&gt;in&lt;/span&gt; pairs to get the final scalar product&lt;span style="color: #339933;"&gt;.&lt;/span&gt; The results are two packed pixel for each output channel &lt;span style="color: #00007f; font-weight: bold;"&gt;and&lt;/span&gt; still scaled by &lt;span style="color: #ff0000;"&gt;32768&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;paddd&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm2&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm1&lt;/span&gt; &lt;span style="color: #339933;"&gt;//&lt;/span&gt; &amp;amp;lt&lt;span style="color: #666666; font-style: italic;"&gt;; Y1*R1 + Y2*G1 + Y3*B1, Y1*R2, Y2*G2 + Y3*B2&amp;amp;gt;&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;paddd&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm4&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm3&lt;/span&gt; &lt;span style="color: #339933;"&gt;//&lt;/span&gt; &amp;amp;lt&lt;span style="color: #666666; font-style: italic;"&gt;; U1*R1 + U2*G1 + U3*B1, U1*R2, U2*G2 + U3*B2&amp;amp;gt;&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;paddd&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm6&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm5&lt;/span&gt; &lt;span style="color: #339933;"&gt;//&lt;/span&gt; &amp;amp;lt&lt;span style="color: #666666; font-style: italic;"&gt;; V1*R1 + V2*G1 + V3*B1, V1*R2, V2*G2 + V3*B2&amp;amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #339933;"&gt;//&lt;/span&gt;We shift right by &lt;span style="color: #ff0000;"&gt;15&lt;/span&gt; &lt;span style="color: #0000ff; font-weight: bold;"&gt;bits&lt;/span&gt; to get rid of the scaling
&lt;span style="color: #b00040;"&gt;psrad&lt;/span&gt; &lt;span style="color: #0000ff; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;15&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm1&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;psrad&lt;/span&gt; &lt;span style="color: #0000ff; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;15&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm3&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;psrad&lt;/span&gt; &lt;span style="color: #0000ff; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;15&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm5&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #339933;"&gt;//&lt;/span&gt;const128 is two packed 32bit values&lt;span style="color: #339933;"&gt;,&lt;/span&gt; this is the offset to be added to the U&lt;span style="color: #339933;"&gt;/&lt;/span&gt;V channnels
&lt;span style="color: #339933;"&gt;//&lt;/span&gt;const128&lt;span style="color: #339933;"&gt;:&lt;/span&gt;
&lt;span style="color: #339933;"&gt;//&lt;/span&gt; &lt;span style="color: #339933;"&gt;.&lt;/span&gt;long &lt;span style="color: #ff0000;"&gt;128&lt;/span&gt;
&lt;span style="color: #339933;"&gt;//&lt;/span&gt; &lt;span style="color: #339933;"&gt;.&lt;/span&gt;long &lt;span style="color: #ff0000;"&gt;128&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;paddd&lt;/span&gt; const128&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm3&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;paddd&lt;/span&gt; const128&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm5&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #339933;"&gt;//&lt;/span&gt;We repack the resulting dwords to bytes
&lt;span style="color: #b00040;"&gt;packssdw&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm1&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;packssdw&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm3&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;packssdw&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm5&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #b00040;"&gt;packuswb&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm1&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;packuswb&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm3&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;packuswb&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm5&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #339933;"&gt;//&lt;/span&gt;We copy the &lt;span style="color: #0000ff; font-weight: bold;"&gt;byte&lt;/span&gt; pairs to the destination buffers&lt;span style="color: #339933;"&gt;,&lt;/span&gt; assume &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;ebx&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;esi&lt;/span&gt; &lt;span style="color: #00007f; font-weight: bold;"&gt;and&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;edi&lt;/span&gt; contains the address of such buffers
&lt;span style="color: #b00040;"&gt;movd&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;ecx&lt;/span&gt;
movw &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;cx&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #009900; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;ebx&lt;/span&gt;&lt;span style="color: #009900; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;movd&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm3&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;ecx&lt;/span&gt;
movb &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;cl&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #009900; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;esi&lt;/span&gt;&lt;span style="color: #009900; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #b00040;"&gt;movd&lt;/span&gt; &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;mm5&lt;/span&gt;&lt;span style="color: #339933;"&gt;,%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;ecx&lt;/span&gt;
movb &lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;cl&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #009900; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #339933;"&gt;%&lt;/span&gt;&lt;span style="color: #46aa03; font-weight: bold;"&gt;edi&lt;/span&gt;&lt;span style="color: #009900; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Simple right? &lt;img src='http://allievi.sssup.it/techblog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;Coding this was difficult but in the end really interesting. And even more important, this was really fast and we had no problem using this during the robot competition itself.&lt;span id="more-19"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/sssuptech?a=3rnOL2dd"&gt;&lt;img src="http://feeds.feedburner.com/~f/sssuptech?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/sssuptech?a=bF119H0c"&gt;&lt;img src="http://feeds.feedburner.com/~f/sssuptech?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/RGDrFLBWJJQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=19#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=19" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=19</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Case Study: Real Time video encoding on Via Epia, Part I]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/kgVXyoynA9o/" />
		<id>http://allievi.sssup.it/tatiana/wordpress/?p=5</id>
		<updated>2009-05-15T17:56:20Z</updated>
		<published>2009-02-02T04:43:23Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Coding tricks" /><category scheme="http://allievi.sssup.it/techblog" term="assembly" /><category scheme="http://allievi.sssup.it/techblog" term="libFAME" /><category scheme="http://allievi.sssup.it/techblog" term="pESApod" /><category scheme="http://allievi.sssup.it/techblog" term="RGB" /><category scheme="http://allievi.sssup.it/techblog" term="Via Epia" /><category scheme="http://allievi.sssup.it/techblog" term="YUV" />		<summary type="html"><![CDATA[During the pESApod project we worked on the telecommunication and telemetry system for the robot. The computing infrastructure was very complex (maybe too much). We had three Altera FPGA on board and a very low power consumption PC, a VIA Epia board. Using devices that are light on power needs is a must for mobile [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=5">&lt;p&gt;During the &lt;a href="http://pesapod.blogspot.com"&gt;pESApod&lt;/a&gt; project we worked on the telecommunication and telemetry system for the robot. The computing infrastructure was very complex (maybe too much). We had three Altera FPGA on board and a very low power consumption PC, a VIA Epia board. Using devices that are light on power needs is a must for mobile robots. But we ended up using more power for the electronics than for the motors. I guess the Altera’s boards are very heavy on power, being prototyping devices.&lt;/p&gt;
&lt;p&gt;Anyway the Epia with the onboard Eden processor is a very nice machine. It is fully x86 compatible, and we managed to run linux on it without problems. It has indeed a very low power footprint, but the performance tradeoff for this was quite heavy. The original plan was to have four video streams from the robot. A pair of proximity cameras for sample gathering and a stereocam for navigation and environment mapping. We used at the end only the stereocam, but even encoding only those two video streams on the Epia was really difficult.&lt;/p&gt;
&lt;p&gt;We used &lt;a href="http://fame.sourceforge.net/"&gt;libFAME&lt;/a&gt; for the encoding. The name means Fast Assembly MPEG Encoder. It is fast indeed, but it is also very poorly mantained. So we had some problems at firts to make it work. The library accept frames encoded in YUV format, but our camera sensor data was in bayer encoding. So we had to write the format conversion routine.&lt;/p&gt;
&lt;div id="attachment_13" class="wp-caption aligncenter" style="width: 533px"&gt;&lt;img class="size-full wp-image-13" title="RGB to YUV" src="http://allievi.sssup.it/techblog/wp-content/uploads/2009/02/eqn918454.gif" alt="RGB to YUV using matrix notation" width="523" height="73" /&gt;&lt;p class="wp-caption-text"&gt;RGB to YUV using matrix notation&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;The conversion from RGB color space to &lt;a href="http://en.wikipedia.org/wiki/YCbCr"&gt;YUV&lt;/a&gt; is quite simple and can be done using linear algebra. Our first approach was really naive and based on floating point.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="c" style="font-family:monospace;"&gt;&lt;span style="color: #666666; font-style: italic;"&gt;// RGB* rgb;&lt;/span&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;// YUV* yuv;&lt;/span&gt;
yuv&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;y&lt;/span&gt;&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color:#800080;"&gt;0.299&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;r&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color:#800080;"&gt;0.114&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;g&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color:#800080;"&gt;0.587&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;b&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
yuv&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;u&lt;/span&gt;&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #0000dd;"&gt;128&lt;/span&gt; &lt;span style="color: #339933;"&gt;-&lt;/span&gt; &lt;span style="color:#800080;"&gt;0.168736&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;r&lt;/span&gt; &lt;span style="color: #339933;"&gt;-&lt;/span&gt; &lt;span style="color:#800080;"&gt;0.331264&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;g&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color:#800080;"&gt;0.5&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;b&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
yuv&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;v&lt;/span&gt;&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #0000dd;"&gt;128&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color:#800080;"&gt;0.5&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;r&lt;/span&gt; &lt;span style="color: #339933;"&gt;-&lt;/span&gt; &lt;span style="color:#800080;"&gt;0.418688&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;g&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color:#800080;"&gt;0.081312&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;b&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This was really slow. We later discovered to our disappointment that the FPU was clocked at half the speed of the processor. So we changed the implementation to integer math. The result was something like this:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="code"&gt;&lt;pre class="c" style="font-family:monospace;"&gt;yuv&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;y&lt;/span&gt;&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000dd;"&gt;299&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;r&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color:#800080;"&gt;0.114&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;g&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color:#800080;"&gt;0.587&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;b&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;/&lt;/span&gt;&lt;span style="color: #0000dd;"&gt;1000&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
yuv&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;u&lt;/span&gt;&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #0000dd;"&gt;128&lt;/span&gt; &lt;span style="color: #339933;"&gt;-&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000dd;"&gt;169&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;r&lt;/span&gt; &lt;span style="color: #339933;"&gt;-&lt;/span&gt; &lt;span style="color: #0000dd;"&gt;331&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;g&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #0000dd;"&gt;500&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;b&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;/&lt;/span&gt;&lt;span style="color: #0000dd;"&gt;1000&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
yuv&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;v&lt;/span&gt;&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #0000dd;"&gt;128&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000dd;"&gt;500&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;r&lt;/span&gt; &lt;span style="color: #339933;"&gt;-&lt;/span&gt; &lt;span style="color: #0000dd;"&gt;419&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;g&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #0000dd;"&gt;81&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;rgb&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #202020;"&gt;b&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;/&lt;/span&gt;&lt;span style="color: #0000dd;"&gt;1000&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This solution almost doubled the framerate. But it was still not enough and we had to dive deep in the magic world of MMX/SSE instructions. The details for the next issue.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/sssuptech?a=qlz1CCLg"&gt;&lt;img src="http://feeds.feedburner.com/~f/sssuptech?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/sssuptech?a=QzlAsKl6"&gt;&lt;img src="http://feeds.feedburner.com/~f/sssuptech?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/kgVXyoynA9o" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=5#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=5" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=5</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alessandro Pignotti</name>
					</author>
		<title type="html"><![CDATA[Let’s join the information stream]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/sssuptech/~3/VA2Hgmdjdpk/" />
		<id>http://allievi.sssup.it/tatiana/wordpress/?p=3</id>
		<updated>2009-05-11T18:06:21Z</updated>
		<published>2009-02-01T21:10:41Z</published>
		<category scheme="http://allievi.sssup.it/techblog" term="Uncategorized" />		<summary type="html"><![CDATA[Hello world, Let’s introduce ourselves. We are a bunch of students at Scuola Superiore Sant’Anna in Pisa, Italy. We often start (less often finish) a lot of projects here. This is primarily a place for us to write down our ideas. Maybe someone out there could find them useful as well. Our main interests are [...]]]></summary>
		<content type="html" xml:base="http://allievi.sssup.it/techblog/?p=3">&lt;p&gt;Hello world,&lt;/p&gt;
&lt;p&gt;Let’s introduce ourselves. We are a bunch of students at Scuola Superiore Sant’Anna in Pisa, Italy. We often start (less often finish) a lot of projects here. This is primarily a place for us to write down our ideas. Maybe someone out there could find them useful as well.&lt;/p&gt;
&lt;p&gt;Our main interests are linked to computing, programming and security. But maybe other topics will be touched, who knows...&lt;/p&gt;
&lt;p&gt;See you soon&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/sssuptech?a=OXtNHnjv"&gt;&lt;img src="http://feeds.feedburner.com/~f/sssuptech?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/sssuptech?a=uitGX42P"&gt;&lt;img src="http://feeds.feedburner.com/~f/sssuptech?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/sssuptech/~4/VA2Hgmdjdpk" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://allievi.sssup.it/techblog/?p=3#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://allievi.sssup.it/techblog/?feed=atom&amp;p=3" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://allievi.sssup.it/techblog/?p=3</feedburner:origLink></entry>
	</feed>
