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
diff --git a/examples/amber/public/003-dependances b/examples/amber/public/003-dependances index 93f3106..b1a3bcf 100644 --- a/examples/amber/public/003-dependances +++ b/examples/amber/public/003-dependances @@ -10,13 +10,13 @@ - +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.
diff --git a/examples/amber/public/004-npm-packages b/examples/amber/public/004-npm-packages index b15fca3..9ac73b3 100644 --- a/examples/amber/public/004-npm-packages +++ b/examples/amber/public/004-npm-packages @@ -10,13 +10,13 @@ - +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.
diff --git a/examples/amber/public/005-structurer-express b/examples/amber/public/005-structurer-express index 87f395d..5ee70b5 100644 --- a/examples/amber/public/005-structurer-express +++ b/examples/amber/public/005-structurer-express @@ -10,13 +10,13 @@ - +@@ -36,6 +36,7 @@+ ** 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.
diff --git a/examples/amber/public/006-dependency-injection b/examples/amber/public/006-dependency-injection index 6b32b52..0c23a28 100644 --- a/examples/amber/public/006-dependency-injection +++ b/examples/amber/public/006-dependency-injection @@ -10,13 +10,13 @@ - +@@ -36,6 +36,7 @@+ 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.
diff --git a/examples/amber/public/007-implement-js b/examples/amber/public/007-implement-js index 7c8bf77..8fdcc26 100644 --- a/examples/amber/public/007-implement-js +++ b/examples/amber/public/007-implement-js @@ -10,13 +10,13 @@ - +@@ -36,6 +36,7 @@+ 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.
diff --git a/examples/amber/public/008-backbone-computed-properties b/examples/amber/public/008-backbone-computed-properties index b6dbe75..59628d2 100644 --- a/examples/amber/public/008-backbone-computed-properties +++ b/examples/amber/public/008-backbone-computed-properties @@ -10,13 +10,13 @@ - +@@ -36,6 +36,7 @@+ 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…
diff --git a/examples/amber/public/009-je-men-vais b/examples/amber/public/009-je-men-vais index 85d4c9a..9c786eb 100644 --- a/examples/amber/public/009-je-men-vais +++ b/examples/amber/public/009-je-men-vais @@ -10,13 +10,13 @@ - +@@ -36,6 +36,7 @@+ 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:
diff --git a/examples/amber/public/010-demenagement b/examples/amber/public/010-demenagement index f797385..ef6fe4c 100644 --- a/examples/amber/public/010-demenagement +++ b/examples/amber/public/010-demenagement @@ -10,13 +10,13 @@ - +@@ -36,6 +36,7 @@+ diff --git a/examples/amber/public/index.html b/examples/amber/public/index.html index f797385..ef6fe4c 100644 --- a/examples/amber/public/index.html +++ b/examples/amber/public/index.html @@ -10,13 +10,13 @@ - +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!
@@ -36,6 +36,7 @@+ diff --git a/examples/amber/public/j-42-preparation b/examples/amber/public/j-42-preparation index 6aaefb0..98d0515 100644 --- a/examples/amber/public/j-42-preparation +++ b/examples/amber/public/j-42-preparation @@ -10,13 +10,13 @@ - +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!
@@ -36,6 +36,7 @@+ 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.
diff --git a/examples/amber/public/rss b/examples/amber/public/rss index f4d32da..f8b9ae8 100644 --- a/examples/amber/public/rss +++ b/examples/amber/public/rss @@ -1,2 +1,2 @@ -\ No newline at end of file + 17 Jul 13 19:50 EDT trofaf (https://github.com/PuerkitoBio/trofaf) Ce blogue a déménagé sur GitHub /010-demenagementSuite à 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! Martin Angers 30 Apr 12 00:00 UTC Je suis venu te dire que je m'en vais /009-je-men-vaisOu 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. Martin Angers 23 Apr 12 00:00 UTC Propriétés calculées avec Backbone /008-backbone-computed-propertiesLa beauté de l'univers du code libre 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 avec Backbone. Martin Angers 13 Apr 12 00:00 UTC implement.js: typage fort et Javascript /007-implement-jsL'injection de dépendance avec Javascript a comme conséquence de ne pouvoir assumer que les fonctionnalités offertes par l'instance reçue seront celles attendues. Martin Angers 02 Apr 12 00:00 UTC Expérimentations sur l'injection de dépendance avec node.js /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 Angers 27 Mar 12 00:00 UTC \ No newline at end of file diff --git a/examples/amber/templates/post.amber b/examples/amber/templates/post.amber index edce23c..fa37340 100644 --- a/examples/amber/templates/post.amber +++ b/examples/amber/templates/post.amber @@ -1,6 +1,7 @@ extends layout block content + time #{fmttime(Post.ShortPost.PubTime, "2006-01-02")} article [lang=Post.ShortPost.Lang] ? len(Post.ShortPost.Lang) > 0 | #{Post.Content} diff --git a/examples/native/public/index.html b/examples/native/public/index.html index 9c961b0..f0c60c0 100644 --- a/examples/native/public/index.html +++ b/examples/native/public/index.html @@ -7,6 +7,7 @@ Site Name http://localhost 22 Jul 13 12:35 EDT trofaf (https://github.com/PuerkitoBio/trofaf) Ce blogue a déménagé sur GitHub http://localhost/010-demenagementSuite à 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! Martin Angers 30 Apr 12 00:00 UTC Je suis venu te dire que je m'en vais http://localhost/009-je-men-vaisOu 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. Martin Angers 23 Apr 12 00:00 UTC Propriétés calculées avec Backbone http://localhost/008-backbone-computed-propertiesLa beauté de l'univers du code libre 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 avec Backbone. Martin Angers 13 Apr 12 00:00 UTC implement.js: typage fort et Javascript http://localhost/007-implement-jsL'injection de dépendance avec Javascript a comme conséquence de ne pouvoir assumer que les fonctionnalités offertes par l'instance reçue seront celles attendues. Martin Angers 02 Apr 12 00:00 UTC Expérimentations sur l'injection de dépendance avec node.js http://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 Angers 27 Mar 12 00:00 UTC This is a test
+This is a test header
And this is a test content.
diff --git a/examples/native/public/rss b/examples/native/public/rss index 46aac27..fae7efa 100644 --- a/examples/native/public/rss +++ b/examples/native/public/rss @@ -1,2 +1,2 @@ -\ No newline at end of file + Site Name http://localhost 17 Jul 13 12:16 EDT trofaf (https://github.com/PuerkitoBio/trofaf) This is a test http://localhost/testWhatever Me 17 Jul 13 00:00 UTC \ No newline at end of file diff --git a/examples/native/public/test b/examples/native/public/test index 9c961b0..f0c60c0 100644 --- a/examples/native/public/test +++ b/examples/native/public/test @@ -7,6 +7,7 @@ Site Name http://localhost 22 Jul 13 12:40 EDT trofaf (https://github.com/PuerkitoBio/trofaf) This is a test http://localhost/testWhatever Me 17 Jul 13 00:00 UTC This is a test
+This is a test header
And this is a test content.
diff --git a/examples/native/templates/content.html b/examples/native/templates/content.html index 6deade5..fb0858f 100644 --- a/examples/native/templates/content.html +++ b/examples/native/templates/content.html @@ -1,6 +1,7 @@ {{ define "content" }}{{ end }} diff --git a/gen.go b/gen.go index 45b7863..0e156bd 100644 --- a/gen.go +++ b/gen.go @@ -11,8 +11,9 @@ import ( "path/filepath" "sort" "strings" + "time" - "github.com/eknkc/amber" + "github.com/PuerkitoBio/amber" ) var ( @@ -33,8 +34,20 @@ var ( "apple-touch-icon-72x72-precomposed.png": struct{}{}, "apple-touch-icon-precomposed.png": struct{}{}, } + + funcs = template.FuncMap{ + "fmttime": func(t time.Time, f string) string { + return t.Format(f) + }, + } ) +func init() { + // Add the custom functions to Amber in the init(), since this is global + // (package) state in my Amber fork. + amber.AddFuncs(funcs) +} + // This type is a slice of *LongPost that implements the sort.Interface, to sort in PubTime order. type sortablePosts []*LongPost @@ -59,7 +72,7 @@ func compileTemplates() error { ap := filepath.Join(TemplatesDir, postTplNm) if _, err := os.Stat(ap); os.IsNotExist(err) { // Amber post template does not exist, compile the native Go templates - postTpl, err = template.ParseGlob(filepath.Join(TemplatesDir, "*.html")) + postTpl, err = template.New("templates").Funcs(funcs).ParseGlob(filepath.Join(TemplatesDir, "*.html")) if err != nil { return fmt.Errorf("error parsing templates: %s", err) } {{ .Post.ShortPost.Title }}
+{{ .Post.Content }}