Planet Lanedo

February 15, 2012

Lionel Dricot

The Backyard Digging (and filling it back afterwards) Point

Traduction francophone disponible

Dear politician,

If you have been pointed to this text, it is because you tried to justify your position or your actions by the fact that "it saves jobs".

Sorry, you have reached the infamous "Backyard Digging Point". Your argument is invalid. Don't worry, you are not the first nor the last one. Let's see together why this argument is invalid and, even more, why it is very dangerous to rely on it.

Backyard digging

A job is a service that a provider give to a customer in exchange for money (or other form of payment). The job exists as long as the price asked by the provider is inferior to the price the customer is willing to pay. If the customer doesn't want to pay that amount, the provider either has to lower his price, to offer more to the customer or to radically change his business model.

How much would you pay me to dig a big hole in your garden then to fill it back afterwards? As it would probably take me several hours of work, I guess that 200€ is a good price. I would even cut it down to 150€ for you. Would you pay for that? Probably not. Maybe I should consider that a job that nobody is willing to pay for is useless.

As the world is evolving, the society changes. A good business model of the past may not be relevant anymore. New business opportunities appear. Companies could make radical shift and grow even stronger. Or try to stick to their old paradigm and disappear. This happens every day: icemen go out of business because of better and/or cheaper alternatives. It is not a political issue, merely an evolution.

As a politician, you are elected by the citizens. Among your duties, you need to ensure that the state provide some services for less than it would really cost : education, transportation and many others depending on your political stand. Profitability of private businesses should never be your concern. If the service provided is seen as critical but unprofitable, maybe it should be managed by the state in the name of the citizen.

When they earn money, private companies pay politicians to stay far away. But as soon as something may be a threat to their future profitability, they will make friend, asking "to be protected". As a representative of the citizens, not the companies, you should not enter this game. Why?

Firstly because the evolution is unavoidable

Like it or not, the changes you are trying to avoid are already here. You can fight against them and make the transition longer and harder. That's all you will ever gain. It is like building a wall in the middle of a river. At best, you will be able to stop the flow for a few moments. But the water will eventually find its way around your barrier. That means flood, damages. Adapt yourself to the river and let it flow, everything will be easier.

Secondly because it is an economic disaster

Saving jobs or avoiding job loss is only a temporary measure. If the job doesn't pay for itself now, nothing will make it more profitable in the future. You are investing money and effort in a black hole. As a politician, remember that you are not playing with your own money, you are spending the money of your citizens. Your responsibility is to invest in something profitable for all your citizens. True, investing a lot to save some jobs for a few months might make a few votes. Is being re-elected your only political vision?

Thirdly because it is not ethic

Do you think that we should keep death penalty in order not to put the executioner out of a job? Extreme example? What about saving the planet? Why do we still hear that ecology should be balanced with the economy? If there is no planet, there will be no economy anymore.

By trying to "save jobs", you are hindering the natural evolution of the society. New companies, new business models, young entrepreneurs are directly hurt by your attempt at "saving jobs". It is a simple as that: despite all your good intentions, you are in fact destroying future jobs. A lot of businesses will never see the light because of your action.

Fourth, because it makes everyone's life a bit more difficult

Today's technology is wonderful. Administration and paperwork is a thing of the past. With very few investments, most procedures could be automatized, making everyone happy. But, guess what, we fear it. We are trying to make every step a bit more complicated to save the work of the guy putting useless stamps on a piece of paper.

This is mostly visible in public administrations but can be applied to most big organizations. The Luddite fear of "losing jobs" makes us rejecting everything that could make our lives easier. "We have always done like that" or "Everybody is doing that" are excuses, not arguments.

Last but not least, because jobs are not necessary.

Work is just one way of earning an income and having an income is only one way of living. Some people live perfectly happy without income. And, more importantly, a lot of people have an income without working. In fact, there are very few rich people that earn their income from their current work.

Younger generations are often considered lazy because they don't want to work as much as their older counterparts. The reality is that they only want to live more. With today's technology, they don't see why they should waste their time doing useless stuffs. Yes, they will work but only if they see that it is worth the effort, if it's for something they care about. And backyard digging is not one of their priorities.

Backyard digging

Very often, you will hear concerned people saying that not everybody can be an engineer or an artist, that we also have to give some work to the "stupid" people. Just like the world could be separated between “smart-asses” and people that don't have more capabilities than a machine. This question is raised every day since the industrial revolution and, so far, we still exist, globally more prosperous than ever. Nevertheless, some politicians are working hard to make digging your backyard and filling it back mandatory, proud of their patronization for the “stupid” people.

Conclusion

Dear representative of the citizens, from now on, each time you will say “saving jobs”, you will think “making people dig their backyard and fill it back”. You know that anything which is only justified by the need "to save job" is against the interests of your citizens. Give people more freedom, more time, less stupid stuffs to do and high-value jobs will spontaneously appear. People are not stupid. They may seem so because we are giving them stupid backyard digging to do. If we stop, we will realize how creative the mankind can be. Have you never dreamt of a world without any boring or useless tasks?

And, when you think about it, aren't the "stupid" those who fight and invest in a lost cause? Don't forget that the more the technology evolves, the closer you are to seeing your actual work done by a machine. It is only a matter of time so start investing in the future now.

Pictures by Chiot's Run and Travis S.

Traduction francophone disponible


Flattr our API Documentation

by Ploum at February 15, 2012 04:39 PM

February 13, 2012

Lionel Dricot

Getting Thing GNOME is alive (and released)!

TLDR: GTG 0.2.9 has been released, spread the word!.

For those who don't know Getting Things GNOME yet, it is a todo manager. In fact, it is, to my knowledge, the only todo manager that :

  1. has a clean and simple UI (see my French explanation to use GTG)
  2. allows you to have infinite level of subtasks
  3. to have the same task being the subtask of multiple parents
  4. to easily classify your tasks with colours and tags
  5. allows you to see only the task that can be done right now with the concept of workview
  6. allows you to quickly enter a lot of tasks in a few keystrokes
  7. has a DBus interface

gtg029.png

As a result, gtg was in the Techradar's top 50 best Linux application of 2011 despite the lack of regular releases. It is probably packaged as "gtg" in your distribution so it is probably better that you try by yourself.

For the last year, I've been often asked if GTG was dead, if we planned to release something new.

This is my fault and I apologize for such a long dead time. I could explain you all the oddities GTG went through but it is not interesting. I will talk you a bit more about the solution we created when the liblarch documentation will be finished. The good news is that GTG is not dead and that we have been actively working on it in the last two years, including some wonderful GSoC.

Izidor, my GSoC student, is now the co-maintainer of GTG and released 0.2.9 today. Last week, he came from Germany to Belgium to sleep with my cat, enjoy the Frozdem (Frozen Fosdem) and, as a side effect, polish all the little details that would make 0.2.9 a rocking release.

Izidor and Lionel at FOSDEM 2012

Why 0.2.9 ? That's the bad news part! Mainly because the "backends" feature, which allows you to store/retrieve your task from an external source, is still very unstable and most of the backends had to be disabled for the release. But don't worry, we want to stick to a much shorter release cycle and bring a polished 0.3 in a few weeks. I hope I will learn from mistakes of the past.

Nevertheless, let's celebrate the first release in nearly two years. Please share the news, package GTG, report bugs, help us, follow us on G+ and spread the word.

By the way, we are looking for a communication manager/webmaster and a Django/CSS/JS hacker to work with us on a GTG web interface. If you want to join a cool project with an insane potential, contact me!


Flattr our API Documentation

by Ploum at February 13, 2012 09:46 PM

February 08, 2012

Aleksander Morgado

January 30, 2012

Aleksander Morgado

FOSDEM 2012

Only some days left for FOSDEM 2012; which this [1] year is organized in Brussels (Belgium).

For anyone interested, I’ll be giving a talk about LTE and ModemManager in the Telephony devroom (room H.2213), in the best time slot possible: Sunday 5th at 09:00 am. If you wake up that early just to attend the talk, you’ll get cookies for free!! [2].

Some GNU hackers will also attend the conference, but this year there won’t be a GNU devroom. If you want to suggest a place for dinner on Friday or Saturday, please do so in the ghm-discuss mailing list.

Cheers and see you there!

I'm going to FOSDEM, the Free and Open Source Software Developers' European Meeting

[1] (and every)
[2] no, this is not true


Filed under: GNU Planet, Lanedo Planet, Meetings, Planets Tagged: FOSDEM, LTE, ModemManager, NetworkManager

by aleksander at January 30, 2012 09:07 PM

January 27, 2012

Lionel Dricot

FlattrStat, a small statistic tool for Flattr

I'm a big fan of Flattr. But I find it hard to have some statistics about your things that have been flattered.

On my Flattr account, I receive flatts for both my blog and for Getting Things GNOME!. But I want to keep a clear separation. There are multiple persons now involved in GTG and they deserve part of the money (we will use that to buy beers at FOSDEM).

Also, on my own blog, I was interested to know which posts where the more successful, speaking of revenue. I knew that, so far, this post had the most clicks but I had no idea which one received the most money (for the curious, it is that one).

In order to do that, I quickly wrote FlattrStat, a python script. You need to download all the csv files from flatr, put them in a folder then run the script with "python flattrstat.py".

output of flattrstat

It will outputs the total clicks and revenues for each domain separately and, for each domain, sort all your things from the most successful to the least one.

Ideally, it should download the CSV files automatically and have a nice GUI but I don't really need that. It was for my own needs but I realize that it might be useful to someone else. So, feel free to use it or to contribute, it is under the WTFPL license.

FlattrStat on GitHub


Flattr our API Documentation

by Ploum at January 27, 2012 04:09 PM

January 20, 2012

Carlos Garnacho

Multitouch is near…

So, after a few strives during the last year, the multitouch Xorg patches were posted and merged to master last month, making multitouch available in the upcoming Xorg release. This turns the multitouch GTK+ branch into a suitable candidate for GTK+ 3.4, which obviously deserves a video demoing what’s up there:



Hopefully soon in master, very soon…

by carlosg at January 20, 2012 01:13 PM

January 18, 2012

Lionel Dricot

Why I'm a Pirate!

Traduction française

Pirate

Dear copyright industry, I'm a pirate. I'm the typical user you are fighting. I'm downloading everything and not giving you one single penny. I don't even attend concert. You hate me and it's reciprocal.

When I discovered high-speed Internet, I was a naive young innocent. I was downloading to discover new stuffs. Whenever I liked something, I would go to the shop and buy the CD. I discovered lot of music thanks to the pirate networks. Randomly or following advices. In the end, I bought something like 200 CDs. The first group I've joined on Audioscrobbler was called "I still buy CDs". But today I regret that. I'm asking everyone to not buy CD any more. Not a single one !

