Michal Čihař - Archive for 7/2012

Weblate hacking #5

Last day of Hackweek VIII is over and I think Weblate is pretty much ready for 1.2 release.

Today I continued to analyzing performance and did few optimizations of some frequently used code paths. There is still lot of area for improvement, but I think Weblate is now fast enough for daily usage on even quite big projects.

Rest of the day was spend by looking at various questions which people have asked me and distilling that into documentation. The most extended part were frequently asked questions, which now includes some hints for setup.

Of course the demo server is running latest and greatest git version, I will probably push it soon to http://l10n.cihar.com/ as well.

Weblate hacking #4

Fourth day of Hackweek VIII was for me again mostly spent on Weblate. This time there are no new nice features, but rather general improvements to the code.

First task was to add support for django-registration 0.8. Originally my plan was to support both 0.7 and 0.8, but that proven to be too complicated so Weblate now requires 0.8, which brings quite a lot of differences in API.

Later I've installed django-debug-toolbar and looked at some bottlenecks in some hot paths. This resulted in few optimizations of translations merging and new caching for translation stats. This turned out to be too expensive for bigger translations and caching these can save few seconds on page load.

I will probably focus more on performance tuning tomorrow as I don't plan to add any new features to 1.2 release.

Weblate hacking #3

As you can see on github, there are currently no open issues for Weblate's 1.2 milestone. Looks like I've done most of my Hackweek VIII project faster than expected, but I might add some more improvements.

Everything went quite smoothly, but anyway I've decided to postpone some issues. The major reason is that I'm not really sure whether these are good ideas and won't implement something until I'll get more feedback. You can find such issues labeled "needs decision". Comments there are especially welcome :-).

On the code side, I've improved support for po file headers, did various improvements on maintenance scripts and improved about page.

Also current code from git is now deployed at demo.weblate.org, so feel free to test it. I'm especially curious how the simple and stupid spam protection will work in reality.

Now it's time for ice cream and then I'll think what to implement next :-).

Weblate hacking #2

Second day of Hackweek VIII is over and there has been again great progress on Weblate.

I've started with improving documentation. Most of improvements were possible by using djangodocs extension for Sphinx, which allows better documenting of Django admin commands and settings.

Then I've focused on handling languages as there were some things which I did not like. Most importantly, Weblate will now try to use existing languages even if used code does not 100% match (eg. cs_CZ and cs-CZ are treated equal). Also with help of locale aliases, some specific variants won't be created and generic one used instead (eg. cs_CZ will use cs, as these are actually same). If there will be need to differentiate them, you still can create language manually and Weblate will use matched one.

Last thing is translation locking - translator can now lock translation for exclusive use and nobody else will be able to work on that. This will help in situations where more people started to work on same translation and basically duplicated the effort.

There are 3 open issues targeted for 1.2 release, but I'm not sure if some of these are good ideas, let's keep the decision for next days.

Weblate hacking #1

The first day of Hackweek VIII is about to end for me and it's time to share some of the results.

As planned, I've started hacking on Weblate. The most prominent feature from today are email notifications. You can now monitor the translation in various ways - be informed about new strings to translate, new contributor, added suggestion or simply watch all translations.

Another bigger change is rearranging of main page, which now provides instant access to per language stats, which were quite hidden before.

Rest of time was spent on adding some sort of spam protection (need to deploy this to demo to see how successful it is) and one more promoting widget (88x31 pixels).

There are 6 open issues targeted for 1.2 release, so there is still something to do in next days :-).

Sponsoring phpMyAdmin

We've decided to accept sponsorships of phpMyAdmin in more official way. So if you or your company want to financially support this software, you now have great chance to do that.

Time to time we've received offers for sponsoring, but we never got to point where we could easily handle these. In the past we were limited by sf.net requirements for no advertisement on website, but it got leveraged over the time and we did not change our policy much.

For now the only benefit we are providing to our sponsors (besides good feeling that they are supporting good project) is logo and link on our website. In the future we might add some more, but at first we want to see how it works in this scale.

Anyway if you are interested in sponsoring phpMyAdmin, you can do that on our website.

Triggering Jenkins from GitHub

For some time I thought it is not effective to use polling to get latest changes from GitHub into Jenkins, which we use for continuous integration, but II was always too lazy to investigate.

Today I finally took a look at it and it turns out to be quite easy:

  1. Enable Github plugin in Jenkins.
  2. Enable "Build when a change is pushed to GitHub" in project configuration in Jenkins
  3. Disable "Prevent Cross Site Request Forgery exploits" in Jenkins configuration (to prevent bug JENKINS-10263).
  4. Configure Jenkins service hook in GitHub to trigger your server (the URL is http://<jenkins>/github-webhook/.

Try testing the hook and check "GitHub Hook Log" in Jenkins if it really works and you're done.

So now, phpMyAdmin's tests should start as soon as somebody pushes changes to GitHub.

Intel SSD firmware update on Linux

For quite some time, I've suffered slow boot - it had useless 10 seconds delay while initializing SATA with SSD disk:

[    2.761669] ata1: SATA max UDMA/133 abar m2048@0xf2528000 port 0xf2528100 irq 44
[    8.118202] ata1: link is slow to respond, please be patient (ready=0)
[   12.764701] ata1: COMRESET failed (errno=-16)
[   13.084612] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)

After some googling, I came to conclusion it is bug in SSD firmware and looked for update. Release notes documented some fixes to slow boot, what seemed to be related. The only issue was that the firmware update is available only as ISO image. And guess what I have no CDROM (actually I have no clue for what I would have used it).

Fortunately the update is doable with just grub and syslinux.

First, download ISO provided by Intel and extract eltorito boot image from it using geteltorito script and copy it to /boot/. Then get yourself syslinux and copy memdisk to /boot/.

Now you just need to edit grub configuration to include following lines (you might need to adjust it according to your partition setup):

menuentry "SSD Update" {
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos1)'
        linux16 /memdisk
        initrd16 /ssd-fw.img
}

Now you can reboot and choose SSD Update from the grub menu and perform update!

After update the slowest part of boot process is me entering LUKS password, but I'm afraid this is not easily fixable :-).

PS: The difference you can see after update:

[    2.797551] ata1: SATA max UDMA/133 abar m2048@0xf2528000 port 0xf2528100 irq 44
[    3.115694] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)

GSoC evaluations submitted

Even though I've planned to do this on Monday, it somehow slipped to Wednesday, but I've finally filled in GSoC 2012 evaluations for all students I mentor at phpMyAdmin.

Generally all of them perform quite well, but there is always room for improvements :-).

The greatest pain every year is filling up evaluations for more students - every each of them starts with same questions for mentor (eg. how many GSoC did you participate in or how much time you spend on GSoC). I know I can copy and paste answers, but still this looks like something not necessary. Also some information is probably already known to Google (eg. in which years I did participate in GSoC).

New Weblate widget to embed in your site

Weblate just got new feature, which might help you attracting new translators - embeddable widgets. You can put them to your website to show current state of the translation and attract new ones to simple introduction page.

Right now, there is only one widget, but I hope to add more in future. However I'm far from being good in graphics, so if anybody could come up with some templates, I'd gladly use them :-).

Anyway the current widget for Weblate itself looks like this: