Planet Foo-Projects

July 02, 2009

Brian Tarricone

iTunes Protected vs. Unprotected

Dear lazyweb,

A friend of mine has released an album on the iTunes store, and I want to buy it to support her. Of course, I don’t want to buy it there if it’s a DRM-protected AAC file. Anybody know how you can tell before you buy? I checked both using iTunes on a Mac, and on the iTunes Store app on my iPod Touch, but I can’t seem to figure it out.

It seems her album is also sold on Amazon (cheaper, even), and they sell 256kbps MP3s, so I’ll probably end up doing that regardless. But it would be nice to know if you can figure this out for Apple’s store too.

Update: It appears everything on the iTunes store is now DRM-free. Interesting.

by Brian at July 02, 2009 08:41 PM

June 17, 2009

Brian Tarricone

On In-Kernel Drivers

It’s pretty well-known that the Linux kernel developers advocate getting your drivers into the main line kernel tree. Doing so ensures that your driver always gets fixed to conform to the latest “correct” internal interfaces when they change, and in-kernel device drivers always get distributed with the kernel, so you get automatic end-user distribution for free.

While I agree with that (without touching the question of whether or not a stable driver binary API/ABI would be useful), I’m not entirely sure it’s the best thing in the world for some types of device drivers.

While reading a post by Carl Worth on recent (perceived?) driver stability issues with the Intel video driver for Linux, I came across this bit of insight:

It used to be that getting the latest Intel driver just meant updating an xf86-video-intel module or upgrading an xserver-xorg-video-intel package. But now it’s essential to get a recent kernel as well… And these fixes aren’t in a major kernel release until 2.6.30 which appeared only today.

This is a problem that perhaps highlights some types of drivers that may be served better by being maintained outside the main line Linux kernel tree. Of course, this is only true while the driver is actively maintained and maintainers are able to quickly update the driver for new kernels (without breaking backward compatibility) as in-kernel interfaces change.

He also notes that distribution maintainers tend to update critical parts of the system (like the kernel) less often than userspace portions (like X.org video drivers). Since the xorg-video-intel driver depends on an in-kernel driver, it’s easy for these two things to become out of sync on an end-user’s system without testing. Or, frustratingly, the maintainer of the userspace package for a video driver might be unable to update to a newer version of the userspace driver because the kernel packager doesn’t wish to upgrade the entire kernel to become compatible with that userspace package (which is an entirely reasonable position to take).

And with more video drivers expected to move toward having significant kernel portions, this problem can only get worse. What if the latest userspace package for drivers A and B both depend on kernel 2.6.30, and the maintainer of package A wants to update, but the package B maintainer doesn’t (perhaps there’s a bad bug in the latest version of B)? Even if the A package maintainer can convince the kernel maintainer to update, doing so might break things for other users.

Now, sure, having dependency issues like that is nothing new, but I submit that this is a bit different. The kernel contains so much “unrelated” functionality that it has the potential to be a root dependency of many unrelated packages. For example, if a video player depends on a particular version of a codec library, you can often update that codec library without causing issues with other video players (ignoring, for a moment, ffmpeg’s inability to maintain a stable API). But updating the kernel because a userspace video driver requires a new kernel version could potentially cause problems with anything ranging from a USB storage device, to a hard disk controller, to an audio card.

Now, of course, the Intel video driver has been undergoing some very large changes lately. In theory, these things will settle down, interfaces will stabilize, and you can expect the tight coupling between the kernel version and userspace package version to relax a bit. But perhaps during this transition period it might make sense to avoid merging kernel code like this at all, and instead do separate releases of (in this case) the DRM modules that are paired to the userspace package. I imagine it wouldn’t be too much of a burden for distro packagers to disable building the in-kernel versions of these drivers, and instead ship an extra module package that the userspace driver packages can depend on.

by Brian at June 17, 2009 11:14 PM

March 18, 2009

Brian Tarricone

Git Weirdness, Part 2

Ok, now this is just ridiculous:

[brian@machine1 airconfig $] pwd
/home/brian/src/airconfig
[brian@machine1 airconfig $] git branch -a
  advanced-ip-settings
* master
  nm-frontend
  notification-rework
  reconnect
  origin/master
  origin/pre-hal
[brian@machine1 airconfig $] cd .. && mkdir t && cd t
[brian@machine1 t $] git clone ../airconfig
Initialized empty Git repository in /home/brian/src/t/airconfig/.git/
[brian@machine1 t $] cd airconfig
[brian@machine1 airconfig $] git branch -a
* master
  origin/HEAD
  origin/advanced-ip-settings
  origin/master
  origin/nm-frontend
  origin/notification-rework
  origin/reconnect

