Browse Source

Script to upload to Known

Phyks (Lucas Verney) 4 years ago
parent
commit
cdc85fbbe3
5 changed files with 183 additions and 114 deletions
  1. 2
    2
      blog/2014/11/index.html
  2. 74
    111
      blog/2014/index.html
  3. 1
    1
      blog/rss.xml
  4. 30
    0
      raw/2014/11/bmc.md.ignore
  5. 76
    0
      script.py

+ 2
- 2
blog/2014/11/index.html View File

@@ -16,7 +16,7 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (3)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (3)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (8)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (2)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (2)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (7)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (6)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (8)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (2)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (7)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (2)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (6)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (6)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (16)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (4)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (4)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (14)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (12)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (16)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (4)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (2)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (14)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (4)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
@@ -28,7 +28,7 @@
28 28
                         <ul id="sidebar-links">
29 29
                             <li><a href="//phyks.me/contact.html" title="Contact">Me contacter</a></li>
30 30
                             <li class="monospace"><a href="//links.phyks.me" title="Mon Shaarli">find ~phyks -type l</a></li>
31
-                            <li><a href="https://github.com/phyks/" title="Github">Mon Github</a></li>
31
+                            <li><a href="https://github.com/phyks/" rel="me" title="Github">Mon Github</a></li>
32 32
                             <li><a href="//phyks.me/divers.html" title="Divers">Divers</a></li>
33 33
                         </ul>
34 34
                 </aside>

+ 74
- 111
blog/2014/index.html View File

@@ -28,7 +28,7 @@
28 28
                         <ul id="sidebar-links">
29 29
                             <li><a href="//phyks.me/contact.html" title="Contact">Me contacter</a></li>
30 30
                             <li class="monospace"><a href="//links.phyks.me" title="Mon Shaarli">find ~phyks -type l</a></li>
31
-                            <li><a href="https://github.com/phyks/" title="Github">Mon Github</a></li>
31
+                            <li><a href="https://github.com/phyks/" rel="me" title="Github">Mon Github</a></li>
32 32
                             <li><a href="//phyks.me/divers.html" title="Divers">Divers</a></li>
33 33
                         </ul>
34 34
                 </aside>
@@ -45,121 +45,84 @@
45 45
                 <div id="articles">
46 46
 <article>
47 47
 	<aside>
48
-		<p class="day">01</p>
49
-		<p class="month">Mars</p>
48
+		<p class="day">09</p>
49
+		<p class="month">Novembre</p>
50 50
 	</aside>
51 51
 	<div class="article">
52
-		<header><h1 class="article_title"><a href="//phyks.me/2014/03/fairphone.html">Retour sur mon fairphone</a></h1></header>
53
-		<!--
54
-	@author=Phyks
55
-	@date=01032014-1743
56
-	@title=Retour sur mon fairphone
57
-	@tags=Smartphone
52
+		<header><h1 class="article_title"><a href="//phyks.me/2014/11/ipv6_kimsufi.html">Getting ipv6 to work with a Kimsufi server</a></h1></header>
53
+		<!-- 
54
+    @author=Phyks
55
+    @date=09112014-1945
56
+    @title=Getting ipv6 to work with a Kimsufi server
57
+    @tags=Phyks
58 58
 -->
59
-<p>J'ai acheté un <a href="http://fairphone.com/">Fairphone</a> en novembre, et je l'ai reçu il y a quelques semaines maintenant. Je n'ai pas encore eu le temps d'écrire dessus, mais c'est désormais corrigé. Ce Fairphone vient remplacer mon ancien Galaxy S3, qui tournait sous Cyanogen 9, mais qui n'a pas arrêté de me poser des problèmes (problème avec la puce son qui se coupait parfois, présent chez de nombreux utilisateurs apparemment, entre autres).</p>
60 59
 