Because you are not offering a good service

When I want to discover an artist or a movie, I'm heading to The Pirate Bay, I launch a search and I click. In less than 10 minutes, I've a full movie on my disk. In 20, I've the complete discography of an artist.

I would pay for such a service if it is as simple, as fast and, unlike the Bay, if it can make some guarantees on the quality. But you don't offer that. Instead, you are trying to build fences and limitations. You are asking for huge amount of money only through credit card and you don't have half the music I'm looking for. That's not convenient and it's more expensive.

I don't even talk about CDs any more. This is now only a huge quantity of plastic waste, sitting in my living room. They are expensive, they become unreadable through the years or, thanks to DRM, they are unreadable since the first day.

In summary, you are offering less for a more expensive price.

Because you don't use my money well

I've probably spent something like 2000€ for my CDs. You need to add the taxes on all the blank CDs I used to burn Linux iso. From that money, how much went to the artists and their studio? 100€? 200€? Everything else was probably diluted in stuffs I don't need: packaging, distribution, transport, marketing, …

Your companies are in the top richest ones. The artists that are the most downloaded live in huge luxury houses. Others are dead. Don't you find it a bit shameful to try the "bad pirates are killing the poor artists" story?

I'm sorry but I don't think you need my money. I've showed my support to small artists with Flattr, Jamendo, CDbaby or Magnatune. For everything else, you will have to live without my wallet.

Because you are messing with my life

That's it. Every penny I will give you will be used against me. Firstly, by making it difficult for me to use what I buy. Zoned DVDs, encrypted movies on the DVD requiring illegal software to be read under Linux or DRM to be sure I'm not able to listen to a CD.

Worst, you will use my money to sue me in court because I would have downloaded something that I didn't want to buy anyway! With the change left, you will pay lobbyists to ensure the governments make stupid and dangerous laws.

Do you want me to pay lawyers to sue myself and lobbyists to make laws to send me in jails? Really?

Because you are destroying the whole society

Messing with my life was not enough. You are even trying to destroy one of the pillar of our society: education. Your heavy marketing is starting to work, people now understand the importance of "intellectual property" and that "sharing is bad".

Bloody ignorant morons.

Thanks to you, schools are now afraid to give lectures in case there are some copyrighted materials in them. Teachers fear to be sued. To the point where giving the strictly minimal lesson is better than giving some examples. Famous works are not part of the education any more.

Some teachers themselves start to consider their lectures as "copyrighted material", refusing to share it with colleagues. And when they attend training sessions, offered by the state and paid with public funds, it is to hear that the material of the session can be read but has to be bought if the teachers want to use them in their own classroom.

You are destroying the very symbol of civilisation: the enjoyment of knowledge, the joy of sharing, the cooperation and the education. I will never forgive you for that. Never. If I'm not taking action right now, my children will be more afraid of reading a copyrighted book than stealing in a shop or hitting someone with a knife. Those crimes are anyway less punished by the law than sharing a song on the internet.

How can you look at yourself in the mirror after that? How can you still have a peaceful sleep ?

Because your time has come

If I'm a pirate, it's not to have some cheap music. It is because the time has come for you to fuck off. In your arrogance, you are hurting the fundamental value of freedom only to save your little petty interests.

The only comfort is to know that you will disappear soon. And nobody will miss you.

Pirately yours,


Picture by arbyreed
Traduction française


Flattr our API Documentation

by Ploum at January 18, 2012 08:08 AM

January 17, 2012

Lionel Dricot

The End of the Revolution

Traduction en français disponible

Lot of people think that we are on the verge of a revolution, that the foundation of the society will be shaken. I don't think so.

Random coloured lines

For me, the revolution has already happened, we are at the end of a transition period. We need time to realize it but the changes are there, unavoidable.

The revolution I'm speaking about is well known under the name "industrial revolution". Started in the middle of the XIXth century, it became prominent with the launch of the Ford T in 1908. And ends today, with Internet and the worldwide network.

For ages, humans have worked. That work was, granting a few exceptions, mainly proportional to the final result. As a farmer cultivated more field, he had a better harvest. A craftsman was working more hour to produce more. As the money[1] earned was directly proportional to the result, we could say that the more we work, the more we earn. One hour of work was roughly equivalent to a given sum of money.

The industrial revolution changes completely this paradigm. The price of a good becomes inversely proportional to the number of produced goods. If Henri Ford had produced only one Ford T, it would worth millions. But the more he was producing, the better the return was. To the point where buying a brand new good is often cheaper than repairing and existing one.

The industrial world is thus characterized by the desire to duplicate as much as possible in order to lower the unit price. This world is not directed by the direct production but by speculation. To launch a business, you need a complex estimation about when you will have a return on your initial investment. The more you produce, the richer you are. The richer you are, the more you can speculate and thus become even richer. Money attracts money, the society itself is directed toward speculation.

The funny side is that the first beneficiaries of this revolution don't want others to share the pie and try to convince everyone that the old rules still apply. Work is still paid by the hour, even though the principle itself is not founded any more and leads to hidden conflicts of interest.

It is also noteworthy that, even though the industrial revolution funding principle is to duplicate as much as you can, tools are created to avoid that very same duplication: Patents, intellectual property and, later, DRM. Depending on the context, duplication will be translated by production, growth or by counterfeiting, piracy.

Internet, digital products, globalisation and 3D printers are only the logical consequence of this duplication revolution. Duplication tools are cheap, easily accessible. Everyone can become a producer, everybody can benefit from the revolution and that's why we can say it has succeeded. Dear big manufacturers, being first granted you a lot of benefits during 150 years. Now please be kind enough to not fight against the unavoidable spread of your privileges.

ordered coloured lines

That's it, we are entering the post-industrial era. I've no idea what it willlooks like. I will probably never know if we are currently living a new transition period of the founding of a big, Millennial Worldwide Society.

What I know is that the industrial era is coming to a end, that we need to redefine fundamentals like money, work, wealth, property, power. That those who took them for granted will not be happy. But who cares about them anyway ?


Pictures by ialla and danmachold
Traduction en français disponible

Note

[1] or related reward like food


Flattr our API Documentation

by Ploum at January 17, 2012 12:57 PM

December 18, 2011

Christian Dywan

Better performance, better GTK+ 3 support, better Windows release

A good day for releasing Midori 0.4.3 with better performance and better GTK+ 3 support!

The web inspector resizing issues were addressed and the maximum number of closed tabs in private browsing is fixed.

There were a number of improvements to the GTK+ 3 support. Private browsing makes use of the dark theme. The new channel-(in)secure-symbolic icons are used if they're available. The location supports .security-(un)trusted style classes. Tab icons display properly. Configure no longer requires the GTK+ 2 version of javascriptcore. The speed dial is fully usable.

There were a whole lot of performance improvements. Startup is much faster due to optimizing how actions and tabs are created. Adblock uses less allocations - and the Easy Privacy list is included by default - and the cookie manager became faster.

Location and search in the toolbar can now be resized by dragging, fullscreen hides all bars and borders now and the preference to override all fonts handles monospaced fonts more selectively.

Support for GTK+3 is considered beta quality. It's almost ready but minor issues are still expected. Build with --enable-gtk3 --disable-addons to test it.

So download midori v0.4.3 (906 kB) (MD5) (ChangeLog) already!

Stable Windows binaries below. You are welcome to join #midori on irc.freenode.net and help testing pre-releases for Windows. YOU can make the difference by helping out!

Midori Win32 Archive v0.4.3 (14.7 MB)

Again experimental Windows binaries. WebKit 1.6 with Unicode and SSL support. Detailed error reports are especially helpful here. GtkLauncher.exe and gdb.exe are included to make debugging easier. So go wild, just keep in mind this is not stable just yet.

Midori Win32 Experimental v0.4.3 (16.3 MB)

by Christian Dywan (nospam@example.com) at December 18, 2011 12:06 AM

November 21, 2011

Lionel Dricot

Crosscompiling LibreOffice for Windows on Linux

LibreOffice heads to become one of the most prominent Free Software in the desktop ecosystem. Despite an increasing trends towards alternatives, most of desktop users out there are using a Windows operating system. The implication is straightforward: most of LibreOffice users and potential users are running Windows.

On the other hand, most of LibreOffice developers are currently under Linux. Which means that early testing, nightly builds and debugging mostly happens on Linux.

This is a known problem in free cross-platforms software. Tristan Nitot, head of Mozilla Europe, explained several times that he was using Windows not as a choice but to experience what most of Firefox users are experiencing.

Without being as brave and dedicated as Tristan, there is still some way to improve the situation. The first one is to allow Linux developers to easily produce a Windows build from a Linux machine. It will make the Windows testing community feel like a first class-citizen, allowing them to catch bugs early and have access to automated nightly builds.

To achieve that, two steps are mandatory: cross-compiling and building the installer.

Cross-compiling

The LibreOffice community did an awesome job in order to make the project cross-compilable. I wrote a step-by-step guide to cross-compile LibreOffice on my wiki page. Everything was done on an OpenSuse 12.1 although it should not be hard to transpose it to other distribution.

Feedback is appreciated, especially on 64-bits installation.

Building the installer

Having the Windows binaries is not enough to do a good testing job. Indeed, LibreOffice is composed of hundred of files, scattered everywhere. In order to test it properly, you need to install LibreOffice with a proper installer.

LibreOffice comes as a MSI installer. Of course, building such an installer requires lot of Windows tools. The LibreOffice community then had this idea: why don't we use Wine to build a MSI from Linux?

This is a great idea and that's what Lanedo is currently working on. We are currently in the process of refactoring the whole MSI make process, in order to put every Windows specific call under one interface. The next step will be to implement that interface with Wine tools.

Stay tuned, I hope to have some good news for you in the coming weeks!


Flattr our API Documentation

by Ploum at November 21, 2011 11:10 AM

November 15, 2011

Martyn Russell

Lanedo is hiring

We’re currently looking for anyone who has LibreOffice experience and is interested in working on the project. If that sounds like something you would like to do, get in touch with us.

Additionally, if you or anyone you know has experience running an open source business, please get in touch. We’re looking for someone that could facilitate a CEO type position.

by mr at November 15, 2011 04:28 PM

November 11, 2011

Christian Dywan

Speedier dials, fancier fonts and forbidden cookie files

The time for Midori 0.4.2 has come! Another exciting release of the WebKit-based web browser.

The most crucial bit first: the bookmark dialog crashes are fixed. If nothing else that's
a good reason to upgrade to Midori 0.4.2.

