PackageKit backend for Software Center: short week 7 report
Short weekly report is short, this week’s achievements:
- fixed the install/remove simulation bits (it can now tell what packages will be removed after applying changes)
- improved PackageInfo testing (works with both AptCache and PackageKit)
- found the problem with dynamic/static libs conflict: it is gio statically loaded from gtk and then Gio dynamically loaded from PackageKitGlib; loading Gio before everything seems to fix the conflict for now;
- got another round of refactor changes into trunk, thanks to mvo; this way my PK branch is one step closer to merging into software-center
ktnxbye
Exchange WebServices Offline AddressBook
It is now possible to download GAL contents for offline usage through exchange web services in Evolution. Offline GAL is termed as Offline Address-book (OAB) in Exchange WebServices and it may contain one or more Offline Address-lists (OAL).
The check-box, ‘Cache offline address-book’ would be sensitive if the OAB url is discovered using the AutoDiscover service from the previous page (‘Receiving’). On clicking the fetch buton, the available offline address-lists would be displayed in the combo box. The user can select the address-list which he is interested in.
If the GAL is not selected for offline usage. A GAL folder would be created in Contacts component and would be used just for auto-completion when Evolution is online.
To change an offline address-list, one just needs to go back to ‘Receiving page’ in preference and select a different address-list. This would remove the old OAL folder and its contents and create a new OAL folder. At the moment, evolution-ews supports caching only one OAL, though it is very easy to extend it to support many. I feel it would sufficient to have one at the moment, but if a need arises, the plugin can be extended to create new OAL folders on demand.
If an address-list is chosen for offline usage, one CAN auto-complete while the caching is in progress!! All operations are asynchronous and cancellable.
Internals
OAL’s would be listed in the link <OABUrl> + ‘oab.xml’. They would be available as compressed files, compressed using LZXD format. There are three versions of OAB ‘2, 3, 4’ and Evolution supports downloading, version 4 OAB Full Details file.
LZXD
To put it simply, lzxd extends the lzx decompression format adding support for differential updates. I have picked up the lzx decompression code from libmspack and modified it to make it decompress the lzxd file. The support for differential update is yet to added.
OAB
The format for the uncompressed OAB Version 4 file is available at http://msdn.microsoft.com/en-us/library/cc463914%28v=EXCHG.80%29.aspx . Evolution-ews has the decoder which decodes the oab file, converts to EContact and then we populates the address-book sqlitedb in chunks of 1000 contacts.
And now the contents are available for offline use 
CamelUrl props
“oab_offline” – says if oab is marked for offline.
“oal_selected” – contains the selected “oal id:oal name”
“oaburl” – contains the oab url
ESource props
“hosturl” – contains the host url, used for auto-completion.
“oaburl” – contains the oab url.
“oalid” – id of the OAL.
“gal” – a boolean that it indicates that its gal folder.
Designing the missing Web UI for Bongo
Improved Kernel Package Retention in 12.1
A long awaited feature of the openSUSE update stack is finally here!
Since some time, it has been possible to tell libzypp to not delete old
kernels on update:
multiversion = provides:multiversion(kernel)
in /etc/zypp/zypp.conf. That way, you don’t have to worry that a
brand new -rc kernel from Factory makes your system unbootable. This however
solves one problem and brings another one – you have to manually delete the
old kernel so that your /boot partition does not fill up. openSUSE 12.1 will
provide a solution to this, you will be able to tell what kernels you want to
keep after an update, other kernels will be deleted. The configuration is the
same file, /etc/zypp/zypp.conf:
## Comma separated list of kernel packages to keep installed in parallel, if the ## above multiversion variable is set. Packages can be specified as ## 2.6.32.12-0.7 - Exact version to keep ## latest - Keep kernel with the highest version number ## latest-N - Keep kernel with the Nth highest version number ## running - Keep the running kernel ## oldest - Keep kernel with the lowest version number (the GA kernel) ## oldest+N - Keep kernel with the Nth lowest version number ## ## Default: Do not delete any kernels if multiversion = provides:multiversion(kernel) is set multiversion.kernels = latest,running
If you configure this and the above multiversion variable, then after each
kernel update, during a subsequent reboot, a script will compare the list of
installed kernels with the multiversion.kernels setting and delete those that
are no longer needed. Examples:
- Keep the latest kernel and the running one if it differs. This is similar to
no enabling the multiversion feature at all, except that the old kernel is
removed after reboot and not immediatelly after installation. BTW, you
probably always want to include “running”:multiversion.kernels = latest,running
- Keep last two kernels and the running one:
multiversion.kernels = latest,latest-1,running
- Keep the latest kernel, the running and a my test kernel with a fancy
patch:multiversion.kernels = latest,running,3.0.rc7-test
If you want to try it, it’s all in Factory already. Check if these packages are
recent enough and uncomment the two variables in zypp.conf:
$ rpm -q --changelog kernel-desktop mkinitrd libzypp | grep -B2 312018
* Fri Jun 17 2011 mmarek@suse.cz
- rpm/post.sh: Touch /boot/do_purge_kernels on package install
(fate#312018).
--
- Add purge-kernels script to automatically delete old kernel packages
on boot, based on configuration in /etc/zypp/zypp.conf, variable
multiversion_kernels (fate#312018).
--
* Tue Jun 21 2011 dmacvicar@suse.de
- Add configuration template for automatic kernel
purge (feature#312018) to zypp.conf
$ grep ^multiversion /etc/zypp/zypp.conf
multiversion = provides:multiversion(kernel)
multiversion.kernels = latest,running
Happy updating!
1ο openSUSE Collaboration Weekend Camp
Πρόγραμμα 1ου openSUSE Collaboration Weekend Camp
Παρασκευή
17:30 – 17:45 Καλωσόρισμα
17:45 – 18:30 Μεταφράζοντας τη διανομή openSUSE – Χρήση του Localize και του Gtranslator (Eυστάθιος Ιωσηφίδης – Κώστας Κουδάρας)
18:45 – 19:30 Μεταφράζοντας το weekly news και το wiki – Πώς, τι και γιατί
19:30 – 20:30 Βραδινό
20:45 – 22:15 Wiki Hackfest – Διαγωνισμός με δώρο ένα:
22:15 – … Συζήτηση: openSUSE people – From us to us – Διομήδης Αναδιώτης “Καινούργιος στην κοινότητα”
Σάββατο
08:00 – 10:00 Πρωινό
10:15 – 11:00 Χρήση του Yast – Διαχείριση συστήματος εύκολα, γρήγορα και με πολλές δυνατότητες (Ευστάθιος Αγραπίδης – Κώστας Κουδάρας)
11:00 – 12:00 def python_django(tutorial): (Θοδωρής Χατζημίχος)
12:15 – 13:15 Security and arduino: Multifactor authentication system (voice recognition and RFID technologies) – Μέρος 1ο (the-hackerspace)
13:30 – 14:30 Security and arduino: Multifactor authentication system (voice recognition and RFID technologies) – Μέρος 2ο (the-hackerspace)
14:30 – 17:30 Μπάνιο/ρακέτες/Beach Volley/φαΐ/μπύρες
17:30 – 18:15 Qt Signals And Slots (Αντώνης Τσαπαλιώκας)
18:30 – 19:30 Security and arduino: Wireless devices remote control (client – server control center) (the-hackerspace)
19:30 – 20:30 Βραδινό
20:30 – 21:30 Vim introduction (Γιάννης Χατζημίχος)
21:30 – … Συζήτηση: Δουλεύοντας μέσα σε μια κοινότητα Ε.Λ/Λ.Α.Κ
ΚΥΡΙΑΚΗ
08:00 – 10:00 Πρωινό
10:00 – 10:45 Επιβίωση με Gnome 3 στον κόσμο του KDE (Ευστάθιος Ιωσηφίδης)
10:45 – 11:00 OBSάρω, OBSάρεις; (Ευστάθιος Αγραπίδης)
11:45 – 12:30 KDE Frameworks (Γιώργος Τσαπαλιώκας)
12:30 – 13:15 openSUSE Medical project – openEMR (Αθανάσιος-Ηλίας Ρουσινόπουλος)
13:30 ΤΕΛΟΣ ΕΚΔΗΛΩΣΗΣ
Πρόγραμμα 1ου openSUSE Collaboration Weekend Camp
Παρασκευή
17:30 - 17:45 Καλωσόρισμα
17:45 - 18:30 Μεταφράζοντας την διανομή openSUSE - Χρήση του Lokalize και του Gtranslator (Eυστάθιος Ιωσηφίδης - Κώστας Κουδάρας)
18:45 - 19:30 Μεταφράζοντας το weekly news και το wiki - Πως, τι και γιατί
19:30 - 20:30 Βραδινό
20:45 - 22:15 Wiki Hackfest - Διαγωνισμός με δώρο ένα :
22:15 - … Συζήτηση: openSUSE people - From us to us - Διομήδης Αναδιώτης "Καινούργιος στην κοινότητα"
Σάββατο
08:00 - 10:00 Πρωινό
10:15 - 11:00 Χρήση του Yast - Διαχείριση συστήματος εύκολα, γρήγορα και με πολλές δυνατότητες(Ευστάθιος Αγραπίδης-Κώστας Κουδάρας)
11:00 - 12:00 def python_django(tutorial): (Θοδωρής Χατζημίχος)
12:15 - 13:15 "Security and arduino:Multifactor authentication system(voice recognition and rfid technologies)" - Μέρος 1ο (the-hackerspace)
13:30 - 14:30 "Security and arduino:Multifactor authentication system(voice recognition and rfid technologies)" - Μέρος 2ο (the-hackerspace)
14:30 - 17:30 Μπάνιο/ρακετες/Beach Volle/φαϊ/μπύρες
17:30 - 18:15 Qt Signals And Slots (Αντώνης Τσαπαλιώκας)
18:30 - 19:30 "Security and arduino:Wireless devices remote control (client - server control center)"(the-hackerspace)
19:30 - 20:30 Βραδυνό
20:30 - 21:30 Vim introduction (Γιάννης Χατζημίχος)
21:30 - … Συζήτηση: Δουλεύοντας μέσα σε μια κοινότητα Ε.Λ/Λ.Α.Κ
ΚΥΡΙΑΚΗ
08:00 - 10:00 Πρωινό
10:00 - 10:45 Επιβίωση με Gnome 3 στον κόσμο του KDE (Ευστάθιος Ιωσηφίδης)
10:45 - 11:00 OBSάρω, OBSάρεις; (Ευστάθιος Αγραπίδης)
11:45 - 12:30 KDE Frameworks (Γιώργος Τσαπαλιώκας)
12:30 - 13:15 openSUSE Medical project - openEMR (Αθανάσιος-Ηλίας Ρουσινόπουλος)
13:30 ΤΕΛΟΣ ΕΚΔΗΛΩΣΗΣ
Cómo poner "Now playing" con Clementine+Kopete
Pero no todo está perdido! Si ponemos en un recipiente un poquito de BASH+QDBUS+Cron podemos hacer nuestro propio script "Now Playing" para establecer el mensaje de estado de Kopete con la canción y el artista que actualmente está sonando en Clementine.
Manos a la obra:
Primero creamos nuestro script en el directorio bin de nuestro home (por inercia, elección y formación utilizo nombres de archivos y variables en inglés):
pico ~/bin/ClementineNowPlaying.sh
Siendo pico el editor de texto que más utilizo. Puedes utilizar tu preferido (Kate/KWrite/Vi...).
Básicamente (y muy básicamente puesto que estoy lejos de ser un experto en BASH scripting) nuestro script obtendrá la canción y el artista que actualmente está reproduciendo Clementine, luego los pondrá en el mensaje de estado de Kopete adornado con la frase "Now playing...".
A continuación pegan el siguiente código dentro del archivo, he agregado comentarios sobre qué hace cada línea:
#!/bin/bash
#Primero obtenemos el índice de la pista que actualmente esta sonando en Clementine
currentTrackIndex=$(/usr/bin/qdbus org.mpris.clementine /TrackList org.freedesktop.MediaPlayer.GetCurrentTrack)
#Luego utilizamos ese índice para obtener toda la información de la pista actual
#Con el comando grep nos quedamos sólo la línea que contiene el nombre del artista, esta línea es por ejemplo artist: Bon Jovi
artist=$(/usr/bin/qdbus org.mpris.clementine /TrackList org.freedesktop.MediaPlayer.GetMetadata $currentTrackIndex | grep artist)
#Se aplica el mismo procedimiento para el título, esta variable quedará de la forma title: Always
title=$(/usr/bin/qdbus org.mpris.clementine /TrackList org.freedesktop.MediaPlayer.GetMetadata $currentTrackIndex | grep title)
#Luego de la cadena original (ej: "artist: Bon Jovi") queremos borrar la subcadena "artist: " y eso lo hacemos así:
artist=${artist/artist: /}
#Lo mismo para el título:
title=${title/title: /}
#Finalmente enviamos la frase con las variables al mensaje de estado de Kopete:
/usr/bin/qdbus org.kde.kopete /Kopete org.kde.Kopete.setStatusMessage "Now playing $title by $artist"
Guardamos los cambios y cerramos nuestro editor de texto.
Le otorgamos permisos de ejecución a nuestro script:
chmod +x ~/bin/ClementineNowPlaying.sh
Es tiempo de probar nuestro script: ejecutamos Clementine con alguna canción y abrimos Kopete.
En el terminal ejecutamos nuestro script:
./bin/ClementineNowPlaying.sh
Chequeamos que Kopete ha realizado correctamente el cambio de estado:

Finalmente necesitamos que nuestro script se ejecute cada cierto intervalo de tiempo para asegurarnos que mostrará la información lo más actualizada posible sobre lo que escuchamos. Para eso utilizaremos el gestor de tareas de Linux: Cron.
Con el siguiente comando abriremos el editor del Cron:
crontab -e
Una vez ahí, presionamos la tecla i para iniciar la inserción de texto y pondremos la siguiente línea:
* * * * * DISPLAY=:0.0 /home/francisco/bin/ClementineNowPlaying.sh &>/dev/null
Esta línea quiere decir que ejecutaremos nuestro script cada minuto, de cada hora, de cada día, etc...
Para salir del editor presionamos la tecla ESC y luego ponemos : x y presionamos enter.
Para comprobar que hemos guardado los cambios ponemos:
crontab -l
Si no es así, volver sobre el paso anterior hasta que resulte! (Lo sé, ese editor no es de los más intuitivos).
Cuando resulte habremos terminado!
Suerte!
Cualquier pregunta con respecto a esto no duden en enviarla como comentario.
Note: I can answer in english as well, so if you know what it is about everything here but although of that you may need some help, so please don't hesitate and leave a comment ;-)
Cómo poner "Now playing" con Clementine+Kopete
Pero no todo está perdido! Si ponemos en un recipiente un poquito de BASH+QDBUS+Cron podemos hacer nuestro propio script "Now Playing" para establecer el mensaje de estado de Kopete con la canción y el artista que actualmente está sonando en Clementine.
Manos a la obra:
Primero creamos nuestro script en el directorio bin de nuestro home (por inercia, elección y formación utilizo nombres de archivos y variables en inglés):
pico ~/bin/ClementineNowPlaying.sh
Siendo pico el editor de texto que más utilizo. Puedes utilizar tu preferido (Kate/KWrite/Vi...).
Básicamente (y muy básicamente puesto que estoy lejos de ser un experto en BASH scripting) nuestro script obtendrá la canción y el artista que actualmente está reproduciendo Clementine, luego los pondrá en el mensaje de estado de Kopete adornado con la frase "Now playing...".
A continuación pegan el siguiente código dentro del archivo, he agregado comentarios sobre qué hace cada línea:
#!/bin/bash
#Primero obtenemos el índice de la pista que actualmente esta sonando en Clementine
currentTrackIndex=$(/usr/bin/qdbus org.mpris.clementine /TrackList org.freedesktop.MediaPlayer.GetCurrentTrack)
#Luego utilizamos ese índice para obtener toda la información de la pista actual
#Con el comando grep nos quedamos sólo la línea que contiene el nombre del artista, esta línea es por ejemplo artist: Bon Jovi
artist=$(/usr/bin/qdbus org.mpris.clementine /TrackList org.freedesktop.MediaPlayer.GetMetadata $currentTrackIndex | grep artist)
#Se aplica el mismo procedimiento para el título, esta variable quedará de la forma title: Always
title=$(/usr/bin/qdbus org.mpris.clementine /TrackList org.freedesktop.MediaPlayer.GetMetadata $currentTrackIndex | grep title)
#Luego de la cadena original (ej: "artist: Bon Jovi") queremos borrar la subcadena "artist: " y eso lo hacemos así:
artist=${artist/artist: /}
#Lo mismo para el título:
title=${title/title: /}
#Finalmente enviamos la frase con las variables al mensaje de estado de Kopete:
/usr/bin/qdbus org.kde.kopete /Kopete org.kde.Kopete.setStatusMessage "Now playing $title by $artist"
Guardamos los cambios y cerramos nuestro editor de texto.
Le otorgamos permisos de ejecución a nuestro script:
chmod +x ~/bin/ClementineNowPlaying.sh
Es tiempo de probar nuestro script: ejecutamos Clementine con alguna canción y abrimos Kopete.
En el terminal ejecutamos nuestro script:
./bin/ClementineNowPlaying.sh
Chequeamos que Kopete ha realizado correctamente el cambio de estado:

Finalmente necesitamos que nuestro script se ejecute cada cierto intervalo de tiempo para asegurarnos que mostrará la información lo más actualizada posible sobre lo que escuchamos. Para eso utilizaremos el gestor de tareas de Linux: Cron.
Con el siguiente comando abriremos el editor del Cron:
crontab -e
Una vez ahí, presionamos la tecla i para iniciar la inserción de texto y pondremos la siguiente línea:
* * * * * DISPLAY=:0.0 /home/francisco/bin/ClementineNowPlaying.sh &>/dev/null
Esta línea quiere decir que ejecutaremos nuestro script cada minuto, de cada hora, de cada día, etc...
Para salir del editor presionamos la tecla ESC y luego ponemos : x y presionamos enter.
Para comprobar que hemos guardado los cambios ponemos:
crontab -l
Si no es así, volver sobre el paso anterior hasta que resulte! (Lo sé, ese editor no es de los más intuitivos).
Cuando resulte habremos terminado!
Suerte!
Cualquier pregunta con respecto a esto no duden en enviarla como comentario.
Note: I can answer in english as well, so if you know what it is about everything here but although of that you may need some help, so please don't hesitate and leave a comment ;-)
First debugging session of LibreOffice code on iOS (simulator)

I am just debugging (well, not really, I am not expecting anything to actually do much interesting) for the first time cross-compiled LibreOffice code on the iOS Simulator. (So yeah, technically instruction-set-wise this is not cross-compiled, as the Simulator runs i386 code, too, but under a simulated iOS environment.) Not really that exciting, but still, couldn't help blogging. No, there is still nothing to "beta test", there is still no actual LibreOffice UI showing up or even any code to draw a single pixel on iOS.
Авторы, отзовитесь!
Если у вас есть возможность поделиться своим опытом по поводу использования Linux дома или на работе, приглашаю сделать это на страницах этого дневника. Тематика статей может быть любой.
Об условиях. Для того чтобы получить право публикации здесь - необходимо написать не менее трех статей. Желательно, чтобы они были грамотными, но это не проблема. Главное - интересное содержание. Три статьи - для того, чтобы я мог убедиться, что автор не иссякнет после написания одной-двух статей. Все присланные статьи будут опубликованы от имени тех авторов, которые пришлют эти статьи и в том виде, в котором они сами пожелают указать себя (или ники или полное имя). Адрес электронной почты приведен в моем профиле.
