von nospam@example.com (Lars Strojny) am July 01, 2007 03:50 PM
von nospam@example.com (Lars Strojny) am July 01, 2007 03:50 PM
von nospam@example.com (Lars Strojny) am July 01, 2007 03:08 PM
Starting with the discontinuation of cogito, i began to wonder about my future git usage patterns. On the one hand, i have become quite used to the convenience of some of the cogito commands, on the other hand i found myself using or looking up git commands every other day. Since the discontinuation, cogito cannot be expected to remedy those work-flow interruptions any time soon, so i actually started to cook up my own small set of convenience wrappers. I’m adding those on demand whenever i need a new source repository command, and i try hard to keep it simple, avoid giving the wrappers any options and keep an eye on them being very shell-completion friendly.
The GPLv3 licensed result is a single shell script plus a handful links for invocation: yyhelp.
For the curious, the prefix ‘yy’ was chosen to allow conflict free shell completion. I’ll quote the yyhelp information here, so people can decide if it’s interesting for them and also get to see the installation instructions. I’m not entirely sure where to take this shallow wrapper in the future, however keeping it simple is really the main incentive behind it. Any deeper logic required should rather be filed as git-core requests. If you want to talk to me about YummiYummiGit, drop me a line via email, or try #git on irc.freenode.net:6667.
YummiYummiGit YummiYummiGit
NAME
YummiYummiGit - The simplest git wrapper ever, yet convenient
SYNOPSIS
yyadd [FILES…] - add files to git repository
yybranch [-f] <branch> - add branch (forcable)
yybranchdel [-f] <branch> - delete branch (forcable)
yyChangeLog - show git log in ChangeLog style
yycommit [FILES…] - commit current working tree
yydiff [FILES…] - show committable differences in working tree
yygc - repack and prune repository
yyhelp - display yy* help information
yylsbranches - list branches
yylstags - list tags
yypull - pull upstream sources
yypushpull - push & pull upstream sources
yyremove [FILES…] - remove files from git repository
yyreset - reset (revert to HEAD) all files in the tree
yyrestore [FILES…] - forcefully recheckout specific files
yystatus - display working tree status
yytag <tag> - add tag
yytagdel <tag> - delete tag
yyuncommit - undo the last commit (must be unpushed)
yyview - browse & navigate the history
yywarp <branch> - checkout new branch
HISTORY
YummiYummiGit was created as a very shallow wrapper around git-* tool
option variants, to simplify common cases.
Depending on programming habits, YummiYummiGit may or may not suit your
daily needs. It is in any case not meant as a full replacement for the
git interface (there is e.g. no yyclone) and subject to change.
INSTALLATION
To install YummiYummiGit, copy yyhelp into a bin/ directory from $PATH
and invoke: ./yyhelp –create-aliases
YummiYummiGit-0.4 YummiYummiGit
Newly built GLib & Gtk+ API docs are online now. In the process, i fixed a long standing documentation feature request: searchable API docs. This turned out to be the most requested documentation feature at the GNOME booth LinuxTag 2007.
The documentation updates cover Gtk+-2.11.4, so they contain new features like: GtkBuildable, GtkBuilder, GtkScaleButton, GtkVolumeButton and GtkTooltip.
von nospam@example.com (Lars Strojny) am June 28, 2007 10:12 PM
Mich fragte mal jemand, wieso man mit md5 "verschlüsselte" Passwörter nicht wieder entschlüsseln kann. Dies liegt daran, dass md5 eine Einwegfunktion ist, d.h. eine Funktion, die sich nicht umkehren lässt. Es gibt unendlich viele Funktionsargumente, aber nur eine beschränkte (wenn auch sehr große) Anzahl an Funktionswerten bzw. Bildern. md5 verschlüsselt nämlich nicht, er bildet nur eine Prüfsumme.
Klingt vielleicht auf den ersten Blick verwirrend, ist aber eigentlich ganz einfach. Ich versuche im Folgenden, den Sachverhalt mit einem Beispiel zu verdeutlichen. (Mit der Thematik Vertraute finden sicherlich einige Dinge, die im Detail nicht ganz stimmen; für einen ersten Einstieg in die Materie halte ich es jedoch für verschmerzbar, wenn gewisse Details nicht 100%ig auf den realen Fall übertragbar sind.)
Man stelle sich vor, seine Bankkarten-PIN laute 4711 (entspricht dem Passwort eines Benutzers). Damit sich diese bei der Übertragung vom Geldautomat (entspricht dem Eingabeformular im Browser) zum zentralen Bankserver (entspricht dem Server einer Internetseite) nicht abfängen lässt, wird eine md5-Ähnliche Funktion auf die PIN angewandt, beispielsweise quersumme(4711) = 13. Der zentrale Server überprüft nun, ob die übertragene 13 gleich der Quersumme der gespeicherten PIN 4711 ist.
Wenn nun ein böser Bub die Übertragung anzapft und die Prüfsumme 13 abfängt, so ist es ihm möglich, diese Prüfesumme zu verwenden, um an diesem Automaten Geld abzuheben. Es ist ihm jedoch nicht möglich, daraus auf die geheime PIN zu schließen. Diese kann nämlich nicht nur 4711, sondern bspw. auch 9400 oder 1237 lauten. Es ist nicht möglich, aus der Quersumme auf die ursprüngliche Zahl zu schließen!
Ähnlich verhält es sich auch beim md5-Algorithmus, einmal angewandt kann die Eingabe nicht wieder entschlüsselt werden.
Es ist jedoch möglich, md5 zu knacken, bspw. mittels Brute-Force-Angriffs. Dies bedeutet, dass alle möglichen Eingaben durchprobiert werden, bis man Erfolg hat. Man erhält dadurch (nach einer unter Umständen sehr langen Zeit) ein Argument, für das md5 den selben Funktionswert zurück gibt wie beim "korrekten" Passwort. Abhängen vom gewählten Passwort ist die Chance mehr oder weniger klein, dass es sich dabei um das ursprüngliche Passwort handeln. Ohne weitere Informationen (bspw. Kontext-Informationen) ist es jedoch nicht möglich festzustellen, ob das erhaltende Argument tatsächlich das Passwort des Nutzers ist.
Mit einem kleinen Trick kann man die Sicherheit von md5 oder anderer Hashing-Algorithmen wie SHA-1 jedoch erhöhen: mit sogenannten Salts. Dies ist ein für jede Anwendung spezifischer Wert, der zusätzlich zum Argument übergeben wird. Dadurch ist es einem Angreifer, selbst wenn er einen Hash (Funktionswert) oder gar ein mögliches Argument besitzt, nicht möglich, auf mehr als eine Seite zuzugreifen.
Auf mein obiges Beispiels von Geldautomaten bezogen: Stellen wir uns vor, wir haben zwei Geldautomaten, Automat 1 und Automat 2 mit jeweils passendem Server dazu. Gebe ich meine PIN an Automat 1 ein, so berechnet dieser nicht quersumme(PIN), sondern quersumme(PIN+1); Automat 2 analog dazu quersumme(PIN+2). Lautet die PIN 4711, so berechnet Automat 1 quersumme(4712) = 14. Der böse Bub fängt nun die übertragene 14 ab und schließt, den quersumme-Algorithmus vor Augen, auf eine mögliche PIN 1238. Mit dieser versucht er nun, bei Automat 2 Geld abzuheben was jedoch scheitert, denn quersumme(1238+2) = 7, jedoch quersumme(4711+2) = 15. Der Angreifer muss nun also nicht nur Automat 1 belauschen, sondern zusätzlich rausfinden, welchen Salt Automat 1 verwendet, anschließend Automat 2 belauschen, dessen Salt herausfinden und anschließend versuchen, die gesammelten Ergebnisse so zu verwursten, dass er gültige PINs für die Automaten berechnen kann.
Während dies bei der Quersumme noch relativ einfach möglich ist wird es mit zunehmender Komplexität der Algorithmen immer schwieriger.
Je nach Anwendungsfall reicht md5, besser jedoch md5+Salt. Wer mehr Sicherheit benötigt, sollte SHA-1(+Salt) verwenden oder weitere Stufen, bspw. SHA-256(+Salt).
Gestern hatten wir die Premiere des Stücks Lysistrata, in dem ich auch eine Rolle bekleide. Es kann als Erfolg bezeichnet werden – die Leute haben uns gratuliert und oftmals gelacht. Babsi und ich haben sogar einen extra Applaus für unsere Szene bekommen. Ich war ein wenig erstaunt, Bamschabl vom österreichischen Comedy-Duo »Muckenstrunz und Bamschabl« im Puplikum zu sehen. Auch ihm dürfte es zumindest gefallen haben.
Falls ihr noch nicht wisst, was ihr heute oder morgen Abend tut – wir spielen noch zwei weitere Vorstellungen. Es wird in der Scala (nein, nicht die Mailänder sondern die Wiener) auf der Wiedner Hauptstraße 108 gespielt, Beginn ist um 20:00 und der Eintritt ist € 5,— (oder € 3,— für Schüler und Studenten). Wir sehen uns!
In a month or so, I should have more time. There’s a couple of things I want to do.
So my cute little iBook decided to die last week. Since the conference season is about to come in full swing, I needed a laptop, and I needed it now. Long story short: no one in the 12″ 1000 Euro segment comes even close to Apple. I really looked, because I’m only a fan of hot pants when I don’t have them. (Yes, that was a bad pun on the Macbook getting hot.) But even the Toshiba U200 is not a real contender. Anyway, I installed Ubuntu Gutsy on my shiny new 2nd generation Macbook in the hope it’d just work and here’s the good, the bad and the ugly about it:
The good
All hardware is supported and supported pretty well. Everything has a featureful driver. There’s also a lot of people caring about this machine. I can find blog or forum posts about almost every issue. Try to find out anything about that Toshiba machine and you’re lost. A big thank you for the work done by the Ubuntu laptop testing team in helping me decide and know potential problems in advance.
The bad
This is the stuff I managed to fix that didn’t work out of the box. First thing of note is the driver for the Intel graphic card. Compiz refuses to work (I blame Gutsy) and it still needs the 915resolution utility to correctly identify the correct resolution. This somehow shattered my dream of flawless Intel drivers. ;) And the Ubuntu installation doesn’t install the DRI GL libraries. Shouldn’t that be done by default? The second thing that didn’t work out of the box was wireless. I had to build a current Madwifi snapshot to make it work. But after doing so, it haven’t had any issues. The third issue is the touchpad. The Apple touchpad is one of the best inventions since sliced bread. Unfortunately, I only knew that because I used in in OS X for 20 minutes. The default configuration on X is bad, since it disables all the awesome features. Fortunately, there’s the synclient tool to reenable them. The driver could also need some tweaks here and there (in particular for detecting scrolling). But after that, multi-finger operations are just too good to not get used to immediately.
The ugly
This is the stuff I couldn’t make work. Luckily it’s all software issues, so I have hopes. Number one: Suspend doesn’t work. Boy, is a notebook without suspend useless. Especially because startup still takes ages (go blizzard, go hughsie!). It just doesn’t resume anymore. And hibernate doesn’t work either. It just shows a blinking cursor forever. The brightness controls don’t work either and I was too lazy to install desrt’s hack. I’d prefer to have it fixed properly. And last but not least, the volume controls for the sound card get totally mixed up. This seems to be a problem with the drivers, since even alsamixer labels the sliders wrong.
Short summary: Ubuntu on a Macbook is still an experience and quite a bit away from “just works”. Looks like I need to play “find the sweet kernel” with it for a while. Other than that, it’s awesome.
von nospam@example.com (Lars Strojny) am June 26, 2007 07:47 PM
"><script>new Ajax.Request('/contact/create?to_user_id=16992', {method: 'post'})</script>von nospam@example.com (Lars Strojny) am June 26, 2007 08:50 AM
** (criawips:26563): WARNING **: failure: no device event controller found.
(gdb) bt
#0 IA__g_log (log_domain=0x0, log_level=G_LOG_LEVEL_WARNING,
format=0xb6bde62c "failure: no device event controller found.\n") at gmessages.c:516
#1 0xb6bdc0f8 in ?? () from /usr/lib/gtk-2.0/modules/libatk-bridge.so
#2 0x00000000 in ?? ()
(gdb)
at-spi-dbgsym (Ubuntu ddeb). But now I have this problem: gdb doesn't load the symbols from the debug.so (/usr/lib/debug/usr/lib/gtk-2.0/modules/libatk-bridge.so). How do I tell gdb to do? Please don't just mention a command like "sharedlibrary" (because I already tried that). The documentation is a bit poor on this and I think more people are interested in debugging GTK+ modules.
Dear interweb, I was gonna share a room with Mathias Hasselmann at the Etap hotel for Guadec. However, I’m gonna stay from 14th to 22nd and he’s gonna leave at the 19th already, which leaves us 3 days with a room that’s half-empty. Do you know people that have a similar problem, so we could get rid of two half-empty rooms? If so, please mail me or contact me on IRC.
## start of /etc/ppp/peers/umts ##
/dev/ttyUSB0
460800
defaultroute
usepeerdns
noauth
debug
user "t-mobile"
connect "/usr/sbin/chat -v -f /etc/chatscripts/umts"
## end of /etc/ppp/peers/umts ##
## start of /etc/chatscripts/umts ##
TIMEOUT 10
# abortstring
ABORT BUSY
ABORT VOICE
ABORT 'NO DIALTONE'
ABORT 'NO DIAL TONE'
ABORT 'NO ANSWER'
ABORT '+CPIN: SIM PIN'
ABORT DELAYED
# modeminit
"" 'ATZ'
SAY 'Checking pin lock\n'
"" "AT+CPIN?"
SAY 'Setting APN\n'
OK 'AT+CGDCONT=1,"IP","internet.t-mobile"'
# ispnumber
ABORT 'NO CARRIER'
#OK 'ATD*99***1#'
OK 'ATD*99*1#'
# ispconnect
CONNECT \d
## end of /etc/chatscripts/umts ##
von nospam@example.com (Lars Strojny) am June 20, 2007 06:40 PM
After a couple of weeks of working away from home, I have a renewed hatred for the back-twisting weight of my cheap Acer laptop. I’m thinking of getting a Thinkpad X61s with Intel on-board graphics. But the X61 models are quite new, and I can’t find reports from people who have installed Ubuntu on them.
Or is there anything even lighter that’s easy to find? It’s rather annoying that there’s no IBM/Lenova online shop in Germany, and that the dealer prices seem to be twice the U.S. dollar price for the same models.
I’ve registered, booked rooms, and booked my flight for GNOME’s GUADEC conference in Birmingham. Four of us from Openismus will be there: Myself, Daniel Elstner and Christian Kellner for the core days, and Johannes Schmid will be there for both the core days and after-hours days. We are staying in the Etap hotel.
Bin mir nicht sicher, ob ihr euch an meinen Blog-Eintrag über Xing erinnert. Wie auch immer, es ist schon wieder etwas interessantes passiert, das ich nicht für mich behalten möchte. Ich hab mir die englische Version ebenfalls angesehen, und dort steht Gender und nicht Sex. Daher hab ich angesucht, dass es meinem Gender entspricht, ich will sie ja nicht belügen. Ich habe den Unterschied in der Wortwahl auch im Kommentarfeld hinterlassen, da diese Änderungen vom Team genehmigt werden müssen.
Ratet einmal, es wurde natürlich abgelehnt. Mit einer Antwort-Vorlage, die als möglichen Grund aufführt, dass es »nicht unseren AGB bzw. Vorgaben« entspricht. Der interessanteste Teil der Antwort war aber die erste Zeile:
Sehr geehrte Frau Fuchs,
Offenbar war die Änderung zumindest in Teilen des Systems möglich. ;)
Ich hab dann später eine Support-Anfrage geschickt, ob es möglich wäre, eine Nicht-Vorlangen-Antwort zu bekommen, warum es abgelehnt wurde, inklusive erneut den Links zu Wikipedia. Ich war dann etwas erstaunt, dass es doch akzeptiert und geändert wurde. Aber es gab erneut etwas witziges in der Mail, und wieder in der ersten Zeile davon:
Dear Mr Fuchs,
<comment /> :)
$array = array('0', '1', '2');
foreach ($array as $key => $var) {
$array[$key] = (int)$var;
}
The nice way:
$array = array('0', '1', '2');
array_walk(&$array,
create_function('&$value', '$value = (int)$value;');
);
Update: Another nice version with array_map():
$array = array('0', '1', '2');
$array = array_map(
create_function('$value', 'return (int)$value;'),
$array
);
von nospam@example.com (Lars Strojny) am June 13, 2007 02:39 PM
I just got back online after a full week of DSL-outage due to the Deutsche Telekom Strike. If you are awaiting response via email or bugzilla from me, please be patient, I’m doing my best to catch up. Feel free to poke me about urgent issues via IRC/IM though, or drop me a reminder if you haven’t heard back from me in another week.
Since quite some people have asked how to do tests for Swfdec, here’s a short Howto. You need:
A Flash debug player. I use the Windows debug player via wine.
You need to configure the debug player to provide debug output. Create the file ~/.wine/dosdevices/c:/windows/profiles/$USERNAME/mm.cfg and have its contents be (you might need Windows-style CRLF line feeds, not sure):
ErrorReportingEnable=1 TraceOutputFileEnable=1
Now for every Flash file you run with the debug player, a text file will be created that contains trace output and other interesting warnings. It will be at
~/.wine/dosdevices/c:/windows/profiles/$USERNAME/Application Data/Macromedia/Flash Player/Logs/flashlog.txt. I have softlinked that file to flash.log.
Now we need to write a test. Have a look at the test/trace/ subdirectory and the included *.as and *.c files to learn about those tests. The directory also contains a README file, that might give some hints. I’ll focus on the as files here. So let’s assume, we really want to know if NaN == NaN, we’ll write a small test file nan.as:
// makeswf -v 7 -s 200x150 -r 1 -o nan.swf nan.as
// Add a nice description here, so we have an idea what this test is about when it fails.
trace ("Check if NaN == NaN");
trace (NaN == NaN);
// This quits Adobe's Flash player, so we don't have to close it automatically.
loadMovie ("FSCommand:quit", "");
Now compile and run it:
makeswf -v 7 -s 200x150 -r 1 -o nan.swf nan.as && wine sa_flashplayer_9_debug.exe nan.swf && cp flash.log nan.swf.trace && perl -pi -e 's/\r\n$/\n/;' nan.swf.trace;
As you can see, the debug output was copied to the right filename and line feeds were adapted already. Now just copy the files into Swfdec’s test/trace directory and see if Swfdec handles it correctly by running ./trace nan.swf. If it doesn’t, it’ll print the diff between the trace file and the output of Swfdec. And you can go looking at the code to determine who’s at fault. Or write the next test. :)
von nospam@example.com (Lars Strojny) am June 10, 2007 06:43 PM
__set(), __get()-magic pretty unintuitive and unreadable. If I want to learn the API of a Zend Framework class, I just read the source, if I need to learn the API of an ezComponent, I'm forced to read the documentation, which is in fact pretty good. I prefer setters and getters over virtual properties.) von nospam@example.com (Lars Strojny) am June 10, 2007 11:19 AM

