-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
most features working, add real-life blog posts for tests
- Loading branch information
Showing
34 changed files
with
2,512 additions
and
69 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
Date: 2012-02-29 | ||
Title: Méta-billet: un mot sur le Calepin | ||
Author: Martin Angers | ||
Category: technologie | ||
Abstract: Il existe de nombreux moteurs de blogue gratuits sur internet. Pourquoi avoir jeté l'ancre sur ce discret et modeste Calepin? | ||
|
||
Il existe de nombreux moteurs de blogue gratuits sur internet, tels [Wordpress][wp], [Blogger][] et [Tumblr][]. Pourquoi avoir jeté l'ancre sur ce discret et modeste [Calepin][]? Peut-être un peu pour ça, tiens, pour me tenir loin des tumultes de ces méga-centres urbains du Web. Un peu aussi pour ce *design* minimaliste, centré sur le contenu, sur les mots. Et un peu pour deux qualités franchement moins romantiques: *dropbox* et *markdown*. | ||
|
||
### Mes billets, mon coffret | ||
|
||
La plupart des [blogiciels][blogiciel] utilisent une base de données quelconque pour stocker leurs articles. Wordpress, par exemple, repose sur une base de données [MySql][wpmysql]. Pour éviter à l'utilisateur l'horrible expérience d'inscrire son texte directement dans la base de données via des commandes SQL, ces blogiciels offrent, généralement sous la forme d'une page Web privée, des outils d'édition maison, permettant d'insérer, modifier ou supprimer les articles de façon relativement conviviale. C'est bien, c'est même un aspect important de ce qu'il est convenu d'appeler le [Web 2.0][web20], mais c'est une approche qui comporte quelques irritants: | ||
|
||
* Le contenu doit être saisi dans l'outil d'édition fourni. Ou importé d'un format tiers, si l'outil d'édition le permet. Bon nombre de formats sont théoriquement "compatibles" avec Wordpress, moyennant l'installation de tel ou tel [plugiciel][] plus ou moins supporté, maintenu et fonctionnel, mais c'est quand même une étape de plus, donc de trop. | ||
* Les billets sont conservés dans l'inutilisable format de la base de données. Bien sûr, on peut se tourner vers une fonctionnalité d'exportation du contenu, question d'obtenir, par exemple, un sympathique fichier XML (oui, c'est du sarcasme), le tout avec plus ou moins de contrôle sur ce qui sera exporté. | ||
|
||
On parle pourtant de blogue ici, d'articles écrits pour être lus. Je peux imaginer assez aisément bon nombre d'auteurs écrire d'abord leurs billets dans le traitement de texte de leur choix, pour ensuite le transcrire, le copier ou l'importer tant bien que mal dans le blogiciel. Le Calepin prend une approche plus respectueuse du texte: mes billets restent dans leur fichier d'origine, bien au chaud et en sécurité dans *mon* coffret dans les nuages, *mon* dropbox. Le Calepin n'a besoin que d'un accès autorisé à un répertoire spécifique de dropbox, et à mon signal, il lit le contenu de ce répertoire et construit le blogue à partir de ce qu'il y trouve. | ||
|
||
Je ferme mon blogue? Je largue les amarres? Mes billets sont toujours confortablement installés dans mon nuage. Et en tout temps, ils demeurent totalement lisibles et modifiables par l'outil de *mon* choix. Ce qui m'amène à parler du format de ces articles. | ||
|
||
### Minimaliste jusque dans la syntaxe | ||
|
||
Le format, la langue que comprend le Calepin, est le [markdown][]. C'est pratiquement un anti-format, en ce sens que le *markdown* est d'abord et avant tout du texte brut, sans flafla, sans encodage binaire ou enrobage XML, pouvant être lu et modifié avec le plus humble des éditeurs de texte. Là où le HTML - un langage de type *markup*, contraste intéressant - ajoute des balises dans le texte, rendant la lecture de la source difficile ou à tout le moins désagréable sans traitement préalable par un fureteur, le *markdown* utilise un nombre limité de légers artifices pour permettre d'identifier, par exemple, des en-têtes, une emphase, ou des points de forme. Ces artifices se traduisent aisément en code HTML ou une multitude d'autres formats via différents outils (dont le Calepin) mais même sous leur forme originelle, l'effet recherché est tout à fait perceptible (on peut d'ailleurs visualiser la source de chaque article sur Calepin en remplaçant le ".html" dans l'adresse par ".txt"). Un exemple: | ||
|
||
:::markdown | ||
## Ceci est un en-tête ## | ||
|
||
Et voici une *emphase*, et _une autre_ avec une syntaxe alternative. | ||
|
||
* Ceci est un point de forme. | ||
* Et un autre. | ||
|
||
> Et voici une citation, qui rappelle la syntaxe utilisée dans les | ||
> courriels lorsqu'on répond en citant le message original. | ||
|
||
D'une simplicité géniale. Plus de problème de compatibilité entre Mac, Windows, Linux, Android ou iOS, c'est du texte encodé en UTF-8, tout ce qu'il y a de plus standard aujourd'hui. En fait, certains en ont même fait leur [format portable à utiliser pour toute documentation][mdhn], au détriment des Word et LibreOffice de ce monde. Je considère fortement permettre cette syntaxe pour le [Compte Rendu Web][crw], puisqu'elle combine expressivité, simplicité et rapidité, trois caractéristiques essentielles pour la prise de note en temps réel. | ||
|
||
### De la personnalité, une signature | ||
|
||
Le Calepin enrobe le coffret dans les nuages de *dropbox* et la syntaxe pure et naturelle du *markdown* d'une fine couche de gestion à l'attention de l'auteur du blogue. À l'image de tout le reste, la page d'administration est dénuée de toute exhubérance, en trois courtes étapes tout est fait: | ||
|
||
 | ||
