From a204f7bf0e85174698e36292cbd271212f2496b1 Mon Sep 17 00:00:00 2001 From: Martin Angers Date: Sat, 13 Jul 2013 15:15:28 -0400 Subject: [PATCH] start work on rss generator --- LICENSE | 0 README.md | 21 +++ example/posts/003-dependances.md | 1 + example/public/002-meta-billet | 62 +++++---- example/public/003-dependances | 62 +++++---- example/public/004-npm-packages | 62 +++++---- example/public/005-structurer-express | 62 +++++---- example/public/006-dependency-injection | 62 +++++---- example/public/007-implement-js | 62 +++++---- .../public/008-backbone-computed-properties | 62 +++++---- example/public/009-je-men-vais | 62 +++++---- example/public/010-demenagement | 62 +++++---- example/public/css/main.css | 18 ++- example/public/index.html | 62 +++++---- example/public/j-42-preparation | 62 +++++---- example/public/rss | 2 + example/templates/layout.amber | 20 ++- example/templates/post.amber | 7 +- gen.go | 32 ++++- opts.go | 10 +- rss.go | 126 ++++++++++++++++++ tpldata.go | 13 ++ 22 files changed, 613 insertions(+), 319 deletions(-) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 example/public/rss create mode 100644 rss.go diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md new file mode 100644 index 0000000..c67d01c --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +# trofaf + +`trofaf` is a super simple *live* static blog engine built with Go. It is super simple in that it only requires a simple directory structure to work, and offers only the minimum required features for a blog to exist. + +It is *live* because it watches for changes in the posts and templates directories, and regenerates the site as needed. + +It is *static* because the web server only serves pre-generated, static content. + +It understands [markdown][1] syntax for posts, and [amber][2] or [native Go][3] templates. + +More to come... + +## Installation + +## How it works + +## License + +[1]: http://daringfireball.net/projects/markdown/syntax +[2]: https://github.com/eknkc/amber +[3]: http://golang.org/pkg/html/template/ diff --git a/example/posts/003-dependances.md b/example/posts/003-dependances.md index dad5161..f28d8a1 100644 --- a/example/posts/003-dependances.md +++ b/example/posts/003-dependances.md @@ -3,6 +3,7 @@ Date: 2012-03-05 Title: npm: la base essentielle pour débuter avec node.js Author: Martin Angers Category: technologie +Lang: fr Description: 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. --- diff --git a/example/public/002-meta-billet b/example/public/002-meta-billet index 3c536af..a05c6ba 100644 --- a/example/public/002-meta-billet +++ b/example/public/002-meta-billet @@ -1,5 +1,5 @@ - + @@ -10,14 +10,15 @@ +
- Site Name + Ø value
- + a wysiwyg hypertext cybersite
-
-

Il existe de nombreux moteurs de blogue gratuits sur internet, tels Wordpress, 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.

+
+

Il existe de nombreux moteurs de blogue gratuits sur internet, tels Wordpress, 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

@@ -82,8 +83,8 @@ Et voici une *emphase*, et _une autre_ avec une syntaxe alternative.

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!

-
-
+ + diff --git a/example/public/003-dependances b/example/public/003-dependances index 325d017..8971693 100644 --- a/example/public/003-dependances +++ b/example/public/003-dependances @@ -1,5 +1,5 @@ - + @@ -10,14 +10,15 @@ +
- Site Name + Ø value
- + a wysiwyg hypertext cybersite
-
-

La plateforme node.js est volontairement limitée, en son coeur, aux fonctionnalités les plus fondamentales. Elle mise donc sur les contributions - souvent époustouflantes, j’en parle ici - de sa communauté pour enrichir le noyau et repousser les limites du possible.

+
+

La plateforme node.js est volontairement limitée, en son coeur, aux fonctionnalités les plus fondamentales. Elle mise donc sur les contributions - souvent époustouflantes, j’en parle ici - 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.

@@ -129,8 +130,8 @@ jscoverage jscoverage module for node.js =kate.sf 2012-02-28 02:11

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 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.

-
-
+ + diff --git a/example/public/004-npm-packages b/example/public/004-npm-packages index 8a1e12c..a74b6ab 100644 --- a/example/public/004-npm-packages +++ b/example/public/004-npm-packages @@ -1,5 +1,5 @@ - + @@ -10,14 +10,15 @@ +
- Site Name + Ø value
- + a wysiwyg hypertext cybersite
-
-

Utiliser une librairie existante permet d’ajouter rapidement des fonctionnalités à une application, et de concentrer ses efforts sur les nouveautés, les spécificités de son projet, plutôt qu’à réinventer la roue. Cependant, chaque librairie utilisée devient une dépendance, et une dépendance est un risque. Un risque car notre code dépend maintenant de ce corps étranger sur lequel on a généralement peu ou pas de contrôle. Les meilleures pratiques pour limiter ce risque ont évolué rapidement sur la plateforme node.js ces derniers mois.

+
+

Utiliser une librairie existante permet d’ajouter rapidement des fonctionnalités à une application, et de concentrer ses efforts sur les nouveautés, les spécificités de son projet, plutôt qu’à réinventer la roue. Cependant, chaque librairie utilisée devient une dépendance, et une dépendance est un risque. Un risque car notre code dépend maintenant de ce corps étranger sur lequel on a généralement peu ou pas de contrôle. Les meilleures pratiques pour limiter ce risque ont évolué rapidement sur la plateforme node.js ces derniers mois.

“A dependency upon a package is a dependency upon everything within the package. When a package changes, and its release number is bumped, all clients of that package must verify that they work with the new package - even if nothing they used within the package actually changed.”
@@ -143,8 +144,8 @@ mime@1.2.5 ./node_modules/express/node_modules/connect/node_modules/mime current

Brèche de sécurité dans le registre

Un mot en terminant sur le registre, je mentionnais dans mon dernier article sur npm qu’il était nécessaire de se créer un compte pour utiliser certaines commandes. Et bien une brèche de sécurité a été découverte (et corrigée). Un courriel a été envoyé par Isaac à tous ceux qui avaient fourni une adresse valide, mais je sais qu’il a eu des problèmes avec GMail et certains n’ont pas reçu l’information, donc si c’est votre cas, assurez-vous de consulter ce gist qui reprend le contenu du courriel et les étapes à suivre pour sécuriser votre compte.

-
-
+ + diff --git a/example/public/005-structurer-express b/example/public/005-structurer-express index 9165b88..860a476 100644 --- a/example/public/005-structurer-express +++ b/example/public/005-structurer-express @@ -1,5 +1,5 @@ - + @@ -10,14 +10,15 @@ +
- Site Name + Ø value
- + a wysiwyg hypertext cybersite
-
-

** MISE À JOUR ** (22 mars 2012) : J’ai mis un exemple (simpliste, mais fonctionnel) de la structure suggérée dans ce billet sur GitHub, express-boilerplate.

+
+

** MISE À JOUR ** (22 mars 2012) : J’ai mis un exemple (simpliste, mais fonctionnel) de la structure suggérée dans ce billet sur GitHub, express-boilerplate.


@@ -131,8 +132,8 @@ app.get('/', routes.index);

Ce qui laisse un fichier de tête app.js effectivement très simple et sans intelligence autre que l’assemblage des modules, l’injection des dépendances, et l’appel à server.listen() pour démarrer l’application Web. Ça donne une organisation saine, qui permet de respecter le patron MVC où, grossièrement, le modèle est /lib/db, la vue est /views et le contrôleur est une combinaison de /lib/router et /lib/handler, le router jouant le rôle d’“agent messager”, et le handler contenant la logique comme telle. D’ailleurs j’utilise un découpage semblable pour organiser le code côté client (en développement, avant de les minifier), dans mes fichiers sous /public/js avec backbone.js, mais c’est une histoire pour un autre billet.

Est-ce que votre organisation du code ressemble à ça? Utilisez-vous quelque chose de radicalement différent? Faites-en part dans les commentaires!

-
-
+ + diff --git a/example/public/006-dependency-injection b/example/public/006-dependency-injection index aa1134c..95776a0 100644 --- a/example/public/006-dependency-injection +++ b/example/public/006-dependency-injection @@ -1,5 +1,5 @@ - + @@ -10,14 +10,15 @@ +
- Site Name + Ø value
- + a wysiwyg hypertext cybersite
-
-

L’injection de dépendance (dependency injection) permet de découpler les différentes composantes d’une application pour en faciliter l’entretien, la testabilité, circonscrire l’impact des changements, mais aussi pour imposer une façon d’aborder la création de l’application en une aggrégation de pièces simples, à la responsabilité ciblée, et à l’API bien défini. Elle a comme effet secondaire, règle générale, une meilleure architecture.

+
+

L’injection de dépendance (dependency injection) permet de découpler les différentes composantes d’une application pour en faciliter l’entretien, la testabilité, circonscrire l’impact des changements, mais aussi pour imposer une façon d’aborder la création de l’application en une aggrégation de pièces simples, à la responsabilité ciblée, et à l’API bien défini. Elle a comme effet secondaire, règle générale, une meilleure architecture.

Dans les langages de programmation orientés-objet statiques, tels C# ou Java, le patron (pattern) d’injection de dépendance prend la forme d’une interface ou d’une classe abstraite, d’une (ou plusieurs) implémentation de cette interface, et d’un assembleur, responsable de créer l’instance concrète d’une implémentation de l’interface, et de l’injecter dans un objet “client” de la dépendance. Martin Fowler a écrit un brillant article sur le sujet, c’est une lecture essentielle pour approfondir ce patron.

@@ -92,8 +93,8 @@ module.exports = server;

Cependant, ce qu’on gagne en versatilité avec les langages dynamiques, on perd en rigueur (au sens “rigueur intrinsèque au langage”). L’avantage de l’approche avec interface des langages statiques, c’est d’avoir l’assurance que la dépendance reçue expose toutes les fonctionnalités voulues - méthodes et propriétés. Avec Javascript, si on reprend mon dernier exemple, je n’ai aucune assurance que le serveur Express implémente bel et bien applyConfiguration(). Dans un cas simple comme celui-ci, je pourrais aisément valider avant l’appel que “applyConfiguration” est bien défini sur l’objet “server”, et que c’est bel et bien une fonction. Mais dans un cas plus complexe, où plusieurs méthodes et propriétés de la dépendance sont utilisées, ça peut rapidement devenir hors de contrôle.

C’est ce qu’il manque, à mon avis, aux solutions actuelles sous Javascript. Quelque chose pour valider que le contrat attendu par le “client” soit respecté par la dépendance fournie. J’ai quelques idées sur le sujet, on verra si ça mûrira, gardez l’oeil sur le référentiel GitHub, et si vous avez commentaires et suggestions, l’espace ci-bas est là pour ça!

-
-
+ + diff --git a/example/public/007-implement-js b/example/public/007-implement-js index a32349f..fe5b654 100644 --- a/example/public/007-implement-js +++ b/example/public/007-implement-js @@ -1,5 +1,5 @@ - + @@ -10,14 +10,15 @@ +
- Site Name + Ø value
- + a wysiwyg hypertext cybersite
-
-

L’injection de dépendance (dependency injection) avec Javascript a comme conséquence de ne pouvoir assumer que les fonctionnalités offertes par l’instance reçue seront celles attendues. Dans les langages statiques, l’injection est généralement basée sur une interface, qui assure au module “client” la disponibilité d’un ensemble de fonctionnalités. Le contrat imposé par l’interface est assurément respecté. Dans un langage dynamique comme Javascript, il n’y a rien de tel.

+
+

