for toProject in Projects/*; do
@@ -58,18 +59,85 @@ for toProject in Projects/*; do
done
-After =>
+After ⇒
contain_no_s() { print $1 | grep -v s }
+
function verify_file_name {
local project=$1:t
contains_project_name() { print $1:t | grep $project }
map "print -- X" $(filter contains_project_name $1/*(.N))
}
+
map show_project_matchin_file $( filter contain_no_s Projects/* )
Also, the first verstion is a bit easier to read.
But the second one is clearly far superior in architecture.
Why?
+
+
+#!/usr/bin/env zsh
+
+# Provide higer-order functions
+
+# usage:
+#
+# $ foo(){print "x: $1"}
+# $ map foo a b c d
+# x: a
+# x: b
+# x: c
+# x: d
+function map {
+ local func_name=$1
+ shift
+ for elem in $@; print -- $(eval $func_name $elem)
+}
+
+# $ bar() { print $(($1 + $2)) }
+# $ fold bar 0 1 2 3 4 5
+# 15
+# -- but also
+# $ fold bar 0 $( seq 1 100 )
+function fold {
+ if (($#<2)) {
+ print -- "ERROR fold use at least 2 arguments" >&2
+ return 1
+ }
+ if (($#<3)) {
+ print -- $2
+ return 0
+ } else {
+ local acc
+ local right
+ local func_name=$1
+ local init_value=$2
+ local first_value=$3
+ shift 3
+ right=$( fold $func_name $init_value $@ )
+ acc=$( eval "$func_name $first_value $right" )
+ print -- $acc
+ return 0
+ }
+}
+
+# usage:
+#
+# $ baz() { print $1 | grep baz }
+# $ filter baz titi bazaar biz
+# bazaar
+function filter {
+ local predicate=$1
+ local result
+ typeset -a result
+ shift
+ for elem in $@; do
+ if eval $predicate $elem >/dev/null; then
+ result=( $result $elem )
+ fi
+ done
+ print $result
+}
+
diff --git a/content/html/en/blog/programming-language-experience.md b/content/html/en/blog/programming-language-experience.md
index 62fc79571..93fb4ac94 100644
--- a/content/html/en/blog/programming-language-experience.md
+++ b/content/html/en/blog/programming-language-experience.md
@@ -2,20 +2,21 @@
isHidden: false
menupriority: 1
kind: article
-created_at: 2011-09-05T12:21:41+02:00
+created_at: 2011-09-28T12:21:41+02:00
title: Programming Language Experience
author_name: Yann Esposito
author_uri: yannesposito.com
# tags:
-----
-<%= blogimage("main.png","Title image") %>
+<%= blogimage("dragon.jpg","Title image") %>
begindiv(intro)
-<%=tldr%> My feelings about programming languages I used.
+<%=tldr%> My short and higly subjective feelings about programming languages I used.
enddiv
-### BASIC
+### `BASIC`
+<%= leftblogimage("basic.gif","Title image") %>
The language of my firsts programs!
I was about 10, with an `MO5` and `Amstrad CPC 6128` and even with my `Atari STe`.
This is the language of `GOTO`s.
@@ -103,6 +104,8 @@ In the end I prefer C.
### C
+<%=leftblogimage("C.jpg","Pointer representation from Dancing links")%>
+
The language of pointers.
_Le_ programming language.
@@ -139,7 +142,7 @@ Until here I just described imperatives languages without any object notion.
More clearly, the language didn't helped you to structure your program.
-In order to limit the number of bugs, particularly for huge programs, we started to thing about how to best organize computer programs.
+In order to limit the number of bugs, particularly for huge programs, we started to thin about how to best organize computer programs.
In the end, from the imperatives language culture, it produced the Object Oriented programming (OOP).
Beware, the Object Oriented programming isn't a miracle. Proof? How many bug-free software do you use?
Furthermore, OOP doesn't fit all problems.
@@ -151,52 +154,63 @@ Then Object Oriented Languages appeared everywhere.
### C++
+<%=leftblogimage("cplusplus.jpg","Messy router")%>
+
The ugly
Industry wanted an Object Oriented Language without loosing all their old C code.
Solution, keep C and add an Object layer on it.
The main concern about C++ is it do too many things.
-I particularly appreciated multiple inheritage and templates.
+I particularly appreciated multiple inheritance and templates.
In reality I liked a lot C++ while I was working alone.
I used it to write `DEES` my main thesis software.
My only concern was about a lack in the STL.
In the doc, one could use `String
-x=(2*y+z)/2
+AA=1/3[A,B]
-It will place the point x at 2/3 of y and 1/3 to z.
-This feature is very nice. Most programming language should think about adding it.
+It will place the point `AA` between the point `A` and `B`.
+More precisely at the barycenter `(2xA + B)/3`.
+
+
+X=whatever[A,B]
+X=whatever[C,D]
+
+
+This second example, will place the point X at the intersection of the two segments `AB` and `CD`.
+
+This feature is very helpful, and not only to draw things.
+Most programming language should think about adding it.
### zsh
Yes, zsh is a shell.
-But it is also a script language extremly well suited to file traitment.
+But it is also a script language extremly well suited to file management.
For now, it is the best shell I used. I prefer zsh to bash.
### Prolog
-I never made somthing serious with Prolog, but I really loved to use and learn it.
+I never made something serious with Prolog, but I really loved to use and learn it.
+I had the chance to learn Prolog with [Alain Colmerauer](http://alain.colmerauer.free.fr/) himself.
This language try to resolve constraints as much as it can.
-It is kind of magic.
+It has a magic feeling when you use it.
We only write constraints, we never put order.
-A bit like functionnal programming but far more powerful.
+A bit like functional programming but far more powerful.
## Languages to discover
-It remains many language and framework to try.
+Many languages and framework remains to be learnt and tried.
Actually I believe I will stay a while with haskell.
-Maybe tomorrow I will see LISP, Scala or Erlang.
+Maybe tomorrow I will look at LISP, Scala or Erlang.
I also certainly look at clojure to make web application.
Tell me if you have any other experience with these programming languages.
-I had only given my impressions.
-But I used them all.
+Of course, my feelings are highly subjectives.
+But I used all of these languages.
+
+
+*[STL]: Standard Tempate Library
+*[GUI]: Graphic User Interface
diff --git a/content/html/fr/blog/Higher-order-function-in-zsh.md b/content/html/fr/blog/Higher-order-function-in-zsh.md
index 1b1e2a0e1..e034a4aaf 100644
--- a/content/html/fr/blog/Higher-order-function-in-zsh.md
+++ b/content/html/fr/blog/Higher-order-function-in-zsh.md
@@ -8,7 +8,7 @@ author_name: Yann Esposito
author_uri: yannesposito.com
# tags:
-----
-<%= blogimage("main.png","Title image") %>
+<%= blogimage("main.jpg","Title image") %>
begindiv(intro)
@@ -55,6 +55,7 @@ Recommençons sur le même principe.
Trouver les fichiers des projets qui ne contiennent pas de s dans leur nom qui ont le même nom que leur projet.
+Before ⇒
for toProject in Projects/*; do
@@ -71,18 +72,85 @@ for toProject in Projects/*; do
done
-After =>
+After ⇒
contain_no_s() { print $1 | grep -v s }
+
function verify_file_name {
local project=$1:t
contains_project_name() { print $1:t | grep $project }
map "print -- X" $(filter contains_project_name $1/*(.N))
}
+
map show_project_matchin_file $( filter contain_no_s Projects/* )
Also, the first verstion is a bit easier to read.
But the second one is clearly far superior in architecture.
Why?
+
+
+#!/usr/bin/env zsh
+
+# Provide higer-order functions
+
+# usage:
+#
+# $ foo(){print "x: $1"}
+# $ map foo a b c d
+# x: a
+# x: b
+# x: c
+# x: d
+function map {
+ local func_name=$1
+ shift
+ for elem in $@; print -- $(eval $func_name $elem)
+}
+
+# $ bar() { print $(($1 + $2)) }
+# $ fold bar 0 1 2 3 4 5
+# 15
+# -- but also
+# $ fold bar 0 $( seq 1 100 )
+function fold {
+ if (($#<2)) {
+ print -- "ERROR fold use at least 2 arguments" >&2
+ return 1
+ }
+ if (($#<3)) {
+ print -- $2
+ return 0
+ } else {
+ local acc
+ local right
+ local func_name=$1
+ local init_value=$2
+ local first_value=$3
+ shift 3
+ right=$( fold $func_name $init_value $@ )
+ acc=$( eval "$func_name $first_value $right" )
+ print -- $acc
+ return 0
+ }
+}
+
+# usage:
+#
+# $ baz() { print $1 | grep baz }
+# $ filter baz titi bazaar biz
+# bazaar
+function filter {
+ local predicate=$1
+ local result
+ typeset -a result
+ shift
+ for elem in $@; do
+ if eval $predicate $elem >/dev/null; then
+ result=( $result $elem )
+ fi
+ done
+ print $result
+}
+
diff --git a/content/html/fr/blog/programming-language-experience.md b/content/html/fr/blog/programming-language-experience.md
index 5fd127b32..c19780b22 100644
--- a/content/html/fr/blog/programming-language-experience.md
+++ b/content/html/fr/blog/programming-language-experience.md
@@ -2,20 +2,21 @@
isHidden: false
menupriority: 1
kind: article
-created_at: 2011-09-05T12:21:41+02:00
+created_at: 2011-09-28T12:21:41+02:00
title: programming language experience
author_name: Yann Esposito
author_uri: yannesposito.com
# tags:
-----
-<%= blogimage("main.png","Title image") %>
+<%= blogimage("dragon.jpg","Title image") %>
begindiv(intro)
-<%=tlal%> Mon avis sur les différents languages de programmations que j'ai utilisé.
+<%=tlal%> Mon avis court et hautement subjectif concernant les différents languages de programmations que j'ai utilisé.
enddiv
-### BASIC
+### `BASIC`
+<%= leftblogimage("basic.gif","Title image") %>
Ah ! Le language de mes premiers programmes !
Je devais avoir 10-11 ans.
@@ -104,6 +105,8 @@ Mais je préfère largement le C.
### C
+<%=leftblogimage("C.jpg","Pointer representation from Dancing links")%>
+
Le langage des pointeurs
Ah, _le_ langage de programmation par excellence.
@@ -150,6 +153,8 @@ Donc les langages orientés objets se sont mis à fleurir.
### C++
+<%=leftblogimage("cplusplus.jpg","Messy router")%>
+
Le malpropre
Et oui l'industrie voulait un langage objet, mais elle n'était pas prête à mettre à la poubelle tout ses codes en C.
@@ -157,14 +162,19 @@ La solution, prendre C et lui rajouter une couche objet.
Le problème avec C++ c'est qu'il fait trop de choses.
L'héritage multiple, des templates, etc...
Bon, je l'ai quand même choisi pour faire le plus gros programme que j'ai jamais fais lors de ma thèse.
-Et je dois avouer que l'expérience m'a plûe.
-Le seul reproche que j'ai à faire, c'est que la STL n'était pas aussi complète que l'on aurait pû l'espérer pour un détail.
+Et je dois avouer que l'expérience m'a plu.
+Le seul reproche que j'ai à faire, c'est que la STL n'était pas aussi complète que l'on aurait pu l'espérer pour un détail.
On ne peut pas faire de `String
-x=(2*y+z)/2
+AA=1/3[A,B]
+Il va position le point `AA` entre `A` et `B`.
+Plus précisément, au barycentre `(2A + B)/3`.
+
+
+X=whatever[A,B]
+X=whatever[C,D]
+
+
+Ce deuxième exemple positionne `X` à l'intersection des deux segments `AB` et `CD`.
+Vous pouvez aussi voir pas mal d'[exemples ici](http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html).
+You could see [more example there](http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html).
+
+Cette fonction est très utile.
+Et à mon avis pas seulement pour afficher des choses.
+De mon point de vue, les autres langages de programmation devraient penser à rajouter les résolutions automatiques simples.
### zsh
@@ -372,9 +410,10 @@ C'est pour l'instant le meilleur shell que j'ai utilisé. Je le préfère au bas
### Prolog
-Je n'ai jamais rien fait de conséquent avec Prolog, mais j'ai adoré l'utiliser.
+Je n'ai jamais rien fait de conséquent avec Prolog, mais j'ai adoré l'apprendre et l'utiliser.
+J'ai eu la chance d'apprendre Prolog par [Alain Colmerauer](http://alain.colmerauer.free.fr/) lui-même.
C'est un langage qui essaye de résoudre les contraintes autant qu'il le peut pour vous.
-C'est assez magique.
+Il en ressort un impression de magie.
On ne fait que décrire ce qu'il faut et on ne donne pas d'ordre.
Un peu comme la programmation fonctionnelle mais en beaucoup plus puissant.
@@ -382,10 +421,14 @@ Un peu comme la programmation fonctionnelle mais en beaucoup plus puissant.
Il reste encore pas mal de langages et de framework à essayer.
Actuellement je pense que je vais passer un moment avec haskell.
-Peut-être demain que j'irai voir du LISP, Scala ou Erlang.
-Comme je suis plus dans la création de site web, j'irai certainement jeter un coup d'oeil à clojure aussi.
+Peut-être demain que j'irai apprendre LISP, Scala ou Erlang.
+Comme je suis plus dans la création de site web, j'irai certainement jeter un coup d'œil à clojure aussi.
Et certainement beaucoup d'autres choses.
-Dites-moi si vous avez une autre expérience avec ces langages de programmation.
-Je ne donne que mes impressions.
-En tout cas je les ai tous utilisés.
+Dites moi si vous avez une autre expérience avec ces langages de programmation.
+Évidement mes impression sont hautement subjectives.
+Cependant, j'ai utilisé tous les langages dont j'ai parlé.
+
+
+*[STL]: Standard Tempate Library
+*[GUI]: Graphic User Interface
diff --git a/layouts/article.html b/layouts/article.html
index 1b7a722f3..79a31839d 100644
--- a/layouts/article.html
+++ b/layouts/article.html
@@ -54,6 +54,7 @@
end
end.join() %>
+
# for each directory in projects dir
for toProject in /path/to/projects/*(/N); do
@@ -34,29 +42,41 @@ for toProject in /path/to/projects/*(/N); do
# project become foo (:t for tail)
project=${toProject:t}
for toResource in $toProject/resources/*.gif(.N); do
- convert $toResource ${toResource:r}.png
+ convert $toResource ${toResource:r}.png && \
\rm -f $toResource
done
done
+en: The `(/N)` means to select only directory and not to crash if there isn't any.
+en: The `(.N)` means to select only files and not to crash if there isn't any.
+
+en: After ⇒
fr: Après
gif_to_png() { convert $1 ${1:r}.png && \rm -f $1 }
+
handle_resources() { map gif_to_png $1/resources/*.gif(.N) }
+
map handle_resources /path/to/projects/*(/N)
+en: No more bloc!
+en: It might be a little bit harder to read if you're not used to functional programming notation.
+en: But it is more concise and robusts.
fr: Plus de bloc !
fr: Oui, c'est un poil plus difficile à lire pour les non initiés.
fr: Mais c'est à la fois plus concis et plus robuste.
+en: Another example with some tests.
fr: Et encore ce code ne possède pas de test.
fr: Recommençons sur le même principe.
+en: Find all files in project not containing an `s` which their name contains their project name:
fr: Trouver les fichiers des projets qui ne contiennent pas de s dans leur nom qui ont le même nom que leur projet.
+Before ⇒
for toProject in Projects/*; do
@@ -73,18 +93,98 @@ for toProject in Projects/*; do
done
-After =>
+After ⇒
contain_no_s() { print $1 | grep -v s }
+
function verify_file_name {
local project=$1:t
contains_project_name() { print $1:t | grep $project }
map "print -- X" $(filter contains_project_name $1/*(.N))
}
+
map show_project_matchin_file $( filter contain_no_s Projects/* )
-Also, the first verstion is a bit easier to read.
-But the second one is clearly far superior in architecture.
-Why?
+en: Also, the first verstion is a bit easier to read.
+en: But the second one is clearly far superior in architecture.
+en: I don't want to argue why here.
+en: Just believe me that the functional programming approach is superior.
+fr: La première version peu paraître plus facile à lire.
+fr: Mais la seconde est plus bien supérieure en terme d'architecture.
+fr: Je ne veux pas discuster ici pourquoi c'est mieux.
+fr: Je vous demande simplement de me croire quand je dis que l'approche fonctionnelle est supérieure.
+
+fr: Actuellement il me manque une fonction lambda, si quelqu'un à une idée elle serait la bienvenue.
+fr: Je ne sais pas encore comment créer facilement des fonctions anonymes.
+en: Actually I lack the lambda operator.
+en: If someone has an idea on how to create anonymous functions, just tell me, thanks.
+
+en: Here is the source code:
+fr: Voici le code source :
+
+
+#!/usr/bin/env zsh
+
+# Provide higer-order functions
+
+# usage:
+#
+# $ foo(){print "x: $1"}
+# $ map foo a b c d
+# x: a
+# x: b
+# x: c
+# x: d
+function map {
+ local func_name=$1
+ shift
+ for elem in $@; print -- $(eval $func_name $elem)
+}
+
+# $ bar() { print $(($1 + $2)) }
+# $ fold bar 0 1 2 3 4 5
+# 15
+# -- but also
+# $ fold bar 0 $( seq 1 100 )
+function fold {
+ if (($#<2)) {
+ print -- "ERROR fold use at least 2 arguments" >&2
+ return 1
+ }
+ if (($#<3)) {
+ print -- $2
+ return 0
+ } else {
+ local acc
+ local right
+ local func_name=$1
+ local init_value=$2
+ local first_value=$3
+ shift 3
+ right=$( fold $func_name $init_value $@ )
+ acc=$( eval "$func_name $first_value $right" )
+ print -- $acc
+ return 0
+ }
+}
+
+# usage:
+#
+# $ baz() { print $1 | grep baz }
+# $ filter baz titi bazaar biz
+# bazaar
+function filter {
+ local predicate=$1
+ local result
+ typeset -a result
+ shift
+ for elem in $@; do
+ if eval $predicate $elem >/dev/null; then
+ result=( $result $elem )
+ fi
+ done
+ print $result
+}
+
diff --git a/multi/blog/programming-language-experience.md b/multi/blog/programming-language-experience.md
index 589646f88..fa4df7b44 100644
--- a/multi/blog/programming-language-experience.md
+++ b/multi/blog/programming-language-experience.md
@@ -2,22 +2,23 @@
isHidden: false
menupriority: 1
kind: article
-created_at: 2011-09-05T12:21:41+02:00
+created_at: 2011-09-28T12:21:41+02:00
en: title: Programming Language Experience
fr: title: programming language experience
author_name: Yann Esposito
author_uri: yannesposito.com
# tags:
-----
-<%= blogimage("main.png","Title image") %>
+<%= blogimage("dragon.jpg","Title image") %>
begindiv(intro)
-en: <%=tldr%> My feelings about programming languages I used.
-fr: <%=tlal%> Mon avis sur les différents languages de programmations que j'ai utilisé.
+en: <%=tldr%> My short and higly subjective feelings about programming languages I used.
+fr: <%=tlal%> Mon avis court et hautement subjectif concernant les différents languages de programmations que j'ai utilisé.
enddiv
-### BASIC
+### `BASIC`
+<%= leftblogimage("basic.gif","Title image") %>
en: The language of my firsts programs!
en: I was about 10, with an `MO5` and `Amstrad CPC 6128` and even with my `Atari STe`.
en: This is the language of `GOTO`s.
@@ -133,6 +134,8 @@ fr: Mais je préfère largement le C.
### C
+<%=leftblogimage("C.jpg","Pointer representation from Dancing links")%>
+
en: The language of pointers.
fr: Le langage des pointeurs
@@ -189,7 +192,7 @@ fr: Bon, oui, le Pascal, le C, le Basic (fortran, Cobol et autres) étaient tous
en: More clearly, the language didn't helped you to structure your program.
fr: En gros, il n'y avait pas d'aide pour structurer votre code.
-en: In order to limit the number of bugs, particularly for huge programs, we started to thing about how to best organize computer programs.
+en: In order to limit the number of bugs, particularly for huge programs, we started to thin about how to best organize computer programs.
en: In the end, from the imperatives language culture, it produced the Object Oriented programming (OOP).
en: Beware, the Object Oriented programming isn't a miracle. Proof? How many bug-free software do you use?
en: Furthermore, OOP doesn't fit all problems.
@@ -208,6 +211,8 @@ fr: Donc les langages orientés objets se sont mis à fleurir.
### C++
+<%=leftblogimage("cplusplus.jpg","Messy router")%>
+
fr: Le malpropre
en: The ugly
@@ -216,25 +221,32 @@ fr: La solution, prendre C et lui rajouter une couche objet.
fr: Le problème avec C++ c'est qu'il fait trop de choses.
fr: L'héritage multiple, des templates, etc...
fr: Bon, je l'ai quand même choisi pour faire le plus gros programme que j'ai jamais fais lors de ma thèse.
-fr: Et je dois avouer que l'expérience m'a plûe.
-fr: Le seul reproche que j'ai à faire, c'est que la STL n'était pas aussi complète que l'on aurait pû l'espérer pour un détail.
+fr: Et je dois avouer que l'expérience m'a plu.
+fr: Le seul reproche que j'ai à faire, c'est que la STL n'était pas aussi complète que l'on aurait pu l'espérer pour un détail.
fr: On ne peut pas faire de `String
-x=(2*y+z)/2
+AA=1/3[A,B]
-en: It will place the point x at 2/3 of y and 1/3 to z.
-en: This feature is very nice. Most programming language should think about adding it.
+fr: Il va position le point `AA` entre `A` et `B`.
+fr: Plus précisément, au barycentre `(2A + B)/3`.
+en: It will place the point `AA` between the point `A` and `B`.
+en: More precisely at the barycenter `(2xA + B)/3`.
+
+
+X=whatever[A,B]
+X=whatever[C,D]
+
+
+fr: Ce deuxième exemple positionne `X` à l'intersection des deux segments `AB` et `CD`.
+fr: Vous pouvez aussi voir pas mal d'[exemples ici](http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html).
+en: This second example, will place the point X at the intersection of the two segments `AB` and `CD`.
+fr: You could see [more example there](http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html).
+
+fr: Cette fonction est très utile.
+fr: Et à mon avis pas seulement pour afficher des choses.
+fr: De mon point de vue, les autres langages de programmation devraient penser à rajouter les résolutions automatiques simples.
+en: This feature is very helpful, and not only to draw things.
+en: Most programming language should think about adding it.
### zsh
@@ -561,38 +609,44 @@ fr: Mais c'est aussi un langage de script très bien adapté aux traitement de f
fr: Je le recommande chaudement.
fr: C'est pour l'instant le meilleur shell que j'ai utilisé. Je le préfère au bash.
en: Yes, zsh is a shell.
-en: But it is also a script language extremly well suited to file traitment.
+en: But it is also a script language extremly well suited to file management.
en: For now, it is the best shell I used. I prefer zsh to bash.
### Prolog
-fr: Je n'ai jamais rien fait de conséquent avec Prolog, mais j'ai adoré l'utiliser.
+fr: Je n'ai jamais rien fait de conséquent avec Prolog, mais j'ai adoré l'apprendre et l'utiliser.
+fr: J'ai eu la chance d'apprendre Prolog par [Alain Colmerauer](http://alain.colmerauer.free.fr/) lui-même.
fr: C'est un langage qui essaye de résoudre les contraintes autant qu'il le peut pour vous.
-fr: C'est assez magique.
+fr: Il en ressort un impression de magie.
fr: On ne fait que décrire ce qu'il faut et on ne donne pas d'ordre.
fr: Un peu comme la programmation fonctionnelle mais en beaucoup plus puissant.
-en: I never made somthing serious with Prolog, but I really loved to use and learn it.
+en: I never made something serious with Prolog, but I really loved to use and learn it.
+en: I had the chance to learn Prolog with [Alain Colmerauer](http://alain.colmerauer.free.fr/) himself.
en: This language try to resolve constraints as much as it can.
-en: It is kind of magic.
+en: It has a magic feeling when you use it.
en: We only write constraints, we never put order.
-en: A bit like functionnal programming but far more powerful.
+en: A bit like functional programming but far more powerful.
fr: ## Les langages à découvrir
en: ## Languages to discover
fr: Il reste encore pas mal de langages et de framework à essayer.
fr: Actuellement je pense que je vais passer un moment avec haskell.
-fr: Peut-être demain que j'irai voir du LISP, Scala ou Erlang.
-fr: Comme je suis plus dans la création de site web, j'irai certainement jeter un coup d'oeil à clojure aussi.
+fr: Peut-être demain que j'irai apprendre LISP, Scala ou Erlang.
+fr: Comme je suis plus dans la création de site web, j'irai certainement jeter un coup d'œil à clojure aussi.
fr: Et certainement beaucoup d'autres choses.
-en: It remains many language and framework to try.
+en: Many languages and framework remains to be learnt and tried.
en: Actually I believe I will stay a while with haskell.
-en: Maybe tomorrow I will see LISP, Scala or Erlang.
+en: Maybe tomorrow I will look at LISP, Scala or Erlang.
en: I also certainly look at clojure to make web application.
-fr: Dites-moi si vous avez une autre expérience avec ces langages de programmation.
-fr: Je ne donne que mes impressions.
-fr: En tout cas je les ai tous utilisés.
+fr: Dites moi si vous avez une autre expérience avec ces langages de programmation.
+fr: Évidement mes impression sont hautement subjectives.
+fr: Cependant, j'ai utilisé tous les langages dont j'ai parlé.
en: Tell me if you have any other experience with these programming languages.
-en: I had only given my impressions.
-en: But I used them all.
+en: Of course, my feelings are highly subjectives.
+en: But I used all of these languages.
+
+
+*[STL]: Standard Tempate Library
+*[GUI]: Graphic User Interface
diff --git a/output/Scratch/assets/css/main.css b/output/Scratch/assets/css/main.css
index 8a7dac410..0c1ae7bc3 100644
--- a/output/Scratch/assets/css/main.css
+++ b/output/Scratch/assets/css/main.css
@@ -1 +1 @@
-*{transition-property:all;transition-duration:.5s;-moz-transition-property:all;-moz-transition-duration:.5s;-webkit-transition-property:all;-webkit-transition-duration:.5s;-o-transition-property:all;-o-transition-duration:.5s}table.description tr td{border:1px solid#eee}.assombris20{background-color:#eee}body{color:#333;background-color:#fafafa}#content{color:#333;background-color:#fafafa}a:hover{text-shadow:0 0 2px#faa}a,a:link,a:visited,a:active,a:hover,#clickcomment{text-decoration:none;outline:none}a,a:link,a:visited,a:active,#clickcomment{color:#333}a:hover,#clickcomment:hover{color:#a53}hr{color:#eee;border-top:1px solid#eee;border-bottom:none;border-left:none;border-right:none}ul{list-style:square}ol,ul{padding-left:0}ol li,ul li{margin:.5em 0}ol li ul,ol li ol,ul li ol,ul li ul{margin:.5em 1.5em;list-style:circle}body,h1,h2,h3,h4,#entete,.tag{font-family:Georgia,Palatino,"Century Schoolbook L","Times New Roman",Times,serif;line-height:1.4em}pre{background-color:#333;color:#fafafa;box-shadow:0 0 1em black inset;-webkit-box-shadow:0 0 1em black inset;border-radius:3px;padding:1em;line-height:1.2em}pre -moz,pre -webkit{border-radius:3px}pre,code{font-family:monaco,monospace;font-size:.7em}p code{font-family:monospace;font-size:1em}p{margin-bottom:1.2em}blockquote{font-style:italic;padding:.5em 1em;color:#555;background-color:#f2f2f2;border:1px solid#ccc}blockquote a:hover{color:#a53}blockquote strong,blockquote b,blockquote i,blockquote em{font-weight:400;font-style:normal;color:#333}abbr,acronym{font-variant:small-caps;text-decoration:none;border-bottom-width:0}#titre{letter-spacing:-0.06em;border-bottom:4px double#ccc;border-top:4px double#ccc}#liens .active,#sousliens{color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}#liens .active a,#sousliens a{color:#666}#liens .active a:hover,#sousliens a:hover{color:#a53}#liens .active a:hover strong,#liens .active a:hover b,#liens .active a:hover i,#liens .active a:hover em,#liens .active a:hover .nicer,#sousliens a:hover strong,#sousliens a:hover b,#sousliens a:hover i,#sousliens a:hover em,#sousliens a:hover .nicer{color:#fb9}#liens .active hr,#sousliens hr{color:#666;border-top:1px solid#666}#liens .active strong,#liens .active b,#liens .active i,#liens .active em,#sousliens strong,#sousliens b,#sousliens i,#sousliens em{color:#333}#liens a{border:1px solid#eee;background:rgba(0,0,0,0.05);box-shadow:0 0 2px white,0 0 3px#ccc inset;-webkit-box-shadow:0 0 2px white,0 0 3px#ccc inset;border:1px solid rgba(0,0,0,0.1);border-radius:3px}#liens a:hover{background:rgba(0,0,0,0.1);box-shadow:0 0 6px#555 inset;-webkit-box-shadow:0 0 6px#555 inset}#liens .active{text-shadow:0 0 2px rgba(0,0,0,0.5);background-color:#f7f7f7;border:1px solid #e9e9e9;box-shadow:0 0 3px #c7c7c7 inset;-webkit-box-shadow:0 0 3px #c7c7c7 inset;border-radius:3px;border-top:none}#lastmod{font-size:.8em}.nojsbutton{font-size:2.5em}#clickcomment{cursor:pointer;font-size:1.2em;line-height:4em;margin:1em;background:rgba(0,0,0,0.05);box-shadow:0 0 2px white,0 0 3px#ccc inset;-webkit-box-shadow:0 0 2px white,0 0 3px#ccc inset;border:1px solid rgba(0,0,0,0.1);border-radius:3px}#clickcomment:hover{background:rgba(0,0,0,0.1);box-shadow:0 0 6px#555 inset;-webkit-box-shadow:0 0 6px#555 inset}.small{font-size:.8em}.sc{font-variant:small-caps}.impact,.darkimpact{font-size:2em;margin:0 auto 1em auto;line-height:1.3em}h1 > .date{font-size:.6em;color:#333}.date{font-size:.8em;color:#fafafa;border:1px solid#333;text-align:center;width:4.1em;line-height:1.5em;display:inline-block;vertical-align:middle;margin-right:1em}.date .day,.date .month,.date .year{display:block}.date .day{color:#333;background-color:#fafafa;float:left;width:1.7em}.date .month{float:right;width:2.3em;background-color:#333;color:#fafafa}.date .year{line-height:3ex;clear:both;color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}.date .year a{color:#666}.date .year a:hover{color:#a53}.date .year a:hover strong,.date .year a:hover b,.date .year a:hover i,.date .year a:hover em,.date .year a:hover .nicer{color:#fb9}.date .year hr{color:#666;border-top:1px solid#666}.date .year strong,.date .year b,.date .year i,.date .year em{color:#333}body{text-align:center;font-size:1em}body > #entete{position:absolute;left:0;top:.5em;width:100%;min-width:50em;z-index:8000;padding-bottom:1em;margin-bottom:3em}body > #content > #entete > #choix > #choixrss > #rss{font-size:1em}#titre h2{width:80%;margin-left:auto;margin-right:auto;text-align:center;color:#ccc}#titre{text-align:center;width:100%}#titre h1,#titre h2{padding-left:1em;padding-right:1em}#bottom{clear:right;margin-right:0;padding:1.5em;line-height:1.5em;color:#ccc;margin-top:2em;text-align:center}#bottom a{color:#ccc}#bottom a:hover{color:#a53}#sousliens{padding:1em 0;line-height:2em}#sousliens ul{list-style:none;margin-left:4em}ul.horizontal li{display:inline;font-size:.9em}ul.horizontal{margin-top:0;margin-bottom:0}#entete{padding-top:.1em;border-top:1px solid#ccc;border-bottom:1px solid#ccc}#liens{width:100%;padding:0;clear:both;margin-top:.5em}#liens ul{width:100%;clear:both;padding:0;margin:0}#liens ul li{display:inline-block;height:4em;margin-left:.2em;margin-right:.2em;width:23%}#liens ul li a,#liens ul li span{width:100%;display:block;line-height:4em}.clear{clear:both}#content{line-height:4em;margin-left:auto;margin-right:auto;margin-top:0;position:relative;clear:both;width:52em}#content > #choix{margin-top:1em}.encadre,.black,.red,.intro,.resume,.shadow{padding:2em;margin-top:2em;margin-bottom:2em}.encadre,.black,.red,.shadow{color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}.encadre a,.black a,.red a,.shadow a{color:#666}.encadre a:hover,.black a:hover,.red a:hover,.shadow a:hover{color:#a53}.encadre a:hover strong,.encadre a:hover b,.encadre a:hover i,.encadre a:hover em,.encadre a:hover .nicer,.black a:hover strong,.black a:hover b,.black a:hover i,.black a:hover em,.black a:hover .nicer,.red a:hover strong,.red a:hover b,.red a:hover i,.red a:hover em,.red a:hover .nicer,.shadow a:hover strong,.shadow a:hover b,.shadow a:hover i,.shadow a:hover em,.shadow a:hover .nicer{color:#fb9}.encadre hr,.black hr,.red hr,.shadow hr{color:#666;border-top:1px solid#666}.encadre strong,.encadre b,.encadre i,.encadre em,.black strong,.black b,.black i,.black em,.red strong,.red b,.red i,.red em,.shadow strong,.shadow b,.shadow i,.shadow em{color:#333}.intro,.resume{font-size:.9em;font-style:italic;padding:.5em 1em;color:#555}.intro a:hover,.resume a:hover{color:#a53}.intro strong,.intro b,.intro i,.intro em,.resume strong,.resume b,.resume i,.resume em{font-weight:400;font-style:normal;color:#333}#afterheader > h1{width:100%;padding-top:1.5em;text-align:left}#afterheader{padding-left:0;padding-right:0}#sousliens{margin-top:3em;margin-bottom:3em;font-size:1.2em;letter-spacing:1px;text-align:left;clear:both}.twilight{line-height:1.1em}.corps{font-family:Georgia,Palatino,"Century Schoolbook L","Times New Roman",Times,serif;font-size:1.25em;line-height:1.6em;text-align:justify;text-align:left;padding:3em 3em;margin:0;border-bottom:1px#ccc solid;clear:both}.corps img{max-width:30em;border:1px solid#ccc;background-color:#fafafa;padding:.5em;box-shadow:0 10px 15px#ccc;-webkit-box-shadow:0 10px 15px#ccc;border-radius:3px}img.clean{border:none}#address{clear:both}.definitionCell{width:5em;vertical-align:top;font-weight:700;text-align:center}.valueCell{text-align:right}.smallblock{float:left;width:50%;font-size:1em;font-weight:700}.largeblock{float:right;width:70%;font-size:1em}#blackpage,#nojsredirect{top:0;left:0;width:100%;height:100%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:fixed;text-align:center}#blackpage{color:#666;padding-top:10em;background-color:#eee;z-index:9000;cursor:wait}#blackpage img{background:none;border:none}#blackpage a{cursor:pointer}#nojsredirect{z-index:9001}.nojsbutton{width:50%;padding:1em;border:solid 3px white;margin-left:auto;margin-right:auto;margin-top:2em;z-index:9002}.file{font-size:.8em;text-align:right;padding-right:1em;margin-right:.1;margin-bottom:0;background:#333}.file a{color:#fafafa}.flush{clear:both}table.description{border-spacing:5px;border-collapse:separate;margin-right:auto;margin-left:auto}table.description tr td{padding-left:.5em;padding-right:.5em;padding-top:.5ex;padding-bottom:.5ex;vertical-align:middle;margin-right:5px}ul.long li{margin-bottom:1em}img{display:block;margin-left:auto;margin-right:auto;background:none;border:none}img.left{float:left;max-width:30%;margin-right:1em}img.inside{display:inline;vertical-align:middle}pre overflow{y:hidden;x:auto}.withfile pre{margin-top:0;overflow:hidden}.navigationprev,.navigationnext{padding:0;margin-left:.2em;margin-right:.2em;margin-bottom:0;margin-top:3em;width:45%}.navigation .navigationprev,.navigation .navigationnext{width:30%;margin-top:0}.navigation{height:4em;border-bottom:#ccc solid 1px}.presarticleleft,.presarticleright{font-size:1em}.navigationprev{float:left;text-align:left}.navigationnext{float:right;text-align:right}.impact,.darkimpact{text-align:left;width:66%;padding-left:.25em;padding-right:.25em}table.impact{text-align:left}table.impact tr td{padding-left:.25em;padding-right:.25em}#liens{font-size:1.2em}#iemessage{font-size:1.2em}.tag{display:inline;cursor:pointer;margin-left:.5em;margin-right:.5em}.list{margin-top:3em}#menuMessage{font-size:1.2em;line-height:1.5em;width:100%;text-align:center}#choixrss{float:right;width:25%;line-height:2em;margin:1em}#choixlang{line-height:2em;margin:1em}#choix a{color:#888}#choix a:hover{color:#a53}#choixlang a{display:block;width:25%;line-height:4em;text-align:center;background:rgba(0,0,0,0.05);box-shadow:0 0 2px white,0 0 3px#ccc inset;-webkit-box-shadow:0 0 2px white,0 0 3px#ccc inset;border:1px solid rgba(0,0,0,0.1);border-radius:3px}#choixlang a:hover{background:rgba(0,0,0,0.1);box-shadow:0 0 6px#555 inset;-webkit-box-shadow:0 0 6px#555 inset}#choix a{background:rgba(0,0,0,0.05);box-shadow:0 0 2px white,0 0 3px#ccc inset;-webkit-box-shadow:0 0 2px white,0 0 3px#ccc inset;border:1px solid rgba(0,0,0,0.1);border-radius:3px}#choix a:hover{background:rgba(0,0,0,0.1);box-shadow:0 0 6px#555 inset;-webkit-box-shadow:0 0 6px#555 inset}#next_before_articles{clear:both;width:100%;font-size:1.2em;padding-top:1em;padding-bottom:1em}#previous_articles,#next_articles{color:#888;font-style:italic;font-size:.8em}#previous_articles{float:left;margin-left:1em;width:45%;text-align:left}.previous_article,.next_article{margin-top:1em}#next_articles{float:right;width:45%;margin-right:1em;text-align:right}#clickcomment{margin-left:0;width:25%}#rss{font-size:1.2em;text-align:center;display:block;width:100%;float:right;padding:1em .1em}.return a{text-align:center;float:right;width:25%}.corps .return a{color:#eee;padding:.1em;line-height:1.5em;font-size:1.5em;height:1.5em;float:left;font-size:2em;margin-top:-0.5em;margin-left:-2em;width:1.5em}a.return{color:#eee;padding:.1em;line-height:1.5em;font-size:1.5em;height:1.5em;font-size:2em;width:1.5em;display:block}a.return:hover{color:#888}.corps .return a:hover{color:#a53}.footnotes{font-size:.8em}.fontnotes ol{margin-left:0}.typeset img{display:inline;border:none;margin:0;padding:0}strong,b,i,em{font-weight:400;color:#888}strong a,b a,i a,em a{color:#333}strong a:hover,b a:hover,i a:hover,em a:hover{color:#a53}.corps p strong,.corps p b,.corps p i,.corps p em{color:#555}a:hover strong,a:hover b,a:hover i,a:hover em{color:#e25f2f}a:hover .nicer{color:#fb9}.nicer{color:#ccc;font-family:"Lucida Grande",Tahoma}.block{width:31%;text-align:left;line-height:1em;margin-left:1%;margin-right:1%;font-size:.8em}.block a{color:#333}.block a:hover{color:#a53}.block h3{margin:0;font-size:1.3em}.block p{line-height:1.2em}.left{float:left}.right{float:right}.corps p a,.corps ul a{color:#555}.corps p a:hover,.corps ul a:hover{color:#a53}ul.bloglist,.archive ul{list-style-type:none;margin:0}ul.bloglist li,.archive ul li{margin-bottom:1em}.button{cursor:pointer;text-align:center}#tagcloud{font-size:.8em;background:#eee;box-shadow:0 0 6px#ccc;-webkit-box-shadow:0 0 6px#ccc;border-radius:3px;line-height:2.5em;padding:2em}
\ No newline at end of file
+*{transition-property:all;transition-duration:.5s;-moz-transition-property:all;-moz-transition-duration:.5s;-webkit-transition-property:all;-webkit-transition-duration:.5s;-o-transition-property:all;-o-transition-duration:.5s}table.description tr td{border:1px solid#eee}.assombris20{background-color:#eee}body{color:#333;background-color:#fafafa}#content{color:#333;background-color:#fafafa}a:hover{text-shadow:0 0 2px#faa}a,a:link,a:visited,a:active,a:hover{text-decoration:none;outline:none}a,a:link,a:visited,a:active{color:#333}a:hover{color:#a53}hr{color:#eee;border-top:1px solid#eee;border-bottom:none;border-left:none;border-right:none}ul{list-style:square}ol,ul{padding-left:0}ol li,ul li{margin:.5em 0}ol li ul,ol li ol,ul li ol,ul li ul{margin:.5em 1.5em;list-style:circle}body,h1,h2,h3,h4,#entete,.tag{font-family:Georgia,Palatino,"Century Schoolbook L","Times New Roman",Times,serif;line-height:1.4em}pre{background-color:#333;color:#fafafa;box-shadow:0 0 1em black inset;border-radius:3px;padding:1em;line-height:1.2em}pre,code{font-family:monaco,monospace;font-size:.7em}p code{font-family:monospace;font-size:1em}p{margin-bottom:1.2em}blockquote{font-style:italic;padding:.5em 1em;color:#555;background-color:#f2f2f2;border:1px solid#ccc}blockquote a:hover{color:#a53}blockquote strong,blockquote b,blockquote i,blockquote em{font-weight:400;font-style:normal;color:#333}abbr,acronym{font-variant:small-caps;text-decoration:none;border-bottom-width:0}#titre{letter-spacing:-0.06em;border-bottom:4px double#ccc;border-top:4px double#ccc}#liens .active,#sousliens{color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}#liens .active a,#sousliens a{color:#666}#liens .active a:hover,#sousliens a:hover{color:#a53}#liens .active a:hover strong,#liens .active a:hover b,#liens .active a:hover i,#liens .active a:hover em,#liens .active a:hover .nicer,#sousliens a:hover strong,#sousliens a:hover b,#sousliens a:hover i,#sousliens a:hover em,#sousliens a:hover .nicer{color:#fb9}#liens .active hr,#sousliens hr{color:#666;border-top:1px solid#666}#liens .active strong,#liens .active b,#liens .active i,#liens .active em,#sousliens strong,#sousliens b,#sousliens i,#sousliens em{color:#333}#liens a{border:1px solid#eee;background:rgba(0,0,0,0.05);box-shadow:0 0 2px white,0 0 3px#ccc inset;border:1px solid rgba(0,0,0,0.1);border-radius:3px}#liens a:hover{background:rgba(0,0,0,0.1);box-shadow:0 0 6px#555 inset}#liens .active{text-shadow:0 0 2px rgba(0,0,0,0.5);background-color:#f7f7f7;border:1px solid #e9e9e9;box-shadow:0 0 3px #c7c7c7 inset;border-radius:3px;border-top:none}#lastmod{font-size:.8em}.nojsbutton{font-size:2.5em}#clickcomment,#choixlang > a,#choixrss > a,.return > a{display:block;width:25%;cursor:pointer;margin:1em 0;padding:1em;font-size:16px;line-height:1.4em;border-radius:1.5em;background:rgba(0,0,0,0.05);box-shadow:0 3px 3px rgba(255,255,255,0.5) inset,0 -3px 3px rgba(0,0,0,0.2) inset,0 1px 2px rgba(0,0,0,0.5)}#clickcomment:hover,#choixlang > a:hover,#choixrss > a:hover,.return > a:hover{background:rgba(0,0,0,0.1);box-shadow:0 3px 3px rgba(255,255,255,0.5) inset,0 -3px 3px rgba(0,0,0,0.2) inset,0 1px 5px rgba(60,30,0,0.8)}#clickcomment:active,#choixlang > a:active,#choixrss > a:active,.return > a:active{background:rgba(0,0,0,0.2);box-shadow:0 3px 3px rgba(255,255,255,0.5) inset,0 -3px 3px rgba(0,0,0,0.2) inset,0 1px 5px rgba(60,30,0,0.8)}.return > a,#choixrss > a{float:right}#choix .return > a,#choix #choixrss > a{margin-top:0}.small{font-size:.8em}.sc{font-variant:small-caps}.impact,.darkimpact{font-size:2em;margin:0 auto 1em auto;line-height:1.3em}h1 > .date{font-size:.6em;color:#333}.date{font-size:.8em;color:#fafafa;border:1px solid#333;text-align:center;width:4.1em;line-height:1.5em;display:inline-block;vertical-align:middle;margin-right:1em}.date .day,.date .month,.date .year{display:block}.date .day{color:#333;background-color:#fafafa;float:left;width:1.7em}.date .month{float:right;width:2.3em;background-color:#333;color:#fafafa}.date .year{line-height:3ex;clear:both;color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}.date .year a{color:#666}.date .year a:hover{color:#a53}.date .year a:hover strong,.date .year a:hover b,.date .year a:hover i,.date .year a:hover em,.date .year a:hover .nicer{color:#fb9}.date .year hr{color:#666;border-top:1px solid#666}.date .year strong,.date .year b,.date .year i,.date .year em{color:#333}body{text-align:center;font-size:1em}body > #entete{position:absolute;left:0;top:.5em;width:100%;min-width:50em;z-index:8000;padding-bottom:1em;margin-bottom:3em}#titre h2{width:80%;margin-left:auto;margin-right:auto;text-align:center;color:#ccc}#titre{text-align:center;width:100%}#titre h1,#titre h2{padding-left:1em;padding-right:1em}#bottom{clear:right;margin-right:0;padding:1.5em;line-height:1.5em;color:#ccc;margin-top:2em;text-align:center}#bottom a{color:#ccc}#bottom a:hover{color:#a53}#sousliens{padding:1em 0;line-height:2em}#sousliens ul{list-style:none;margin-left:4em}ul.horizontal li{display:inline;font-size:.9em}ul.horizontal{margin-top:0;margin-bottom:0}#entete{padding-top:.1em;border-top:1px solid#ccc;border-bottom:1px solid#ccc}#liens{width:100%;padding:0;clear:both;margin-top:.5em}#liens ul{width:100%;clear:both;padding:0;margin:0}#liens ul li{display:inline-block;height:4em;margin-left:.2em;margin-right:.2em;width:23%}#liens ul li a,#liens ul li span{width:100%;display:block;line-height:4em}.clear{clear:both}#content{line-height:4em;margin-left:auto;margin-right:auto;margin-top:0;position:relative;clear:both;width:52em}.encadre,.black,.red,.intro,.resume,.shadow{padding:2em;margin-top:2em;margin-bottom:2em}.encadre,.black,.red,.shadow{color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}.encadre a,.black a,.red a,.shadow a{color:#666}.encadre a:hover,.black a:hover,.red a:hover,.shadow a:hover{color:#a53}.encadre a:hover strong,.encadre a:hover b,.encadre a:hover i,.encadre a:hover em,.encadre a:hover .nicer,.black a:hover strong,.black a:hover b,.black a:hover i,.black a:hover em,.black a:hover .nicer,.red a:hover strong,.red a:hover b,.red a:hover i,.red a:hover em,.red a:hover .nicer,.shadow a:hover strong,.shadow a:hover b,.shadow a:hover i,.shadow a:hover em,.shadow a:hover .nicer{color:#fb9}.encadre hr,.black hr,.red hr,.shadow hr{color:#666;border-top:1px solid#666}.encadre strong,.encadre b,.encadre i,.encadre em,.black strong,.black b,.black i,.black em,.red strong,.red b,.red i,.red em,.shadow strong,.shadow b,.shadow i,.shadow em{color:#333}.intro,.resume{font-size:.9em;font-style:italic;padding:.5em 1em;color:#555}.intro a:hover,.resume a:hover{color:#a53}.intro strong,.intro b,.intro i,.intro em,.resume strong,.resume b,.resume i,.resume em{font-weight:400;font-style:normal;color:#333}#afterheader > h1{width:100%;padding-top:1.5em;text-align:left}#afterheader{padding-left:0;padding-right:0}#sousliens{margin-top:3em;margin-bottom:3em;font-size:1.2em;letter-spacing:1px;text-align:left;clear:both}.twilight{line-height:1.1em}.corps{font-family:Georgia,Palatino,"Century Schoolbook L","Times New Roman",Times,serif;font-size:1.25em;line-height:1.6em;text-align:justify;text-align:left;padding:3em 3em;margin:0;border-bottom:1px#ccc solid;clear:both}.corps img{max-width:30em;border:1px solid#ccc;background-color:#fafafa;padding:.5em;box-shadow:0 10px 15px#ccc;border-radius:3px}img.clean{border:none}#address{clear:both}.definitionCell{width:5em;vertical-align:top;font-weight:700;text-align:center}.valueCell{text-align:right}.smallblock{float:left;width:50%;font-size:1em;font-weight:700}.largeblock{float:right;width:70%;font-size:1em}#blackpage,#nojsredirect{top:0;left:0;width:100%;height:100%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:fixed;text-align:center}#blackpage{color:#666;padding-top:10em;background-color:#eee;z-index:9000;cursor:wait}#blackpage img{background:none;border:none}#blackpage a{cursor:pointer}#nojsredirect{z-index:9001}.nojsbutton{width:50%;padding:1em;border:solid 3px white;margin-left:auto;margin-right:auto;margin-top:2em;z-index:9002}.file{font-size:.8em;text-align:right;padding-right:1em;margin-right:.1;margin-bottom:0;background:#333}.file a{color:#fafafa}.flush{clear:both}table.description{border-spacing:5px;border-collapse:separate;margin-right:auto;margin-left:auto}table.description tr td{padding-left:.5em;padding-right:.5em;padding-top:.5ex;padding-bottom:.5ex;vertical-align:middle;margin-right:5px}ul.long li{margin-bottom:1em}img{display:block;margin-left:auto;margin-right:auto;background:none;border:none}img.left{float:left;max-width:30%;margin-right:1em}img.inside{display:inline;vertical-align:middle}pre overflow{y:hidden;x:auto}.withfile pre{margin-top:0;overflow:hidden}.navigationprev,.navigationnext{padding:0;margin-left:.2em;margin-right:.2em;margin-bottom:0;margin-top:3em;width:45%}.navigation .navigationprev,.navigation .navigationnext{width:30%;margin-top:0}.navigation{height:4em;border-bottom:#ccc solid 1px}.presarticleleft,.presarticleright{font-size:1em}.navigationprev{float:left;text-align:left}.navigationnext{float:right;text-align:right}.impact,.darkimpact{text-align:left;width:66%;padding-left:.25em;padding-right:.25em}table.impact{text-align:left}table.impact tr td{padding-left:.25em;padding-right:.25em}#liens{font-size:1.2em}#iemessage{font-size:1.2em}.tag{display:inline;cursor:pointer;margin-left:.5em;margin-right:.5em}.list{margin-top:3em}#menuMessage{font-size:1.2em;line-height:1.5em;width:100%;text-align:center}#next_before_articles{clear:both;width:100%;font-size:1.2em;padding-top:1em;padding-bottom:1em}#previous_articles,#next_articles{color:#888;font-style:italic;font-size:.8em}#previous_articles{float:left;margin-left:1em;width:45%;text-align:left}.previous_article,.next_article{margin-top:1em}#next_articles{float:right;width:45%;margin-right:1em;text-align:right}#rss{font-size:1.2em;text-align:center;display:block;width:100%;float:right;padding:1em .1em}.corps .return a{color:#eee;padding:.1em;line-height:1.5em;font-size:1.5em;height:1.5em;float:left;font-size:2em;margin-top:-0.5em;margin-left:-2em;width:1.5em}a.return{color:#eee;padding:.1em;line-height:1.5em;font-size:1.5em;height:1.5em;font-size:2em;width:1.5em;display:block}a.return:hover{color:#888}.corps .return a:hover{color:#a53}.footnotes{font-size:.8em}.fontnotes ol{margin-left:0}.typeset img{display:inline;border:none;margin:0;padding:0}strong,b,i,em{font-weight:400;color:#888}strong a,b a,i a,em a{color:#333}strong a:hover,b a:hover,i a:hover,em a:hover{color:#a53}.corps p strong,.corps p b,.corps p i,.corps p em{color:#555}a:hover strong,a:hover b,a:hover i,a:hover em{color:#e25f2f}a:hover .nicer{color:#fb9}.nicer{color:#ccc;font-family:"Lucida Grande",Tahoma}.block{width:31%;text-align:left;line-height:1em;margin-left:1%;margin-right:1%;font-size:.8em}.block a{color:#333}.block a:hover{color:#a53}.block h3{margin:0;font-size:1.3em}.block p{line-height:1.2em}.left{float:left}.right{float:right}.corps p a,.corps ul a{color:#555}.corps p a:hover,.corps ul a:hover{color:#a53}ul.bloglist,.archive ul{list-style-type:none;margin:0}ul.bloglist li,.archive ul li{margin-bottom:1em}.button{cursor:pointer;text-align:center}#tagcloud{font-size:.8em;background:#eee;box-shadow:0 0 6px#ccc;border-radius:3px;line-height:2.5em;padding:2em}
\ No newline at end of file
diff --git a/output/Scratch/en/about/contact/index.html b/output/Scratch/en/about/contact/index.html
index 8f470f45a..d20d855ea 100644
--- a/output/Scratch/en/about/contact/index.html
+++ b/output/Scratch/en/about/contact/index.html
@@ -28,15 +28,14 @@
diff --git a/output/Scratch/en/about/cv/index.html b/output/Scratch/en/about/cv/index.html
index 5136acac7..d81e2bb1a 100644
--- a/output/Scratch/en/about/cv/index.html
+++ b/output/Scratch/en/about/cv/index.html
@@ -28,15 +28,14 @@
diff --git a/output/Scratch/en/about/index.html b/output/Scratch/en/about/index.html
index 759f496e9..724e540ca 100644
--- a/output/Scratch/en/about/index.html
+++ b/output/Scratch/en/about/index.html
@@ -28,15 +28,14 @@
Before ⇒
+for toProject in Projects/*; do project=$toProject:t @@ -102,15 +104,17 @@ map handle_resources /path/to/projects/*(/N) done-
After =>
+After ⇒
contain_no_s() { print $1 | grep -v s } + function verify_file_name { local project=$1:t contains_project_name() { print $1:t | grep $project } map "print -- X" $(filter contains_project_name $1/*(.N)) } + map show_project_matchin_file $( filter contain_no_s Projects/* )@@ -118,6 +122,73 @@ map show_project_matchin_file $( +
+#!/usr/bin/env zsh + +# Provide higer-order functions + +# usage: +# +# $ foo(){print "x: $1"} +# $ map foo a b c d +# x: a +# x: b +# x: c +# x: d +function map { + local func_name=$1 + shift + for elem in $@; print -- $(eval $func_name $elem) +} + +# $ bar() { print $(($1 + $2)) } +# $ fold bar 0 1 2 3 4 5 +# 15 +# -- but also +# $ fold bar 0 $( seq 1 100 ) +function fold { + if (($#<2)) { + print -- "ERROR fold use at least 2 arguments" >&2 + return 1 + } + if (($#<3)) { + print -- $2 + return 0 + } else { + local acc + local right + local func_name=$1 + local init_value=$2 + local first_value=$3 + shift 3 + right=$( fold $func_name $init_value $@ ) + acc=$( eval "$func_name $first_value $right" ) + print -- $acc + return 0 + } +} + +# usage: +# +# $ baz() { print $1 | grep baz } +# $ filter baz titi bazaar biz +# bazaar +function filter { + local predicate=$1 + local result + typeset -a result + shift + for elem in $@; do + if eval $predicate $elem >/dev/null; then + result=( $result $elem ) + fi + done + print $result +} ++
BASIC
+The language of my firsts programs!
+I was about 10, with an MO5
and Amstrad CPC 6128
and even with my Atari STe
.
+This is the language of GOTO
s.
+Ô nostalgia.
+Unfortunately this might be the only interesting part of this language.
Today this language is obsolescent. +It not even a good language to learn pro...
+ + ++ Read more » +
+The language of my firsts programs!
-I was about 10, with an MO5
and Amstrad CPC 6128
and even with my Atari STe
.
-This is the language of GOTO
s.
-Ô nostalgia.
-Unfortunately this might be the only interesting part of this language.
Today this language is obsolescent. -It not even a good language to learn programming. -I know there exist some compiler now. -But this is not enough to try to learn it.
- --READY -10 PRINT- - -
- Read more » -
-BASIC
The language of my firsts programs! +
+The language of my firsts programs!
I was about 10, with an MO5
and Amstrad CPC 6128
and even with my Atari STe
.
This is the language of GOTO
s.
Ô nostalgia.
@@ -151,6 +152,8 @@ In the end I prefer C.
The language of pointers.
Le programming language.
@@ -187,7 +190,7 @@ What you need to know is this old language had certainly inspired most new objecMore clearly, the language didn’t helped you to structure your program.
-In order to limit the number of bugs, particularly for huge programs, we started to thing about how to best organize computer programs. +
In order to limit the number of bugs, particularly for huge programs, we started to thin about how to best organize computer programs. In the end, from the imperatives language culture, it produced the Object Oriented programming (OOP). Beware, the Object Oriented programming isn’t a miracle. Proof? How many bug-free software do you use? Furthermore, OOP doesn’t fit all problems. @@ -198,52 +201,62 @@ I mean an information system, the OOP is not so bad.
The ugly
Industry wanted an Object Oriented Language without loosing all their old C code.
Solution, keep C and add an Object layer on it.
The main concern about C++ is it do too many things.
-I particularly appreciated multiple inheritage and templates.
+I particularly appreciated multiple inheritance and templates.
In reality I liked a lot C++ while I was working alone.
I used it to write DEES
my main thesis software.
-My only concern was about a lack in the STL.
+My only concern was about a lack in the STL.
In the doc, one could use String<T>
.
But in reality, T have to be only char
or char16
.
-Then I had to reduce my alphabet to $2^16$ letters.
+Then I had to reduce my alphabet to 216 letters.
Except for some application, the alphabet must be far larger than that.
To conclude, I’d say, C++ is very good if you work alone or with a fixed subset of its features.
+Yes, it is a really nice language. Full object in mind. Far cleaner than C++. But it isn’t so popular. Behind C++ there is a large community to help new users and to write libraries. -Furthermore, I preferred working with C++.
+Furthermore, I preferred working with C++. +At that time I programmed a lot with C and like its syntax.The first time I heard about Java it was le Grail!
Perfect portability, your program will work on all platform. -There was incrusted inside the language architecture concepts to help limit mistakes, and force you to use good programming habits… But.
+There was incrusted inside the language architecture concepts to help limit mistakes, and force you to use good programming habits. But…But It is extremely verbose. And limitations are quite boring if you know what you’re doing.
For example, there is no multiple inheritance. -Generally it is a coherent choice if it is compensated by something else. -In Java, there are interfaces. -Except, interfaces are a way to add only methods to classes. -In no way, you can add any attribute. -It was really a lack to make a graphic interface. -I made a GUI using Java Swing and I created my own notification system between different element of the GUI. +Generally it is a coherent choice when there are a way to compensate. +In Java, there are interfaces for this. +Except, interfaces can only add methods to a class. +You cannot add any attribute to a class except by subclassing. +I really lacked this feature.
+ +I made a GUI using Java Swing and I created my own notification system between different element of the GUI. Then, at the begining I only needed to send notification 1 to 1. After some times, I needed to make 1 to many notifications. And I add to make a bunch of copy/paste inside all my subclasses! -Copy/paste are exactly what should be avoided the most by Object oriented languages.
+Copy/paste are exactly what should be avoided the most by object oriented languages. -Another thing, I had to handle threads. -Except I had to make my own thread gestion system to avoid locks and notifications between threads (this thread ended, …). +
Another thing ; I had to handle threads. +I had to make my own thread gestion system to avoid locks and notifications between threads (this thread ended, …). At that time I used Java 1.5. Normally this problem should have been solved with Java 1.6. I wish it is the case, but lacking such an essential feature for a language was very bad.
@@ -253,16 +266,18 @@ I wish it is the case, but lacking such an essential feature for a language wasAfter my experience, I don’t recommend Java. Portability does not worth this price.
-GUI protability mean, mediocre experience on all platforms. -Any system it might be (wxWidget, QT, etc…) -Then for applications that might be distributed it is a bad idea.
+GUI protability mean, mediocre experience on all platforms. +Any system it might be (wxWidget, QT, etc…).
The Java ideology is “closed”. But it resolve a big problem. It helps medium to low quality developper to work in team without the ability to make too much harm to the product. -A good programmer will be able to make very interresting with it thought.
+A good programmer will be able to make very interresting with it thought. +Please note I didn’t say Java programmer are bad programmer.The language I learned and used only to make application on Apple© platform. I learned Objective-C just after Python. It was hard to do it. @@ -275,7 +290,7 @@ Both simple and efficient. It might seems like small details on paper, but once you start using it, it make all the difference.
Even if Objective-C is a relatively low level language. -Its dynamic typing ability make it very good for GUI programming. +Its dynamic typing ability make it very good for GUI programming. I recommand to continue working with this language. In the end you’ll certainely find it better than expected.
@@ -283,10 +298,12 @@ In the end you’ll certainely find it better than expected.This small script language that we used all to make our website in the time of animated gifs.
Nice but no more. Apparently there were a lot of progress since PHP5. Maybe one day I’ll use it again. But behind it, this language has a “script kiddies only” reputation. -A long history of security holes easy to make, low level community, etc…
+Also long history of easy to make security holes.In reality PHP is just behind C for the abstraction level. Therefore it has a lot of organisation problems and make it easier to create bugs. @@ -297,6 +314,8 @@ I make a bit of PHP not so long ago, and it was a pain to protect my application
Revelation!
When you were used to work with compiled languages (C++, Java) and you start learning Python, it’s like a punch in the face. @@ -305,11 +324,10 @@ Everything is natural, it’s magic. Yes, as good as this. But something so good must have some drawback.
-And yes, an all interpreted languages, Python is slow. +
And yes, like all interpreted languages, Python is slow. Beware, no just a bit slow like 2 or 3 times slower than C. (like Java for example). No, really slow, about 10 to 20 times slower than C. -Argh… But it is completely usable for many things. -But some application are just forbidden to it.
+Argh… Note it is completely usable for many things.I learned CamL during the college. I founded this really interresting. Functional programming is very different to imperative one. I had good mathematic intuitions to use this language. But I must confess I never used it for something serious.
+I learned CamL during the college. +It was really interresting. +Functional programming is very different to imperative programming (most of popular languages). +I had good mathematic intuitions to use this language. +But I must confess I never used it for something serious.
I am still learning this language. I must say it is a pleasure. -Generally it tooks me only some hours to some days to learn a new programming language. -Each language has his new concepts to grab. +Generally it takes me no more than some hours to some days to learn a new programming language. Concerning haskell, this is very different. -The concepts behind haskell are really deep. -I feel many weeks will be necessary to understand it correctly. -The community behind haskell is very friendly and nice. There is no “LOL! URAN00B! RTFM!” -And no concession on the language as been made to make it more popular. Therefore this langage remain pure (I know there is two meaning).
+To master haskell you need to understand very hard concepts. +Monads and Arrows are some of them. +I didn’t understand them before I read some scientific paper. +Many week will be necessary to master it perfectly (if someone does). +Also the community is very friendly and nice. There is no “LOL! URAN00B! RTFM!” +And no concession as been made to make this language more popular (I’m looking at you C++, Java and Javascript). +This langage remain pure (I know there are two meaning).Some languages are designated to create documents.
- -Metapost is a language to program drawings. What make metapost very good? It contains a linear solver. -This is really usefull to draw things. +This is really useful to draw things. For example if you write:
-x=(2*y+z)/2 +AA=1/3[A,B]-
It will place the point x at 2/3 of y and 1/3 to z. -This feature is very nice. Most programming language should think about adding it.
+It will place the point AA
between the point A
and B
.
+More precisely at the barycenter (2xA + B)/3
.
+X=whatever[A,B] +X=whatever[C,D] ++ +
This second example, will place the point X at the intersection of the two segments AB
and CD
.
This feature is very helpful, and not only to draw things. +Most programming language should think about adding it.
Yes, zsh is a shell. -But it is also a script language extremly well suited to file traitment. +But it is also a script language extremly well suited to file management. For now, it is the best shell I used. I prefer zsh to bash.
I never made somthing serious with Prolog, but I really loved to use and learn it. +
I never made something serious with Prolog, but I really loved to use and learn it. +I had the chance to learn Prolog with Alain Colmerauer himself. This language try to resolve constraints as much as it can. -It is kind of magic. +It has a magic feeling when you use it. We only write constraints, we never put order. -A bit like functionnal programming but far more powerful.
+A bit like functional programming but far more powerful.It remains many language and framework to try. +
Many languages and framework remains to be learnt and tried. Actually I believe I will stay a while with haskell. -Maybe tomorrow I will see LISP, Scala or Erlang. +Maybe tomorrow I will look at LISP, Scala or Erlang. I also certainly look at clojure to make web application.
Tell me if you have any other experience with these programming languages. -I had only given my impressions. -But I used them all.
+Of course, my feelings are highly subjectives. +But I used all of these languages. +Trouver les fichiers des projets qui ne contiennent pas de s dans leur nom qui ont le même nom que leur projet.
+Before ⇒
+for toProject in Projects/*; do project=$toProject:t @@ -122,15 +124,17 @@ Recommençons sur le même principe. done-
After =>
+After ⇒
contain_no_s() { print $1 | grep -v s } + function verify_file_name { local project=$1:t contains_project_name() { print $1:t | grep $project } map "print -- X" $(filter contains_project_name $1/*(.N)) } + map show_project_matchin_file $( filter contain_no_s Projects/* )@@ -138,6 +142,73 @@ map show_project_matchin_file $( +
+#!/usr/bin/env zsh + +# Provide higer-order functions + +# usage: +# +# $ foo(){print "x: $1"} +# $ map foo a b c d +# x: a +# x: b +# x: c +# x: d +function map { + local func_name=$1 + shift + for elem in $@; print -- $(eval $func_name $elem) +} + +# $ bar() { print $(($1 + $2)) } +# $ fold bar 0 1 2 3 4 5 +# 15 +# -- but also +# $ fold bar 0 $( seq 1 100 ) +function fold { + if (($#<2)) { + print -- "ERROR fold use at least 2 arguments" >&2 + return 1 + } + if (($#<3)) { + print -- $2 + return 0 + } else { + local acc + local right + local func_name=$1 + local init_value=$2 + local first_value=$3 + shift 3 + right=$( fold $func_name $init_value $@ ) + acc=$( eval "$func_name $first_value $right" ) + print -- $acc + return 0 + } +} + +# usage: +# +# $ baz() { print $1 | grep baz } +# $ filter baz titi bazaar biz +# bazaar +function filter { + local predicate=$1 + local result + typeset -a result + shift + for elem in $@; do + if eval $predicate $elem >/dev/null; then + result=( $result $elem ) + fi + done + print $result +} ++
BASIC
Ah ! Le language de mes premiers programmes !
+Je devais avoir 10-11 ans.
+Sous MO5
, Amstrad CPC 6128
et même Atari STe
.
+Le langage des GOTO
s.
+Je suis empleint de nostalgie rien que d’y penser.
+C’est à peu prêt le seul intérêt de ce...
+ en lire plus » +
+Ah ! Le language de mes premiers programmes !
-Je devais avoir 10-11 ans.
-Sous MO5
, Amstrad CPC 6128
et même Atari STe
.
-Le langage des GOTO
s.
-Je suis empleint de nostalgie rien que d’y penser.
-C’est à peu prêt le seul intérêt de ce langage.
Aujourd’hui ce langage est tombé en désuétude. -Ce n’est ni un bon langage pour apprendre, ni un bon langage pour faire de vrai prog...
- - -- en lire plus » -
-BASIC
Ah ! Le language de mes premiers programmes ! Je devais avoir 10-11 ans. @@ -152,6 +154,8 @@ Mais je préfère largement le C.
Le langage des pointeurs
Ah, le langage de programmation par excellence.
@@ -197,6 +201,8 @@ C’est-à-dire un système d’information, c’est pas trop mal.Le malpropre
Et oui l’industrie voulait un langage objet, mais elle n’était pas prête à mettre à la poubelle tout ses codes en C.
@@ -204,14 +210,18 @@ La solution, prendre C et lui rajouter une couche objet.
Le problème avec C++ c’est qu’il fait trop de choses.
L’héritage multiple, des templates, etc…
Bon, je l’ai quand même choisi pour faire le plus gros programme que j’ai jamais fais lors de ma thèse.
-Et je dois avouer que l’expérience m’a plûe.
-Le seul reproche que j’ai à faire, c’est que la STL n’était pas aussi complète que l’on aurait pû l’espérer pour un détail.
+Et je dois avouer que l’expérience m’a plu.
+Le seul reproche que j’ai à faire, c’est que la STL n’était pas aussi complète que l’on aurait pu l’espérer pour un détail.
On ne peut pas faire de String<T>
pour autre chose que des char16
.
-Du coup, mon alphabet était limité à $2^16$ lettres.
+Du coup, mon alphabet était limité à 216 lettres.
Hors, pour certaines application, l’alphabet doit être gigantesque.
En conclusion je dirai que C++ est un très bon langage si vous vous fixez à l’avance un sous ensemble de ses fonctionnalités.
+Bon, ok c’est un très beau langage objet. Bien plus propre que C++. Mais, à moins que les choses aient changées, il n’est pas très populaire. @@ -222,6 +232,8 @@ Lorsqu’on viens du C, il est désagréable de changer ses habitudes.
On continue vers les langages objets. Alors, à une époque où j’en ai entendu parler, c’était le Graal !
La portabilité, votre programme marchera partout. Il était orienté objet. Incrusté à l’intérieur il y avait des concepts d’architecture qui empêchent de faire n’importe quoi… Sauf que.
@@ -230,18 +242,20 @@ Lorsqu’on viens du C, il est désagréable de changer ses habitudes. Et que les limitations sont très désagréables si on sait ce que l’on fait.Par exemple, il n’y a pas d’héritage multiple en Java. -Ce qui est en général un choix que je trouve cohérent s’il est bien appuyé par des système qui compensent ce manque. +Ce qui est en général un choix que je trouve cohérent s’il est bien appuyé par des systèmes qui compensent ce manque. En java, il existe les interfaces. -Hors, les interfaces sont un moyen d’ajouter simplement des méthodes à une classe. -En aucun cas on ne peut rajouter un attribut. -Ce qui m’a vraiment géner pour faire une interface graphique par exemple. -Typiquement je faisais une GUI en Java Swing, et j’avais créé mon propre système de notification entre objets de GUI. -Alors, au début je considérais qu’un objet ne devais envoyer des notifications qu’à un seul objet. +Les interfaces permettent d’ajouter des méthodes à une classe. +En aucun cas on ne peut rajouter un attribut autrement qu’en héritant. +Cet état de fait m’a vraiment géné.
+ +Typiquement je faisais une GUI en Java Swing. +J’avais créé mon propre système de notification entre objets. +Au début je considérais qu’un objet ne devait envoyer des notifications qu’à un seul objet. Ô quelle erreur lorsque je réalisais qu’il fallait non plus gérer un seul objet mais parfois plusieurs. Je changeais mon implémentation d’interface partout, conséquence, des copier/coller dans tous les sens pour mes classes. Les copier/coller qui sont justement un problème censé être évité par les langages orientés objets.
-De plus toujours pour ma GUI, je devais évidemment gérer des threads. +
De plus toujours pour ma GUI, je devais évidemment gérer des threads. Hors, il m’a fallu faire mon propre système de gestion de threads pour éviter les locks, pour les notifications (ce thread à fini, etc…). À l’époque j’utilisais Java 1.5. Normallement ce problème devait être réglé sur Java 1.6. @@ -252,17 +266,20 @@ J’espère que c’est le cas, mais avoir ce type de “feature&rdq
Bon, après cette expérience je déconseillerai Java. La portabilité, n’est pas si intéressante que ce qu’on pourrait croire.
-En ce qui concerne les GUI, portable signifie interface fonctionnelle mais médiocre sur toutes les plateformes. +
En ce qui concerne les GUI, portable signifie interface fonctionnelle mais médiocre sur toutes les plateformes. Quelquesoit le système d’ailleurs (wxWidget, QT, etc…). Donc, pour des applications à distribuer à des tiers, c’est à éviter.
Le système de Java est très clos. Par contre il résoud un très bon problème. -Il permet à des développeurs médiocre de travailler en groupe sans faire trop de mal. -Et un bon programmeur sera tout de même capable d’y faire des choses très intéressantes.
+Il permet à des développeurs médiocres de travailler en groupe sans faire trop de mal. +Et un bon programmeur sera tout de même capable d’y faire des choses très intéressantes. +Veuillez noter que je n’ai pas dit que les programmeurs Java sont de mauvais programmeurs, ce n’est pas ce que je pense.Le langage que je n’ai appris et utilisé que pour faire des applications sur les plateformes d’Apple©. J’ai appris Objective-C après Python. Et je dois avouer que j’ai eu du mal à m’y mettre. @@ -270,7 +287,7 @@ Je n’ai pas du tout aimé la syntaxe et pas mal d’autres détails. Mais ça fait parti de ces langages que plus on utilise, plus on aime. En réalité, il y a quelque chose dans ce langage qui fait que tout est bien pensé. Mais surtout, ici, ce n’est pas le langage qui est la meilleure partie, c’est plutôt le framework Cocoa qui lui est le plus souvent associé qui est une merveille. -Par rapport à tous les autres framework permettant de fabriquer des GUI, Cocoa est de très loin supérieur. +Par rapport à tous les autres framework permettant de fabriquer des GUI, Cocoa est de très loin supérieur. Même si ça semble être des détails sur le papier, en pratique cela fait une grande différence.
Vraiment jusqu’ici, même si Objective-C reste assez bas niveau, le fait que le typage de ce langage soit dynamique est un vrai plus pour l’interface graphique. @@ -280,20 +297,27 @@ Je ne peux que vous encourager à vous accrocher à ce langage et de faire un vr
Le petit langage de script que nous utilisions tous pour faire des sites web à l’époque des gifs animées !
Sympatique, mais sans plus. Apparemment il y a eu pas mal de progrès depuis PHP5, un jour peut-être que j’y reviendrai. Mais, il a derrière lui une réputation de langage pour les “scripts kiddies”. En gros ceux qui ne savent pas coder. Des trous de sécurité de tous les cotés, etc…
-En réalité, PHP est au niveau d’abstration à peine supérieur au C. Et donc, il est beaucoup moins bien organisé que des langages objets, favorisant ainsi la création de bug. Pour les applications web, c’est un vrai problème.
+En réalité, PHP est au niveau d’abstration à peine supérieur au C. +Et donc, il est beaucoup moins bien organisé que des langages objets, favorisant ainsi la création de bug. +Pour les applications web, c’est un vrai problème.
PHP, reste pour moi le langage de l’injection SQL. J’en fait encore un peu de temps en temps. Et j’ai moi-même dû protéger les accès au SQL pour éviter les injections. Oui, je n’ai pas trouvé de librairie toute prête pour protéger les entrées SQL. Je n’ai pas beaucoup cherché non plus.
Alors là, attention ! Révélation ! -Lorsqu’on avait l’habitude de travailler avec des langages compilé, type C++, Java et qu’on passe à Python, on se prend une claque magistrale. +
+ +Alors là, attention ! Révélation !
+ +Lorsqu’on avait l’habitude de travailler avec des langages compilé, type C++, Java et qu’on passe à Python, on se prend une claque magistrale. La programmation comme elle doit être faite. Tout est si naturel, c’est magique. Oui, c’est si bien que ça. @@ -369,7 +393,10 @@ Heureusement, en ce qui concerne la syntaxe, on peu pallier à ce problème en u
J’ai appris CamL à la fac, j’avais trouvé cette expérience très interressante. J’étais plutôt bon, et j’avais les bonnes intuitions mathématiques qui vont avec la programmation fonctionnelle. Mais je dois avouer que je ne l’ai plus jamais utilisé. Simplement, ce type de langage semble si loin de ce qui se fait pour fabriquer des produits que ça me donnais vraiment l’impression d’être un langage pour chercheurs.
+J’ai appris CamL à la fac, j’avais trouvé cette expérience très interressante. +J’étais plutôt bon, et j’avais les bonnes intuitions mathématiques qui vont avec la programmation fonctionnelle. +Mais je dois avouer que je ne l’ai plus jamais utilisé. +Simplement, ce type de langage semble si loin de ce qui se fait pour fabriquer des produits que ça me donnais vraiment l’impression d’être un langage pour chercheurs.
En plus des langages de programmation proprement dit, il existe des langages dont le seul but et de créer des documents.
- -Metapost est un langage qui permet de programmer des dessins. -Le gros plus de metapost, c’est qu’il y a un solveur d’équations linéaires. -Ainsi on peut faire des choses assez impressionnantes, comme laisser une petite distance entre les flèches et les bords. -Ou encore les têtes des flèches se courbent. -Très sympatique à utiliser.
+Le gros plus de metapost, c’est sa capacité de résoudre automatiquement les systèmes d’équations linéaires. +Par exemple, si vous écrivez :-x=(2*y+z)/2 +AA=1/3[A,B]+
Il va position le point AA
entre A
et B
.
+Plus précisément, au barycentre (2A + B)/3
.
+X=whatever[A,B] +X=whatever[C,D] ++ +
Ce deuxième exemple positionne X
à l’intersection des deux segments AB
et CD
.
+Vous pouvez aussi voir pas mal d’exemples ici.
+You could see more example there.
Cette fonction est très utile. +Et à mon avis pas seulement pour afficher des choses. +De mon point de vue, les autres langages de programmation devraient penser à rajouter les résolutions automatiques simples.
+Oui, zsh est un shell. @@ -417,9 +456,10 @@ C’est pour l’instant le meilleur shell que j’ai utilisé. Je l
Je n’ai jamais rien fait de conséquent avec Prolog, mais j’ai adoré l’utiliser. +
Je n’ai jamais rien fait de conséquent avec Prolog, mais j’ai adoré l’apprendre et l’utiliser. +J’ai eu la chance d’apprendre Prolog par Alain Colmerauer lui-même. C’est un langage qui essaye de résoudre les contraintes autant qu’il le peut pour vous. -C’est assez magique. +Il en ressort un impression de magie. On ne fait que décrire ce qu’il faut et on ne donne pas d’ordre. Un peu comme la programmation fonctionnelle mais en beaucoup plus puissant.
@@ -427,13 +467,14 @@ Un peu comme la programmation fonctionnelle mais en beaucoup plus puissant.Il reste encore pas mal de langages et de framework à essayer. Actuellement je pense que je vais passer un moment avec haskell. -Peut-être demain que j’irai voir du LISP, Scala ou Erlang. -Comme je suis plus dans la création de site web, j’irai certainement jeter un coup d’oeil à clojure aussi. +Peut-être demain que j’irai apprendre LISP, Scala ou Erlang. +Comme je suis plus dans la création de site web, j’irai certainement jeter un coup d’œil à clojure aussi. Et certainement beaucoup d’autres choses.
-Dites-moi si vous avez une autre expérience avec ces langages de programmation. -Je ne donne que mes impressions. -En tout cas je les ai tous utilisés.
+Dites moi si vous avez une autre expérience avec ces langages de programmation. +Évidement mes impression sont hautement subjectives. +Cependant, j’ai utilisé tous les langages dont j’ai parlé.
+