|
||
1. L'authentification à son compte *dropbox*, qui sert par le fait même d'authentification au blogue. | ||
2. La configuration du blogue, soit le titre, l'option d'y ajouter le gestionnaire de commentaires qui est [Disqus][] et c'est tout, l'option du lien social qui est [Twitter][] et c'est tout, et le nom de domaine si on ne veut pas celui du Calepin par défaut. | ||
3. Le bouton de publication. | ||
|
||
Voilà. Il y a quelques options mineures au niveau des méta-données de chaque article et une configuration pour le site, principalement des valeurs par défaut, mais rien de renversant, et ce *par choix*. Pas de blogoliste (*blog roll*), de nuage de mots-clefs (*tag cloud*), de catalogue de thèmes dans tous les tons de marron, de barre de partage pour trente-douze gazillions de sites sociaux. C'est la sympathique personnalité du Calepin, minimaliste jusqu'au bout! | ||
|
||
[blogiciel]: http://www.oqlf.gouv.qc.ca/ressources/bibliotheque/dictionnaires/terminologie_blogue/blogiciel.html | ||
[wpmysql]: http://codex.wordpress.org/FAQ_Developer_Documentation#Why_does_WordPress_only_support_MySQL.3F_What_about_DB_abstraction.3F | ||
[web20]: http://fr.wikipedia.org/wiki/Web_2.0 | ||
[wp]: http://wordpress.org/ | ||
[blogger]: http://blogger.com/ | ||
[tumblr]: https://www.tumblr.com/ | ||
[plugiciel]: http://www.oqlf.gouv.qc.ca/ressources/bibliotheque/dictionnaires/internet/fiches/1299146.html | ||
[calepin]: http://calepin.co/ | ||
[markdown]: http://daringfireball.net/projects/markdown/basics | ||
[mdhn]: http://www.hiltmon.com/blog/2012/02/20/the-markdown-mindset/ | ||
[disqus]: http://disqus.com/ | ||
[twitter]: https://twitter.com/PuerkitoBio | ||
[crw]: http://www.compterenduweb.com/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
Date: 2012-03-05 | ||
Title: npm: la base essentielle pour débuter avec node.js | ||
Author: Martin Angers | ||
Category: technologie | ||
Abstract: La plateforme node.js est volontairement limitée, en son coeur, aux fonctionnalités les plus fondamentales. Elle mise donc sur les contributions de sa communauté pour enrichir le noyau et repousser les limites du possible. Avec près de 8000 librairies à ce jour, il y a sérieux danger de chaos. Et si on y retrouve plutôt quelque chose comme une belle organisation, c'est en bonne partie grâce au gestionnaire de librairies npm. | ||
|
||
La plateforme node.js est [volontairement limitée][userland], en son coeur, aux fonctionnalités les plus fondamentales. Elle mise donc sur les contributions - souvent époustouflantes, [j'en parle ici][billetnode] - de sa communauté pour enrichir le noyau et repousser les limites du possible. | ||
|
||
Avec près de 8000 librairies pullulant dans son écosystème, il y a sérieux danger de chaos. Et si on y retrouve plutôt quelque chose comme une belle organisation, c'est en bonne partie grâce à la colonne vertébrale qui unit et soutient cette terre fertile, le gestionnaire de librairies [npm][]. Présentation, trucs et astuces dans les lignes qui suivent. | ||
|
||
### La base: installation, désinstallation, indicateur global | ||
|
||
*npm* lui-même s'installe de façon fort simple depuis quelques versions: il est livré avec node. Il s'agit donc d'installer node d'une des [nombreuses][installnode] [façons][nvm] [possibles][n]. | ||
|
||
Ensuite, toute librairie publiée dans [le registre de npm][registry] est à portée de main. Pour installer une librairie, par exemple le gestionnaire de versions *n*: | ||
|
||
:::Bash shell scripts | ||
martin@LilDevil:~/sublime-wrkspc/crw$ npm install n | ||
npm http GET https://registry.npmjs.org/n | ||
npm http 200 https://registry.npmjs.org/n | ||
npm http GET https://registry.npmjs.org/n/-/n-0.7.0.tgz | ||
npm http 200 https://registry.npmjs.org/n/-/n-0.7.0.tgz | ||
n@0.7.0 ./node_modules/n | ||
|
||
Seul bémol à propos de cette démonstration rayonnante de simplicité: la commande ne respecte pas [la règle de silence de UNIX][unixrules], qui veut que si tu n'as rien de spécial à dire, tu ne dis rien. En effet, sur UNIX et ses déclinaisons, on s'attend à ce qu'une commande qui fait ce qu'on lui demande sans problème n'affiche aucun message. C'est mineur, mais c'est une des philosophies importantes à respecter pour bien s'intégrer à l'ensemble. | ||
|
||
Une fois installée, la librairie est au bon endroit pour être retrouvée par node et utilisable dans notre code, via la commande habituelle `var librairie = require('librairie');`. Si on veut installer non seulement la librairie et ses dépendances pour qu'elle s'exécute correctement (l'installation par défaut), mais aussi ses dépendances de développement, par exemple pour exécuter les tests automatisés de la librairie, alors on doit spécifier l'indicateur -dev (`npm install n -dev`). Pour désinstaller, on s'en doute, c'est `npm uninstall n` (ou un alias équivalent, soit `npm remove` ou `npm rm`). | ||
|
||
Autres commandes de base toujours utiles, pour connaître la version actuelle de npm: | ||
|
||
:::Bash shell scripts | ||
martin@LilDevil:~/sublime-wrkspc/crw$ npm -v | ||
1.1.4 | ||
|
||
Et pour lister les librairies installées dans le répertoire courant (dans cet exemple, les librairies utilisées par le [Compte Rendu Web][crw] à ce point-ci de son développement): | ||
|
||
:::Bash shell scripts | ||
martin@LilDevil:~/sublime-wrkspc/crw$ npm ls | ||
crw@0.1.0 /home/martin/sublime-wrkspc/crw | ||
├── debug@0.5.0 | ||
├─┬ express@2.5.8 | ||
│ ├─┬ connect@1.8.5 | ||
│ │ ├── formidable@1.0.9 | ||
│ │ └── mime@1.2.5 | ||
│ ├── mime@1.2.4 | ||
│ ├── mkdirp@0.3.0 | ||
│ └── qs@0.4.2 | ||
├─┬ jade@0.20.3 | ||
│ ├── commander@0.5.2 | ||
│ └── mkdirp@0.3.0 | ||
├── less@1.2.2 | ||
├─┬ mocha@0.14.0 | ||
│ ├── commander@0.5.2 | ||
│ ├── diff@1.0.2 | ||
│ └── growl@1.5.0 | ||
├─┬ mongoose@2.5.9 | ||
│ ├── hooks@0.1.9 | ||
│ └── mongodb@0.9.7-3-5 | ||
├── request@2.9.153 | ||
├── should@0.6.0 | ||
└── uglify-js@1.2.5 | ||
|
||
`npm list` est équivalent, et `npm ll` (ou `npm la`) offre des informations plus détaillées. Par défaut, npm conserve toutes les dépendances localement, dans un sous-répertoire "node_modules" du répertoire courant. Ainsi, comme chaque librairie installée vient avec ses propres dépendances dans son propre sous-répertoire "node_modules", une application node peut utiliser les librairies A et B, chacune ayant une dépendance sur C, mais A et B peuvent utiliser une version différente de C sans problème. On en voit un exemple concret sous la librairie *express*, qui dépend directement sur *mime*, alors que sa dépendance *connect* dépend aussi sur *mime*, mais dans une version distincte, et ce sans conflit: | ||
|
||
:::Bash shell scripts | ||
├─┬ express@2.5.8 | ||
│ ├─┬ connect@1.8.5 | ||
│ │ ├── formidable@1.0.9 | ||
│ │ └── mime@1.2.5 | ||
│ ├── mime@1.2.4 | ||
│ ├── mkdirp@0.3.0 | ||
│ └── qs@0.4.2 | ||
|
||
C'est une qualité assez exceptionnelle parmi les environnements de développement, que [Mikeal Rogers n'a pas manqué de souligner][mikeal]: | ||
|
||
> Node’s local module support accomplishes what no other platform I know of has done, it allows for two dependencies to require entirely different versions of the same dependency without caveats and unforeseen failures. | ||
Parfois, on peut préférer une installation globale d'une librairie, par exemple lorsqu'il s'agit d'une application console (*command-line interface (CLI)*) que l'on veut rendre disponible partout. npm supporte ce mode via l'indicateur `-g` ou l'équivalent `--global`. Ainsi, pour installer globalement: `npm install -g <librairie>`, pour lister les librairies installées globalement: `npm ls -g`, et ainsi de suite, les mêmes commandes s'appliquent mais avec une portée globale. À noter que ce n'est **pas** l'option recommandée pour une librairie que l'on veut utiliser dans le code d'une application node. L'approche locale à cette application est à privilégier dans ce cas (on verra pourquoi dans un futur article sur la gestion des dépendances). | ||
|
||
### Le registre au bout des doigts | ||
|
||
J'ai mentionné [le registre de npm][registry], qui permet de rechercher avec des mots-clefs dans les nombreuses librairies disponibles. Or, il n'est pas nécessaire d'aller sur le site Web pour effectuer ces recherches. Avec npm, on a ce registre au bout des doigts, exploitable avec de simples commandes. | ||
|
||
:::Bash shell scripts | ||
martin@LilDevil:~$ npm search /^jscov | ||
NAME DESCRIPTION AUTHOR DATE KEYW | ||
jscoverage jscoverage module for node.js =kate.sf 2012-02-28 02:11 | ||
|
||
Ainsi, `npm search` suivi de mots à rechercher est équivalent à la recherche par le site Web. Il est également possible, tel que démontré dans l'exemple, d'utiliser une expression régulière en commençant le mot à rechercher par `/`. Pour afficher les informations détaillées d'une librairie spécifique - par exemple ses dépendances et ses auteurs, c'est la commande `npm view <librairie>`. | ||
|
||
Pour profiter des fonctionnalités non anonymes, il faut bien sûr se créer un compte utilisateur. C'est tout simple, avec `npm adduser`, on peut choisir un nom d'utilisateur, un mot de passe, et associer le tout à une adresse courriel. Ensuite il est possible d'utiliser une des commandes méconnues qui a pourtant un potentiel intéressant pour découvrir les librairies de qualité: `npm star <librairie>`. C'est l'équivalent d'un *j'aime* de Facebook, et c'est une information visible dans le registre. Elle gagnerait à être davantage utilisée et mieux exploitée, car plus l'écosystème grossit, plus il devient difficile de discerner les librairies de calibre production, maintenues et codées de façon professionnelle, des projets de fin de semaine avec plus ou moins d'avenir. C'est une problématique [qui commence à faire beaucoup jaser][trouble] dans la communauté, et une solution - ou du moins une amélioration - serait sur les planches à dessin du côté de l'équipe de npm. | ||
|
||
Dans un prochain article j'aborderai les commandes davantage liées à une librairie spécifique, son fichier `package.json`, et les bonnes pratiques (toujours en évolution!) pour la gestion des dépendances d'une application node. | ||
|
||
[userland]: https://github.com/joyent/node/wiki/node-core-vs-userland | ||
[billetnode]: http://hypermegatop.calepin.co/propulse-par-nodejs.html | ||
[npm]: http://npmjs.org/ | ||
[installnode]: https://github.com/joyent/node/wiki/Installation | ||
[nvm]: https://github.com/creationix/nvm | ||
[n]: https://github.com/visionmedia/n | ||
[registry]: http://search.npmjs.org/ | ||
[crw]: http://www.compterenduweb.com/ | ||
[mikeal]: http://www.mikealrogers.com/posts/nodemodules-in-git.html | ||
[unixrules]: http://www.faqs.org/docs/artu/ch01s06.html | ||
[privateregistry]: http://npmjs.org/doc/registry.html | ||
[trouble]: http://mikkel.hoegh.org/blog/2011/12/20/trouble-in-node-dot-js-paradise-the-mess-that-is-npm/ |
Oops, something went wrong.