L’injection de dépendance (dependency injection) avec Javascript a comme conséquence de ne pouvoir assumer que les fonctionnalités offertes par l’instance reçue seront celles attendues. Dans les langages statiques, l’injection est généralement basée sur une interface, qui assure au module “client” la disponibilité d’un ensemble de fonctionnalités. Le contrat imposé par l’interface est assurément respecté. Dans un langage dynamique comme Javascript, il n’y a rien de tel.

Ce qui laisse deux options aux développeurs Javascript: l’acte de foi ou la validation manuelle de l’objet reçu. J’en parlais dans mon dernier billet, j’avais l’impression qu’il manquait quelque chose à ce niveau.

@@ -48,8 +49,8 @@

Essayez et participez!

Les prochaines étapes sont assez simples, je vous invite à essayer la librairie, si vous croyez qu’elle peut être utile dans vos projets. N’hésitez pas à la faire partager avec vos collègues développeurs, et à ouvrir un rapport d’anomalie au besoin. Encore mieux, si vous le pouvez, soumettez un correctif (un pull request). Je prévois ajouter la documentation de l’API avec JSDoc sous peu, et possiblement rendre la librairie disponible dans le fureteur.

-
-
+ + diff --git a/example/public/008-backbone-computed-properties b/example/public/008-backbone-computed-properties index 344b664..6c1a737 100644 --- a/example/public/008-backbone-computed-properties +++ b/example/public/008-backbone-computed-properties @@ -1,5 +1,5 @@ - + @@ -10,14 +10,15 @@ +
- Site Name + Ø value
- + a wysiwyg hypertext cybersite
-
-

Je travaille actuellement à temps plein sur mon application-en-devenir de Compte Rendu Web. Cette immersion totale en Javascript, node.js et Backbone est très intéressante. La beauté de l’univers du code libre dans lequel baignent ces technologies est que lorsqu’il manque une fonctionnalité, on peut se retrousser les manches, ouvrir le code et l’ajouter. Voici ma petite histoire des propriétés calculées (computed properties) avec Backbone.

+
+

Je travaille actuellement à temps plein sur mon application-en-devenir de Compte Rendu Web. Cette immersion totale en Javascript, node.js et Backbone est très intéressante. La beauté de l’univers du code libre dans lequel baignent ces technologies est que lorsqu’il manque une fonctionnalité, on peut se retrousser les manches, ouvrir le code et l’ajouter. Voici ma petite histoire des propriétés calculées (computed properties) avec Backbone.

Pas encore une controverse Backbone vs Knockout…

@@ -86,8 +87,8 @@

Un gist pour le moment

J’ai mis le code source dans ce gist, car le tout fait à peine 100 sloc, il est probablement préférable de le copier et l’insérer dans son modèle Backbone de base (et de le minifier avec son code maison) plutôt que de le distribuer comme une librairie indépendante. Et en plus, le code assume qu’il hérite directement de Backbone.Model, alors que ce n’est pas forcément le cas. Qui sait, peut-être qu’un auteur de librairie Backbone de plus haut niveau sera intéressé à l’intégrer dans son cadre de développement (framework).

-
-
+ + diff --git a/example/public/009-je-men-vais b/example/public/009-je-men-vais index aef2fa0..a0695c3 100644 --- a/example/public/009-je-men-vais +++ b/example/public/009-je-men-vais @@ -1,5 +1,5 @@ - + @@ -10,14 +10,15 @@ +
- Site Name + Ø value
- + a wysiwyg hypertext cybersite
-
-

Ou plutôt, “je suis venu te dire qu’on m’évince”, mais ça punch moins… En effet, mon coup de foudre pour le blogiciel Calepin aura finalement été son baiser de la mort. Sur Twitter la semaine dernière, via le canal officiel du site, on apprenait que c’était la fin des haricots:

+
+

Ou plutôt, “je suis venu te dire qu’on m’évince”, mais ça punch moins… En effet, mon coup de foudre pour le blogiciel Calepin aura finalement été son baiser de la mort. Sur Twitter la semaine dernière, via le canal officiel du site, on apprenait que c’était la fin des haricots:

