From 3fcddf78f965a2c5ee0a9602708899fb0e72a7c0 Mon Sep 17 00:00:00 2001 From: Sébastien Dailly Date: Sat, 21 Mar 2015 11:32:09 +0100 Subject: Article on sailfish developpement --- content/Informatique/2015-03-25-sailfish.rst | 152 +++++++++++++++++++++ content/images/hacking/2294144289_a54db90ac5_q.jpg | Bin 0 -> 12826 bytes content/images/icons/tsumego_150.jpg | Bin 0 -> 8119 bytes content/images/sailfish/ide.jpg | Bin 0 -> 47934 bytes content/images/sailfish/sailfish.jpg | Bin 0 -> 2856 bytes pelicanconf.py | 2 + plugins/related_posts/related_posts.py | 11 +- 7 files changed, 160 insertions(+), 5 deletions(-) create mode 100755 content/Informatique/2015-03-25-sailfish.rst create mode 100644 content/images/hacking/2294144289_a54db90ac5_q.jpg create mode 100644 content/images/icons/tsumego_150.jpg create mode 100644 content/images/sailfish/ide.jpg create mode 100644 content/images/sailfish/sailfish.jpg mode change 100644 => 100755 plugins/related_posts/related_posts.py diff --git a/content/Informatique/2015-03-25-sailfish.rst b/content/Informatique/2015-03-25-sailfish.rst new file mode 100755 index 0000000..f6f3796 --- /dev/null +++ b/content/Informatique/2015-03-25-sailfish.rst @@ -0,0 +1,152 @@ +.. -*- mode: rst -*- +.. -*- coding: utf-8 -*- + +================================== +Revue du système Sailfish OS (1/2) +================================== + +:date: 2015-03-25 +:tags: Libre, Programmation, Sailfish +:logo: /images/sailfish/sailfish.jpg +:summary: Petite revue du développement et de la sécurité du système + d'exploitation Sailfish, suite à la diffusion de ma première + application. + +.. figure:: {filename}/images/sailfish/sailfish.jpg + :figwidth: 150 + :figclass: floatleft + :alt: Logo de sailfish OS + + Logo de sailfish OS + + +J'ai publié la semaine dernière ma première application pour Sailfish OS. Il +s'agit du système qui tourne sur les téléphones Jolla. Ce petit jeu permet de +charger des problèmes de go déjà préparés, pour ensuite les tester et +rechercher la solution. La première version a été publiée sur le site +openrepos.net_ la semaine dernière, pour la première version du jeu avec les +fonctionnalités que je souhaitais. C'est l'occasion de faire une petite revue +du développement pour Sailfish OS. + +.. _openrepos.net: https://openrepos.net/content/chimrod/tsumego + +Présentation +============ + +Sailfish OS est un système d'exploitation tournant sur le téléphone Jolla_. Le +système est construit en utilisant Qt et Wayland pour la partie graphique. Un +terminal est nativement disponible sur le téléphone, et la connexion ssh est +prévue sans qu'il ne soit nécessaire d'installer quoi que ce soit. On peut donc +dire qu'un bidouilleur sous linux retrouve facilement ses marques sur le +téléphone et le système. + +.. _jolla: https://fr.wikipedia.org/wiki/Jolla + +L'ide +===== + +Les développeurs ont eut le bon gout d'utiliser des technologies existantes +pour faire l'environnement de développement. On dispose donc d'un package +comprenant : + +- Une IDE — Qt Creator +- Une machine virtuelle pour faire la compilation vers ARM +- Une machine virtuelle pour émuler le téléphone. + +Le développement se fait donc en QML, et un binding python est également disponible. + +.. figure:: {filename}/images/sailfish/ide.jpg + :alt: Capture d'écran de l'environnement de travail + + Capture d'écran de l'environnement de travail + + +Des exemples sont fournis, permettant de lancer quelques applications, +principalement en QML et javascript ; la partie C++ est limitée au lancement de +l'application. + +On peut remarquer des incohérences autorisées par l'éditeur et le compilateur +dans l'agencement des composants — par exemple il est possible de mettre un +composant « page » dans un autre composant « page » ce qui provoque des erreurs +à l'affichage ou dans le comportement. Quand on a pris l'habitude des langages +fortement typés où le compilateur bloque tout programme mal structuré, ça +agace… Il s'agit d'un problème dans l'éditeur Qt Creator et non sur le système +mais pour un développeur qui ne connaît pas, ce genre de problème met du temps +avant d'être compris et résolu. + +Les composants +============== + +L'interface de Sailfish est construite en enrichissant la base Qt de nouveaux +composants, qui correspondent à l'interface du téléphone. Il est donc facile de +construire une application qui s'intègre dans l'ergonomie du téléphone, puisque +l'utilisation des composants standards va donner une base à la fois sur +l'aspect visuel, mais également concernant la partie interactivité. + +Il est facile d'intégrer une application existante pour le téléphone. Par +exemple gPodder_ est présent à la fois sur android_ et sailfish_, seule +l'interface graphique diffère entre les deux projets. + +.. _gPodder: https://github.com/gpodder +.. _android: https://github.com/gpodder/gpodder-android +.. _sailfish: https://github.com/gpodder/gpodder-sailfish + +Il est facile de coder en Python grâce à la librairie PyOtherSide_, qui permet +de faire la liaison entre la partie QML et du code python. Sans toucher au C++, +on dispose donc des briques nécessaires pour pouvoir se faire une application +complète assez rapidement. + +.. _PyOtherSide: http://thp.io/2011/pyotherside/ + +La documentation +================ + +La documentation ne couvre que la partie composant graphique de QML. Les +composants propres au système Sailfish OS sont bien décrits et l'aide est +intégrée à Qt Creator sans qu'il soit nécessaire d'aller chercher sur le net +(la documentation autrefois disponible en ligne a été retirée lors de la +dernière diffusion de l'environnement de développement ; on trouve donc de +nombreux liens qui pointent désormais vers des pages inaccessibles…) + +Par contre, le fonctionnement des binding python (par exemple) n'est pas +couvert, et il est nécessaire de parcourir le code des autres projets pour +comprendre comment utiliser telle fonctionnalité. + +La compilation +============== + +À travers quelques clics, il est facile de changer la cible de la compilation : + +- Un exécutable à lancer dans l'émulateur +- Un RPM à destination d'une plate-forme ARM +- Un RPM pour une architecture locale + +Comme dit plus haut, je n'ai pas testé l'écriture d'application C++, cela +facilite la chaîne de compilation… Si l'on se contente d'une application +Python, on dispose alors d'une chaîne de compilation très facile à mettre en +place. + +Bilan +===== + +Je n'ai eu aucun problème à installer et lancer l'environnement de +développement. Tout fonctionne correctement dès l'installation sans rien avoir +à configurer. + +Les technologies utilisées sont plutôt bien choisies (au moins pour quelqu'un +qui a déjà son PC sous linux), et actuelles. Je pense que le pari d'avoir +choisi Qt est gagnant, autant pour l'équipe de développement du système, qui +dispose déjà d'un environnement bien construit que pour le développeur +d'application qui trouve facilement de la documentation pour son besoin. On +sent par contre la jeunesse de l'environnement à travers les petits problèmes +mentionnés ci-dessus. + +L'émulateur tourne dans une image virtualbox. Il est possible de se connecter à +la machine via ssh, ce qui permet d'accéder au système, il n'y a pas de +limitation d'accès et il est possible d'être root comme sur le téléphone. + +Sur mon poste, l'environnement est beaucoup plus lent que le téléphone, il est +parfois nécessaire d'attendre un moment avant de charger une page et qu'une +animation se termine. + +J'aborderai dans un autre article la question de la sécurité des applications. diff --git a/content/images/hacking/2294144289_a54db90ac5_q.jpg b/content/images/hacking/2294144289_a54db90ac5_q.jpg new file mode 100644 index 0000000..1c937d0 Binary files /dev/null and b/content/images/hacking/2294144289_a54db90ac5_q.jpg differ diff --git a/content/images/icons/tsumego_150.jpg b/content/images/icons/tsumego_150.jpg new file mode 100644 index 0000000..b9e5102 Binary files /dev/null and b/content/images/icons/tsumego_150.jpg differ diff --git a/content/images/sailfish/ide.jpg b/content/images/sailfish/ide.jpg new file mode 100644 index 0000000..cfebf93 Binary files /dev/null and b/content/images/sailfish/ide.jpg differ diff --git a/content/images/sailfish/sailfish.jpg b/content/images/sailfish/sailfish.jpg new file mode 100644 index 0000000..7d63a69 Binary files /dev/null and b/content/images/sailfish/sailfish.jpg differ diff --git a/pelicanconf.py b/pelicanconf.py index a6da2bf..c31ac2c 100755 --- a/pelicanconf.py +++ b/pelicanconf.py @@ -54,6 +54,8 @@ PLUGIN_PATHS = ['plugins'] PLUGINS = ['related_posts', 'typogrify'] +RELATED_POSTS_IGNORE_TAGS = ["Libre"] + SUMMARY_MAX_LENGTH=100 DOCUTILS_SETTINGS={ diff --git a/plugins/related_posts/related_posts.py b/plugins/related_posts/related_posts.py old mode 100644 new mode 100755 index dff03c5..a0cfa15 --- a/plugins/related_posts/related_posts.py +++ b/plugins/related_posts/related_posts.py @@ -14,14 +14,15 @@ def add_related_posts(generator): # get the max number of entries from settings # or fall back to default (5) numentries = generator.settings.get('RELATED_POSTS_MAX', 5) + ignore_tags = generator.settings.get('RELATED_POSTS_IGNORE_TAGS', []) # Skip all posts in the same category as the article skipcategory = generator.settings.get('RELATED_POSTS_SKIP_SAME_CATEGORY', False) for article in generator.articles: # set priority in case of forced related posts if hasattr(article,'related_posts'): - # split slugs + # split slugs related_posts = article.related_posts.split(',') - posts = [] + posts = [] # get related articles for slug in related_posts: i = 0 @@ -40,7 +41,7 @@ def add_related_posts(generator): continue # score = number of common tags - related = chain(*(generator.tags[tag] for tag in article.tags)) + related = chain(*(generator.tags[tag] for tag in article.tags if tag.name not in ignore_tags)) if skipcategory: related = (other for other in related if other.category != article.category) @@ -49,8 +50,8 @@ def add_related_posts(generator): # remove itself scores.pop(article, None) - article.related_posts = [other for other, count + article.related_posts = [other for other, count in scores.most_common(numentries)] def register(): - signals.article_generator_finalized.connect(add_related_posts) \ No newline at end of file + signals.article_generator_finalized.connect(add_related_posts) -- cgit v1.2.3