Archives de catégorie : Informatique et technologie

cgroups script for the current session

In Linux, cgroups (a kernel feature) allows to limit the resources (cpu, memory…) accessible to a group of processes. I have written a little bash script that will either:

  • create some groups for the current user session and assign some restrictions. No need to be root or to modify a global configuration file. Call it when your desktop session starts (for example by putting an entry in «~/.kde/Autostart»). Edit the script to create your own groups.
  • start a process in one of theses groups

The main reason was that I encountered a bug with Firefox and Google+, with triggered infinite memory allocation, which freezes my machine for a few minutes (because of the trashing). I hope that it will allow me to kill the process/close the tabs if it happens again.
Continuer la lecture

Ubuntu 14.04 : autojump is broken

In Ubuntu 14.04, the provided autojump does not allow to choose between several matches because of a bug. How to fix that (as suggested in the bug report):

  • download a recent version, unzip, do «bash install.sh» and update your .bashrc to point on this install
  • in ~/.autojump/etc/profile.d/autojump.bash, remove the argument «–bash» (twice)
comps=$(autojump --bash --complete $cur)

Migration vers Kubuntu 14.04

Après une longue série de mises à jour, j’ai passé le pas: je suis reparti sur une nouvelle installation. Plus le temps passait, plus je rencontrais de bugs. Tous les scripts de mise à jour ne se passent pas toujours bien, et la maintenance prenait de plus en plus de temps.

Donc globalement ça c’est très bien passé:

  • J’ai créé dans mon LVM des nouvelles partitions pour /, /usr et /var, ainsi qu’une nouvelle partition pour /boot en dehors du LVM. Comme ça je peux manuellement migrer mes anciennes configurations ou données systèmes.
  • À l’installation, j’ai dû tuer le process «apt» qui essayait de télécharger des mises à jour (sans ça, la progression de l’installation ne dépassait pas les 10%).
  • J’ai gardé mon /home et ma partition de données
  • L’installation dans la config système KDE du support du japonais m’a automatiquement installé ibus et anthy (il fallait le faire à la main avant, je crois).
  • J’ai pu réinstaller sans problème mes anciennes applications. Le système se comporte au moins aussi bien qu’auparavant (à part le nouveau système d’indexation «baloo» que j’ai désactivé).
  • La migration de ma DB MySQL (simple copie des fichiers) s’est bien passée.
  • Point noir: certains des paquets pour le support des applications 32 bits sur un système 64 bits ont disparus, notamment libXrender. Plus moyen d’utiliser mon Firefox 32 bits!

C’est un succès, pourvu que ça dure.

 

Typematrix, panne et beau geste commercial

Récemment (1 an et 2 mois après l’achat), mon clavier Typematrix (le plus récent) est tombé en panne. D’un coup, il n’était plus détecté.

Typematrix m’a gratifié d’un sympathique geste commerciale, en me fournissant un nouveau clavier, bien que la garantie ait expiré. J’espérais au mieux une réduction pour un clavier neuf, et là j’ai été scotché!

KDE et japonais: démarrer ibus automatiquement

Mise à jour: Article pour Kubuntu 16.04

Avec les versions récentes de (K)ubuntu, le système pour gérer les méthodes d’entrée (pour basculer au japonais) est maintenant «ibus» (et plus «scim»). Récemment, il a chez moi arrêté de fonctionner. Voilà ce que j’ai dû faire.

  • j’ai supprimé «im-switch» (si je l’avais)
  • installé «im-config»
  • supprimé dans mes fichiers «.bashrc» et «.bash_profile» les variables d’environnement référençant «ibus» (XMODIFIERS, GTK_IM_MODULE et QT_IM_MODULE).
  • j’ai exécuté «im-config» et choisi «ibus». Il va créer un fichier «~/.inputrc», qui va contenir le nom de la méthode d’entrée, paramètre qui sera pris en compte au démarrage de la session utilisateur.

C’est plus propre que de lancer explicitement «ibus-daemon -d» via les scripts de démarrage de KDE. Mais c’est bizarre que KDE/Kubuntu ne propose pas dans son panneau de config d’utiliser ibus…

 

Clavier bépo Typematrix, quelques mois après

Si la quasi-totalité des points (dont les nombreux points négatifs) que j’évoquais dans mon billet précédent sont toujours valides, je peux maintenant dire que ce clavier, avec la disposition bépo, est bien plus efficace qu’un clavier azerty pour l’écriture de textes.

Je n’ai quasiment plus à regarder mon clavier. Mes index se placent automatiquement sur les touches «e» et «t» grâce aux marques et les autres doigts suivent. Les touches «début» et «fin» de ligne sont idéalement placées à coté des flèches de déplacement. Je fais également un bon usage des touches de réglage du volume (également bien placées). Je pense qu’il est mieux d’avoir une touche «fonction» (comme sur un portable) que des touches supplémentaires.

i18n: text expansion for several languages

From the KDE translations, I compiled statistics for text expansion, following the model presented by IBM on this page. So it will tell you for example that if you want to translate a text from English to French, which is between 11 and 20 characters long:

  • if you want 50% of such texts to fit, you will need 24% of additional space (for an English text of 100 pixels, you will need 124 pixels)
  • if you want 80%, you will need 57% of space
  • for 90%: 77%
  • for 95%: 98%
  • for 99%: 150%

Sources and data are available. Please excuse me for the poor HTML design (written in HTML 5, looks like HTML 1.0 ☺), I did not put any effort in it (not my cup of tea), but at least it does the job.

I also wrote another version of the generator using the Go language. I was a little bit disappointed because:

  • I did not get a formidable boost in performance (I should have, I have a 4-core CPU and Python can not fully take advantage of it because of its GIL). In fact, the file parsing part (the most time consuming one) gave similar performance, and the statistic production part was notably faster
  • The GTK/Pango (I used to get text length in pixels) binding for Go was incomplete and boring to complete (even if Go has a really nice support to write C bindings). I also had some crashes (related to GObject reference counting).
  • There is a port of Freetype written in Go, but the code to compute the length of a text was incomplete (it did not cover a given case)
  • At the time I wrote this version, I thought about integrating Fontconfig directly in the program, but it would have taken more time that I wanted to spend on it.

Golang: lack of generics bothers me

I think I will give up Go, mainly because of the lack of generics. What bothers me is that I can’t see how to write all-purpose algorithm functions like the ones C++ have (I love them), like for example «std::remove_if». Without them, you will have to write the same little pieces of code again, and again, and again. Or use cast everywhere (not great for a language with strong static types).
The built-in functions (like «copy») can do such a magic, but you, developer, can’t.
Oh, it’s possible to do like the package sort: provide to the function an interface that will perform the operations on the data (like «Swap», «Len», «Less»). If I want to implement my «remove_if», implementing such an interface will be a drag.
Same problem if you want to create a generic data structure, like a «set» or a b-tree of anything (interface or native type), and keep the type-safety.

That’s a pity, Go has some great features. Maybe I will try Rust.