Announcement: Calepin is closing in 90 days. Consider moving to @scriptogram Thanks for the ride. Sorry I couldn’t maintain it.

@@ -65,8 +66,8 @@

Comme c’est souvent le cas avec GitHub, créer son blogue est d’une simplicité remarquable. Il s’agit de créer un référentiel (repository) portant le nom “pseudo-github.github.com”, et le contenu sera disponible à l’adresse http://pseudo-github.github.com/. Ça fonctionne aussi pour les organisations, et comme je voulais garder le nom hypermégatop (alors que mon pseudo GitHub est PuerkitoBio) je me suis créé une organisation de ce nom et j’ai commencé à mettre en place mon blogue. N’allez surtout pas le voir maintenant, il n’est pas prêt et bougera régulièrement d’ici à ce que je déménage formellement.

Quant au design du site, il sera peut-être minimaliste comme l’était Calepin. Ou peut-être pas. Maintenant que je peux faire ce que je veux, je risque d’expérimenter certains trucs, particulièrement avec le CSS. Et puis je n’ai pas la notoriété d’un Dustin Curtis, possiblement que plus de tentacules sociales me seraient utiles. Tout ça reste à voir, mais en attendant le signal, c’est encore ici, sur hypermegatop.calepin.co, que ça se passe. 86… 85… 84 jours…

-
-
+ + diff --git a/example/public/010-demenagement b/example/public/010-demenagement index 0fa697d..caed2a0 100644 --- a/example/public/010-demenagement +++ b/example/public/010-demenagement @@ -1,5 +1,5 @@ - + @@ -10,14 +10,15 @@ +
- Site Name + Ø value
- + a wysiwyg hypertext cybersite
-
-

Suite à l’annonce de la fermeture de Calepin.co, j’ai déménagé ce blogue sur http://hypermegatop.github.com. Veuillez mettre à jour vos favoris!