So we have faster, base64-based CSS support for globally valid user stylesheets and adblock rules. And styles can apply to about: and file:// URIs. Parsing of -moz-document which is used to select domains or schemes to apply styles to was improved.

Speed dial received a makeover. It resizes automatically now, has neatly embossed tiles and shows close buttons on hover - which show on the left if your system/ theme expects that. If thumbnails are missing they will be refreshed without intervention.

Cookies are stored in an sqlite3 database. Import of existing data happens in the background. And you can decide whether you want third-party cookies or not, the default is in fact to not accept cookies coming from websites you don't actually visit.

There are loads more of subtle tweaks and improvements. A lot of code was actually refactored and removed to ensure that Midori stays the lightweight it aims to be. See the change log for those details.

Support for GTK+3 is still considered experimental and not recommended for daily use. Build with --enable-gtk3 --disable-addons to try it out.

So download midori v0.4.2 (902 kB) (MD5) (ChangeLog) already!

Stable Windows binaries below. You are welcome to join #midori on irc.freenode.net and help testing pre-releases for Windows. YOU can make the difference by helping out!

Midori Win32 Archive v0.4.2 (14.5 MB)

And these are experimental, unstable Windows binaries. Lots of known and unknown bugs are the price you pay for being on the bleeding edge. Detailed error reports are especially helpful here. GtkLauncher.exe and gdb.exe are included to make debugging easier. So go wild, as long as you keep in mind that this is not for the fain of heart.

Midori Win32 Experimental v0.4.2 (17.9 MB)

by Christian Dywan (nospam@example.com) at November 11, 2011 01:37 AM

November 04, 2011

Aleksander Morgado

FSCONS 2011 and GNU get-together

I’ll be attending FSCONS 2011 in Göteborg (Sweden) next week (11/11/11), which also holds a GNU get-together, with lots of usual suspects.

Carlos Garnacho, another Lanedian, will be giving a talk about Theming GTK+ applications with CSS, which you shouldn’t miss.

So, if you are interested in developing custom GTK+, LibreOffice, NetworkManager, ModemManager or Tracker features; or any other services provided by Lanedo GmbH, just email me and we’ll be able to talk in Göteborg.

See you there!


Filed under: GNU Planet, Lanedo Planet, Meetings, Planets Tagged: fscons, ghm, gnu

by aleksander at November 04, 2011 01:21 PM

October 22, 2011

Kristian Rietveld

Building LibreOffice with Clang

Last week I attended the first LibreOffice conference in Paris together with the Lanedo LibreOffice hackers. Lionel Dricot gives a nice summary of the buzz at the conference in his latest blog post.

I figured I had to put the new crazy-fast machine Lanedo bought me to use at this conference, so I decided to attempt to build LibreOffice using Clang on Mac OS X. My expectation was that this would be too large a task for a single weekend, but to my surprise I managed to get to a completed build during the very last minutes of the conference. Unfortunately, the resulting executable crashes on start up :) So there’s still some work to be done.

The patches that were needed to complete the build have been submitted and I wrote up a wiki page about the remaining issues. See the mailing list post and the “Building LibreOffice with Clang” wiki page.

In the near future, I hope to fix things so that the resulting executable will actually launch and work correctly. Also, it should be interesting to try to compile LibreOffice using Clang on Linux (faster builds! warnings that a human can actually understand!).

Just like the LibreOffice conference, this tiny project has been good fun :)

by kris at October 22, 2011 10:46 AM

October 10, 2011

Kristian Rietveld

Change of e-mail address

Effective immediately I will be reachable at kris (at) loopnest.org instead of my old gtk.org alias (or in addition to gtk.org when gtk.org mail comes online again). The e-mail address attached to my Bugzilla accounts will be changed in the coming days as well.

I will not be rewriting my e-mail address in commit history, but will start committing with my e-mail address from today on.

by kris at October 10, 2011 09:13 AM

October 09, 2011

Christian Dywan

Building, private browsing and identity crisis

So this release builds with WebKitGTK+ >= 1.4.3 without problems and addresses regressions with middle clicking toolbar buttons. Flash window on background tabs works correctly now and cookies are cleared on quit like they should if you enable it.

There's a separate Private Browsing shortcut now so that you can see it in GNOME Shell, Unity, Slingshort or Synapse and also type "private" to easily open a private browsing session. Closed tabs can now be re-opened in private browsing (but won't be saved once you close it as you would expect). You can also see downloaded files in supporting launchers now as recent documents.

The new Automatic option for Identify As now enables built-in compatiblity quirks to work around mis-behaving websites like Google's. You can still choose a genuine Midori identity which doesn't do that.

There's also experimental GTK+3 support thanks to Lucas. For now it is not recommended because there are still issues to sort out. Build with --enable-gtk3 --disable-addons to try it out.

So download midori v0.4.1 (884 kB) (MD5) (ChangeLog) already!

Update:

Windows binaries below. You are welcome to join #midori on irc.freenode.net and help testing pre-releases for Windows.

Midori Win32 Archive v0.4.1 (22.4 MB)
Midori Win32 Installer v0.4.1 (14.8 MB)

by Christian Dywan (nospam@example.com) at October 09, 2011 11:30 PM

October 06, 2011

Martyn Russell

Tracker Needle with improved tagging

Given there have been a number of improvements to tracker-needle recently, I thought I would make a video to highlight some of them. A quick summary:

  • Searching for “foo” now finds files tagged with “foo”
  • Searches are limited to 500 items per category/query (to avoid abusing the GtkTreeView mainly)
  • A tag list is now available to show all hits by tags
  • Tags can be edited by the context menu per item (planned to be improved later)

Really nice to have tagging supported properly in tracker-needle now.

by mr at October 06, 2011 08:15 PM

October 01, 2011

Tim Janik

Testbit Tools Version 11.09 Released

No Bugs
(Image: Mag3737)

 

And here’s another muffin from the code cake factory…

About Testbit Tools
The ‘Testbit Tools’ package contains tools proven to be useful during the development of several Testbit and Lanedo projects. The tools are Free Software and can be redistributed under the GNU GPLv3+.

This release features the addition of buglist.py, useful to aid in report and summary generation from your favorite bugzilla.

Downloading Testbit Tools
The Testbit Tools packages are available for download in the testbit-tools folder, the newest release is here: testbit-tools-11.09.0.tar.bz2

