mercredi 15 juillet 2015

The Talos Principle - Fini!

Il m'a quand même fallu 27 heures pour compléter le jeu, et voir une de ses fins (à priori, la plus intéressante) en ayant résolu tous les problèmes. Pfiou! À noter que j'ai quand même raté beaucoup d'Easter Eggs, lesquels sont recensés dans de nombreuses vidéos sur Youtube. Je demeure très impressionné par l'intelligence de ce jeu, aussi bien dans le gameplay que dans l'histoire. Une très bonne expérience, entièrement sous Linux!

Je vais donc pouvoir revenir à une activité normale, comme on dit. En particulier, je n'ai vraiment plus qu'à trouver 3 heures de libre d'un seul tenant pour enfin charger mes vieux SMS dans mon Ubuntu Phone. Faut pas se laisser aller.

jeudi 18 juin 2015

Ubuntu Touch - Transférer ses SMS - Phase 1: reconnaissance (suite)

Reprenons, et regardons de plus près les deux tables restantes, thread_participants et text_events.

thread_participants

ChampTypeCommentaire
accountIdchaîneClé vers la table "threads"
threadIdchaîneClé vers la table "threads"
typeentierClé vers la table "threads"
participantIdchaîneLe nom du participant à ce fil de discussions. Pour les SMS simples, c'est simplement notre correspondant. De ce que je vois des données, utiliser la même valeur que le threadId fonctionne

text_events

ChampTypeCommentaire
accountIdchaîneClé vers la table "threads"
threadIdchaîneClé vers la table "threads"
eventIdchaîneProbablement un identifiant unique pour le message. Dans mes données, c'est à une valeur qui ressemble à "/ril_0/message_" suivi d'une chaîne qui ressemble furieusement à un hash pour les messages envoyés, et à une date au format ISO (par exemple 2015-06-01T22:35:52+0100-1) pour les messages reçus
senderIdchaîneL'envoyeur, à "self" pour les messages envoyés, et au numéro de tel de l'envoyeur pour les messages reçus
timestampdatetimeLa date et l'heure auxquelles le message a été reçu
newEventbooléenAucune idée. Toujours à faux dans mes données.
messagechaîneLe message proprement dit
messageTypeentierLe type de message, manifestement toujours à 0
messageStatusentierManifestement là pour indiquer si le message a été lu, envoyé, etc. Les bonnes valeurs semblent être 4 pour les messages envoyés, et 0 pour les messages reçus
readTimestampdatetimeLa date et l'heure auxquelles le message a été lu. Peut probablement être mis à la même valeur que timestamp pour les messages reçus, et à null pour les messages envoyés.
subjectchaîneLe sujet du message, manifestement non-existant pour les SMS (peut-être là pour les MMS?). Doit probablement être mis à null pour les messages envoyés et à la chaîne vide pour les messages reçus

Maintenant, il va me falloir passer à la deuxième phase: massage de mes données en CSV pour pouvoir les insérer dans la base et retrouver mes SMS.

mercredi 10 juin 2015

Ubuntu Touch - Transférer ses SMS - Phase 1: reconnaissance

Les SMS sur un Ubuntu Phone sont situés dans une base de données sqlite à l'emplacement ~/.local/share/history-service/history.sqlite. En théorie, pour importer ses SMS, il suffit de les ajouter à la base dans le format qui va bien. Téléchargeons donc la base et jetons un coup d'oeil:

$ sqlite3 history.sqlite
sqlite> .schema
CREATE TABLE schema_version (
    version int
);
CREATE TABLE threads (
    accountId varchar(255),
    threadId varchar(255),
    type tinyint,
    lastEventId varchar(255),
    lastEventTimestamp datetime,
    count int,
    unreadCount int
);
CREATE TABLE thread_participants (
    accountId varchar(255),
    threadId varchar(255),
    type tinyint,
    participantId varchar(255)
);
CREATE TABLE text_events (
    accountId varchar(255),
    threadId varchar(255),
    eventId varchar(255),
    senderId varchar(255),
    timestamp datetime,
    newEvent bool,
    message varchar(512),
    messageType tinyint,
    messageStatus tinyint,
    readTimestamp datetime,
    subject varchar(256)
);

Rien de très méchant à priori (j'ai laissé la partie du schéma qui décrit les "triggers" qui mettent à jour certaines dates, ainsi que les voice_events, correspondant aux conversations téléphoniques, et aux text_event_attachments, correspondant aux pièces jointes, j'imagine pour les MMS). L'on comprend qu'il y a un certain nombre de "threads", qui regroupent un certain nombre de "thread_participants", et que l'on peut ensuite ajouter chaque message dans text_event. Voici ce que j'ai réussi à en comprendre de la première table d'après les données déjà présentes après quelques appels et quelques SMS:

threads

ChampTypeCommentaire
accountIdchaîneUn nom de compte, probablement une constante pour tous les téléphones. Chez moi, c'est systématiquement la valeur "ofono/ofono/account0"
threadIdchaîneL'identifiant du thread. C'est apparemment le numéro de téléphone de son correspondant, sauf quand il s'agit de correspondants nommés, comme "Ikea" ou "Orange"
typeentierUne valeur qui peut être 0 ou 1. En regardant les numéros de téléphone associés, je pense que cela indique s'il s'agit d'un thread de message, avec le code 0, ou d'un historique d'appel, avec un 1. Pour l'import des SMS, on mettra 0 partout.
lastEventIdchaîneC'est un identifiant assez moche, qui contient soit un numéro de téléphone, soit une date, suivi d'une date et d'une heure. J'imagine que c'est le dernier eventId de la table text_events, et qu'il est mis à jour via une trigger
lastEventTimestampdate et heurela date et l'heure du dernier message
countentierLe nombre de messages dans le thread
unreadCountentierLe nombre de messages non lus. Pour l'import, un 0 sera bien suffisant.

Suite au prochain numéro, car il est temps d'aller se coucher!

mardi 2 juin 2015

Et en plus, on peut téléphoner avec!

Ayant enfin reçu ma carte SIM, j'ai pu tester mon BQ Aquarius Ubuntu Edition en "conditions réelles". La bonne nouvelle, c'est qu'effectivement, on peut téléphoner avec. Ça a l'air bête, comme ça, mais j'avais en tête un collègue et son Nokia N900 qui, semble-t-il, était particulièrement peu coopératif sur ce sujet là.

C'est qu'on sent particulièrement que sur un Ubuntu Touch, la fonction téléphone est une application comme une autre, ni plus, ni moins. On a donc droit à 4 secondes de changement, et téléphoner à un contact qui ne soit pas dans sa liste d'appels récents est assez peu ergonomique, puisqu'il faut repasser par l'application "contacts".

Mais trêve de pessimisme, donner un appel comme en recevoir fonctionne finalement bien, et l'application SMS est satisfaisante.

samedi 30 mai 2015

Ubuntu Touch - Transférer ses contacts

La première chose à faire pour que mon Aquarius soit utilisable, c'est de transférer mes contacts. C'est là que l'on se rend compte que le téléphone n'est absolument pas prêt pour monsieur et madame tout le monde: la méthode la plus efficace requiert de s'intéresser de près à la ligne de commande.

Tout d'abord, il faut ouvrir un accès SSH sur le téléphone. J'aime beaucoup la solution de Robie Basak qui consiste à transférer sa clé SSH via netcat (nc), et évite d'avoir à se fader adb.

Une fois que l'on peut ouvrir une session SSH sur son téléphone, tout devient plus simple, parce que l'application "Terminal", aussi bien qu'elle soit, est quand même sérieusement pénible à utiliser avec un clavier tactile. Il faut donc copier ses contacts quelque part sur le téléphone, puis utiliser syncevolution pour les importer, comme indiqué par Nicolas Delvaux.

Une petite remarque en passant: il n'est pas rare de trouver des solutions qui s'appliquent aux versions beta d'Ubuntu Touch. Avec une version officielle pré-installée, c'est souvent beaucoup plus simple!

La prochaine étape sera d'importer tous mes SMS, que j'ai pu exporter de mon Nokia au format CSV. L'Ubuntu Touch gère les SMS via une base SQLite, j'espère donc pouvoir faire un peu de reverse engineering et comprendre comment pousser mes données là dedans.

mercredi 27 mai 2015

Ubuntu Touch - Premières impressions

Voilà, enfin, j'ai mon nouvel Ubuntu Touch (un BQ Aquaris 4.5 Ubuntu Edition) dans les mains! Bon, je ne peux pas encore téléphoner avec parce que je n'ai pas reçu ma nouvelle SIM, mais les débuts sont prometteurs. En particulier, l'application "terminal" qui m'a permis de faire un "df -h" (sur un téléphone!!!) m'a rendu tout fou. Je sens qu'il va y avoir beaucoup de bidouillage à faire, mais c'est justement ça qui me plait.

dimanche 17 mai 2015

Il est la!

g++-5 -O3 -flto hello.cpp -o hello -fuse-ld=gold

Alors certes, il va falloir que j'écrive un programme un poil plus intéressant qu'un bête Hello World, mais c'est un début. En particulier, je veux tester le changement d'optimisation des chaînes de caractères de COW à SSO. En faisant lire des listes de chaines de plus en plus grandes, l'on devrait observer un seuil (à 24 caractères, si j'en crois Stack Overflow) où l'on commence à devoir faire des allocations. Nos amis std::chrono et Valgrind confirmeront.