61
-<p>Note&nbsp;: Ceci est un petit compte-rendu après quelques semaines d'utilisation. Je mettrai cet article à jour au fur et à mesure, si de nouveaux problèmes apparaissent ou sont, au contraire, résolus.</p>
62
-
63
-<p style="text-align:center;"><a href="//phyks.me/2014/03/fairphone_1.jpg"><img src="//phyks.me/2014/03/fairphone_1.jpg" style="max-width: 45%; max-height: 500px;" alt="Face avant"/></a><a href="//phyks.me/2014/03/fairphone_5.jpg"><img src="//phyks.me/2014/03/fairphone_5.jpg" style="max-width: 45%; max-height: 500px;" alt="Face arrière"/></a></p>
64
-
65
-<h2>Un Fairphone ?</h2>
66
-    <p>Tout d'abord, qu'est-ce que c'est que cette étrange bête ? Fairphone est une initiative d'un groupe de hollandais pour proposer une alternative plus équitable aux smartphones actuels. Le projet a été crowdfundé pendant un peu plus d'un an, et le premier lot de 25 000 Fairphones a été livré en janvier.</p>
67
-
68
-    <p>Ils se sont engagés sur un certain nombre de points, parmi lesquels&nbsp;:</p>
69
-    <ul>
70
-        <li>Transparence, ils communiquent précisément sur ce que contient leur téléphone, sur les coûts et il y a notamment <a href="http://www.fairphone.com/wp-content/uploads/2013/09/Fairphone_Cost_Breakdown_and_Key_Sept2013.pdf">une infographie disponible</a> pour détailler le prix du téléphone.</li>
71
-        <li>Ils ont dans la mesure du possible essayé d'avoir un produit plus équitable que ce qui existe aujourd'hui. En particulier, leurs fournisseurs s'engagent sur un certain nombre de points (conditions de travail dans les usines en Chine, non soutien aux guerillas liées au commerce de métaux précieux en Afrique…). Il n'a pas toujours été possible de faire ce qu'ils espéraient (ils sont par exemple obligés de produire en Chine, même s'ils auraient voulu avoir un produit européen), mais ils ont bien respectés leurs engagements dans l'ensemble.</li>
72
-        <li>Libération des <em>datasheets</em> et des logiciels. C'est là un point très compliqué dans le monde du mobile. En effet, le secteur de la téléphonie mobile est un des secteurs les plus <em>closed source</em> qui existe, et il est très difficile de faire bouger ça. Ils ont essayer de convaincre leurs fournisseurs de diffuser certaines <em>datasheets</em>, mais ce n'est pas facile, et je ne crois pas qu'ils aient beaucoup réussi à faire bouger les choses de ce côté-là. En revanche, leurs logiciels sont open source et ils livrent le Fairphone avec un Android stock, sans applications Google préinstallées, ce qui est un très bon point par rapport aux autres fabricants. Ils ont également dit qu'ils soutiendraient le port de Firefox OS sur le Fairphone si des développeurs voulaient y travailler (mais qu'ils ne pourraient pas l'assurer eux-mêmes).</li>
73
-    </ul>
74
-
75
-    <p>Finalement, on a un smartphone assez similaire au Wiko Cink Five, il me semble, pour 325€, ce qui est certes plus cher, mais n'avance pas les mêmes atouts. Voyons voir ce que vaut le Fairphone après quelques semaines d'utilisation.</p>
76
-
77
-<h2>Ergonomie et design</h2>
78
-    <p>Le Fairphone a un écran de 4"3. Ce n'est pas tant que ça pour un smartphone actuel (on est plus autour de 5" aujourd'hui), mais au moins ça rentre dans une poche. Quand je le compare à mon ancien Galaxy S3, il paraît tout petit. De nombreuses personnes préfèrent avoir un grand écran, mais quitte à avoir des écrans de 5" et plus, autant prendre une tablette. En fait, ces tailles me paraissent un peu bancales, à mi-chemin entre un téléphone et une tablette&nbsp;: pas facile à prendre en main d'une seule main, trop petit pour deux mains, pas pratique dans une poche… Finalement, je suis plutôt favorable à une diagonale plus petite. À titre de comparaison, c'est à peu près la même diagonale d'écran que l'iPhone 5 (4") et il a la même taille à quelques millimètres près.</p>
79
-
80
-    <p>Le design est plutôt soigné et l'appareil est assez joli, avec son liseret blanc et son dos en alu. On notera la présence d'un bouton “Marche/Arrêt” classique au sommet de l'appareil et un bouton de réglage du volume sur le côté. Les trois boutons en façade (Menu / Accueil / Retour) sont en fait des touches tactiles. Elles sont assez jolies, mais on a tendance à les effleurer par inadvertance en tapant des messages. On s'y habitue, mais je préfère clairement avoir des boutons physiques à cet endroit.</p>
81
-
82
-    <p>Pour une fois, le capot arrière s'enlève assez facilement, contrairement à de nombreux smartphones avec lesquels on a peur de briser la fine couche de plastique qui sert de capot arrière. Derrière, on trouve deux logements pour carte SIM (SIM classique, et non micro-SIM, on dirait que la mode des toutes petites SIM est passée ?), l'emplacement de la batterie et un emplacement Micro-SD pour étendre le stockage de 16Go initial.</p>
83
-
84
-    <p>Un point négatif quand même&nbsp;: l'appareil photo est légèrement sortant du téléphone. Du coup, quand le téléphone est posé à plat sur une table, il repose sur l'appareil photo, et sur un des coins, mais il manque un troisième point d'appui au même niveau. Conclusion&nbsp;: il est bancal quand il est posé sur une table. C'est dommage car ce n'est vraiment pas grand chose, mais ça complique grandement son utilisation d'une seule main, en le posant sur une table.</p>
85
-
86
-    <p style="text-align:center;"><a href="//phyks.me/2014/03/fairphone_7.jpg"><img src="//phyks.me/2014/03/fairphone_7.jpg" style="max-width: 45%; max-height: 500px;" alt="Vue de côté"/></a></p>
87
-
88
-<h2>Écran</h2>
89
-    <p>L'écran est de plutôt bonne qualité, avec une bonne résolution (960x540 pixels, pour une densité de 256ppi), similaire au Wiko Cink Peax 2. J'ai eu auparavant un iPhone 4 et un Galaxy S3 et la qualité de l'écran ne me perturbe pas particulièrement (ni en bien, ni en mal), mais mon utilisation n'est peut être pas la plus propice pour juger de la qualité de l'écran ? Je n'ai pas eu l'occasion de le comparer côte à côte avec mon Galaxy (notamment parce qu'avec un écran cassé, le rendu n'aurait pas été à son avantage), donc je ne peux pas en dire beaucoup plus…</p>
90
-
91
-    <p>En parlant d'écran cassé, l'écran a également une vitre "Gorilla Glass" censée être assez résistante. Ceci dit, cela n'a pas empêché la vitre de mon Galaxy de s'exploser à la moindre chute de 10cm avec une coque de protection&nbsp;:/</p>
92
-
93
-    <p>Une remarque quand même&nbsp;: l'écran a tendance à garder pas mal les traces de doigt. Plus que le SGS3 en tout cas je dirais.</p>
94
-
95
-    <p>Un autre point important à noter, pour ne pas être surpris, est la présence d'un réseau de petits points sur l'écran, que l'on voit sous certaines conditions d'éclairage. C'est un peu perturbant au début, car on commence par en voir un, et on pense à un pixel mort. Puis on en voit d'autres, et on finit par se rendre compte qu'ils sont trop bien alignés pour que ce soit un problème. Finalement, on trouve la réponse sur le <a href="https://fairphone.zendesk.com/hc/communities/public/questions/200680167-Touch-screen-grid-visible-">forum de support Fairphone</a>&nbsp;: il s'agit d'une grille pour l'écran tactile, qui est visible sous certaines conditions d'éclairage. Ils ont dû adopter cette technologie à cause d'un brevet sur les autres solutions. Personnellement, je n'y fais pas particulièrement attention et cela ne me dérange pas et on ne le voit que sous certaines conditions bien particulières (donc pas dérangeant pour des vidéos a priori), mais il faut le savoir pour ne pas être surpris.</p>
96
-
97
-<h2>Système</h2>
98
-    <p>Le Fairphone tourne sous une version stock d'Android 4.2.2. Par défaut, aucune application Google n'est installée (libre à vous de les installer au besoin). Personnellement, venant de Cyanogen Mod sur mon Galaxy S3, je suis resté sans applications Google et trouve tout ce dont j'ai besoin sur F-Droid. Les seules applications préinstallées sont&nbsp;:</p>
99
-    <ul>
100
-        <li>Une application pour <a href="http://www.ifixit.com/">iFixIt</a></li>
101
-        <li>Un launcher un peu différent (FairphoneHome)</li>
102
-        <li>Un widget pour couper le téléphone (passage en mode avion) pendant un certain temps à définir ("Profitez d'un moment de tranquillité"), appelé Peace Of Mind.</li>
103
-        <li>Une application pour mettre à jour le système OTA, et profiter des corrections de bug apportées par Fairphone.</li>
104
-    </ul>
105
-
106
-    <p>Tous ces logiciels sont open-source, iFixIt étant disponible sur F-Droid et les autres étant disponibles sur <a href="https://github.com/Kwamecorp/Fairphone">Github</a>. Je vous laisse d'ailleurs aller voir le dépôt Github pour plus d'images de l'interface et des widgets.</p>
107
-
108
-    <p>On a donc un système Android de base, avec une très légère surcouche, le tout étant open-source, ce qui est très rare sur les smartphones actuels. Pas d'autres bloatwares que ceux dans Android d'origine donc.</p>
109
-
110
-    <p>La légère surcouche graphique est très jolie, et va plutôt bien avec le look du Fairphone, à mon avis. Cf <a href="http://lehollandaisvolant.net/?d=2013/10/07/14/09/21-pourquoi-le-flat-design-tel-quil-est-utilise-actuellement-sux">cet article sur le flat design chez le hollandais volant</a>, je trouve que le Fairphone n'en est pas trop victime.</p>
111
-
112
-    <p style="text-align:center;"><a href="//phyks.me/2014/03/fairphone_2.jpg"><img src="//phyks.me/2014/03/fairphone_2.jpg" style="max-width: 45%; max-height: 500px;" alt="Écran"/></a><a href="//phyks.me/2014/03/fairphone_6.jpg"><img src="//phyks.me/2014/03/fairphone_6.jpg" style="max-width: 45%; max-height: 500px;" alt="Batterie"/></a></p>
113
-
114
-    <p>Un des changements apportés par la surcouche graphique est la présence d'un lanceur rapide lorsqu'on touche le bord droit de l'écran (uniquement sur l'écran d'accueil et sur le menu des applications). C'est d'ailleurs grâce à lui qu'on accède à la liste des applications. Il est assez pratique, une fois qu'on s'y est un peu habitué. En effet, au début, on l'appelle souvent sans faire exprès en naviguant dans la liste des applications.</p>
115
-    <p style="text-align:center;"><a href="//phyks.me/2014/03/fairphone_3.jpg"><img src="//phyks.me/2014/03/fairphone_3.jpg" style="max-width: 45%; max-height: 500px;" alt="Homescreen"/></a><a href="//phyks.me/2014/03/fairphone_4.jpg"><img src="//phyks.me/2014/03/fairphone_4.jpg" style="max-width: 45%; max-height: 500px;" alt="Homescreen"/></a></p>
116
-
117
-    <p>P.S.&nbsp;: Parmi les applications de base, on trouve également une application “TODO”, un enregistreur de son, une application pour écouter la radio FM, une application de notes et un gestionnaire de fichier. Me corriger si je me trompe, mais il me semble que ces applications sont intégrées à Android stock.</p>
118
-
119
-<h2>Appareil photo</h2>
120
-    <p>L'appareil photo me semble raisonnable, même si j'avoue ne pas avoir beaucoup de références en la matière. Par contre, l'application n'arrêtait pas de m'afficher le tutoriel. En fait, il suffit de le suivre en entier (ce qui prend environ 30 secondes), et ensuite vous ne le verrez plus. Sinon, vous pouvez aussi installer l'application Camera stock disponible sur f-droid.</p>
121
-
122
-    <p>Pour juger plus en détails de la qualité des photos, je vous laisse regarder les photos disponibles <a href="//phyks.me/2014/03/photos_fairphone/">ici</a> que j'ai prises avec mon fairphone.</p>
123
-
124
-<h2>Quelques problèmes rencontrés</h2>
125
-    <h3>GPS</h3>
126
-        <p>Comme pour de nombreux utilisateurs, le premier fix GPS a été très long à avoir. En fait, je n'ai même pas réussi à l'avoir en intérieur… Mais en activant l'A-GPS, en téléchargeant les données EPO et en faisant un petit tour à pied dehors, le fix GPS est assez rapide (&lt; 5 minutes). Une fois ce premier fix réalisé, mon GPS se fixe quasiment instantanément (&lt; 10 secondes). Voir notamment <a href="http://forum.xda-developers.com/wiki/Fairphone_Fairphone/Guides#How_to_improve_the_GPS_signal">cette page</a> chez xda-developpers et <a href="https://fairphone.zendesk.com/hc/communities/public/questions/200690467--Searching-for-GPS-">ce thread</a> sur le forum fairphone pour plus d'informations.</p>
127
-
128
-    <h3>Gestion des cartes SIM</h3>
129
-        <p>La gestion des cartes SIM diffère un peu de ce que j'avais sur mon Galaxy S3. En particulier, le Fairphone a deux emplacements SIM, et vous affichera donc une notification si vous n'en avez qu'une seule d'insérée. De plus, à chaque sortie du mode avion, votre code PIN vous sera demandé (alors que mon Galaxy S3 ne le demandait qu'une fois par démarrage du téléphone). Enfin, étant chez Free, je suis souvent en itinérance (nationale, sur le réseau Orange). Le Fairphone ne fait aucune différence entre l'itinérance nationale et internationale, et vous aurez donc droit à quelques messages vous prévenant que vous êtes en itinérance sur la carte SIM utilisée et vous demandant de confirmer l'envoi d'un SMS (par exemple). Il est possible de désactiver les confirmations répétées, et il ne restera alors plus qu'une seule alerte à l'envoi d'un SMS à la sortie du mode avion. Il faut également penser à désactiver l'itinérance quand on est à l'étranger du coup, pour éviter les surcoûts.</p>
130
-
131
-        <p>Je n'ai pas encore eu l'occasion de tester le téléphone avec deux SIMs à la fois, mais a priori c'est très classique. On peut spécifier les cartes SIMs par défaut à utiliser, et la carte SIM utilisée apparaît en encart dans chaque SMS, etc. Je devrais pouvoir le tester d'ici un mois je pense, je mettrai à jour l'article en conséquence.</p>
132
-
133
-    <h3>Divers problèmes</h3>
134
-        <ul>
135
-            <li>J'ai eu droit à quelques reboots de l'interface en utilisant Firefox (notamment en utilisant des pages webRTC, qui sont assez lourdes). Rien de bien méchant, et je ne sais pas en fait si cela vient du Fairphone ou de firefox.</li>
136
-            <li>J'ai eu droit une fois à un blocage complet (écran éteint, bouton marche/arrêt sans effet). J'ai du redémarrer le téléphone en restant longtemps appuyé sur le bouton marche/arrêt, mais je ne sais pas exactement ce qu'il s'est passé.</li>
137
-            <li>Quelques bugs de traductions. En particulier, "reboot" n'est pas traduit en "redémarrer", et de temps à autres l'application de SMS m'affiche "Nom d'artiste inconnu" au lieu de l'heure du dernier message.</li>
138
-        </ul>
139
-
140
-<h2>Divers</h2>
141
-    <ul>
142
-        <li>Toutes les spécifications détaillées sont disponibles <a href="http://buy-a-phone-start-a-movement.fairphone.com/en/specs/">ici</a>.</li>
143
-        <li>Le DAS du téléphone est assez faible (0.329 W/kg au niveau de la tête, 0.693 W/kg au niveau du corps).</li>
144
-        <li>Pas de NFC intégré. Je n'ai personnellement eu l'occasion d'utiliser le NFC de mon Galaxy S3 que pour m'amuser à scanner les badges que j'avais dans mon portefeuille, donc ce n'est pas un bien grand mal.</li>
145
-        <li>Pour éviter de multiplier les chargeurs / écouteurs inutiles, le téléphone est vendu seul dans sa boîte. En effet, la plupart des gens ont déjà plusieurs chargeurs et écouteurs chez eux et il est inutile d'en rajouter un qui traînera au fond d'une armoire. Libre à vous d'en prendre un en option au besoin.</li>
146
-    </ul>
147
-
148
-<h2>Conclusion</h2>
149
-    <p>En conclusion, je suis très satisfait de mon Fairphone. Il est certes un peu plus cher que la concurrence, et présente quelques défauts de jeunesse, mais il me paraît tout à fait raisonnable et une bonne alternative aux autres téléphones des grands constructeurs. Par contre, étant édité à peu d'exemplaires, je doute qu'on voit beaucoup d'accessoires dédiés dans les prochains mois (notamment de housses parfaitement adaptées à son <em>form factor</em>). Je ne suis pas doué pour les conclusions, donc je vous laisse conclure tout seul&nbsp;:)</p>
150
-
151
-    <p>Note (car il faut bien un peu de troll)&nbsp;: on se rappellera des défauts des problèmes sur les premiers smartphones (et pas que les premiers en fait) des autres constructeurs, notamment l'absence de 3G sur le premier iPhone, ou encore les <a href="http://www.iphon.fr/post/2009/06/19/L-iPhone-3G-S-peut-aussi-avoir-la-jaunisse">problèmes d'écran jaune sur l'iPhone 3GS</a> ou récemment sur <a href="http://www.macbidouille.com/news/2012/09/22/l-iphone-5-a-un-ecran-plus-jaune?iact=rc&amp;dur=349&amp;page=1&amp;start=0&amp;ndsp=50&amp;ved=0CFcQrQMwAA">l'iPhone 5</a>.</p>
152
-
153
-    <p>Edit&nbsp;: J'ai retrouvé le lien vers l'article sur le site du projet replicant qui parlait de l'open-source et du Fairphone : <a href="http://blog.replicant.us/2013/11/fairphone/">http://blog.replicant.us/2013/11/fairphone/</a>.</p>
154
-
155
-    <p>Edit 2&nbsp;: J'ai oublié de parler de la batterie et de l'autonomie… C'est donc réparé avec ce petit rajout. L'autonomie est plutôt bonne, dans la moyenne des smartphones actuels (en tout cas, sensiblement comparable à celle de mon ancien S3). Je tiens une journée (8h -> 24h) en relevant 5 comptes e-mails en push, en allant sur internet dans le bus (1h) et à quelques occasions dans la journée, et en passant la journée dans une zone pas très bien couverte (je finis la journée avec entre 10% et 30% de batterie selon les jours). Bref, comme d'hab', on tient une journée sans trop de difficulté (sauf utilisation ultra-intensive, mais pour ça, on ne peut pas grand chose) mais il faut quand même recharger tous les soirs. En restreignant un peu mon utilisation, je pense que je pourrais tenir deux jours.</p>
156
-
157
-    <p>Edit 3&nbsp;: Le blocage complet et le reboot de l'interface sont liés et sont un seul et même problème apparemment. Cela arrive aussi avec le contrôle du volume. Je l'ai eu quelques fois depuis que j'ai mon Fairphone, et c'est assez embêtant comme bug. Mais Fairphone est au courant et le problème devrait être corrigé <a href="https://fairphone.zendesk.com/hc/en-us/articles/201804933-When-will-the-new-software-update-1-2-be-available-">dans la prochaine mise à jour</a> qui arrivera d'ici peu. De même pour les problèmes <a href="https://fairphone.zendesk.com/hc/en-us/articles/201852278-National-Roaming-Mostly-Solved-">d'itinérance nationale</a> qui devraient être résolus bientôt. J'ai également depuis peu une deuxième carte SIM et rien à redire sur la gestion des cartes SIM : on peut choisir la SIM par défaut pour chaque action (SMS, Appels, Internet, …) et la gestion des deux cartes est très complète. Quand à l'autonomie, je tiens toujours un peu plus d'une journée avec mon utilisation. Par exemple, ce soir, j'en suis à 15h sur batterie, 5 comptes e-mails en push toute la journée, une couverture réseau assez aléatoire et 2 à 3h sur Internet en 3G et il me reste encore 22% de batterie.</p>
158
-
159
-    <p>Edit 4&nbsp; J'ai envoyé un e-mail pour rapporter les issues remarquées à Fairphone et ils m'ont répondu (avec un peu de retard, mais quand même) qu'ils prenaient note et corrigeraient. Et Fairphone <a href="http://buy-a-phone-start-a-movement.fairphone.com/en/spareparts/">vend des pièces détachées</a> et a mis des guides pour réparer son téléphone.</p>
60
+<p>Starting from yesterday, my server (<a href="http://phyks.me">phyks.me</a>) should be available using ipv6. This was not the case before due to laziness and a lack of configuration. However, as setting ipv6 on a Kimsufi seems to not be really straight-forward (out of date documentation, information disseminated over the web and difficult to find between basic mistakes and real errors…), I think it may be useful to keep some notes here. Hope it can help anyone.</p>
61
+<p>The <a href="http://help.ovh.co.uk/Ipv4Ipv6">doc</a> explains that OVH has not set ipv6 autoconfig on their servers, and that you should configure the default route and IP address yourself.</p>
62
+<p>To find your ip address, it is pretty easy: just go to your manager and look for the ipv6 address in the IP section.</p>
63
+<p><code>ip -6 addr add YOUR_IPV6_ADDRESS/64 dev eth0</code></p>
64
+<p>This will add the ipv6 address to your network device. Then, you have to manually add the default gateway. To get its address, you should remove the last two digits of your ipv6 address and put <code>FF:FF:FF:FF:FF</code> instead. This means that <code>2001:41d0:1:4462::1/64</code> will give you a default gateway <code>2001:41d0:1:44FF:FF:FF:FF:FF</code>.</p>
65
+<p>Then, you should add a default route <em>via</em> this gateway</p>
66
+<p><code>ip -6 r a default via 2001:41d0:1:44FF:FF:FF:FF:FF</code></p>
67
+<p>This is the standard procedure explained in OVH guide and many posts around the web such as <a href="https://www.skyminds.net/serveur-dedie-mise-en-place-de-lipv6/">this one</a> (in French). It may work in some cases, however, in my case, I could not reach the default gateway and then, I could not add this route.</p>
68
+<p>I found <a href="http://forum.ovh.co.uk/showthread.php?6435-Getting-IPv6-working-on-kimsufi&amp;p=44965&amp;viewfull=1#post44965">a comment</a> on the OVH forum giving a solution.</p>
69
+<p>You should first add a route to reach the gateway</p>
70
+<p><code>ip -6 r a 2001:41d0:1:44FF:FF:FF:FF:FF dev eth0</code></p>
71
+<p>and then, you can add the default route <em>via</em> this gateway</p>
72
+<p><code>ip -6 r a default via 2001:41d0:1:44FF:FF:FF:FF:FF</code></p>
73
+		<footer><p class="date">Le 09/11/2014 à 19:45</p>
74
+		<p class="tags">Tags : <a href="//phyks.me/tags/Phyks.html">Phyks</a></p></footer>
75
+	</div>
76
+</article>
77
+<article>
78
+	<aside>
79
+		<p class="day">08</p>
80
+		<p class="month">Novembre</p>
81
+	</aside>
82
+	<div class="article">
83
+		<header><h1 class="article_title"><a href="//phyks.me/2014/11/bloomysearch.html">Proof-of-concept: BloomySearch, a (JavaScript) client-side search engine for static websites</a></h1></header>
84
+		<!-- 
85
+    @author=Phyks
86
+    @date=08112014-1845
87
+    @title=Proof-of-concept: BloomySearch, a (JavaScript) client-side search engine for static websites
88
+    @tags=Dev, Web
89
+-->
160 90
 
161
-		<footer><p class="date">Le 01/03/2014 à 17:43</p>
162
-		<p class="tags">Tags : <a href="//phyks.me/tags/Smartphone.html">Smartphone</a></p></footer>
91
+<h2>Overview</h2>
92
+<p>Many websites and blogs are statically generated and the webserver only serves static files. It is the case of many doc websites and more and more blogs, starting from this one, as <a href="http://jekyllrb.com/">Jekyll</a>&nbsp;/ <a href="http://blog.getpelican.com/">Pelican</a> develops.</p>
93
+<p>This is really useful to reduce the complexity of the website and the load on the webserver. All the complex logic is done at the generation.</p>
94
+<p>However, this also means you do not have dynamic pages on your website to handle search queries. Then, you are left with two (or three) choices&nbsp;:</p>
95
+<ol>
96
+<li>Use an external search engine, such as an embedded Google search box. This raises some privacy concerns and make you depends on an external service. </li>
97
+<li>(Use a JS search engine such as the <a href="http://www.airpair.com/angularjs#/10-filters-core-">filters</a> provided by Angular.JS. This only works on the displayed content, and is not a real solution). </li>
98
+<li>Stop worrying about search engine on your website and let the users <code>wget</code>-ing and <code>grep</code>-ing your website on their computers. This is not the most user-friendly solution…</li>
99
+</ol>
100
+<p>There are a couple of solutions around, mostly based on <a href="http://lunrjs.com/">Lunr.js</a> which generates an index from the articles available, and use this index for fulltext search. This is the best solution I found so far but it is still not perfect. Although there is a stemmer and an index generation to reduce the amount of data to be transferred, the data is not stored in a very efficient way, and the full index is sent as JSON. An example implementation for Jekyll is available through <a href="https://github.com/slashdotdash/jekyll-lunr-js-search">the jekyll-lunr-js-search plugin</a>.</p>
101
+<p>I had the idea of a client side search engine in mind for a while, but was facing the same problem as Lunr.js: how not to send a full (very large) index over the network to every single client&nbsp;? Not having an optimized data structure would basically mean sending twice the content of the website to the client. It may not be a practical problem nowadays, as transfer speed is not always the limiting resource, but it is still not to be considered as a good practice, in my opinion, especially if your website might be accessed from mobile devices.</p>
102
+<p>I came accross <a href="http://www.stavros.io/posts/bloom-filter-search-engine/?print">this article</a> from Stavros Korokithakis and thought something similar could be achieved directly in the browser. Instead of using a standard dictionary to store the index, this article proposes to use a Bloom filter per article. Bloom filters are very interesting probabilistic structures which can store whether an element is or not in a set, with a fixed number of bits. It can return false positives: if an element is in the set, it always returns <code>True</code>, but if an element is not in the set, it may say it is actually in, with a small probability. <a href="https://en.wikipedia.org/wiki/Bloom_filter">Wikipedia page</a> on the subject has all the necessary stuff to understand these data structures.</p>
103
+<p>I wrote it in the context of my blog, which means a Python script to generate the index at pages generation, and a client side search engine in JavaScript, running in browser.</p>
104
+<p>A demo is available <a href="https://phyks.github.io/BloomySearch/">here</a>. It contains all the articles of my blog, as of writing this article, totalizing 160k characters, and only 7kB of index, allowing 10% of false positives, which may be a bit too much for a really reliable search engine. Reducing the error rate will lead to an increase in the index size (11kB for 1% of false positives and the same amount of characters).</p>
105
+<h2>Details of the implementation</h2>
106
+<p>As JavaScript is not the easier language to use for hashing and binary data manipulation, I started by implementing the client side search engine. Then, it would be easier to adapt the Python code to the JS lib than doing the contrary. Actually, I found <a href="https://github.com/jasondavies/bloomfilter.js">this bloomfilters.js library</a> from Jason Davies which was doing most of the job and did not need many modifications. I edited it a bit to support a construction with a <code>capacity</code> and an <code>error_rate</code>, instead of an explicit number of bits and times to apply the hashing function. This forked version is available <a href="https://github.com/Phyks/bloomfilter.js/blob/master/bloomfilter.js">here</a>.</p>
107
+<p>Then, I reimplemented this library in Python, to generate readable Bloom filters for the JavaScript script.</p>
108
+<h3>Server side</h3>
109
+<p>The generation script takes every articles in a given directory and for each of them:</p>
110
+<ol>
111
+<li>It gets a set of all the words in this article, ignoring too short words. </li>
112
+<li>It applies <a href="http://tartarus.org/martin/PorterStemmer/">Porter Stemming Algorithm</a> to reduce drastically the number of words to keep. </li>
113
+<li>It generates a Bloom filters containing all of these words.</li>
114
+</ol>
115
+<p>Finally, it concatenates all the per article Bloom filters in a binary file, to be sent to the client. It also generates a JSON index mapping the id of the Bloom filter in the binary file to the corresponding URL and title for each article.</p>
116
+<h3>Client side</h3>
117
+<p>Upon loading, the JavaScript script downloads the binary file (see <a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data">this MDN doc</a> for more details) containing the Bloom filters and the JSON index, and regenerate BloomFilters on the client side.</p>
118
+<p>When the client searches for something, the JavaScript script splits the query in words and iterate over the Bloom filters to search for the words. That's it =)</p>
119
+<h2>(Fun) facts found while reimplementing the Bloom filters library in Python</h2>
120
+<p>First problem I had to deal with&nbsp;: the difference between JavaScript <code>Number</code> type and Python <code>int</code>. JavaScript has only one type for all numbers (<code>int</code> or <code>floats</code>) and it is <code>Number</code> (see <a href="https://stackoverflow.com/questions/307179/what-is-javascripts-highest-integer-value-that-a-number-can-go-to-without-losin">this SO thread</a>). They are 64-bit floating point values, with a magnitude no greater than 2<sup>53</sup>. However, when doing bitwise operations, they are casted to 32 bits before doing the operation. This is something to take care of, because Python's <code>int</code> can be 64 bits (<a href="http://legacy.python.org/dev/peps/pep-0237/">http://legacy.python.org/dev/peps/pep-0237/</a>). Then, when a bitwise operation overflows in JavaScript, it may not overflow the same way in Python.</p>
121
+<p>The solution to this problem was to use <code>ctypes.c_int</code> in Python for bitwise operations, as proposed <a href="https://stackoverflow.com/questions/1694507/difference-between-operator-in-js-and-python">here</a>.</p>
122
+<p>Another problem was the difference between modulo behaviour with negative numbers in Python and in JavaScript. Unlike C, C++ and JavaScript, Python's modulo operator (%) always return a number having the same sign as the divisor (<a href="https://stackoverflow.com/questions/3883004/negative-numbers-modulo-in-python">Source</a>). Then, we have to reimplement the C behaviour in a modulo function in Python.</p>
123
+<p>Finally, there was no “shift right adding zeros” (logical right shift) in Python, contrary to JS, see <a href="https://stackoverflow.com/questions/5832982/how-to-get-the-logical-right-binary-shift-in-python">this SO thread</a>. </p>
124
+		<footer><p class="date">Le 08/11/2014 à 18:45</p>
125
+		<p class="tags">Tags : <a href="//phyks.me/tags/Dev.html">Dev</a>, <a href="//phyks.me/tags/Web.html">Web</a></p></footer>
163 126
 	</div>
164 127
 </article>
165 128
             </div>

+ 1
- 1
blog/rss.xml View File

@@ -7,7 +7,7 @@
7 7
 		<language>fr</language>
8 8
 		<copyright>CC BY</copyright>
9 9
 		<webMaster>webmaster@phyks.me (Phyks)</webMaster>
10
-		<lastBuildDate>Fri, 26 Dec 2014 14:10:17 -0000</lastBuildDate>
10
+		<lastBuildDate>Wed, 31 Dec 2014 23:38:53 -0000</lastBuildDate>
11 11
 		<item>
12 12
 			<title>Getting ipv6 to work with a Kimsufi server</title>
13 13
 			<link>http://phyks.me/2014/11/ipv6_kimsufi.html</link>

+ 30
- 0
raw/2014/11/bmc.md.ignore View File

@@ -0,0 +1,30 @@
1
+<!--
2
+	@author=Phyks
3
+	@date=07082014-2315
4
+	@title=Gestion d'articles scientifiques avec BMC
5
+	@tags=Phyks
6
+-->
7
+
8
+Je dois stocker et retrouver de nombreux articles (scientifiques). Ce sont généralement des fichiers PDFs, qu'il faut que je garde de côté, et je dois être capable de retrouver des infos dedans. Je dois également stocker des livres numérisés en PDF et les retrouver tout pareil.
9
+
10
+Actuellement, je connais deux méthodes :
11
+
12
+1. Le lecteur du secteur, [Mendeley](http://www.mendeley.com/) qui permet d'importer ses PDFs sans y réfléchir. Il s'occupe de tout trier, de récupérer les informations dans les bases de données en ligne (auteurs, titre, revue, etc.) qui nécessiterait une recherche dans le PDF voire de l'OCR, autrement. On peut annoter ses documents, pour se rappeler qui est quoi, et il peut générer automatiquement les citations qui vont bien, dans le format voulu, quand on écrit un article ou un rapport. C'est top, mais c'est propriétaire et payant pour certaines fonctions avancées. Une grande partie du monde de la recherche l'utilise, mais c'est pas parfait quand même. Et c'est lourd et très (trop) complet, en cherchant à faire un réseau social autour de la recherche. Son concurrent open-source, [Zotero](http://zotero.org/) est aussi lourd, si ce n'est plus, peu ergonomique, et pas très performant. Bref, ce n'est pas une solution idéale.
13
+2. De l'autre côté, de nombreux chercheurs ont juste un dossier `~/Papers` et mettent tous leurs PDFs en vrac dedans. Certains tiennent un index, avec plus ou moins de succès, ou renomment les fichiers (et il faut alors garder toujours le même masque si on ne veut pas se perdre). C'est léger, fonctionnel, mais pas pratique. Et lorsqu'on rédige un document, on ne peut pas avoir facilement les données nécessaire pour citer l'article et on s'amuse alors à passer des heures sur les sites de revues pour trouver lesdites citations.
14
+
15
+Du coup, j'ai écrit un petit script en Python qui s'occupe de toutes les étapes chronophages et insupportables de la deuxième solution : [BMC](https://github.com/Phyks/BMC).
16
+
17
+Le principe est très simple : on lui donne un dossier où stocker les articles (typiquement `~/Papers`) et un masque de renommage pour renommer les fichiers PDFs. Quand on veut ajouter un fichier PDF à sa collection, on lui dit de le faire (`bmc import fichier.pdf` ou `bmc download URL`) et il s'occupe de tout :
18
+
19
+* Il va récupérer le fichier PDF ou djvu, si besoin
20
+* Il va chercher et extraire le code DOI (pour les articles) ou ISBN (pour les livres) dans le fichier
21
+* Grâce à ce code, il va automatiquement récupérer les données bibliographiques associées, qu'il va stocker au format `bibtex`, pour être facilement réutilisé avec LaTeX.
22
+* Finalement, il va stocker le fichier à importer dans le répertoire d'import et ajouter les données bibliographiques à un fichier d'index (`index.bib`).
23
+
24
+Comme ça, tout se fait tout seul sans qu'on y pense. Il peut utiliser d'éventuels proxy (y compris SOCKS) pour récupérer les articles (si vous travaillez chez vous mais que votre institution vous fournit un proxy pour télécharger des articles par exemple). Il peut alors chercher également les nouvelles versions disponibles pour les articles ajoutés (typiquement sur [arxiv](http://arxiv.org/), un dépôt d'articles en [open-access](http://pablo.rauzy.name/openaccess/introduction.html#libre-acces)). Il peut aussi comparer l'état actuel de votre index et de votre répertoire de stockage, pour identifier d'éventuels problèmes (articles non ajoutés par le script ou articles mal supprimés). On peut aussi ajouter un tag sur chaque fichier, qui se retrouvera alors classé dans un sous-répertoire, pour organiser ses articles par projet.
25
+
26
+Lorsque vous voulez citer un article, il vous suffit de demander à BMC l'entrée Bibtex correspondante (`bmc export ARTICLE`).
27
+
28
+Comme il utilise des technos établies (citations Bibtex pour l'index + stockage en fichiers), il n'y a aucun risque de perdre ses données si le script n'est plus maintenu, ou n'est plus compatible. Tout sera toujours accessible, comme ce que vous auriez fait à la main. Et vous pouvez vous passer du script et aller vous-même chercher dans l'index l'entrée qui vous convient.
29
+
30
+Enfin, j'espère ajouter prochainement de nouvelles fonctionnalités, selon ce qui est le plus demandé : recherche dans la base de données (qui est d'ores et déjà possible en faisant une recherche dans le fichier d'index, recherche de doublons, recherche de version publiée pour les articles en open-access, …). N'hésitez pas à me faire des retours !

+ 76
- 0
script.py View File

@@ -0,0 +1,76 @@
1
+#!/usr/bin/env python3
2
+from bs4 import BeautifulSoup
3
+from bs4.element import Comment
4
+import os
5
+import base64
6
+import hashlib
7
+import hmac
8
+import requests
9
+
10
+"""
11
+Script to import all the articles from this blog in Known.
12
+
13
+Must be run with a correct API_KEY (see below) and from the `gen/` folder.
14
+"""
15
+
16
+
17
+def list_directory(path):
18
+    fichier = []
19
+    for root, dirs, files in os.walk(path):
20
+        for i in files:
21
+            fichier.append(os.path.join(root, i))
22
+    return fichier
23
+
24
+
25
+def hmac_sha256(message, key):
26
+    return base64.b64encode(hmac.new(key.encode("utf-8"),
27
+                                     message.encode("utf-8"),
28
+                                     digestmod=hashlib.sha256)
29
+                            .digest()).decode("utf-8")
30
+
31
+
32
+def known_api(username, api_key, type, payload):
33
+    headers = {
34
+        "X-KNOWN-USERNAME": username,
35
+        "X-KNOWN-SIGNATURE": hmac_sha256("/"+type+"/edit", api_key)
36
+    }
37
+    return requests.post("https://known.phyks.me/"+type+"/edit",
38
+                         data=payload,
39
+                         headers=headers)
40
+
41
+
42
+for file in list_directory("2013") + list_directory("2014"):
43
+    print("Processing file "+file)
44
+    with open(file, 'r') as fh:
45
+        soup = BeautifulSoup(fh.read())
46
+
47
+    content = []
48
+    for i in soup.div.find('header').next_siblings:
49
+        if i.name == "footer":
50
+            break
51
+        if type(i) != Comment:
52
+            content.append(i)
53
+    comment = soup.div.findAll(text=lambda text: isinstance(text,
54
+                                                            Comment))
55
+    comment = [i.strip() for i in comment[0].strip().split('\n')]
56
+    for j in comment:
57
+        if j.startswith("@title"):
58
+            title = j.split("=")[1]
59
+        elif j.startswith("@date"):
60
+            date = j.split("=")[1]
61
+        elif j.startswith("@tags"):
62
+            tags = j.split("=")[1]
63
+            tags = ', '.join(["#"+i.strip() for i in tags.split(',')])
64
+    meta = {
65
+        "title": title,
66
+        "date": (str(date[4:8])+":"+str(date[2:4])+":"+str(date[0:2]) +
67
+                 " "+str(date[9:11])+":"+str(date[11:13])+":00"),
68
+        "tags": tags,
69
+    }
70
+
71
+    content = ''.join([str(i) for i in content]).strip()
72
+    content += "\n<p>"+meta["tags"]+"</p>"
73
+    payload = {"body": content,
74
+               "title": meta["title"],
75
+               "created": meta["date"]}
76
+    known_api("phyks", API_KEY, "entry", payload)