Ok, that makes sense! Now:

[brian@machine1 airconfig $] cd ..
[brian@machine1 t $] rm -rf airconfig
[brian@machine1 t $]  git clone file:///home/brian/src/airconfig
Initialized empty Git repository in /home/brian/src/t/airconfig/.git/
remote: Counting objects: 1272, done.
remote: Compressing objects: 100% (486/486), done.
remote: Total 1272 (delta 778), reused 1270 (delta 776)
Receiving objects: 100% (1272/1272), 360.40 KiB, done.
Resolving deltas: 100% (778/778), done.
[brian@machine1 t $] cd airconfig
[brian@machine1 airconfig $] git branch -a
* master
  origin/HEAD
  origin/advanced-ip-settings
  origin/master
  origin/pre-hal

What. The. Fuck.

Yes, the git-clone man page tells me that, when using a local pathname (and not using a file: URI), it assumes the other repo is local and uses hardlinks between the repos. But hey, if I specify –no-hardlinks when cloning, I still get all branches if I use the “../airconfig” method.

And if I go to machine2 and do “git clone machine1:src/airconfig” I get the same broken result with the file:// method.

Git, I think you rock. But why does your user interface suck so much? And why do you just appear to be broken right now? I can’t seem to find anything else in the man page to help here. (I’m using git 1.6.1.3 if that matters.)

by Brian at March 18, 2009 12:55 AM

March 17, 2009

Brian Tarricone

Git Weirdness

So I have a git repo on my machine at home, that’s cloned from a repo on git.xfce.org. I was doing some work in it the other day — in a private branch, not published to git.xfce.org — and I wanted to continue working on the private branch from another machine. But… it won’t work. Let’s say ‘machine1′ has the repo with the private branch, and ‘machine2′ is where I want to work today.

So, on machine2, I cloned from the master repo on git.xfce.org:

[brian@machine2 src $] git clone git@git.xfce.org:kelnos/airconfig
[... stuff happens...]
[brian@machine2 src $] cd airconfig
[brian@machine2 airconfig $] git branch -a
* master
  origin/master
  origin/pre-hal

Ok, cool, that’s what I expect. So I ssh over to machine1 (the one I eventually want to pull from), and I check out my list of branches there:

[brian@machine1 airconfig $] git branch -a
  advanced-ip-settings
  master
* nm-frontend
  notification-rework
  reconnect
  origin/master
  origin/pre-hal

Ok, cool. the ‘nm-frontend’ branch is the one I want to pull to machine2. So on machine2, I do this:

[brian@machine2 airconfig $] git remote add machine1 machine1:src/airconfig
[brian@machine2 airconfig $] git pull machine1 nm-frontend
fatal: Couldn't find remote ref nm-frontend
fatal: The remote end hung up unexpectedly

Uh… what? Do I have the wrong syntax? Ok, let me just try to pull everything from the remote:

[brian@machine2 airconfig $] git pull machine1
remote: Counting objects: 1085, done.
remote: Compressing objects: 100% (301/301), done.
remote: Total 1085 (delta 774), reused 1085 (delta 774)
Receiving objects: 100% (1085/1085), 323.43 KiB | 14 KiB/s, done.
Resolving deltas: 100% (774/774), done.
From machine1:src/airconfig
 * [new branch]      advanced-ip-settings -> machine1/advanced-ip-settings
 * [new branch]      master     -> machine1/master
 * [new branch]      pre-hal    -> machine1/pre-hal

And then at the bottom it prints out a message about not knowing which local branches to merge stuff into. That’s fine, no big deal. But… how come it pulled 3 of my local branches on machine1, but left off 2 of them (’notification-rework’ and ‘nm-frontend’). No combination of src:dest refspecs seem to do the trick. Pulling one of the 3 branches it seems to like using the syntax I used above seems to work fine, but it can’t see the one I want. What am I doing wrong…?

by Brian at March 17, 2009 01:29 AM

March 03, 2009

Brian Tarricone

Xfce 4.6.0 Released

I’m a bit late with this, but we finally got Xfce 4.6.0 out the door. Others have written much more about this than I have, so feel free to read about it on our blog aggregator.

by Brian at March 03, 2009 09:01 PM

February 23, 2009

Moritz Heiber

Commercials during Oscar Night

JESUS FUCKING CHRIST!
I mean, seriously, I've seen a lot of commercial breaks. I've seen loads. Thousands. Prolly even more. But SEEEEERIOUSLY ABC .. a break after each and every presenter or show sniplet? I've been watching for roughly 1 1/2 hours now .. and I think I caught my twelfth or so commercial break. Please, for fucks sake, keep it down. >:-(