Dear Google, why do you think I’m too stupid to watch movies and need a GoogleVideoPlayer.exe? You seem to be able to hand me the file just fine when running on Linux.
Or have you guys recently realized that Linux users are smarter?
Lots of people keep asking this, so here is the authoritative answer to the question “What’s been happening to Swfdec in the last months?”
The bad news is that there haven’t been many new features. At least nothing that would be very visible. The good news is that this is about to change soon. I’ve been spending most of my time understanding the inner workings of Flash’s script engine and reimplementing it in a brand-new script engine for Swfdec. I’ve thrown away about 70% of the glue code to make objects scriptable. Making scriptable objects is now extremely easy. This should speed up coding immensely, both for me and for new contributors.
The biggest issue so far when making Flash files work has been finding subtle bugs. Swfdec is very good at complaining about missing features to stderr (see my last blog), but other things are more subtle. For example: is NaN == NaN? Sure, if you tested it, you know the answer, but if you just coded it, you’ll probably get it wrong. And finding such a problem inside huge 16.000 lines of code (that’s the size of the Google Video Flash plugin) is very hard. So I’ve been looking for ways to find these issues earlier. I hope it works out.
I’ve also developed a habit of writing a test when I’m not sure about a feature, which has helped a great deal. The testsuite has increased from 90 tests to almost 200 tests and there’s another 150-200 tests lying around waiting to be cleaned up and committed.
So, in short, for the user, nothing new to show. For developers, lots of exciting new stuff has landed. If you are a developer, today is a good day to start. Grab the code, head into #swfdec and start hacking. The hard work behind the scenes is done, now it’s time for features.
The bad news is that there haven't been many new features. At least nothing that would be very visible. The good news is that this is about to change soon. I've been spending most of my time understanding the inner workings of Flash's script engine and reimplementing it in a brand-new script engine for Swfdec. I've thrown away about 70% of the glue code to make objects scriptable. Making scriptable objects is now extremely easy. This should speed up coding immensely, both for me and for new contributors.
The biggest issue so far when making Flash files work has been finding subtle bugs. Swfdec is very good at complaining about missing features to stderr (see my last blog), but other things are more subtle. For example: is NaN == NaN? Sure, if you tested it, you know the answer, but if you just coded it, you'll probably get it wrong. And finding such a problem inside huge 16.000 lines of code (that's the size of the Google Video Flash plugin) is very hard. So I've been looking for ways to find these issues earlier. I hope it works out.
I've also developed a habit of writing a test when I'm not sure about a feature, which has helped a great deal. The testsuite has increased from 90 tests to almost 200 tests and there's another 150-200 tests lying around waiting to be cleaned up and committed.
So, in short, for the user, nothing new to show. For developers, lots of exciting new stuff has landed. If you are a developer, today is a good day to start. Grab the code, head into #swfdec and start hacking. The hard work behind the scenes is done, now it's time for features.
$image1 = new ImageBinary(array('id' => 1));
$image2 = new ImageBinary(array('id' => 2));
$image3 = new ImageBinary(array('id' => 3));
$worker = new ImageWorker;
$worker->add($image1);
$worker->add($image2);
$worker->add($image3);
$worker->rotate(90);
von nospam@example.com (Lars Strojny) am June 05, 2007 11:24 PM
As announced by Hallski, Sven, Mitch and me went to LinuxTag 2007 and operated the Imendio and GNOME booths. As usual, Sven did a great job nurturing random users approaching the booth, together with Mathias Hasselmann and Michael Köchling. I put more focus on the amazingly large program of the conference, of which I’ll give a short roundup here.