Changes in version 11.09.0:

  • Added buglist, a script to list and download bugs from bug trackers.
  • Added buildfay, a script with various sub commands to aid release making.
  • Fixed version information for all tools.
  • Added support to the Xamarin Bug Tracker to buglist.py.
  •  

    Feedback

    If you find this release useful, we highly appreciate your feature requests, bug reports, patches or review comments!

    See Also

    1. The Bugzilla Utility buglist.py – managing bug lists
    2. Wikihtml2man Introduction – using html2wiki

    flattr this!

    by timj at October 01, 2011 12:18 AM

    September 25, 2011

    Kristian Rietveld

    Making clang GObject aware

    Before it’s Christmas again, I should blog about the nifty hack I did last Christmas, already nine months ago.

    Often, I am quickly coding up test cases. Compiling and running usually goes like this (insert cheering after successful compile):

    $ clang `pkg-config --libs --cflags gtk+-3.0` -o test/foo3 test/foo3.c
    $ ./test/foo3  
    
    (foo3:84880): GLib-GObject-WARNING **: g_object_set_valist: object class `GtkWindow' has no property named `width'
    
    (foo3:84880): GLib-GObject-WARNING **: gsignal.c:2293: signal `delet-event' is invalid for instance `0x101865000'
    

    And insert a sigh of disappointment after witnessing the GObject warnings. I figured that with all the GObject Introspection work going on, it would be quite nice to teach the compiler about GObject Introspection. So while snow was pouring down last Christmas, I hacked up a quick and dirty clang plugin. It looks like this:

    $ clang -cc1 -fcolor-diagnostics `pkg-config --cflags gtk+-3.0` -load libGObjectHelper.dylib -plugin gobject-helper test/foo3.c
    test/foo3.c:23:25: warning: object 'GtkWindow' has no property 'width'
      g_object_set (window, "width", 320, "height", 240, NULL);
                            ^
    test/foo3.c:23:39: warning: object 'GtkWindow' has no property 'height'
      g_object_set (window, "width", 320, "height", 240, NULL);
                                          ^
    test/foo3.c:24:29: warning: object 'GtkWindow' has no signal 'delet-event'
      g_signal_connect (window, "delet-event",
                                ^
    3 warnings generated.
    

    One of the features I wanted to add before blogging, was to also use the clang-style spelling corrections. For the last warning, it would say "did you mean ‘delete-event’?" Of course, there’s still much more to do than that to make the plugin feature complete.

    This plugin will not work just with GTK+ source code. Because it’s using GObject Introspection data, it should work for any GObject library for which the GObject Introspection data has been generated.

    The code is not ready for public consumption, so I am not releasing it just yet. My plan is to find time in the very near feature once my critical bugs are under control (or worst case during Christmas again :) and work on bringing the plugin into shape and trying it out on some larger examples. See below why trying it on larger examples first is quite important to figure out whether this plugin will ever be useful for the general public. When that is done, I plan to dump it in a public git repository for all to enjoy.

    So, how does it work?

    At its very core, the plugin walks over the Abstract Syntax Tree (AST) produced by clang. For the above example we simply handle calls to g_signal_connect_data and g_object_set. In order to verify whether the given signal or property name exists, we need to know the exact type of the object we are calling this function on. This is a problem that cannot always be solved.

    What the plugin can currently do to solve this problem, is to determine where exactly the object pointer is assigned in the same function. If the object pointer is a GtkWidget *, we could at least assume that the object contains all signals and properties belonging to GtkWidget objects. In the next line, it is possible that the value of a call to gtk_label_new() is assigned to the object pointer. In this case we know the object is of type GtkLabel and as a result we can catch more errors.

    The above strategy works fine on simple examples. The challenge is to make this work for larger programs. It might be a reasonable assumption to say that often an object is created, properties set and signals attached in the same function. However, there might be many cases where an object is created in a separate function and only a GtkWidget * type is returned. When the function is in the same compilation unit, it will still be possible to find out the full type though.

    It is already clear that the plugin will never be able to catch all errors. Still I expect it to be pretty helpful. Another case which is interesting to handle is the following:

    GtkWidget *widget;
    
    if (can_edit)
      widget = gtk_entry_new ();
    else
      widget = gtk_label_new ();
    
    g_object_set (widget, ...
    

    We will never be able to report all possible errors in this case. For example, if widget is assigned a GtkLabel and we use a property from GtkEntry, we cannot catch it. What we can do is tag the widget variable with both the GtkLabel and GtkEntry types and put out an error if a property or signal is used that is neither in GtkLabel nor in GtkEntry.

    Why not just program in a higher-level language, then you would not need a plugin like this?

    Good question.


    To be continued …

    ANSI to HTML conversion courtesy of a2h

    by kris at September 25, 2011 03:46 PM

    September 16, 2011

    Martyn Russell

    Improved Tracker Preferences for Indexed Locations

    Something I have been meaning to do for a long time, is to update the preferences dialog for Tracker to easily add locations which are special user directories (as per the GUserDirectory locations).

    I wanted to do this in such a way that:

    • It was really easy to toggle locations as recursive or not
    • The file chooser was only necessary for non-standard locations
    • Better use of the space was made by integrating the two lists (previously) for single directory and recursive directory indexing
    • I could fix a few issues which had been reported when it came to saving using the special symbols (e.g. &DESKTOP for G_USER_DIRECTORY_DESKTOP, etc.) when one or more user directories evaluated to the same location

    The result is this (now in master and 0.12.2 when it is released):

    by mr at September 16, 2011 11:20 PM

    September 09, 2011

    Martyn Russell

    Tracker 0.12.0 Released!

    Given we (the tracker team) want to try to fit into the GNOME schedule for 3.2, we decided to bring the release of 0.12.0 ahead early. The roadmap is mostly complete anyway.

    The official announcement can be seen here.

    Thank you to everyone involved!

    Recently I also updated the GtkSearchEngineTracker implementation to not use hacky dlopen() calls and to use DBus instead. This avoids us updating the work for each new version of Tracker that comes along too. The patch attached to the bug (658272) should be applied soon (given Matthias was pushing for this sooner rather than later). So, we’re all on track!

    by mr at September 09, 2011 10:10 AM

    September 02, 2011

    Aleksander Morgado

    Your custom kernel in MeeGo

    In my last post I covered the steps needed to create custom MeeGo images and play with them.

    One of the things you may also want to do is to try new or modified kernels in your MeeGo images. You can do this either installing RPMs or directly compiling the kernel yourself. The following steps will cover this last case.

    1. Where to compile the kernel

    No, do not try to compile the kernel directly in a raw image launched within KVM/QEMU.

    The easiest way to compile your own kernel is to prepare a loop image and chroot into it (See section “6. Create a loop image and chroot into it” in Your custom MeeGo builds).

    Note: In order to completely compile the kernel, you will need quite a lot of empty space in the chroot. In order to easily get this, just use a big enough root partition size (given in MBytes) in the Kickstart file used to create the loop image.

    2. Get into the chroot

    Assuming meego-core-ia32.img is a loop image created, just:

    $> sudo mic-chroot meego-core-ia32.img

    3. Ensure only one kernel is available

    The MeeGo Image Creation tools will expect to have exactly only one kernel available. Therefore, if you just created the loop image, you will need to remove the default kernel RPM installed.

    # rpm -e kernel

    4. Install the MeeGo kernel source and build dependencies

    You will need to enable the source repositories in zypper first:
    First, list the available repositories in zypper:

    # zypper lr -u

    Note that these repositories were initially configured in the Kickstart file used to create the loop image.

    Then, enable the source repositories if not already done.

    # zypper mr -e 1.2.0-non-oss-source
    # zypper mr -e 1.2.0-oss-source
    # zypper mr -e 1.2.0-updates-non-oss-source
    # zypper mr -e 1.2.0-updates-oss-source

    Once you have these enabled, you can install the kernel source, and all the build dependencies will also get installed:

    # zypper si kernel

    Install additional required packages which were not listed in the build dependencies (not sure why not listed).

    # zypper in gcc

    5. Get your new kernel, configure, compile and install

    First, download the tarball and decompress it:

    # cd /root
    # wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.4.tar.bz2
    # tar -jxvf linux-3.0.4.tar.bz2 -C /usr/src

    Prepare the kernel configuration file, based on the one from the MeeGo kernel packaging. In this case we’re using a newer kernel version, so you will be prompted for the values of the new configuration parameters. You can just try use the default ones if you don’t know what they mean.

    # cd /usr/src/linux-3.0.4
    # cat /root/rpmbuild/SOURCES/config-generic /root/rpmbuild/SOURCES/config-x86 > .config
    # make oldconfig

    Note: Of course, you can fully skip using the MeeGo kernel configuration file and fully configure it yourself with, for example, make menuconfig.

    Then, compile the new kernel and the kernel modules, and install them.

    # make -j8
    # make -j8 modules
    # make modules_install
    # make install

    Note: In addition to the specific kernel configuration, MeeGo packaging also provides several kernel patches. In this case, we are not including them.

    6. Make the kernel bootable

    In order to make the kernel bootable in the image, you will need to create an initial ramdisk under /boot. But you shouldn’t use mkinitrd for that, use the provided mkliveinitrd instead:

    # /usr/libexec/mkliveinitrd -f /boot/initrd.img-3.0.4 3.0.4

    Once done, just exit the chroot:

    # exit

    7. Create a LiveUSB image to test the new kernel

    The steps to convert a loop image to a LiveUSB image and write it into an external USB disk are explained in my previous post about Your custom MeeGo builds, so I won’t explain much more about it.

    Just a warning: always make sure that you have ONLY ONE kernel available under /boot. If you happen to have more than one, for example when make install-ing twice (old ones get renamed with a .old extension), mic-image-convertor won’t like it and will exit with an error message like this one:

    Error: Unable to copy valid kernels or initrds, please check the repo


    Filed under: Lanedo Planet, MeeGo, Operating Systems, Planets Tagged: kernel, MeeGo

    by aleksander at September 02, 2011 01:28 PM

    September 01, 2011

    Aleksander Morgado

    Your custom MeeGo builds

    NOTE! For the long and detailed explanation on how to create custom MeeGo images, just jump to the MeeGo wiki: http://wiki.meego.com/Image_Creation

    These steps shown here are the minimum set required in an Ubuntu 11.04 host to be able to create MeeGo images easily. They do not try to be extensive, or very explanatory, these are just my personal notes on how to do it :-)

    1. Install MeeGo Image Creator

    Include the MeeGo tools and SDK repositories to your APT configuration, by adding the following lines to your /etc/apt/sources.list:

    deb http://repo.meego.com/MeeGo/tools/repos/ubuntu/10.10/ /
    deb http://repo.meego.com/MeeGo/sdk/host/repos/ubuntu/10.10/ /

    Add the MeeGo repository key:

    $> gpg --keyserver subkeys.pgp.net --recv 0BC7BEC479FC1F8A
    $> gpg --export --armor 0BC7BEC479FC1F8A | sudo apt-key add -

    Update the APT cache:

    $> sudo apt-get update

    Install the mic2 package:

    $> sudo apt-get install mic2

    Note: ‘mic2′ is also in natty/universe, just not the latest version.

    2. Prepare a MIC bootstrap

    In order to be able to create images from within your Ubuntu 11.04, you will need to use a MIC bootstrap. If you’re using one of the supported platforms (Ubuntu 10.10 for example), you can possibly skip using it. The generated bootstrap will be a chroot-able location which contains MIC and all its exact dependencies.

    $> sudo mic-create-bootstrap \
    -n trunk \
    -k /opt/meego/repo-cache \
    -r http://repo.meego.com/MeeGo/builds/trunk/latest/repos/oss/ia32/packages \
    -o /opt/meego/ia32-bootstrap

    This previous command will create a trunk named bootstrap in /opt/meego/ia32-bootstrap using /opt/meego/repo-cache as path to store cached packages.

    3. Prepare a kickstart file

    Kickstart files are the ones defining the contents of the image to be built. Not only what packages will be installed, but also which default users will be created, the default root password, the default locale settings, the default keyboard layout…

    Preparing a new kickstart file is best done by taking an officially used one, and modifying it as you like (a.k.a. the autotools way):
    http://repo.meego.com/MeeGo/releases/1.2.0/builddata/image-configs/

    The kickstart files I’ve been using are based on the upstream official ones, but with updated repo URLs and bigger root partition sizes. You can find them here:

    Note: If you want to know more about the format of kickstart files, what they do and such, just check the Fedora wiki.

    4. Create a raw image and launch it under KVM

    The MeeGo Image Creator can build ‘raw’ images which can be then launched under QEMU/KVM. The following command will build one of such ‘raw’ images, using the previously created bootstrap and one of the kickstart files we prepared. Note that the command also defines a cache path, where the RPMs downloaded from the MeeGo online repos will be stored (and therefore available for new images created afterwards).

    $> sudo mic-image-creator \
    --bootstrap=/opt/meego/ia32-bootstrap \
    --format=raw \
    --config=meego-core-ia32-1.2.0.ks \
    --cache=/opt/meego/repo-cache

    You can then use mic-vm-launcher as follows to launch the image under QEMU/KVM:

    $> sudo mic-vm-launcher meego-core-ia32-raw/meego-core-ia32-sda.raw

    Or call kvm directly and tweak the parameters used to launch the image:

    $> sudo kvm \
    -s \
    -m 1024 \
    -hda meego-core-ia32-raw/meego-core-ia32-sda.raw \
    -vga std

    Note: Ensure that virtualization is enabled in your BIOS, or KVM won’t be able to work properly. You can use ‘$> sudo kvm-ok‘ to check whether it is enabled or not.

    5. Create a LiveUSB image and write it to a USB dongle

    You will probably want to test your MeeGo build in the real hardware, and for that using LiveUSB images is one of the best options. The MeeGo Image Creator also allows building LiveCD and LiveUSB images directly from kickstart files; again, just changing the ‘format‘ argument:

    $> sudo mic-image-creator \
    --bootstrap=/opt/meego/ia32-bootstrap \
    --format=liveusb \
    --config=meego-core-ia32-1.2.0.ks \
    --cache=/opt/meego/repo-cache

    Once you get the image, you can use ‘mic-image-writer‘ to directly copy it to a connected USB disk. This tool will scan all available external disks, and prompt a menu to select the one where you want to write the image to. The ‘-c‘ switch (--console) just tells the tool to avoid launching any GUI, and present the menu directly in the console. During this step, the USB disk is also prepared with sysconfig/isolinux to boot the newly written image.

    $> sudo mic-image-writer -c meego-core-ia32.usbimg

    Now you’re ready to boot your hardware with the LiveUSB image.

    6. Create a loop image and chroot into it

    With the MeeGo Image Creator, you can also build loop images, just changing the ‘format‘ parameter in the call to mic-image-creator:

    $> sudo mic-image-creator \
    --bootstrap=/opt/meego/ia32-bootstrap \
    --format=loop \
    --config=meego-core-ia32-1.2.0.ks \
    --cache=/opt/meego/repo-cache

    Once you have the loop image built, you can chroot into it:

    $> sudo mic-chroot meego-core-ia32.img

    While in the chroot, you can remove or update existing packages, and even add new ones. When you are done, just type $> exit to leave the chroot.

    Note: If you want to use zypper inside the chroot, ensure that you included ‘@MeeGo Base Development’ group of packages in your kickstart file.

    7. Convert loop images to LiveUSB images

    Once you have your loop image modified as you wanted, you can then convert it to a LiveUSB image so that it can be written to an external USB disk, as in the previous step. Converting between image types is done with the ‘mic-image-convertor‘ tool:

    $> sudo mic-image-convertor \
    --source-image=meego-core-ia32.img \
    --target-format=liveusb

    Additional notes

    • Be careful with mic-chroot.
    • The Meego Image Creation set of tools make a hard use of disk space under /var/tmp. If you (like me) usually don’t have much space left in your root partition, you’d better symlink that path to a partition without disk space worries.
    • I’ve found several times that when I try to build new images, the tools tell me that the packages downloaded in the cache are corrupted, and need to be re-downloaded. Just make sure you have a good connection :-)
    • Again, visit http://wiki.meego.com/Image_Creation if you want to have further details on these tools.

    by aleksander at September 01, 2011 05:21 PM

    August 29, 2011

    Christian Kellner

    Apple Filing Protocol (AFP) support for GVfs

    Last Thursday I merged the Apple Filing Protocol (AFP) backend for GVfs; so we finally have support for Apple shares too now. It has been written by Carl-Anton Ingmarsson and it was his Summer of Code 2011 project. It is on the master branch and thus will be in the next unstable release. Please test it and report bugs against the “afp backend” component.

    Carl-Anton did quite an impressive job – probably best depicted by the diffstat of the merge:

     client/Makefile.am            |    1
     client/afpuri.c               |  269 ++
     client/gdaemonvfs.c           |    2
     configure.ac                  |   31
     daemon/Makefile.am            |   45
     daemon/afp-browse.mount.in    |    8
     daemon/afp.mount.in           |    5
     daemon/gvfsafpconnection.c    | 1651 ++++++++++++++++
     daemon/gvfsafpconnection.h    |  420 ++++
     daemon/gvfsafpserver.c        | 1033 ++++++++++
     daemon/gvfsafpserver.h        |   85
     daemon/gvfsbackendafp.c       | 4292 +++++++++++++++++++++++++++++++++++++++++-
     daemon/gvfsbackendafp.h       |   23
     daemon/gvfsbackendafpbrowse.c |  608 +++++
     daemon/gvfsbackendafpbrowse.h |   47
     daemon/gvfsbackenddnssd.c     |    6
     daemon/gvfsjobsetattribute.h  |    1
     17 files changed, 8491 insertions(+), 36 deletions(-)

    by gicmo at August 29, 2011 11:00 AM

    August 22, 2011

    Kristian Rietveld

    Merged “treemodel-fix” branch into GTK+: call for testing, blog post series

    Over the last few months I have been working on a “treemodel-fix” branch, which I just merged into GTK+ as announced on gtk-devel-list. Two commits in February of this year touched the row-deleted handling of GtkTreeModelFilter and GtkTreeModel:row-deleted documentation (0c3da06 and f632956). When exactly GtkTreeModel:row-deleted should be emitted has always been a nasty inconsistency amongst models (I wrote about it in May 2007, which turned out to be wrong), so my interest was sparked into really trying to understand this inconsistency and how to fix it.

    This resulted in the “treemodel-fix” branch, which I could only start working on in May this year. After I finally solved the GtkTreeModel:row-deleted issue for real (details will be in my next blog post), I decided it would be good to also solve problems in another area which has never been 100% clear to me: reference counting GtkTreeModelSort and GtkTreeModelFilter. I brought these under unit test and fixed any issue I could find, which took much longer than I expected. And finally, after adding quite some unit tests, I now dared to review and apply a couple of GtkTreeModelSort/GtkTreeModelFilter patches which were waiting in Bugzilla.

    The code is now in the master branch and will end up in GTK+ 3.2. For heavy users of GtkTreeModelSort/Filter, this would be a good time to test your code against GTK+ from master and report any regressions you may encounter. If things look good, I will consider merging the branch in GTK+ 2.24 as well in 1 to 2 months from now.

    It has been 9 years since I first started working on GtkTreeModelSort and GtkTreeModelFilter. Finally having the feeling that you fully understand what is going in these pieces of code is an interesting one after so many years ;) To make sure this knowledge does not get lost, I wrote extensive documentation containing most of what I’ve learned in the last months, which has been committed as part of the branch (see files gtktreemodel.c, gtktreemodelfilter.c, gtktreemodelsort.c). I will also run a series of blog posts on the matter, covering:

    • The real story behind GtkTreeModel::row-deleted
    • Reference counting in GtkTreeModel
    • Improved performance in GtkTreeModelSort and GtkTreeModelFilter
    • Limitations on visible functions in GtkTreeModelFilter

    by kris at August 22, 2011 08:16 PM

    August 01, 2011

    Christian Dywan

    Cleanup, Adblock speed-ups and crash dialog love

    Time for a major release. The leading motto is cleanup and as we jump to Midori 0.4.0 we increase minimum requirements to WebKitGTK+ 1.1.17 and Vala 0.10 (Vala used to be optional). This allows us to say goodbye to several portions of backwards-comaptibility code. Anybody who has some familiarity with the code knows Midori used to try very hard to run on older systems, some may say too hard. Midori 0.3.6 will remain available for anyone who can't upgrade yet. This benefits users insofar as more time is available for new features instead of looking at old code.

    Adblock is making another big step forward. URL cache, a faster JS generator (some ads are removed via dynamic javascript code), inline parsing (10% speed-up), empty lines are skipped and subdocument rules are ignored now. Big kudos goes to Alex Butenko aka avb!

    The crash dialog received the love it deserved, you can now choose whether to discard, load or delay the last open tabs analogous to the usual startup preference. So if Midori crashed and you don't think it will happen again, just proceed as usual.

    Many people don't know about a nitfy feature in Midori, which is going Forward to the next page. From now on you can hit Space at the bottom of a page to go to the next page, just like in a mail client. Note that this depends on the page. Pages with links labelled "Next" or similar will be recognized. Ideally ‘rel="next"’ is used in the HTML so Midori knows what the next page is. Try it on your favourite forum, mailing list archive or search engine (unless you are using DuckDuckGo which seemlessly loads as you scroll).

    A long-awaited improvement is that looking at source code or saving files no longer re-loads the same file. Unity users will welcome the addition of Quicklist items for opening tabs and windows.

    'Last open tabs' is now an item in the Clear Private Data dialog.

    Midori 0.3.6 added support for Backspace and F5 (Back/ Reload). Shift+Backspace and Ctrl+= are now also supported.

    Midori 0.3.6 introduced geo URI support, for example geo:50.75504,7.07751 . There was a crash related to invalid URIs and this is now fixed.

    So download midori v0.4.0 (892 kB) (MD5) (ChangeLog) already!

    Update:
    Copying and pasting on Windows is fixed and the Inspector is usable again. Unfortunately Video support was punted due to glitches with the latest libSoup (HTTP networking libary). Thanks to Paweł Forysiuk for his efforts on preparing and testing Win32 builds!

    Windows users are welcome to join #midori on irc.freenode.net and give some feedback, we can use help testing pre-releases on Windows.

    Midori Win32 Archive v0.4.0 (13.3 MB)
    Midori Win32 Installer v0.4.0 (14.3 MB)

    by Christian Dywan (nospam@example.com) at August 01, 2011 11:32 PM

    July 28, 2011

    Martyn Russell

    Tracker extensions for Firefox & Thunderbird

    Recently Adrien Bustany blogged about the Firefox extension for Tracker and has yet to blog about his Thunderbird extension work.

    As you would expect, the Firefox extension syncs bookmarks to Tracker (in that direction only for now) and the Thunderbird extension sends email to Tracker to be indexed (even full text content of emails which our Evolution miner doesn’t do because of the system stress it causes). This is really quite superb work from Adrien and tracker-needle already supports bookmarks and emails so it all just works after a make install (into the $prefix where Firefox/Thunderbird are installed). Currently the Thunderbird extension requires version >= 5.0 (works with betas too), and the Firefox extension requires version >= 4.0 (and supports 5.0).

    These works have been imported using a pretty cool tool after I felt more comfortable using that to import Adrien’s subtrees into Tracker’s git repository. I did read up on the coolest merge ever from Linus but it felt more like a hack to me to do it that way. Still, I guess Linus knows what he is doing :)

    So now we have both plugins imported with full history into git. The thunderbird branch was merged to master today and the firefox branch will be merged this week hopefully pending Adrien’s review. Great stuff!

    by mr at July 28, 2011 06:39 PM

    July 21, 2011

    Aleksander Morgado

    Unaccenting words, or at least trying to…

    So today I found that Tracker in MeeGo packaging was still depending on libunac, while it shouldn’t. And that has reminded me that I had a blog post still unfinished about why and how we removed the libunac dependency in Tracker… so here it goes :-)

    One of the features supported in Tracker is doing FTS searches for words without considering ‘accents’. Of course, we’re not talking about accent as in the specific pronunciation of words relative to a location or nation. Our ‘unaccenting’ mechanism, as we call it, refers to the process of removing combining diacritical marks from characters, so that users can look for words with or without these marks. Therefore, this ‘unaccenting’ applies not only to diacritics in Latin alphabets, but also to other alphabets like Arabic, Greek, Hebrew or Korean which also have special combining diacritical marks.

    In the previous 0.8 stable series of Tracker, the unaccenting mechanism was completely done by the ‘unac’ library. We were not really convinced that unac was a good option in our case, as it involved extra conversions from UTF-8 to UTF-16 and back, and measurements showed that it was one of the most time consuming steps during FTS parsing. In order to improve the situation, and as we already did ourselves some Unicode normalization work before passing the work to unac, we ended up writing our own unaccenting mechanism in Tracker for 0.10.

    The method is applied to all our three Unicode-support backends (GNU libunistring, ICU and GLib), and roughly involves just two steps:

    • Apply a compatibility decomposition to the word (NFKD normalization).
    • Remove all combining diacritical marks, this is, all Unicode points within the following ranges:
      • Basic range: [U+0300,U+036F]
      • Supplement: [U+1DC0,U+1DFF]
      • For Symbols: [U+20D0,U+20FF]
      • Half marks: [U+FE20,U+FE2F]

    Instead of NFKD, NFD decomposition can also be used in the method, but as the main purpose of the unaccenting is a Full Text Search in Tracker, compatibility of Unicode points is also a desired feature which we could get in the same step.

    Looking at an example may explain it easier. Consider the French word “école”, which has a diacritic on top of the first ‘e’ character. This accented ‘e’ character can be encoded in UTF-8 in either a composed or decomposed way:

    • (NFC, composed) [0xC3 0xA9] 0×63 0x6F 0x6C 0×65
    • (NFD, decomposed) 0×65 [0xCC 0x81] 0×63 0x6F 0x6C 0×65

    The UTF-8 encoding of the composed way (NFC or NFKC) will (probably) always need less bytes than the decomposed (NFD or NFKD) counterpart. This is because the accented ‘e’ character will be represented in composed way as a single Unicode point: ‘é’ U+00E9 (UTF-8: [0xC3 0xA9]). In the decomposed way, the same accented ‘e’ character is represented as a base character ‘e’ U+0065 (UTF-8: 0×65) plus a combining mark ‘ ́ ‘ U+0301 (UTF-8: [0xCC 0x81]).

    For either of the previous two representations of ‘école’, the removal of combining diacritical marks is as we have already described:

    • First, get the word NFKD-normalized (or NFD if point compatibility is not needed):
      • (NFC) [0xC3 0xA9] 0×63 0x6F 0x6C 0×65 —>
        (NFKD) 0×65 [0xCC 0x81] 0×63 0x6F 0x6C 0×65
      • (NFD) 0×65 [0xCC 0x81] 0×63 0x6F 0x6C 0×65 —>
        (NFKD) 0×65 [0xCC 0x81] 0×63 0x6F 0x6C 0×65
    • Once we have the word decomposed, we can now just walk each unicode point found in the string, and remove those which end up falling into one of the ranges applicable to diacritics. In this case, only the accent on top of the ‘e’ character is found and removed: U+0301 (UTF-8: [0xCC 0x81]):
      • (NFKD) 0×65 [0xCC 0x81] 0×63 0x6F 0x6C 0×65 —>
        (unaccented) 0×65 0×63 0x6F 0x6C 0×65

    This new method not only worked perfectly in all the test cases we could think of, it was even much faster than using the unac library (up to 73% faster in the best case, and same speed in more complex cases).


    Filed under: Development, GNU Planet, Lanedo Planet, Planets Tagged: diacritics, normalization, tracker, unaccenting, unicode

    by aleksander at July 21, 2011 03:21 PM

    July 06, 2011

    Christian Dywan

    The June 2011 DistroWatch.com donation goes to Midori

    For me this was quite a pleasant surprise. For one, the occasional donation that comes in is around 5€ and rarely above. And further more, being voted to the top by users of DistroWatch.com shows how big the support from the community is. Right in line with great projects like AbiWord, GIMP, Geany, VLC, Archlinux and many, many others.

    http://distrowatch.com/weekly.php?issue=20110704#donation

    So here goes my thanks to all those who voted for Midori!

    Personally I have slowed down a little with Midori because my little side project is consuming a lot of time. So the planned big 0.4 release us unfortunately delayed and the speed dial revamp has yet to happen. Meanwhile Paweł and Alex are however ensuring a constant flow of improvements, rest assured.

    by Christian Dywan (nospam@example.com) at July 06, 2011 10:55 PM

    June 06, 2011

    Martyn Russell

    GTK+ website redesign finally finished!

    I have blogged about this from the official GTK+ blog too, but I wanted to really say personally how happy I am that this is done now. Really great work from Devin Samarin especially with the gtk-doc integration which looks like an extension of the main website instead of a separately maintained project.

    If anyone has any comments on how to improve the content, don’t hesitate to get in touch with me, Devin Samarin or Javier Jardón (who also has been helping out on the website side more recently).

    by mr at June 06, 2011 10:07 AM

    May 28, 2011

    Carlos Garnacho

    Introducing Cossa, a GTK+ theme previewer for gedit

    Earlier today I’ve pushed gedit-cossa, a plugin for gedit to help writing CSS for GTK+ themes, it is able to display a number of samples, loaded from GtkBuilder files.

    Here’s a video demonstrating how it works:

    Cossa is still in pretty early development stages, immediate plans include:

    • Hooking CSS parsing errors to the gedit view
    • Adding a lot more samples, these should range from simple examples (basic widgets in different states) to complex (basic main window sample, preferences dialogs, …)

    Anyone is welcome to help, specially in the second point, as it is fairly straightforward to add new samples.

    by carlosg at May 28, 2011 11:05 AM

    May 15, 2011

    Christian Dywan

    Fixed crashers, faster JSON-import and fewer allocations

    This is a bugfix release, peppered with a few minor goodies as usual. There were issues with importing the older speed dial configuration at startup on some systems, and crashes when using the address completion. An issue with icon sizes in error pages as well as handling of https URLs in Adblock were also resolved.

    win_xp-t.png

    Motivated by confusion of users of Adblock, URIs in Adblock, when adding bookmarks and when changing the homepage are now validated visually.
    Backspace and F5 now serve as Back and Reload accordingly to cater for strong habits of some users and making the experience of casual users a bit smoother.

    Now for the bonus, geo URI support, which is a fairly new standard for URIs such as

    geo:50.75504,7.07751

    which you can open in Midori to have it show a map of the location as of now. This blog unfortunately doesn't allow me to insert geo: links, so you have to copy the address to the location and hit Enter to open it. There used to be extensions to support this in Firefox and Chrome, both of which unfortunately haven't been maintained recently. Midori can also serve as a system-wide handler of the geo: scheme on Unix systems (GLib >= 2.28).

    As a reminder, the user agent strings changed with Midori 0.3.5 and if you used to pretend that you're browsing with Safari or Firefox, try going back to identifying as Midori. Typical issues such as Facebook and other websites mistaking Midori for a mobile phone browser or Google hiding interface tweaks have been addressed with this change.

    So download midori v0.3.6 (883 kB) (MD5) (ChangeLog) already!

    Any Windows users are very welcome to join #midori on irc.freenode.net and give some feedback on how Midori works for them. We can also use help testing pre-releases to sort out rendering glitches.

    Midori Win32 Archive v0.3.6 (11 MB)
    Midori Win32 Installer v0.3.6 (12 MB)

    by Christian Dywan (nospam@example.com) at May 15, 2011 11:23 PM

    May 12, 2011

    Tim Janik

    Wikihtml2man Introduction (aka html2man, aka wiki2man)

    Wiki↠HTML↠Man

     

    What’s this?
    Wikihtml2man is an easy to use converter that parses HTML sources, normally originating from a Mediawiki page, and generates Unix Manual Page sources based on it (also referred to as html2man or wiki2man converter). It allows developing project documentation online, e.g. by collaborating in a wiki. It is released as free software under the GNU GPLv3. Technical details are given in its manual page: Wikihtml2man.1.

    Why move documentation online?
    Google turns up a few alternative implementations, but none seem to be designed as a general purpose tool. With the ubiquituous presence of wikis on the web these days and the ease of content authoring they provide, we’ve decided to move manual page authoring online for the Beast project. Using Mediawiki, manual pages turn out to be very easily created in a wiki, all that’s then needed is a backend tool that can generate Manual Page sources from a wiki page. Wikihtml2man provides this functionality based on the HTML generated from wiki pages, it can convert a prerendered HTML file or download the wiki page from a specific URL. HTML has been choosen as input format to support arbitrary wiki features like page inclusion or macro expansion and to potentially allow page generation from other wikis than MediaWiki. Since wikihtml2man is based purely on HTML input, it is of course also possible to write the Manual Page in raw HTML, using tags such as h1, strong, dt, dd, li, etc, but that’s really much less convenient to use than a regular wiki engine.

    What are the benefits?
    For Beast, the benefits of moving some project documentation into an online wiki are:

    • We increase editability by lifting review requirements.
    • We are getting quicker edit/view turnarounds, e.g. through use of page preview functionality in wikis.
    • We allow assimilation of user contributions from non-programmers for our documentation.
    • Easier editability may lead to richer documentation and possibly better/frequently updated documentation.
    • Other projects also seem to make good progress by opening up some development parts to online web interfaces, like: Pootle translations, Transifex translations or PHP.net User Notes.

    What are the downsides?
    We have only recently moved our pages online and still need to gather some experience with the process. So far possible downsides we see are:

    • Sources and documentation can more easily get out of sync if they don’t reside in the same tree. We hope to be mitigating this by increasing documentation update frequencies.
    • Confusion about revision synchronization, with the source code using a different versioning system than the online wiki. We are currently pondering automated re-integration into the tree to counteract this problem.

    How to use it?
    Here’s wikihtml2man in action, converting its own manual page and rendering it through man(1):

      wikihtml2man.py http://testbit.eu/Wikihtml2man.1?action=render | man -l -

    Where to get it?
    Release tarballs shipping wikihtml2man are kept here: http://dist.testbit.eu/testbit-tools/.
    Our Tools page contains more details about the release tarballs.

    Have feedback or questions?
    If you can put wikihtml2man to good use, have problems running it or other ideas about it, feel free to drop me a line about it. Alternatively you can also add your feedback and any feature requests to the Feature Requests page (a forum will be created if there’s any actual demand).

    What’s related?
    We would also like to hear from other people involved in projects that are using/considering wikis to build production documentation online (e.g. in manners similar to Wikipedia). So please leave a comment and tell us about it if you do something similar.

    See Also

    1. New Beast Website – using html2wiki
    2. The Beast Documentation Quest – looking into documentation choices

    flattr this!

    by timj at May 12, 2011 11:49 PM

    May 09, 2011

    Tim Janik

    Attending LinuxTag 2011

    Multitasking Mind

     

    Like every year, I am driving to Berlin this week to attend LinuxTag 2011 to attend the excellent program. If you want to meet up and chat about projects, technologies, Free Software or other things, send me an email or leave a comment with this post and we will arrange for it.

    flattr this!

    by timj at May 09, 2011 12:29 PM

    April 17, 2011

    Kristian Rietveld

    CoreText backend now in Pango master

    A few days ago I merged the first part of the CoreText backend into Pango’s master branch, after bitrotting on my disk for a full year (apologies for that). The upside is that it also got a year of testing on my machine :) The CoreText backend is enabled by default on machines running Mac OS X 10.5 or higher and used instead of the older ATSUI backend. Because the older ATSUI API has been deprecated since Mac OS X 10.5, and more importantly because the ATSUI API is not fully available in 64-bit mode on Mac OS X 10.6, we were in need of this CoreText backend. When using GTK+ on Mac OS X 10.4, nothing changes, since CoreText is not (publicly) available on these systems.

    So far, the CoreText backend was mostly based on the existing ATSUI code, so it should be working nicely for most people. If not, you are welcome to file bugs in the new coretext component in the Pango module in GNOME bugzilla.

    There is one missing piece and that is also where the CoreText backend’s structure is going to deviate from the ATSUI backend. The ATSUI backend has never been really good at handling font fallbacks and fonts for non-Latin languages (see 608929). This is one of the things I want to get right in the CoreText backend and will be the second part of this project. I do have some things in place in a local branch on my disk, but it is not working yet as it should. Hopefully, I can find some spare time in the coming months to finish this. Progress can be tracked in bug 647969.

    Though up first is a context switch back to GTK+ to review and fix a couple of things around GtkTreeModelFilter, GtkTreeModel’s row-deleted signal and to further extend the unit tests in this area.

    by kris at April 17, 2011 11:14 AM

    April 09, 2011

    Tim Janik

    BEAST v0.7.4 released

    BEAST/BSE version 0.7.4 is available for download at:

    BEAST is a music composition and modular synthesis application released as free software under the GNU LGPL that runs under Unix. Refer to the About page for more details.

    The 0.7.4 release integrates the bse-alsa package, several speedups, important bug fixes and translation updates.

    Please feel free to provide useful feedback or contribute on IRC, the mailing list and in the Wiki.

    TRANSLATORS: Please help us to improve the BEAST translation, just download the tarball, edit po/.po and email it to us or submit translations directly via the Beast page at Transifex.

    Overview of Changes in BEAST/BSE 0.7.4:

    • Renamed the project to Better Audio System / Better Sound Engine
    • Moved project website to: http://beast.testbit.eu/
    • Various build system fixes [stw,timj]
    • License fixups for some scripts [stw]
    • Fixed subnormal tests on AMD64 if SSE unit is in DAZ mode [stw]
    • Replaced slow resampler checks with a much faster resampling test [stw]
    • Performance improvements for various tests [stw]
    • GLib 2.28 unit test porting [stw]
    • Speed improvements for record field name [stw]
    • Fixed XRUNs in ALSA driver on 64bit systems [timj]
    • Added beast.doap [Jonh Wendell]
    • PO handling improvements.
    • Updated German translation.
    • Updated Norwegian bokmål translation [Kjartan Maraas]
    • Added e-Telugu translation [Veeven]

    flattr this!

    by timj at April 09, 2011 01:50 AM

    March 31, 2011

    Tim Janik

    Human Multitasking

    Multitasking Mind

    (Image: Salvatore Vuono)

     

    The self deceiving assumption of effective human multitasking.

     

    People are often telling me they are good at multitasking, i.e. handling multiple things at once and performing well at doing so. Now, the human brain can only make a single conscious decision at a time. To understand this, we need to consider that making a conscious decision requires attention, and the very concept of attention means activating relevant information contexts for an observation or decision making and inhibiting other irrelevant information.

    The suppression involved in attention control makes it harder for us to continue with a previously executed task, this is why interruptions affect our work flows badly, such as an incoming call, SMS or a door bell. Even just making a decision on whether to take a call already requires attention diversion.

    Related, processing emails or surfing while talking to someone on the phone results in bad performance on both tasks, because the attention required for each, necessarily suppresses resources needed by the second task. Now some actions don’t suffer from this competition, we can walk and breathe or balance ourselves fine while paying full attention to a conversation. That’s because we have learned early on in our lives to automate these seemingly mundane tasks, so they don’t require our conscious attention at this point.

    Studies [1] [2] have shown time and again, that working on a single task in isolation yields vastly better results and in a shorter time frame when frequent context switches are avoided. This can be further optimized by training in concentration techniques, such as breath meditation, autogenic training or muscle relaxation.

    Here’s a number of tips that will help to put these findings to practical use:

    1. Let go of the idea of permanent reachability, nothing is so urgent that it cannot wait the extra hour to be handled efficiently.
    2. Make up your own mind about when to process emails, SMS, IM, news, voice messages.
    3. Start growing a habit of processing things in batches, e.g. walk through a list of needed phone calls in succession, compose related replies in batches, first queue and later process multiple pending reviews at once, queue research tasks and walk through them in a separate browsing session, etc.
    4. Enforce non-availability periods where you cannot be interrupted and may concentrate on tasks of your choice for an extended period.
    5. Schedule phone meetings in advance, ensure everyone has an agenda at hand for the meeting to avoid distractions (Don’t Call Me, I Won’t Call You).
    6. Deliberately schedule relaxation phases, e.g. take a 5 minute break off the screen per hour, ideally moving and walking around; rest breaks are needed after 90 minutes at latest.

    flattr this!

    by timj at March 31, 2011 01:11 AM

    March 29, 2011

    Christian Kellner

    Google Summer of Code 2011

    Google Summer of Code 2011International Neuroinformatics Coordinating Facility
    Just a quick reminder: The student application period for the Google Summer of Code 2011 has opened as of yesterday (Monday, the 28th of March). Apply now! The starting point for Gnome is here; it has all the relevant information.

    In addition to that, if you are happen to be interested in Neuroscience and Informatics the International Neuroinformatics Coordinating Facility (INCF) also got accepted as a organization (Thanks Raphael!). Among other very interesting project ideas there are also two proposals that are Gnome related (as in pygtk based applications). If you have a cool Neuroinformatics+Gnome based idea be sure to apply at the INCF. The starting point is here.

    by gicmo at March 29, 2011 11:47 AM

    March 12, 2011

    Carlos Garnacho

    Multifoobar

    Along the last days/weeks, I’ve gave myself the oportunity to tinker with XInput 2.1 in GTK+, now that the core concept of the involved changes seem settled (although corner cases are still being discussed).

    Thanks to the previous port to XInput 2.0, handling multitouch events has been fairly easy, by enabling GDK_TOUCH_MASK events on your widget you can receive GDK_TOUCH_PRESS/MOTION/RELEASE events containing a touch ID, which is unique at that time for a touch event stream, so enabling that you can effectively receive events from simultaneous touches.

    In addition, one can create GdkTouchClusters (related to a GdkWindow) and add touch IDs to it. from that point on, any update on these touch IDs stops sending individual GDK_TOUCH_MOTION events, instead sending GdkEventMultiTouch events, containing all latest events for the touch IDs in a GdkTouchCluster.

    I’m pretty happy with the resulting API, althought there are some internal details left to improve, my main gripe currently is that implicit grabs in CSW still happen per device, this means no multi-widget multitouch yet within an app (also posing interesting problems with keyboard events redirection and explicit grabs). Another big item is looking into integrating this with gestures, as direct manipulation and gesturing need to go hand in hand, so that branch could be discontinued in favor of this one.

    As I’m pretty lazy, and the results would be strikingly similar to what I previously posted, I won’t post any video, so you’ll have to settle for a screenshot:

    This is sitting now in the xi21 branch. If you just compile this you won’t see much working though, the demo only reacts to touch events, which are only sent if XInput 2.1 is there, which requires compiling certain Xorg modules branches, and having a multitouch device at hand.

    by carlosg at March 12, 2011 03:05 PM

    February 28, 2011

    Tim Janik

    Lanedo at CeBIT 2011

    This week, our people are running the Lanedo booth at CeBIT in Hannover.

    CeBIT Logo

    Everybody is invited to come and visit us in hall 2, booth D44/124, in the open source park. We will give introductions to our services, talk about current and future developments around GTK+ and Tracker and anything you want to approach us with.

    by timj at February 28, 2011 08:04 PM

    January 17, 2011

    Carlos Garnacho

    updates updates

    Fixing the default GNOME3 theme

    Now that most of GTK+ widgets are using GtkStyleContext, I finally got onto improving the default gnome3 theme/engine, I finally chose to rip off the tiny clearlooks engine bits I needed to demonstrate how minimal engines can complement and extend the current CSS theming features. So things are getting closer to the mockups:

    There are some things that still need to be improved, column headers and expanders most namely, but things should be mostly there pretty quickly. Even though, hands and eyes are most welcome on both the CSS file and the engine.

    A gestures interpreter for GTK+
    Despite what some might think, my day to day work carries me quite far from theming land, during the last week I got the oportunity to start development on a gestures interpreter for GTK+, a pretty interesting (read: wacky :) ) piece of dynamic programming, that seems to work pretty well for its builtin gestures (Video here, at the moment it handles swiping in the 4 directions, plus circular swipe in both directions)

    This code lives at the moment in a GTK+ branch, including a testcase. The gestures interpreter at the moment handles individual pointer movements separatedly, although it may be improved over time to handle multiple input pointers, as the interpreter itself is private and widgets just get an enum for the gesture type.

    As the stock gestures could be stored in terms of coordinates or vectors, future plans include having these stored in a mmap()-able format, plus having an editor to create new gestures.

    by carlosg at January 17, 2011 11:16 AM

    December 29, 2010

    Kristian Rietveld

    GDK 3.0 on Mac OS X

    In the GTK+ 3.0 branch, GDK saw quite some changes recently. Firstly, a last part of Benjamin Otte’s rendering-cleanup was merged, which removes GdkDrawable. Now that GdkPixmap and GdkImage were already removed before (in favor of using their Cairo counterparts), there’s no need to abstract these away behind a GdkDrawable. Only GdkWindow is left to deal with basically.

    The other large refactoring is the “GDK backend” branch that was recently merged. Before, you could only select a single backend at compile time, resulting in a libgdk-<platform> and libgtk-<platform>. GDK has now been refactored to properly separate the backends from the generic “core” GDK code. It is now possible to compile multiple backends into the GDK library. Perhaps in the future loadable backends will be possible as well. This work is in particular interesting for linking in both the X11 and Quartz backends on Mac OS X (for testing, comparing and debugging), and X11 and the upcoming Wayland backend on Linux. I am pretty eager to try a both X11 and Quartz enabled GDK on Mac OS X, but still some work is left to do sorting out the platform-specific code in libgtk. But once that is done, it should be possible, the GDK part is already done.

    All in all, I am pretty excited about all the attention GDK has received in the last months after being neglected for a long time. In GTK+ 3.0, GDK is much easier to port to other platforms than it was before. I hope a trend has been set and GDK will be further simplified in the future.

    I have tried my best to keep the OS X backend up to date over all these changes and refactorings. It seems to be working fine, so it is in shape for GTK+ 3.0. Let’s say it is at least as good as the last GTK+ 2.x releases, maybe even better.

    I really hope we are done with refactoring for a while now, so I can focus again on reviewing and implementing missing features in the backend :).

    by kris at December 29, 2010 05:06 PM

    December 06, 2010

    Carlos Garnacho

    gtk-style-context landed in GTK+ master

    For those building gnome3 frequently from git or paying attention to gtk-devel, this might be old news, but still worth mentioning… The gtk-style-context branch has landed in GTK+ master, which will quickly unveil a powerful theming system, powered by CSS files.

    Boring by default, yet versatile

    Although some apps (mostly these implementing widgets themselves) might undergo some work to adapt to this, there are API docs and migration documents (mostly courtesy of Matthias, who’s done an excellent work) that should ease the task.

    Besides the GTK+ work, there is also both a gnome3 theme and engine using the new stuff. Things are still ongoing here, as many things can be leveraged into CSS, which would leave the engine very little things to do. Andreas started looking at some point into the branch, so he might have some things ready in that field :) .

    But not only that! Carlos Garcia Campos (KaL) has been doing good progress on webkit-gtk so no backing widgets creation is needed, and Paolo Borelli has ported GtkSourceView as well, awesome!

    by carlosg at December 06, 2010 09:39 PM

    October 25, 2010

    Michael Natterer

    GIMP on GTK+ 3.0

    GIMP on GTK+ 3.0

    At the GTK+ Hackfest in A Coruña I managed to get GIMP almost completely (minus one dialog and most plug-ins) running on GTK+ 3.0.

    This turned out to be a great tool for finding bugs in the new GTK+. In fact, I found quite a few of them while still completing the port. Some bugs I fixed right away, others were fixed by fellow Hackfest hackers. Even while writing this post (the image was of course cropped with the ported GIMP), two more popped up and will eventually be fixed.

    by Mitch at October 25, 2010 09:34 PM

    Carlos Garnacho

    GTK+ Hackfest sum up

    On this weekend I’ve returned from the GTK+ Hackfest in A Coruña. All in all, it’s been a really intensive event, so much that apparently many of us have been to exhausted to blog :P , there have been lots of ideas and interesting topics to discuss about, and lots of goodness have landed in git (GPeriodic, GtkGrid, input/output windows removal, GdkRGBA, …). Most importantly, a roadmap is taking shape!

    Personally, I’ve been working during the past week on the gtk-style-context branch, adding some missing features and improving how things render in general. In that branch, you could see something somewhat boring, as we are accustomed to:

    But then with this CSS in ~/.gtk-2.0.css:

    .background {
        background-color: rgba (0.2, 0.2, 0.2, 0.9);
    }
    
    .button {
        border-radius: 5;
        border-width: 1;
        background-image: -gtk-gradient (linear, left top, left bottom,
                                         from (shade (@bg_color, 1.3)),
                                         color-stop (0.55, shade (@bg_color, 1.1)),
                                         color-stop (0.55, shade (@bg_color, 0.9)),
                                         to (@bg_color));
    }
    
    GtkButton:hover {
        background-image: -gtk-gradient (linear, left top, left bottom,
                                         from (shade (@selected_bg_color, 1.3)),
                                         color-stop (0.5, shade (@selected_bg_color, 1.1)),
                                         color-stop (0.5, shade (@selected_bg_color, 0.7)),
                                         to (@selected_bg_color));
        transition: 200ms ease-in-out;
    }
    
    GtkBox > GtkBox > GtkButton {
        background-image: -gtk-gradient (linear, left top, left bottom,
                                         from (shade (rgba (0.2, 0.2, 0.2, 0.8), 1.3)),
                                         color-stop (0.55, rgba (0.4, 0.2, 0.2, 0.8)),
                                         color-stop (0.55, rgba (0.6, 0.2, 0.2, 0.8)),
                                         to (rgba (0.3, 0.3, 0.3, 0.8)));
    }
    
    GtkScrolledWindow {
        background-color: rgba (0.3, 0.3, 0.3, 0.7);
    }
    
    .trough,
    .slider {
        border-radius: 3;
        border-width: 1;
    }
    
    GtkBox > GtkLabel {
        font: Sans 15;
        foreground-color: #f00;
    }
    

    Turns into something uglier yet exotic (note:provided the GtkWindow has an RGBA visual, I’ll leave that as an exercise for the reader):

    by carlosg at October 25, 2010 01:33 PM

    July 17, 2010

    Christian Kellner

    Back online

    After being down for a while the blog is now back online. The server moved – as I did – to Munich. EOM for now – more real news later …

    by gicmo at July 17, 2010 10:00 PM

    May 12, 2009

    Christian Kellner

    Das Versagen der Regierung …

    … continued:

    “In Deutschland ist nicht nur die Steuerbelastung so hoch wie in kaum einem anderen Industrieland, die Steuern und Abgaben sind auch noch besonders ungerecht verteilt. [...] Der DGB fordert, die wirtschaftlich Leistungsfähigen über die Anhebung des Spitzensteuersatzes und Wiedereinführung der Vermögenssteuer stärker zur Kasse zu bitten. [...] Die Union weist die Forderungen zurück. “Für mich ergibt sich kein Handlungsbedarf”, sagte CDU-Sozialpolitiker Ralf Brauksiepe.” (ZEIT Online)

    Vermögende besteuern? Also das geht offenbar gar nicht. Aber halt: Das C in CDU steht doch immer noch für christlich, oder? Sein Hab und Gut den Armen geben – war da nicht was, Herr Sozialpolitiker? Ach quatsch, alles gerecht so wie es ist; auch dass Doppelverdiener mehr Abgaben zahlen. Oder? “Selbstverständlich”, meint Herr Brauskiepe (ebd.).
    “Ökonomen teilen diese Meinung nicht.” – Pah. Experten. Was wissen die schon. Und überhaupt: Die vom Familienministerium kümmern sich ja auch nicht um die. – “Die deutschen Sozialsysteme seien nach wie vor auf die vierköpfige Standardfamilie mit zwei Kindern und einem Alleinverdiener.” (ebd.) Aha! Wer hätte das gedacht. Wer nicht ins verstaubte Weltbild passt ist eh selber schuld und zahlt deswegen auch mehr; und womöglich Atheist, Agnostiker oder Schlimmeres. Christlich ist man halt nur unter sich. Doppel-Moral war ja noch nie ein Problem.
    Außerdem hat die Regierung ja gerade auch viel, viel Wichtigeres zu tun; nämlich Medien zensieren und verbieten, dass Leute mit Farbkugeln in der Gegend rumschießen. Viel, viel wichtiger.

    by gicmo at May 12, 2009 06:06 PM

    Lobby-Arbeit mit Kindern

    Die Deutsche Kinderhilfe plant eine offline Unterschriftenaktion für die Online-Zensur. Ja, wir erinnern uns, genau die Organisation, die “Unklarheiten bei Finanzstrukturen” und “enge Verbindungen zu einem Unternehmen” hat. Die WELT Online berichtete. Im krassen Gegensatz dazu sind Missbrauchsopfer selbst offenbar eher dagegen: “Missbrauchsopfer gegen Internetsperren” (MOGIS) und Trotz Allem e.V. (offener Brief). Es drängt sich sehr stark der Verdacht auf, dass die Deutsche Kinderhilfe nicht Lobby-Arbeit für Kinder macht, sondern mit.

    Symptome behandeln anstatt Ursachen, und dabei getrieben von der Angst vor Neuem. Am besten noch ohne Sachverstand. Und bei jedem zweiten Gesetz muss das Grundgesetz geändert werden.

    by gicmo at May 12, 2009 03:50 PM

    April 26, 2009

    Christian Kellner

    Piraten und Strukturwandel

    “Die Preise für derzeit erhältliche elektronische Bücher stimmen skeptisch. Sie liegen nur knapp, bei Hardcovern ein oder zwei Euro, unterm Ladenpreis für gedruckte Bände. Dabei wären heutige 20-Euro-Bücher in digitaler Form mit zehn Euro gut bezahlt, auch wenn den Autoren (und ihren Agenturen) deutlich mehr als die zurzeit üblichen zwei bis zweieinhalb Euro blieben. Doch obwohl alle Druck- und Vertriebskosten inklusive Verpackung, Transport sowie die in dieser Kette enthaltenen Löhne und Einnahmen und überdies der Buchhändlerrabatt von 40 bis 45 Prozent entfallen, erhalten die Urheber von dem kräftigen Zugewinn keinen Cent.” (ZEIT online – Es war einmal)

    Genau *dies* ist meiner Meinung nach die Wurzel warum die grossen Entertainment-, oh ich bitte um Entschuldigung, Kultur-Industrien so unglaubwürdig geworden sind und die Leute nicht bereit sind 12,90 € für ein (kopiergeschütztes) “Download-Album” auszugeben, das sich praktisch in nichts, i.e. Kosten(!), Lieferumfang, von der “echten” CD unterscheidet. Oder $25 für einen wissenschaftlichen Artikel in PDF-From? Ganz zu schweigen von Filmen, für die man im Kino schon 10€ bezahlt hat, und die deswegen sowieso Millionen-Gewinn eingespielt haben; man schaue sich nur kurz die Preise im neuen Apple Store Movies an. Das soll man nicht für überholte und unverhältnismäßige Gier halten?
    Wenigstens das mit dem Kopierschutz ändert sich (bei Musik) langsam. Wenn auch nicht ganz freiwillig.

    Umso lächerlicher erscheint es wegen all dem, wenn man den Protektionismus der Alten und die Angst vor Neuem  auch noch als Niedergang der Kultur zeichnet. Zum Beispiel hier von Frau Gaschke. Ich empfehle die Kommentare zu diesem Artikel. Diese sind weitaus besser als der Artikel selbst  (irgendwie passend).

    Und vor allem geht es doch um Inhalte. Und natürlich sollen die eigentlich Kunstschaffenden für ihre Arbeit fair entlohnt werden; aber sicher nicht auf die gleiche Art und Weise wie es vor dem “Digitalen Zeitalter” war. Tja, Zeiten ändern sich nunmal und wer sich nicht anpassen will gehört halt irgendwann zu den Dinosauriern … hoffentlich. Salus populi est suprema lex:

    “Freie Lektüre als Teil des Grundrechts auf Bildung – und als Erfolgsmodell moderner Wissensgesellschaften. Open Access wäre nicht der Untergang des Abendlandes. Im Gegenteil.” (ZEIT online – Es war einmal)

    by gicmo at April 26, 2009 09:34 AM

    April 04, 2008

    Michael Natterer

    Using the Mac OS X Menubar

    Finally, after quite some debugging (of the very same bug for months), I committed preliminary support for the global Mac OS X menubar to GIMP trunk.

    It’s the result of a project I’ve been involved with at Imendio. Check the project page.

    For seeing the coolness without compiling yourself, check the video.

    by Mitch at April 04, 2008 09:46 AM