summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSébastien Dailly <sebastien@chimrod.com>2015-03-21 11:32:09 +0100
committerSébastien Dailly <sebastien@chimrod.com>2015-03-25 21:30:13 +0100
commit3fcddf78f965a2c5ee0a9602708899fb0e72a7c0 (patch)
treee6e1ea32bde1e0e98be7e5595172a12938ea74b7
parent9823d9e70be435e5a86f9d51489d85b6c6ba7a69 (diff)
Article on sailfish developpement
-rwxr-xr-xcontent/Informatique/2015-03-25-sailfish.rst152
-rw-r--r--content/images/hacking/2294144289_a54db90ac5_q.jpgbin0 -> 12826 bytes
-rw-r--r--content/images/icons/tsumego_150.jpgbin0 -> 8119 bytes
-rw-r--r--content/images/sailfish/ide.jpgbin0 -> 47934 bytes
-rw-r--r--content/images/sailfish/sailfish.jpgbin0 -> 2856 bytes
-rwxr-xr-xpelicanconf.py2
-rwxr-xr-x[-rw-r--r--]plugins/related_posts/related_posts.py11
7 files changed, 160 insertions, 5 deletions
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
--- /dev/null
+++ b/content/images/hacking/2294144289_a54db90ac5_q.jpg
Binary files differ
diff --git a/content/images/icons/tsumego_150.jpg b/content/images/icons/tsumego_150.jpg
new file mode 100644
index 0000000..b9e5102
--- /dev/null
+++ b/content/images/icons/tsumego_150.jpg
Binary files differ
diff --git a/content/images/sailfish/ide.jpg b/content/images/sailfish/ide.jpg
new file mode 100644
index 0000000..cfebf93
--- /dev/null
+++ b/content/images/sailfish/ide.jpg
Binary files differ
diff --git a/content/images/sailfish/sailfish.jpg b/content/images/sailfish/sailfish.jpg
new file mode 100644
index 0000000..7d63a69
--- /dev/null
+++ b/content/images/sailfish/sailfish.jpg
Binary files 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
index dff03c5..a0cfa15 100644..100755
--- 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)