-
-
+
+ +
diff --git a/example/public/css/main.css b/example/public/css/main.css index 3fa17d5..b034f19 100644 --- a/example/public/css/main.css +++ b/example/public/css/main.css @@ -231,8 +231,8 @@ footer { footer ul { padding: 0; margin: 0; - list-style: none; - list-style-image: none; + list-style: bullet; + text-align: left; } footer [class^="icon-"] { font-size: 400%; @@ -242,7 +242,15 @@ footer .middle { clear: both; width: 100%; } - + +small { + font-size: 80%; +} +.copyright { + text-align: right; + margin: 10px 0 10px 0; + color: #5C595A; +} /* ========================================================================== @@ -367,7 +375,7 @@ footer .middle { padding: 10px 15% 10px 15%; font-size: 160%; } - .current { + .middle { font-size: 120%; } footer .middle { @@ -392,7 +400,7 @@ footer .middle { padding: 10px 20% 10px 20%; font-size: 180%; } - .current { + .middle { font-size: 140%; } } diff --git a/example/public/index.html b/example/public/index.html index 3c536af..a05c6ba 100644 --- a/example/public/index.html +++ b/example/public/index.html @@ -1,5 +1,5 @@ - + @@ -10,14 +10,15 @@ +
- Site Name + Ø value
- + a wysiwyg hypertext cybersite
-
-

Il existe de nombreux moteurs de blogue gratuits sur internet, tels Wordpress, 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.

+
+

Il existe de nombreux moteurs de blogue gratuits sur internet, tels Wordpress, 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

@@ -82,8 +83,8 @@

De la personnalité, une signature

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!

-
-
+ + diff --git a/example/public/j-42-preparation b/example/public/j-42-preparation index 1e285e0..34f8e13 100644 --- a/example/public/j-42-preparation +++ b/example/public/j-42-preparation @@ -1,5 +1,5 @@ - + @@ -10,14 +10,15 @@ +
- Site Name + Ø value
- + a wysiwyg hypertext cybersite
-
-

Le développement d’une application Web (d’un SaaS, si vous préférez) est ponctué d’une multitude de choix technologiques. +

+

Le développement d’une application Web (d’un SaaS, si vous préférez) est ponctué d’une multitude de choix technologiques. Pour le compte rendu Web, le coeur technologique, celui qui a orienté pratiquement tous les autres choix, n’a pourtant pas fait l’objet d’une réflexion, d’une étude comparative. Loin s’en faut. Il a plutôt été l’élément déclencheur de tout le projet.

@@ -100,8 +101,8 @@ avec node. L’installation d’une librairie pour node est aussi trivia port de node sur la plateforme Windows.

C’est donc sur cette base solide et hyper motivante que repose le Compte Rendu Web. Propulsé par node.js, à plus d’un niveau!

-
-
+ + diff --git a/example/public/rss b/example/public/rss new file mode 100644 index 0000000..ecd47a2 --- /dev/null +++ b/example/public/rss @@ -0,0 +1,2 @@ + +Ø valuehttp://localhost13 Jul 13 15:08 -0400gbtExpérimentations sur l'injection de dépendance avec node.jshttp://localhost/006-dependency-injectionL'injection de dépendance permet de découpler les différentes composantes d'une application pour en faciliter l'entretien, la testabilité, circonscrire l'impact des changements, mais aussi pour imposer une façon d'aborder la création de l'application en une aggrégation de pièces simples, à la responsabilité ciblée, et à l'API bien défini.Martin Angers13 Jul 13 15:08 -0400Structurer une application Web avec Express et Node.jshttp://localhost/005-structurer-expressLa façon d'organiser son code, en divers répertoires et fichiers, est en bonne partie une question de préférence personnelle. Le cadre d'application Web Express n'impose aucune structure particulière, laissant le développeur totalement libre d'arranger le tout selon son inspiration du moment. Cette liberté peut parfois donner le vertige et provoquer un effet pervers: le syndrome de la page blanche.Martin Angers13 Jul 13 15:08 -0400npm shrinkwrap: Comment contrôler ses dépendanceshttp://localhost/004-npm-packagesUtiliser une librairie existante permet d'ajouter rapidement des fonctionnalités à une application, et de concentrer ses efforts sur les nouveautés, les spécificités de son projet, plutôt qu'à réinventer la roue. Cependant, chaque librairie utilisée devient une dépendance, et une dépendance est un risque. Un risque car notre code dépend maintenant de ce corps étranger sur lequel on a généralement peu ou pas de contrôle. Les meilleures pratiques pour limiter ce risque ont évolué rapidement sur la plateforme node.js ces derniers mois.Martin Angers13 Jul 13 15:08 -0400npm: la base essentielle pour débuter avec node.jshttp://localhost/003-dependancesLa 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.Martin Angers13 Jul 13 15:08 -0400Méta-billet: un mot sur le Calepin!http://localhost/002-meta-billetIl existe de nombreux moteurs de blogue gratuits sur internet. Pourquoi avoir jeté l'ancre sur ce discret et modeste Calepin?Martin Angers13 Jul 13 15:08 -0400 diff --git a/example/templates/layout.amber b/example/templates/layout.amber index 9b6dd89..6df4a9c 100644 --- a/example/templates/layout.amber +++ b/example/templates/layout.amber @@ -1,6 +1,6 @@ !!! html // From HTML5 Boilerplate -html.no-js +html.no-js[lang="en"] head meta[charset="utf-8"] meta[http-equiv="X-UA-Compatible"][content="IE=edge"] @@ -11,6 +11,7 @@ html.no-js link[rel="stylesheet"][href="/css/main.css"] link[rel="stylesheet"][href="/css/fontello.css"] link[href="http://fonts.googleapis.com/css?family=Telex"][rel="stylesheet"][type="text/css"] + link[rel="alternate"][type="application/rss+xml"][title="RSS"][href=RssURL] body