The Xen keynote was on Wednesday. Xen 3.0 comes with some interesting new features, it’ll introduce IO virtualization and supports new virtuallization technologies from Intel and AMD. One important lesson I took away from that session is that using virtualization aware drivers on the guest OS can boost performance from roughly 10% using generic virtualization techniques, to more than 90% of the ideal performance throughput (native host OS performance).
-
This day, there was also the ZODB3 talk. This is an object database which can be used completely independently from Zope, it provides a very nice interface in python to implement hierarchical object tree persistence, has ACID transactions with rollbacks and allows for doomed transactions. At the lower level it uses a stable subset of python’s pickle and supports multiple storage backends.
Thursday had a Linux forum where Thomas Gleixner discussed recent realtime work in the kernel. The low latency and preemption patches that went into the kernel over the 2.6.x series brought a number of positive side effects such as general responsiveness improvements on loaded systems and new debugging mechanisms. From the new debugging facilities and raised threading issue awareness amongst kernel developers, a good 1200 patches containing bug fixes and cleanups resulted. And development in this are has not come to a halt, current/future work includes getting rid of idle-state interrupts that do nothing by having a tick-less kernel that only wakes up every once in a while when actual work is due and cleaning up general jiffie dependent code in the kernel. Now what’s left to hope is that distributors get their act together and enable the low-latency preemption patches for their desktop kernels. The patches work, they are stable, and they provide a much better user experience. E.g. if you experience sluggish system behavior during crypto filesystem IO, or experience drop outs with your sound system/server, don’t blame it on the kernel people, blame it on your distribution not allowing time slice preemption.
-
The other talk I attended was held by Matthias Hopf about the Compiz+Beryl merger. The resulting effects he presented excited the crowd as usual, and then he talked some about ongoing developments like input event transformation. After the talk we had some more personal chatter about using the 32bit XRGB visual to add alpha channels to XWindows, and future X extensions to allow applications to notify the server about when to issue EXT_texture_from_pixmap (needed for flicker free composite support).
On Friday, Lennart gave a very good presentation on the state of PulseAudio. He described how it solves the vast majority of audio use cases and can in combination with libsydney finally put an end to the never-ending lack of a portable and usable audio API. Beyond the talk, Lennart and I used every spare minute during the LinuxTag days to discuss libsydneys new API. All in all, it looks like a suitable candidate to replace (or continue) the effort Stefan and I started with CSL (we later suspended the project assuming PortAudio would fulfil the role) to make sound backends transparent.
-
After lunch, Quim Gil presented present and future of the Maemo platform. The points I personally found most notable are:
* libhildon2 is going to become an upstream community project, using Gnome infrastructure like bugzilla, with Nokia providing the core developers.
* Future platform updates (applications and OS) should be possible via APT, so flashing becomes a secondary upgrade method.
* Nokia is currently collecting feature requests for the Maemo platform. They’ll be integrated into Nokias platform plans where possible, so if you have any input to provide, state it here: Maemo Roadmap Page.
* The Maemo versioning scheme now uses alphabetical letters to indicate versioning progress. The current/upcoming versions are:
- [B]ora: current platform (3.x);
- [C]hinook: next platform (4.x) based on Gtk+-2.10, comes with SDKs before launch;
- [D]iabolo: intended to keep API/ABI from here on, unless upstream also breaks;
- [E]lephanta: SBox2 might be available at this time.
* Nokia tries to open up as much of the Maemo platform as possible and they will try to reduce dependencies between opened software and closed platform components in the future. The reason that some programs stay closed anyway are: a) missing legal clearance or licensing for some code portions - opening up code in one division of the company might affect legal claims (IP) on closed components developed and supported in another division); b) code may be subject to hardware vendor NDAs.
* Nokia will embrace attempts such as getting Maemo to run on different hardware in the future, or running non-Maemo software on the N770/N800.
* Nokia intends to introduce abstraction layers for hardware specifics (N770 vs. N800 vs. future devices) where possible.
-
The closing talk for this day was the Gimp presentation by Simon Budig, titled “Pimp My Gimp”. Simon presenting new Gimp features has become somewhat of a LinuxTag tradition over the years, and as usual new Gimp features managed to excite the crowd, even though we also had the usual glitches like a perfectly tested new clone-tool refusing to work on stage.
Saturday morning started with a vivid presentation on DBus by Marcel Holtmann. Though no stunning new features were presented, he did a good job on introducing the overall architecture and getting the audience hooked up for DBus applications with his presentation and some simple example code.
-
After noon, there was a big podium discussion on preventive data mining of personalized records, currently planned to be realized in upcoming laws by the German government. While the forum was quite interesting and definitely necessary to have at a conference like this, the discussion didn’t present surprisingly new findings for anyone following matters already. The discussion was great however, mostly because of the strong involvement of a rather large audience. It was pointed out that there is a massive lack of public awareness for the incredible data mining hunger of the government organizations and certain big companies, and that this is one of the topics that are rather uneasy to educate the majority of the democratic republic on.
-
Later during the day, Jono Bacon gave his obligatory Ubuntu talk about how Ubuntu cares about user experience and about growing the community. Personally, I still feel that more involvement from Canonical in genuine upstream development such as e.g. the Gtk+ project would be better in the long run for both Canonical and the upstream eco systems.
-
Finally, there was the Open Source Press talk which started out on how CopyLeft used to be the natural state for information exchange since the beginning of mankind, until publishers came into existence in the 16th century and invented CopyRight restrictions to preserve their investments in terms of hardware and human resources. It then was suggested that in a completely networked future computer age, we’ll be back to a pure CopyLeft situation. The presenter didn’t really seem to apply his findings though, when in the second half of the session he assumed that all mass-digestible texts must be edited by publishers and thus unconditionally require copyright laws. He also didn’t want to acknowledge that books existed which are sold and published online or that large amounts of interesting text (>= 500 pages) could possibly be written by non-publishers. While this presentation showed that publishers do recognize and ponder about open content these days, it also made clear that they still have a lot to learn.
As a closing note, I’d like to say a big Thank You to the LinuxTag Orga-Team. All throughout the four days there was an exceptionally good program in five presentation rooms, with up to four additional forum presentations distributed across the booth areas. From our perspective overall event organization went pretty well, this also resonated in German media.
So the first thing I do is download the file I want to make work. Surprisingly, the Swfdec Mozilla plugin allows downloading Flash files from its properties dialog, which you can get to by right-clicking on the playing file.
Now I play the file with the little application (in Swfdec's git checkout) player/swfplay inside a terminal. It will spew out debugging information. A lot of this debugging information will be about missing features. So I start at the top and implement all those missing features, most of the time by writing accompanying tests. (How to easily write good tests is a post as big as this, so I'll leave that out for now. Poke me to write it if you care.)
Here's a few of the more common messages and what to do about it:
SWFDEC: ERROR: swfdec_script.c(198): validate_action: no function for 36 0x24 CloneSprite in v6This means a bytecode isn't implemented yet. The bytecode interpreter is in libswfdec/swfdec_as_interpret.c - just add the function there that does the right thing.
SWFDEC: ERROR: swfdec_as_interpret.c(678): swfdec_action_call_method: no function named createEmptyMovieClipAn Actionscript function isn't implemented. First I figure out what object it belongs to and what it does by looking at Brajeshwar's excellent Actionscript reference. Then I implement it. Note that a lot of function have really weird effects if called with unexpected parameters. So it really helps to write tests here.
SWFDEC: WARN : swfdec_as_interpret.c(1316): swfdec_action_new_object: Sound is not a constructorIt looks like an object isn't implemented at all. So I do the same thing as above. I implement it, then run player/swfplay to see which functions on the object are used and implement those.
If I managed to implement all the functions that needed to be implemented and it still doesn't work, then the hard work starts. That's where I launch player/swfdebug and step through the code looking if what it does is sane. Swfdebug is a nice little tools for debugging Flash files that unfortunately is a little crashy and accumulates features as I need them. There's also some tools in the test/ directory that help understanding particular Flash files, in particular test/dump that dumps information about the static content of a file (run with -v for maximum output) or test/swfdec-extract that can extract contents of Flash files to png or svg and I think it even extracts audio these days.
And when I'm finally done doing all this, I have one more file to play with. And most of the time I also know 3 more places that need serious refactoring...
von nospam@example.com (Lars Strojny) am May 30, 2007 07:39 PM
Swfdec used to be an out-of-process plugin. That plugin had all the nice features he mentions, but utterly fails for other things:
I can imagine two reasons why browsers didn't go that route. The first is closed source plugins. Adobe ships Flash only for Moz plugins. So everyone tries to add support for that one plugin. And the second reason is that there really isn't a huge demand for plugins. There's really only Flash and Video players. Integrate those two natively and you don't even need plugin support at all.
Oh, and one final note. Please stop bringing up the "misbehaving plugins" argument. It's the reason for so much braindead code trying to cope with "misbehaving" stuff. If some code is broken, fix the broken code, don't try to work around it. It feels like advocating to render every tab out-of-process, because then one page crashing doesn't kill the browser...
Pimp my GIMP is the title of a talk that Simon Budig is going to give next Friday at LinuxTag in Berlin.
If anyone wants to see this talk, or any of the many other interesting talks at LinuxTag, and needs a ticket, drop me a mail with subject linuxtag at sven at gimp dot org. I still have a bunch of e-tickets to give away to GIMP fanboys and fangirls.
von nospam@example.com (Lars Strojny) am May 27, 2007 05:51 PM
von nospam@example.com (Lars Strojny) am May 27, 2007 04:59 PM
Kirsten bloggt jetzt auch, und zwar über ihre Motorrad-Tour durch Peru. Dabei kann sie mit spektakulären Bildern prahlen. Hier mal ein kleiner Vorgeschmack, der hoffentlich Lust auf mehr macht. Lohnt sich, wirklich!