by moe at February 23, 2009 03:02 AM

February 12, 2009

Brian Tarricone

Ruby for Web Development

I recently started a new web dev project, and decided to use it to better learn Ruby. However, I don’t want to use Rails. I’d like to keep it simple. I also prefer to know a lot about the inner workings of a particular technology before I go and use a large framework that hides a bunch of details from me.

However, I want to use ActiveRecord. ORM seems to be all the rage these days, promising to abstract the annoying details of database access behind OO natural for your chosen language. It also helps avoid common errors and pitfalls with regard to constructing SQL queries and the like.

So, ActiveRecord. I install it on my laptop with “emerge ruby-activerecord”, and there I go. One “require ‘activerecord’” in my script later, and, awesome, it starts working.

Then I start working on my web host (DreamHost, if you’re wondering). It can’t find ActiveRecord. But it’s obviously installed, because I know DH supports Rails out of the box, and I don’t think you can have an install of Rails without ActiveRecord. So I poke, and then realise it might be installed as a Ruby “gem.” Ok, so I put a “require ‘rubygems’” above my activerecord require. Nice, now it works. Then I think, well, what if I put this somewhere that doesn’t require rubygems? Not hard to work around automatically:

begin
  require 'activerecord'
rescue LoadError
  require 'rubygems'
  require 'activerecord'
end

Nice, ok, that works. It’s probably a foolish micro-optimisation, but whatever.

Then I notice… ugh, this is super slow. Even on the web host, it can take a good two seconds for the “require ‘activerecord’” statement to execute. Yeah, I know, ruby is kinda slow. But 2 extra seconds each time someone hits basically any page of the website? Ugh.

So…. FastCGI. I know DH supports it, so I head over to the control panel and enable it for the domain I’m working on, and start googling around to figure out how to use FastCGI in a ruby script.

Unfortunately, there aren’t too many resources on this. Fortunately I found a couple sample dispatch scripts, one of which I ended up basing mine off of.

But then there was a problem. Inside my app, I use ruby’s CGI class to access CGI form variables and other stuff. Since the FastCGI stuff overrides and partially replaces ruby’s internal CGI class, there’s a problem. Doing “cgi = CGI.new” inside a ruby script that’s being served through FastCGI throws a weird exception. But I wanted to try to retain compatibility for non-FastCGI mode. And I couldn’t figure out how to get the ‘cgi’ variable from the ruby dispatch script into my app’s script, since I was using ‘eval’ to run my script. The dispatch script I saw used some weird Binding voodoo. Up at the top level we have:

def getBinding(cgi, env)
  return binding
end

I had no idea what that was doing, so I looked it up. Apparently the built-in “binding” function returns a Binding object that describes the current execution context, including local variables and function/method arguments. Ok, that seems really powerful and cool. So I look down to the sample dispatch script’s eval statement, and I see:

eval File.open(script).read, getBinding(cgi, cgi.env_table)

Ok, so it appears it tries to eval the script while providing an execution context that contains just ‘cgi’ and one of its member vars. I only sorta understand this. So I ditched the “cgi = CGI.new” line in my app’s script. But I got a NameError when just trying to use ‘cgi’. Huh? What’s going on? So I get rid of the getBinding() call entirely, and just let it use the current execution context, and suddenly everything works right. Weird.

Well, sorta. Now, remember, I want to preserve compatibility with running as a normal CGI. So the normal CGI needs to create its own ‘cgi’ object, but the FastCGI one should just use the one from the dispatch script. So I came up with this:

begin
  if !cgi.nil?
    mycgi = cgi
  end
rescue NameError
  require 'cgi'
  mycgi = CGI.new
end

Ok, that seemed to work ok. After that block, ‘mycgi’ should be usable as a CGI/FCGI::CGI object regardless of which mode it’s running under.

So I play around a bit more, and suddenly notice that my POST requests have stopped working. I dig into it a bit, and realise that my POST requests are actually just fine. What’s happening is that, somehow, the FCGI::CGI object completely ignores $QUERY_STRING on a POST request, while ruby’s normal CGI object will take care of it and merge it with the POST data variables. You see, to make my URLs pretty, I have normal URLs rewritten such that the script sees “page=whatever” in the query string. So when I did a POST, the page= would get lost, and so the POST would end up fetching the root web page rather than the one that should be receiving the form variables. I’m not sure if this is “normal” behavior, or if the version of the fcgi ruby module on DreamHost has a bug. Regardless, we need a workaround. So I go back to my last code snippet, and hack something together:

begin
  if !cgi.nil?
    if cgi.env_table['REQUEST_METHOD'] == 'POST'
      CGI.parse(cgi.env_table['QUERY_STRING']).each do |k,v|
        cgi.params[k] = v
      end
    end
    mycgi = cgi
  end
rescue NameError
  require 'cgi'
  mycgi = CGI.new
end

Ick. But at least it works.

So far, I’m liking ruby quite a lot. It’s a beautiful language, and seems well-suited for this kind of work, especially since I want to get something that works up and running relatively quickly.

We’ll see, however, how many more gotchas I run into.

by Brian at February 12, 2009 08:02 AM

January 20, 2009

Moritz Heiber

"Dancing With The Devil" or "Why I Bought A MacBook"

Now, almost none of you guys know what I did two weeks ago: I bought a new machine for daily use. And while I pondered the opportunities back and forth, in the end the decision was pretty easy actually. I bought a MacBook.

read more

by moe at January 20, 2009 01:16 PM

December 11, 2008

Brian Tarricone

Licensing Suckage

I just got an email from a developer who works on the nifty cairo-dock application, pointing me to a thread about licensing issues.

A bunch of months ago, he’d emailed me asking about how to best use code from my Xfce Mailwatch Plugin in cairo-dock to add mail-checking capabilities. At the time, I was pretty stoked that someone else had actually found my code useful enough to incorporate into their program, and offered my encouragement.

Sadly, though, licensing ugliness has reared its… well… ugly… head.

When licensing code under the terms of the GNU GPL or LGPL, the FSF suggests (and most people follow) that you license under “or (at your option) any later version” terms, which means that, while you initially license the code under the version of the GPL or LGPL of your choice, someone can later take your code and relicense it under the terms of a later version of the same license. This also makes the code automatically compatible with future versions of the license.

You might think this sounds pretty good for convenience and licensing compatibility, and you’d probably be right.

However, this isn’t so great from a philosophical perspective, at least from my philosophical perspective. The problem I have is this:

Licensing a work under “GPL version 2 or later” terms means that I am implicitly agreeing with any new restrictions that the FSF dreams up (or any existing restrictions the FSF wants to drop), forever. I’d basically be saying that I agree with something that doesn’t exist yet, and could take any shape or form imaginable.

Don’t get me wrong: in general, I think the FSF is good people, and I agree with their message for the most part.

But I don’t know them, personally, and I don’t agree with them 100%. And I don’t know who’s going to be running the FSF next year, or in five years, or in 20 years. So how can I know, or even have reasonable belief, that their philosophies and values will align with mine such that I’ll agree with future versions of their licenses? There are already parts of version 3 of the GPL and LGPL that I don’t completely understand or agree with, so why should I expect that versions 4, 5, or 10 will be completely to my liking?

The short answer is: I can’t.

And so, for the most part, I release my software under “GPL version 2 only” terms. (Because I’m a bit lazy and don’t want to make a big stink, I’ll release code under “or any later version” terms if I’m contributing to an existing code base that uses those terms.)

it really pained me to have to answer that email saying that my code’s licensing (GPLv2-only) wasn’t compatible with theirs (GPLv3-or-later), but it’s the truth, and there’s not much I can (or want to) do about it.

The only solution I can think of (I’m not a lawyer, of course) that allows them to use my code is that they relicense their code under GPLv2-or-later terms. Of course, then they lose any restrictions that the GPLv3 has over the GPLv2, which I assume they’d prefer to have, since that’s how they’ve licensed their code.

