Michal Čihař - Archives

Enca 1.15

Enca 1.15 has been just released. It does not bring any new features, just a little of cleanup and officially moves it's code to GitHub.

If you don't know Enca, it is an Extremely Naive Charset Analyser. It detects character set and encoding of text files and can also convert them to other encodings using either a built-in converter or external libraries and tools like libiconv, librecode, or cstocs.

Full list of changes for 1.15 release:

  • Documentation improvement
  • Development moved to GitHub
  • Do not use deprecated autoconf macros

Still enca is in maintenance mode only and I have no intentions to write new features. However there is no limitation to other contributors :-).

You can download from http://cihar.com/software/enca/.

Spring in Bohemian-Moravian Highlands

After quite some delay, I got to selecting some photos for my gallery. In spring, we've spend few days in Bohemian-Moravian Highlands with Pentax Friends.

On the program there was of course taking some pictures and drinking beer or wine :-).

You can find some small but nice waterfalls:

In villages, there live wild animals:

As the weather was not really nice, we had nice opportunity to shoot some pictures in fog:

And last but not least, we've spent almost whole day taking pictures in Pilgrimage Church of Saint John of Nepomuk:

The trip was really nice, though we could use better weather as most of the morning there were really no nice conditions for taking pictures.

Weblate free hosting

The amount of projects using Hosted Weblate grows every month so it seems like there is quite interest in that. This growth will however bring some challenges in the future.

Currently everything is managed by myself and that really does not scale well. There should be some automation in the process of adding new projects and there should be more control given to project admins, so that they can change some things on them own. This is quite some coding, but there is another Hackweek on the way, so my plan is to implement at least something in this area as well.

Other side is unsurprisingly money - even though I just got new hardware to run this service (which will be hopefully deployed in a month or so), in the long term it might need other investments as well. That's why I've rewritten the donation page for Weblate and added some more options.

Most importantly the goal is now to get some regular income which would allow sustainable development of both Weblate and free hosting service. I think Gittip is great service for such goal, so let's see how it works.

Changes in phpMyAdmin support

As usual with our phpMyAdmin team meetings, quite a lot things get decided there and it was no difference this year, when we've met at DebConf 13.

We've discussed quite a lot of topics and some had quite interesting outcome.

One of already changes is that we're going to consolidate our support efforts on Stack Overflow. We've provided various support channels so far (IRC, mailing list, web forums and support tracker), which have overlapped quite a lot and we simply lack manpower to do all of that properly.

So users on IRC mostly get bored and left before somebody got to them. The mailing list received just few mails in a month, so they were almost not used. The web forums worked quite well for answering questions, but nobody was able to find answers there (the forums on SourceForge are quite hard to get properly indexed by Google), so the questions got repeated quite a lot. In the end we've decide to use Stack Overflow as it was anyway already used by lot of our users and concentrating our effort on single channel will even improve this.

DebConf day trip

Yesterday, we've spent nice day on a day trip of DebConf. I took the long hike, which ended up at Creux du Van, what is wonderful rocky place.

The way up was through nice nature and we've met quite a lot of cows on the way:

They we've finally arrived to Creux du Van:

Of course we could not miss an opportunity to take a group photo:

After wandering around the rocks, we took a lunch and headed to Neuchâtel, where some music festival was going on:

The whole day was nicely finished on a boat with a dinner.

PS: More DebConf photos are available in my gallery.

Good morning DebConf

Yesterday evening I've arrived at DebConf 13. I was quite tired after traveling so I just had few beers and went to bed.

The travel went quite well besides somebody else broke wine and my suitcase was all wet from it. Fortunately almost nothing got inside so I have some clean clothes for next week :-).

As I went to bed quite early, I woke up early as well so I went to short walk to see what is nearby:

Sunrise at Lake Neuchâtel Castle Vaumarcus Castle Vaumarcus

Roadmap for Weblate 1.7

Weblate 1.6 is already two weeks out without any regressions, so now it's time to think about features for 1.7.