(Before anyone says it, another possible solution would be for me to relicense under LGPLv2.1. The problem with that is one I’ve discussed before: section 3 of the LGPLv2.1 explicitly allows a recipient of the code to relicense the code under regular GPLv#-or-later terms, regardless of the only/or-later status of the original LGPL licensing. This of course completely defeats the intent of my rationale above.)

And so, the OSS licensing mess has caused yet more pain to people who just want to share code and avoid duplicating effort. I love the GPL. I really do. But I also hate it.

by Brian at December 11, 2008 11:56 AM

December 09, 2008

Brian Tarricone

Backlight Change Notification?

Is there a decent (non-polling) way to get notified when a laptop panel’s backlight brightness changes? HAL exports methods to set and get the brightness level, as well as query the number of possible levels, but there doesn’t appear to be a way to get notified if the level changes. Calling org.freedesktop.Hal.LaptopPanel.GetBrightness() every five or ten seconds or so sounds like an awful idea, of course.

I’ve heard plans to use the XBACKLIGHT randr 1.2 property to do backlight setting, but I don’t think any drivers use this yet. Polling /sys is just as bad (why doesn’t sysfs or procfs support inotify, dammit!), and obviously isn’t portable anyway (not that HAL is particularly portable these days either).

by Brian at December 09, 2008 03:11 AM

October 30, 2008

Brian Tarricone

Xfce Commit Messages on IRC

This is a little dumb, but kinda fun. A week or 2 ago I set up a CIA bot in #xfce-commits on Freenode. If you have nothing better to do with your life than watch Xfce commit messages scroll by, feel free to join and idle with the rest of us losers.

by Brian at October 30, 2008 07:52 PM

October 15, 2008

Brian Tarricone

Xfce 4.6beta1 Released

Hey all… we just released the 1st beta leading up to 4.6. Go check it out. Full list of changes here.

by Brian at October 15, 2008 07:06 PM

October 06, 2008

Brian Tarricone

Xfconf — A New Configuration Storage System

I suppose others have written in broad terms about Xfconf, Xfce 4.6’s new configuration storage/retrieval system, but I guess an in-depth explanation is overdue and is probably up to me.

First, some background.

Xfce has used a configuration system called MCS (Multi-Channel Settings) for some time now, since 4.0 was released near the end of 2003. It’s inflexible and very monolithic. Only a single application (xfce-mcs-manager) is allowed to actually modify settings; all other applications can only query values. That means that the GUI settings dialogs have to run in the xfce-mcs-manager process. The GUI dialogs are implemented in shared libraries that are linked into the xfce-mcs-manager process at runtime. To add more confusion as to its purpose, xfce-mcs-manager also acts as an XSETTINGS manager, automatically proxying the settings stored in a “special” channel.

I had a few loosely-defined goals when designing Xfconf.

There were probably others, but those seem to be the ones that stick out in my mind after the fact.

MCS used a protocol involving a special X window, X selections, and X window properties to pass settings around at runtime. Obviously this kind of thing isn’t suitable for a configuration system that can run without a GUI, or even on a non-X11 system. So, that was right out. Given momentum over the past couple years, D-Bus seemed to make the most sense as an IPC method. So, the D-Bus API for Xfconf was born. (Please note that I don’t consider this frozen until we release 4.6.0 final. I’ll do my best not to remove or change existing interfaces, though.)

The rest of the story might sound rather gconf-like, and I guess it probably is. There’s a settings daemon (xfconfd) and a client library (libxfconf). Apps use the client library to fetch settings from and store settings to xfconfd. The daemon stores the settings on disk in a format of its choosing and manages the D-Bus interface. D-Bus gives us a few nice things for free; for example, xfconfd starts via D-Bus activation, so there’s no need to include it in any startup scripts or have client applications specifically start it. D-Bus also ensures that two instances of xfconfd aren’t running, fighting over the config store (well, unless you start a separate session bus daemon).

As for settings themselves, you have a channel that holds an arbitrary number of hierarchical properties. Channel names are simple ASCII text strings, like “xfwm4″ or “xfce4-desktop”. Property names look a bit like path names and are, as I said, hierarchical. You can use this to logically organise properties inside your application. Xfdesktop is a good example of this, prefixing menu-related preferences with “/desktop-menu/” and backdrop-related prefs with “/backdrop/”. Xfwm4 is a terrible example of this, with all preferences prefixed with “/general/” for no apparent reason.

Anyhow, we support a variety of different data types: basically all of those supported and marshalable by dbus-glib, plus special 16-bit signed and unsigned types (though those two are pretty hacky at the moment and I’d like to be able to do those in a better way). The client library, libxfconf, lets you set commonly-used data types directly, and also has a generic interface for setting the others.

One thing I really like about libxfconf is its incredibly flexible support for array properties. Any property can be set to an array of values rather than a single value. The values in the array need not even be of the same type. Libxfconf has native support for setting array types, and also can directly map C structs to and from array types, automatically.

A final bit of usefulness is in libxfconf’s bindings mechanism. Libxfconf can “bind” an Xfconf property to a GObject property in your application. If the GObject property changes, then libxfconf will automatically update the value in the Xfconf store. If the value in the Xfconf store changes, libxfconf will automatically update the GObject property. This can greatly simplify the Xfconf code in your application. In your settings dialog, you simply have a single line of code to — for example — connect a GtkCheckButton’s “toggled” property to a boolean Xfconf property. If the user toggles the checkbox, Xfconf gets updated automatically. If the setting gets changed outside the application somehow while the settings dialog is open, the dialog gets updated automatically too. You can also use this functionality on the other “end” of the equation, too: if you use GObjects in your application, and your settings map to GObject properties on those objects, you can bind the properties there, too, and not have to manually take action when the user sets a setting in the settings dialog. Unfortunately, libxfconf only supports setting scalar properties now (not arrays), except for the special case of the GdkColor struct. Hopefully this will change in a future release.

We also include an “xfconf-query” application in the xfconf package, written mostly by Stephan Arts, which is a simple command-line Xfconf client. As you might guess, you can use it to query the values of Xfconf properties from the command-line, or from scripts. However, despite the “query” part of its name, it can modify Xfconf properties as well.

In Xfce 4.4 and below, we had the “XfceKiosk” system, which would allow you to lock down a desktop install so certain settings can and can’t be changed by particular users. It worked decently well, but was sometimes confusing to configure, and the application had to do special things to support it. Xfconf integrates a “locking” system whereby the system administrator can install a normally-formatted Xfconf configuration file with directives that instruct xfconfd to consider some properties unmodifiable by the user (and allows the sysadmin to set defaults too). This takes the burden away from applications to support a particular locking framework, as it’s natively built into the configuration system. (Unfortunately, as of this writing, the locking system isn’t working properly. It’ll definitely be finished by 4.6.0 final.)

So, I guess that’s it. If you’d like to get started with Xfconf, a good place to look would be the API documentation (please note that the API will not be frozen until 4.6.0 final). Otherwise, feel free to ask questions on the xfce4-dev mailing list.

by Brian at October 06, 2008 06:25 PM

September 15, 2008

Brian Tarricone

Xfce Mailwach Plugin 1.1.0 Released

After a good two and a half years of being lazy, I’ve finally found some time to work on the Mailwatch plugin, and I have a new release ready too!

There’s lots of chewy goodness in this release. Here are some useful links:

As always, please report bugs over at the Xfce bug tracker.

Enjoy!

by Brian at September 15, 2008 05:07 AM

August 29, 2008

Jens Luedicke

Anna Vandas ‘You’re Here’

(via)

by Jens at August 29, 2008 07:33 PM

August 26, 2008

Jens Luedicke

Photography


by Jens at August 26, 2008 10:57 AM

June 22, 2008

Jens Luedicke

Comment Spam

I turned off the comment and trackback function for all previous posts. As Wordpress doesn’t support this directly, I had to update the wp_posts table directly.

by Jens at June 22, 2008 10:19 AM

December 02, 2007

Benedikt Meurer

Thunar 0.9.0, exo 0.3.4 and thunar-volman 0.2.0 release

I just released new versions of &lt;a href="http://thunar.xfce.org/"&gt;Thunar&lt;/a&gt;, exo and &lt;a href="http://www.foo-projects.org/~benny/projects/thunar-volman/index.html"&gt;thunar-volman&lt;/a&gt; with several bugfixes and new translations. They are part of Xfce 4.4.2, which will be released tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11492822-79474827643118861?l=xfce-diary.blogspot.com'/&gt;&lt;/div&gt;</content>

by Benedikt Meurer at December 02, 2007 03:49 PM

November 19, 2007

Moritz Heiber

Growing up

When I was young and started to grow up I immediately was afraid of the possibility to become .. well, the usual type of person I shared my daily routine or personal life with. Like, say .. I started studying computer science when I finished high school just to quit after a year since I became more and more afraid of being a dull, self-centered, moronic prick .. which most of my fellow students were, actually (and no, I'm not exaggerating). If you were to describe what I thought my future would look like back in those days .. '40 year old virgin' comes to mind ^_~

Anyway, a couple of you reading my blog (or shall I say the few of the few) know: I've been working in Spain the past couple of years. Throughout the summer. Its been fun. And its also given me the opportunity to explore the means I can work in and work with. Essentially its been an experiment to find myself. Which, in the end and for most parts, didn't go very well. But thats another story. What I gathered though was a quite good understanding about who I am .. and what I wanted in life. Sounds rather philosophical, right? I guess its the typical 20'ish to 23'ish experience every grown up has to go through.

However, with the experience I gathered from my work in Spain, put together with the experience coming from acting studies (which I kind of quit .. I didn't put enough effort into it in the end .. thats something I really need to work on) I realized lately: Its not your environment that shapes you. Its not your friends. Its not the clothes you wear, the car you drive, the school you go to. Its not your parents either, or your girlfriend. Or your job.

It is you. And what you make of it.

And while that sounds awfully simple (and pathetic of sorts) .. believe me, its not. Even if I hadn't quit studying computer science .. I sure as hell would not have become the same prick I had to sit with in computer-math. Or any other class. I might have been influenced .. but only in a positive way, believe me (meaning: away from being a prick since I had so many of them around me). All my life I've been worrying about how to adapt to certain situations, friends, other random people .. company policies .. so much that I largely forgot about who I actually am and how I define myself. Luckily, I caught the right train and ended up knowing what I know now: I know who I am. Yet, it took a painful 24 years to finally catch that. But I guess thats what people mean when they're talking about growing up. However, now I can finally focus on living the life I want to live instead of trying to fit in. And thats about the most refreshing and meaningful experience I've had since .. well, 24 years.

Cheers, Moritz

PS: No, I'm not Auke Kok .. but Auke Kok is on vacation and http://bar.foo-projects.org doesn't know about me unless he tells it to.

read more

by moe at November 19, 2007 08:18 PM

November 18, 2007

Moritz Heiber

Music

Hey, I know I haven't been exactly busy blogging lately. But since Auke lost all my previous postings (:-P) I figured it would be a good time for a fresh start. Right now, there's tons of stuff I could probably talk about. I'm not much of blogger I guess. But recently I "discovered" a couple of amazingly good tracks I'm listening to frequently lately...

read more

by moe at November 18, 2007 09:00 PM

October 20, 2007

Jens Luedicke

Warlord, Inc.

I’d like to see the government get out of war altogether and leave the
whole field to private industry.
– Joseph Heller

Zum Thema passend aus der taz vor ein paar Tagen:
Warlord, Inc.

by Jens at October 20, 2007 02:47 PM

September 11, 2007

Auke Kok

Early adopters pay the price, Apple evading taxes? iPhone perils...

I read the news about apple & AT&T dropping the iPhone price by 200$. Of course at first I laughed at the suckers who fell for the obvious trap, but it poses a more interesting dilemma for "early adopters".

Today AT&T also announced that they sold the first 1 million iPhones. Given the fact that they can now comfortably sell them at 200$ below the original price, they will at least have already made 200 million. It's much more likely that the 100 million that they will give back in the form of store vouchers was a deal between AT&T and Apple so that AT&T can fund Apple's development cost in a very interesting tax-evading method. This borders the lines of money-laundering and very sleazy money schemes if you ask me.

Not to mention that those same suckers won't be able to buy $100 worth of stuff in the Apple store without at least spending 50$ more on something else, feeding the everlasting loop of greed of Apple, sucking stupid rich people into it's vile trap. I'm just kidding, it's all business as usual, right?

So, in the end the early adopters on average are going to spend the base amount of the phone, plus 100$ (since they're not getting the full 200$ divergence back, only half), and end up spending on average 10-25% more than that in the Apple store when they redeem their credit. The end score: on average, Joe Sucker still only gets back 75$, which is becoming quite marginal.

Here's what Apple should have done: sold the first 1 million phones under the 400$ price point. Apple would have probably made enough money to cover the basics, and they would have sold the units within a month, instead of 6 months. Advertising would freak out, people would instantly get one (now!) instead of postponing and waiting out, and the fact that for e.g. other hi-tech products this works quite good (think of hi-quality game betas being handed out for free), would be a win-win situation for both Apple and the consumer.

In the end, Apple and AT&T decided to bill the early adopters completely unfairly, and gets more press and more revenue by doing this flip-somersault that will end up just increasing their revenue anyway, and in a dubious legal way if I may say so.

read more

by sofar at September 11, 2007 01:42 AM

July 30, 2007

Jens Luedicke

Doping

Ich kann mir gut vorstellen das gewisse Anti-Doping Zeloten nicht davor zurückschrecken würden bei Doping-Proben Hand anlegen (lassen) um positive Resultate zu erzielen.

by Jens at July 30, 2007 01:03 PM

July 15, 2007

Jens Luedicke

HEDI SLIMANE

HEDI SLIMANE DIARY

(via)

by Jens at July 15, 2007 05:01 PM

July 05, 2007

Jens Luedicke

Apple iProduct

Apple iProduct

(via)

by Jens at July 05, 2007 12:42 PM

April 15, 2007

Benedikt Meurer

A Visual Tour of Xfce 4.4.0

&lt;p align="justify"&gt;I just wrote a short summary of the major changes that went into the upcoming &lt;a href="http://www.xfce.org/"&gt;Xfce 4.4.0&lt;/a&gt;. The article is available &lt;a href="http://foo-projects.org/~benny/articles/xfce44-visual-tour.html"&gt;here&lt;/a&gt; (and will also be published on the new Xfce website later).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11492822-116939959941647800?l=xfce-diary.blogspot.com'/&gt;&lt;/div&gt;</content>

by Benedikt Meurer at April 15, 2007 05:49 AM

Thunar 0.8.0 and libexo 0.3.2 releases

&lt;p align="justify"&gt;I just released Thunar 0.8.0 and exo 0.3.2 as part of the long awaited &lt;a href="http://www.xfce.org/"&gt;Xfce 4.4.0&lt;/a&gt;, which will be released in a few hours. The separate tarballs are provided for users of Xfce 4.2.x refusing to upgrade to Xfce 4.4.x, and users of other desktop environments. This is the final release of Thunar, but since not all items from the roadmap were completed, it is not yet the 1.0.0 version.&lt;/p&gt;&lt;p align="justify"&gt;You will need at least libxfce4util 4.2.2, GTK+ 2.6.4, shared-mime-info 0.15 and desktop-file-utils 0.10 to build and run Thunar. In addition Gamin or FAM are highly recommended to enable file system monitoring in Thunar. For HAL support on Linux, the libhal-storage-devel package is required (0.5.0 or above). Furthermore if you want to use the trash panel applet, you will need the Xfce Panel 4.4BETA1 or above and D-Bus 0.34 or above. The README file contains a complete list of dependencies and optional packages.&lt;/p&gt;&lt;p&gt;The official announcement is available at:&lt;br /&gt;&lt;a href="http://thunar.xfce.org/news.html#2007-01-21"&gt;http://thunar.xfce.org/news.html#2007-01-21&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Several screenshots are available at:&lt;br /&gt;&lt;a href="http://thunar.xfce.org/screenshots.html"&gt;http://thunar.xfce.org/screenshots.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The source tarballs and the graphical installers can be downloaded from:&lt;br /&gt;&lt;a href="http://thunar.xfce.org/download.html#0.8.0"&gt;http://thunar.xfce.org/download.html#0.8.0&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Installation instructions and documentation are available at:&lt;br /&gt;&lt;a href="http://thunar.xfce.org/pwiki/"&gt;http://thunar.xfce.org/pwiki/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Please report bugs to the Xfce Bug Tracker (product &lt;i&gt;Thunar&lt;/i&gt;) at:&lt;br /&gt;&lt;a href="http://bugzilla.xfce.org/"&gt;http://bugzilla.xfce.org/&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11492822-116939926278817097?l=xfce-diary.blogspot.com'/&gt;&lt;/div&gt;</content>

by Benedikt Meurer at April 15, 2007 05:49 AM

thunar-volman 0.1.0

&lt;p align="justify"&gt;I just released the first version of the Thunar Volume Manager. It adds automatic management of removable drives and media to Thunar, without adding another daemon to your desktop sessions. It requires Thunar 0.5.1svn or above, HAL 0.5.0 or above and D-BUS 0.32 or above.&lt;/p&gt;&lt;p&gt;Website:&lt;br&gt;&lt;a href="http://www.xfce.org/~benny/projects/thunar-volman/index.html"&gt;http://www.xfce.org/~benny/projects/thunar-volman/index.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Documentation:&lt;br&gt;&lt;a href="http://thunar.xfce.org/documentation/C/using-removable-media.html"&gt;http://thunar.xfce.org/documentation/C/using-removable-media.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Release notes:&lt;br&gt;&lt;a href="http://developer.berlios.de/project/shownotes.php?release_id=12027"&gt;http://developer.berlios.de/project/shownotes.php?release_id=12027&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Download:&lt;br&gt;&lt;a href="http://developer.berlios.de/project/showfiles.php?group_id=910&amp;release_id=12027"&gt;http://developer.berlios.de/project/showfiles.php?group_id=910&amp;release_id=12027&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11492822-116889658522820398?l=xfce-diary.blogspot.com'/&gt;&lt;/div&gt;</content>

by Benedikt Meurer at April 15, 2007 05:49 AM

Just another Xfce 4.4 review

&lt;p align="justify"&gt;Another interesting &lt;a href="http://turkey.fvdh.net/~hanumizzle/xfce4-review/"&gt;review&lt;/a&gt; of Xfce 4.4.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11492822-116360188100066592?l=xfce-diary.blogspot.com'/&gt;&lt;/div&gt;</content>

by Benedikt Meurer at April 15, 2007 05:49 AM

Xfce 4.4 Release Candiate 2

&lt;p align="justify"&gt;Hopefully the last &lt;a href="http://foo-projects.org/pipermail/xfce4-dev/2006-November/021666.html"&gt;release candidate for 4.4.0&lt;/a&gt;...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11492822-116277584556940548?l=xfce-diary.blogspot.com'/&gt;&lt;/div&gt;</content>

by Benedikt Meurer at April 15, 2007 05:49 AM