I definitely want to improve support for monolingual translation formats as they currently suffer by various metadata issues (eg. checks not working correctly). This requires quite big change in underlying database, but I think it's quite manageable.

When talking about checks, I want to make them configurable per project as global configuration is quite limiting for shared sites like hosted Weblate.

I will definitely need to touch registration and authentication, either by supporting latest django-registration API or to move some other solution with support for federated login. Which of these approaches will be used depends on my time, what is always the most limiting factor.

This might sound as too few features, but I'd like to make releases more often, so that should fit into this plan. However if you want to push for some feature, you still have two days to fund something on Catincan!

Weblate 1.6 in SUSE Studio

Finally, Weblate 1.6 is available as ready to use appliance in SUSE Studio.

This took quite long as openSUSE 12.3 does not work as expected inside SUSE Studio and I was too lazy to find all necessary tweaks earlier. The same problem actually prevented from Weblate 1.5 being there at all.

The biggest obstacle was MySQL setup - after enabling "Set up MySQL" in studio, you end up with MySQL database with empty mysql.users table, which obviously can not authenticate anybody. As I've found out, the only way around is manual setup.

Once this was figured out, the appliance only needed minor tweaking and is now ready to use in SUSE Gallery in all formats used for virtualization.

Weblate 1.6

Weblate 1.6 has been released today. It comes with lot of improvements, especially adds voting for suggestions, improves import performance and brings more helpful admin interface. This is also first release with crowdfunded feature, but there are still some features to fund!

Full list of changes for 1.6:

  • Nicer error handling on registration.
  • Browsing of changes.
  • Fixed sorting of machine translation suggestions.
  • Improved support for MyMemory machine translation.
  • Added support for Amagama machine translation.
  • Various optimizations on frequently used pages.
  • Highlights searched phrase in search results.
  • Support for automatic fixups while saving the message.
  • Tracking of translation history and option to revert it.
  • Added support for Google Translate API.
  • Added support for managing SSH host keys.
  • Various form validation improvements.
  • Various quality checks improvements.
  • Performance improvements for import.
  • Added support for voting on suggestions.
  • Cleanup of admin interface.

You can find more information about Weblate on it's website, the code is hosted on Github. If you are curious how it looks, you can try it out on demo server. You can login there with demo account using demo password or register your own user. Ready to run appliances will be soon available in SUSE Studio Gallery.

Weblate is also being used https://l10n.cihar.com/ as official translating service for phpMyAdmin, Gammu, Weblate itself and others.

If you are free software project which would like to use Weblate, I'm happy to help you with set up or even host Weblate for you.

Speed improvements in Weblate

Yesterday, I've spent some time trying to improve speed of translation import in Weblate. It got annoyingly slow while adding new features and I felt there has to be some area for improvements even with all the features.

I was testing on development server with debug stuff enabled (what slows down things quite a lot already) and first import took about 30 seconds.

Quick look revealed that for linked repositories, the link lookup happens too often, so some caching could be used. This has saved about 3 seconds...

With offloaded indexing (what is anyway only useful setup for production use), every reindex request was checking whether there is already one before creating new one. In most cases there is none before, so it's simply faster to try to create one and ignore error in case it is already there. We're now 5 seconds faster.

Another big resource consumer are quality checks. They provide useful feedback to translators, but it means that quite a lot of code needs to be executed for every single string. First thing I've realized is that unit check state is recalculated everytime regardless the fact whether there was any change, what was easy to fix. The other speed issue is in consistency check - it does too complex SQL query, which usually does not match anything. Converting this to much simpler one (which will in most cases still have no results) improves performance for usual path while having minimal impact for the real checking. Another 4 seconds down on my test import.

Last thing which I changed is way how per translation statistics are updated. In past this required quite a lot of queries, but yesterday I've realized this can be much reduced. During test suite run on PostgreSQL, I saw that it's not that easy - PostgreSQL does not allow to sum boolean fields, but fortunately this can be fixed as well. This has saved about 2 seconds.

In the end the tested import took 16 seconds instead of original 30 and issued 2500 SQL queries instead of 5000 at the beginning. I hope you will enjoy regained speed of imports :-).