Finished the last two articles

This commit is contained in:
Yann Esposito (Yogsototh) 2011-09-28 17:45:28 +02:00
parent cbe4a74987
commit 40e5dc4c3a
82 changed files with 1372 additions and 709 deletions

View file

@ -141,10 +141,7 @@ body, h1, h2, h3, h4, #entete, .tag
pre
+codeColor
box-shadow: 0 0 1em #000 inset
-webkit-box-shadow: 0 0 1em #000 inset
border-radius: 3px
-moz,-webkit
border-radius: 3px
padding: 1em
line-height: 1.2em
@ -189,13 +186,11 @@ acronym
=insetbox
background: rgba(#000,.05)
box-shadow: 0 0 2px #FFF, 0 0 3px #CCC inset
-webkit-box-shadow: 0 0 2px #FFF, 0 0 3px #CCC inset
border: 1px solid rgba(#000,.1)
border-radius: 3px
&:hover
background: rgba(#000,.1)
box-shadow: 0 0 6px #555 inset
-webkit-box-shadow: 0 0 6px #555 inset
=clearbutton
display: block
@ -207,12 +202,13 @@ acronym
line-height: 1.4em
border-radius: 1.5em
background: rgba(#000,.05)
box-shadow: 0 2px 1px rgba(255, 255, 255, 0.5) inset, 0 -2px 1px rgba(0, 0, 0, 0.2) inset, 0 1px 2px rgba(0, 0, 0, .5)
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, .5)
&:hover
background: rgba(#000,.1)
box-shadow: 0 0 6px #555 inset
-webkit-box-shadow: 0 0 6px #555 inset
box-shadow: 0 2px 1px rgba(255, 255, 255, 0.5) inset, 0 -2px 1px rgba(0, 0, 0, 0.2) inset, 0 1px 5px rgba(60, 30, 0, .8)
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, .8)
&:active
background: rgba(#000,.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, .8)
#liens a
border: 1px solid #EEE
@ -223,7 +219,6 @@ acronym
background-color: $mainBackgroundColor - #030303
border: 1px solid $mainBackgroundColor - #111111
box-shadow: 0 0 3px ($mainBackgroundColor - #333333) inset
-webkit-box-shadow: 0 0 3px ($mainBackgroundColor - #333333) inset
border-radius: 3px
border-top: none
@ -469,7 +464,6 @@ $hpadding: 1
background-color: $imageBackgroundColor
padding: 0.5em
box-shadow: 0 10px 15px #CCC
-webkit-box-shadow: 0 10px 15px #CCC
border-radius: 3px
img.clean
@ -802,7 +796,6 @@ ul.bloglist, .archive ul
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

View file

@ -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)
@ -42,6 +42,7 @@ map handle_resources /path/to/projects/*(/N)
Before ⇒
<code class="zsh">
for toProject in Projects/*; do
@ -58,18 +59,85 @@ for toProject in Projects/*; do
done
</code>
After =>
After
<code class="zsh">
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/* )
</code>
Also, the first verstion is a bit easier to read.
But the second one is clearly far superior in architecture.
Why?
<code class="zsh" file="functional.sh">
#!/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
}
</code>

View file

@ -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<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 2<sup>16</sup> 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.
### Eiffel
<%=leftblogimage("eiffel.jpg","Eiffel tower construction")%>
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++.
At that time I programmed a lot with C and like its syntax.
### Java
<%=leftblogimage("grail.jpg","Holy Grail from the Monty Python")%>
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.
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.
@ -207,15 +221,18 @@ After 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.
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.
Please note I didn't say Java programmer are bad programmer.
### Objective-C
<%=leftblogimage("xcode_logo.png","Xcode Logo")%>
The language I learned and used only to make application on Apple(c) platform.
I learned Objective-C just after Python.
It was hard to do it.
@ -236,10 +253,12 @@ In the end you'll certainely find it better than expected.
### PHP
<%= leftblogimage("php.jpg","A Jacky Touch Car") %>
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.
@ -250,6 +269,8 @@ I make a bit of PHP not so long ago, and it was a pain to protect my application
### Python
<%= leftblogimage("python.jpg","Python. Do you speak it?") %>
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.
@ -258,11 +279,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.
### Awk
@ -326,60 +346,79 @@ In order to compensate the syntax, you can use CoffeScript.
### CamL
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.
### Haskell
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).
## Unpopular Languages
Some languages are designated to create documents.
### MetaPost
### Metapost
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:
<code class="ruby">
x=(2*y+z)/2
AA=1/3[A,B]
</code>
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`.
<code class="ruby">
X=whatever[A,B]
X=whatever[C,D]
</code>
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

View file

@ -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 ⇒
<code class="zsh">
for toProject in Projects/*; do
@ -71,18 +72,85 @@ for toProject in Projects/*; do
done
</code>
After =>
After
<code class="zsh">
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/* )
</code>
Also, the first verstion is a bit easier to read.
But the second one is clearly far superior in architecture.
Why?
<code class="zsh" file="functional.sh">
#!/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
}
</code>

View file

@ -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<T>` pour autre chose que des `char16`.
Du coup, mon alphabet était limité à $2^16$ lettres.
Du coup, mon alphabet était limité à 2<sup>16</sup> 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.
### Eiffel
<%=leftblogimage("eiffel.jpg","Eiffel tower construction")%>
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.
@ -175,6 +185,8 @@ Lorsqu'on viens du C, il est désagréable de changer ses habitudes.
### Java
<%=leftblogimage("grail.jpg","Holy Grail from the Monty Python")%>
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.
@ -183,13 +195,15 @@ Sauf qu'il est incroyablement verbeux.
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.
@ -211,11 +225,15 @@ 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.
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.
### Objective-C
<%=leftblogimage("xcode_logo.png","Xcode Logo")%>
Le langage que je n'ai appris et utilisé que pour faire des applications sur les plateformes d'Apple(c).
J'ai appris Objective-C après Python.
Et je dois avouer que j'ai eu du mal à m'y mettre.
@ -233,26 +251,32 @@ Je ne peux que vous encourager à vous accrocher à ce langage et de faire un vr
### PHP
<%= leftblogimage("php.jpg","A Jacky Touch Car") %>
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.
### Python
<%= leftblogimage("python.jpg","Python. Do you speak it?") %>
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.
Mais quelque chose d'aussi incroyablement bien doit avoir des inconvénients me dirais-vous.
Et bien, oui, comme tous les langages de scripts de haut niveau, Python est _lent_.
Attention pas juste un peu lent, comme 2 fois plus lent que du C.
Non, de l'ordre de 10 à 20 fois plus lent que le C.
@ -323,7 +347,10 @@ Heureusement, en ce qui concerne la syntaxe, on peu pallier à ce problème en u
### CamL
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.
### Haskell
@ -348,20 +375,31 @@ Alors qu'en Java et C++, typiquement certain choix ont été fait en dépis du b
## Langages originaux
En plus des langages de programmation proprement dit, il existe des langages dont le seul but et de créer des documents.
### MetaPost
### Metapost
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 :
<code class="ruby">
x=(2*y+z)/2
AA=1/3[A,B]
</code>
Il va position le point `AA` entre `A` et `B`.
Plus précisément, au barycentre `(2A + B)/3`.
<code class="ruby">
X=whatever[A,B]
X=whatever[C,D]
</code>
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

View file

@ -54,6 +54,7 @@
end
end.join() %>
</div>
<div class="flush"></div>
</div>
<div id="titre">
<h1>
@ -65,7 +66,6 @@
</h2>
<% end %>
</div>
<div class="flush"></div>
<% if @item[:content_for_summary] %>

View file

@ -29,12 +29,11 @@
<% unless @item[:no_entete] %>
<div id="entete">
<div id="choix">
<div id="choixrss"><%= choixrss %> </div>
<div id="choixlang"><%= choixlang %> </div>
<div id="liens">
<%= generateMenu %>
</div>
<div id="choixrss"><%= choixrss %></div>
<div id="choixlang"><%= choixlang %></div>
<div class="flush"></div>
</div>
<div id="liens"><%= generateMenu %></div>
</div>
<% end %>
<img src="<%=@config[:webprefix]%>/img/presentation.png" alt="Presentation drawing"/>

View file

@ -9,7 +9,7 @@ author_name: Yann Esposito
author_uri: yannesposito.com
# tags:
-----
<%= blogimage("main.png","Title image") %>
<%= blogimage("main.jpg","Title image") %>
begindiv(intro)
@ -18,15 +18,23 @@ fr: <%= tlal %> des fonctions d'ordres supérieurs en zsh.
enddiv
en: Why is it important to have these functions?
en: Simply because, the more I programmed with zsh the more I tended to work using functional programming style.
fr: Tout d'abord, pourquoi c'est important d'avoir ces fonctions.
fr: Plus je programmais avec zsh plus j'essayais d'avoir un style fonctionnel.
en: The minimal to have better code are the functions `map`, `filter` and `fold`.
fr: Le minimum pour pouvoir avoir du code plus lisible c'est de posséder les fonctions `map`, `filter` et `fold`.
en: Let's compare.
en: First a program which convert all gif to png in many different directories of different projects.
fr: Voici pourquoi avec une comparaison.
fr: Commençons par un programme qui converti tous les gif en png dans plusieurs répertoires projets contenant tous des répertoires resources.
fr: Avant :
fr: Avant ⇒
en: Before ⇒
<code class="zsh">
# 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
</code>
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
<code class="zsh">
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)
</code>
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 ⇒
<code class="zsh">
for toProject in Projects/*; do
@ -73,18 +93,98 @@ for toProject in Projects/*; do
done
</code>
After =>
After
<code class="zsh">
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/* )
</code>
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 :
<code class="zsh" file="functional.sh">
#!/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
}
</code>

View file

@ -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<T>` pour autre chose que des `char16`.
fr: Du coup, mon alphabet était limité à $2^16$ lettres.
fr: Du coup, mon alphabet était limité à 2<sup>16</sup> lettres.
fr: Hors, pour certaines application, l'alphabet doit être gigantesque.
fr:
fr: 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.
en: Industry wanted an Object Oriented Language without loosing all their old C code.
en: Solution, keep C and add an Object layer on it.
en: The main concern about C++ is it do too many things.
en: I particularly appreciated multiple inheritage and templates.
en: I particularly appreciated multiple inheritance and templates.
en: In reality I liked a lot C++ while I was working alone.
en: I used it to write `DEES` my main thesis software.
en: My only concern was about a lack in the STL.
en: In the doc, one could use `String<T>`.
en: But in reality, T have to be only `char` or `char16`.
en: Then I had to reduce my alphabet to $2^16$ letters.
en: Then I had to reduce my alphabet to 2<sup>16</sup> letters.
en: Except for some application, the alphabet must be far larger than that.
en:
en: To conclude, I'd say, C++ is very good if you work alone or with a fixed subset of its features.
### Eiffel
<%=leftblogimage("eiffel.jpg","Eiffel tower construction")%>
fr: Bon, ok c'est un très beau langage objet.
fr: Bien plus propre que C++.
fr: Mais, à moins que les choses aient changées, il n'est pas très populaire.
@ -247,15 +259,18 @@ en: Full object in mind. Far cleaner than C++.
en: But it isn't so popular.
en: Behind C++ there is a large community to help new users and to write libraries.
en: Furthermore, I preferred working with C++.
en: At that time I programmed a lot with C and like its syntax.
### Java
<%=leftblogimage("grail.jpg","Holy Grail from the Monty Python")%>
fr: On continue vers les langages objets. Alors, à une époque où j'en ai entendu parler, c'était _le Graal_ !
en: The first time I heard about Java it was _le Grail_!
fr: 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.
en: Perfect portability, your program will work on all platform.
en: There was incrusted inside the language architecture concepts to help limit mistakes, and force you to use good programming habits... But.
en: There was incrusted inside the language architecture concepts to help limit mistakes, and force you to use good programming habits. But...
fr: Sauf qu'il est incroyablement verbeux.
fr: Et que les limitations sont très désagréables si on sait ce que l'on fait.
@ -263,35 +278,37 @@ en: But It is extremely verbose.
en: And limitations are quite boring if you know what you're doing.
fr: Par exemple, il n'y a pas d'héritage multiple en Java.
fr: 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.
fr: 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.
fr: En java, il existe les interfaces.
fr: Hors, les interfaces sont un moyen d'ajouter simplement des méthodes à une classe.
fr: En aucun cas on ne peut rajouter un attribut.
fr: Ce qui m'a vraiment géner pour faire une interface graphique par exemple.
fr: Typiquement je faisais une GUI en Java Swing, et j'avais créé mon propre système de notification entre objets de GUI.
fr: Alors, au début je considérais qu'un objet ne devais envoyer des notifications qu'à un seul objet.
fr: Les interfaces permettent d'ajouter des méthodes à une classe.
fr: En aucun cas on ne peut rajouter un attribut autrement qu'en héritant.
fr: Cet état de fait m'a vraiment géné.
en: For example, there is no multiple inheritance.
en: Generally it is a coherent choice when there are a way to compensate.
en: In Java, there are interfaces for this.
en: Except, interfaces can only add methods to a class.
en: You cannot add any attribute to a class except by subclassing.
en: I really lacked this feature.
fr: Typiquement je faisais une GUI en Java Swing.
fr: J'avais créé mon propre système de notification entre objets.
fr: Au début je considérais qu'un objet ne devait envoyer des notifications qu'à un seul objet.
fr: Ô quelle erreur lorsque je réalisais qu'il fallait non plus gérer un seul objet mais parfois plusieurs.
fr: Je changeais mon implémentation d'interface partout, conséquence, des copier/coller dans tous les sens pour mes classes.
fr: Les copier/coller qui sont justement un problème censé être évité par les langages orientés objets.
en: For example, there is no multiple inheritance.
en: Generally it is a coherent choice if it is compensated by something else.
en: In Java, there are interfaces.
en: Except, interfaces are a way to add only methods to classes.
en: In no way, you can add any attribute.
en: It was really a lack to make a graphic interface.
en: I made a GUI using Java Swing and I created my own notification system between different element of the GUI.
en: Then, at the begining I only needed to send notification 1 to 1.
en: After some times, I needed to make 1 to many notifications.
en: And I add to make a bunch of copy/paste inside all my subclasses!
en: Copy/paste are exactly what should be avoided the most by Object oriented languages.
en: Copy/paste are exactly what should be avoided the most by object oriented languages.
fr: De plus toujours pour ma GUI, je devais évidemment gérer des threads.
fr: 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...).
fr: À l'époque j'utilisais Java 1.5.
fr: Normallement ce problème devait être réglé sur Java 1.6.
fr: J'espère que c'est le cas, mais avoir ce type de "feature" essentielles oubliées par le langage était assez grave.
en: Another thing, I had to handle threads.
en: Except I had to make my own thread gestion system to avoid locks and notifications between threads (this thread ended, ...).
en: Another thing ; I had to handle threads.
en: I had to make my own thread gestion system to avoid locks and notifications between threads (this thread ended, ...).
en: At that time I used Java 1.5.
en: Normally this problem should have been solved with Java 1.6.
en: I wish it is the case, but lacking such an essential feature for a language was very bad.
@ -308,19 +325,23 @@ fr: En ce qui concerne les GUI, portable signifie interface fonctionnelle mais m
fr: Quelquesoit le système d'ailleurs (wxWidget, QT, etc...).
fr: Donc, pour des applications à distribuer à des tiers, c'est à éviter.
en: GUI protability mean, mediocre experience on all platforms.
en: Any system it might be (wxWidget, QT, etc...)
en: Then for applications that might be distributed it is a bad idea.
en: Any system it might be (wxWidget, QT, etc...).
fr: Le système de Java est très clos.
fr: Par contre il résoud un très bon problème.
fr: Il permet à des développeurs médiocre de travailler en groupe sans faire trop de mal.
fr: Il permet à des développeurs médiocres de travailler en groupe sans faire trop de mal.
fr: Et un bon programmeur sera tout de même capable d'y faire des choses très intéressantes.
fr: Veuillez noter que je n'ai pas dit que les programmeurs Java sont de mauvais programmeurs, ce n'est pas ce que je pense.
en: The Java ideology is "closed". But it resolve a big problem.
en: It helps medium to low quality developper to work in team without the ability to make too much harm to the product.
en: A good programmer will be able to make very interresting with it thought.
en: Please note I didn't say Java programmer are bad programmer.
### Objective-C
<%=leftblogimage("xcode_logo.png","Xcode Logo")%>
fr: Le langage que je n'ai appris et utilisé que pour faire des applications sur les plateformes d'Apple(c).
fr: J'ai appris Objective-C après Python.
fr: Et je dois avouer que j'ai eu du mal à m'y mettre.
@ -353,6 +374,8 @@ en: ## Modern Scripting Languages
### PHP
<%= leftblogimage("php.jpg","A Jacky Touch Car") %>
fr: Le petit langage de script que nous utilisions tous pour faire des sites web à l'époque des gifs animées !
en: This small script language that we used all to make our website in the time of animated gifs.
@ -360,9 +383,11 @@ fr: Sympatique, mais sans plus. Apparemment il y a eu pas mal de progrès depuis
fr: En gros ceux qui ne savent pas coder.
fr: Des trous de sécurité de tous les cotés, etc...
en: 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.
en: A long history of security holes easy to make, low level community, etc...
en: Also long history of easy to make security holes.
fr: 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.
fr: En réalité, PHP est au niveau d'abstration à peine supérieur au C.
fr: Et donc, il est beaucoup moins bien organisé que des langages objets, favorisant ainsi la création de bug.
fr: Pour les applications web, c'est un vrai problème.
en: In reality PHP is just behind C for the abstraction level.
en: Therefore it has a lot of organisation problems and make it easier to create bugs.
en: For web applications it is a real problem.
@ -373,14 +398,16 @@ en: I make a bit of PHP not so long ago, and it was a pain to protect my applica
### Python
<%= leftblogimage("python.jpg","Python. Do you speak it?") %>
fr: Alors là, attention ! Révélation !
en: Revelation!
fr: 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.
fr: La programmation comme elle doit être faite.
fr: Tout est si naturel, c'est _magique_.
fr: Oui, c'est si bien que ça.
fr: Mais quelque chose d'aussi incroyablement bien doit avoir des inconvénients me dirais-vous.
en: Revelation!
en: When you were used to work with compiled languages (C++, Java) and you start learning Python, it's like a punch in the face.
en: Programming like it always should have been.
en: Everything is natural, it's _magic_.
@ -392,11 +419,10 @@ fr: Attention pas juste un peu lent, comme 2 fois plus lent que du C.
fr: Non, de l'ordre de 10 à 20 fois plus lent que le C.
fr: Argh... Bon ça reste utilisable pour beaucoup de choses.
fr: Mais certaines application lui sont donc interdites.
en: And yes, an all interpreted languages, Python is _slow_.
en: And yes, like all interpreted languages, Python is _slow_.
en: Beware, no just a bit slow like 2 or 3 times slower than C. (like Java for example).
en: No, really slow, about 10 to 20 times slower than C.
en: Argh... But it is completely usable for many things.
en: But some application are just forbidden to it.
en: Argh... Note it is completely usable for many things.
### Awk
@ -495,8 +521,15 @@ en: ## Functional Languages
### CamL
fr: 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: 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.
fr: J'ai appris CamL à la fac, j'avais trouvé cette expérience très interressante.
fr: J'étais plutôt bon, et j'avais les bonnes intuitions mathématiques qui vont avec la programmation fonctionnelle.
fr: Mais je dois avouer que je ne l'ai plus jamais utilisé.
fr: 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: I learned CamL during the college.
en: It was really interresting.
en: Functional programming is very different to imperative programming (most of popular languages).
en: I had good mathematic intuitions to use this language.
en: But I must confess I never used it for something serious.
### Haskell
@ -520,39 +553,54 @@ fr: Le langage est bon, voilà tout.
fr: Alors qu'en Java et C++, typiquement certain choix ont été fait en dépis du bon sens pour "faire plaisir".
en: I am still learning this language.
en: I must say it is a pleasure.
en: Generally it tooks me only some hours to some days to learn a new programming language.
en: Each language has his new concepts to grab.
en: Generally it takes me no more than some hours to some days to learn a new programming language.
en: Concerning haskell, this is very different.
en: The concepts behind haskell are really deep.
en: I feel many weeks will be necessary to understand it correctly.
en: The community behind haskell is very friendly and nice. There is no "LOL! URAN00B! RTFM!"
en: 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).
en: To master haskell you need to understand very hard concepts.
en: Monads and Arrows are some of them.
en: I didn't understand them before I read some scientific paper.
en: Many week will be necessary to master it perfectly (if someone does).
en: Also the community is very friendly and nice. There is no "LOL! URAN00B! RTFM!"
en: And no concession as been made to make this language more popular (I'm looking at you C++, Java and Javascript).
en: This langage remain pure (I know there are two meaning).
fr: ## Langages originaux
en: ## Unpopular Languages
fr: En plus des langages de programmation proprement dit, il existe des langages dont le seul but et de créer des documents.
en: Some languages are designated to create documents.
### MetaPost
### Metapost
fr: Metapost est un langage qui permet de programmer des dessins.
fr: Le gros plus de metapost, c'est qu'il y a un solveur d'équations linéaires.
fr: Ainsi on peut faire des choses assez impressionnantes, comme laisser une petite distance entre les flèches et les bords.
fr: Ou encore les têtes des flèches se courbent.
fr: Très sympatique à utiliser.
fr: Le gros plus de metapost, c'est sa capacité de résoudre automatiquement les systèmes d'équations linéaires.
fr: Par exemple, si vous écrivez :
en: Metapost is a language to program drawings.
en: What make metapost very good?
en: It contains a linear solver.
en: This is really usefull to draw things.
en: This is really useful to draw things.
en: For example if you write:
<code class="ruby">
x=(2*y+z)/2
AA=1/3[A,B]
</code>
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`.
<code class="ruby">
X=whatever[A,B]
X=whatever[C,D]
</code>
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

File diff suppressed because one or more lines are too long

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/about/contact/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/about/contact/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/about/cv/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/about/cv/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/about/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/about/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><span class="active" title="You're here.">About</span></li></ul>
</div>
</div>
<li><span class="active" title="You're here.">About</span></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/about/old/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/about/old/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/about/technical_details/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/about/technical_details/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -0,0 +1,63 @@
#!/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
}

View file

@ -39,6 +39,7 @@
<div id="choixlang">
<a href="/Scratch/fr/blog/Higher-order-function-in-zsh/" onclick="setLanguage('fr')">en Français</a>
</div>
<div class="flush"></div>
</div>
<div id="titre">
<h1>
@ -46,7 +47,6 @@
</h1>
</div>
<div class="flush"></div>
@ -56,7 +56,7 @@
<div class="flush"></div>
<div id="afterheader">
<div class="corps">
<p><img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.png" /></p>
<p><img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.jpg" /></p>
<div class="intro">
@ -87,6 +87,8 @@
map handle_resources /path/to/projects/*(/N)
</pre>
<p>Before ⇒</p>
<pre class="twilight">
<span class="Keyword">for</span> toProject <span class="Keyword">in</span> Projects/*<span class="Keyword">;</span> <span class="Keyword">do</span>
project=<span class="Variable"><span class="Variable">$</span>toProject</span>:t
@ -102,15 +104,17 @@ map handle_resources /path/to/projects/*(/N)
<span class="Keyword">done</span>
</pre>
<p>After =&gt;</p>
<p>After </p>
<pre class="twilight">
<span class="Entity">contain_no_s</span>() { print <span class="Variable"><span class="Variable">$</span>1</span> <span class="Keyword">|</span> grep -v s }
function verify_file_name {
local project=<span class="Variable"><span class="Variable">$</span>1</span>:t
<span class="Entity">contains_project_name</span>() { print <span class="Variable"><span class="Variable">$</span>1</span>:t <span class="Keyword">|</span> grep <span class="Variable"><span class="Variable">$</span>project</span> }
map <span class="String"><span class="String">&quot;</span>print -- X<span class="String">&quot;</span></span> <span class="String"><span class="String">$(</span>filter contains_project_name <span class="StringVariable"><span class="StringVariable">$</span>1</span>/*<span class="String"><span class="String">(</span>.N<span class="String">)</span></span><span class="String">)</span></span>
}
map show_project_matchin_file <span class="String"><span class="String">$(</span> filter contain_no_s Projects/* <span class="String">)</span></span>
</pre>
@ -118,6 +122,73 @@ map show_project_matchin_file <span class="String"><span class="String">$(</span
But the second one is clearly far superior in architecture.
Why?</p>
<div class="code"><div class="file"><a href="/Scratch/en/blog/Higher-order-function-in-zsh/code/functional.sh"> &#x27A5; functional.sh </a></div><div class="withfile">
<pre class="twilight">
<span class="Comment"><span class="Comment">#</span>!/usr/bin/env zsh</span>
<span class="Comment"><span class="Comment">#</span> Provide higer-order functions </span>
<span class="Comment"><span class="Comment">#</span> usage:</span>
<span class="Comment"><span class="Comment">#</span></span>
<span class="Comment"><span class="Comment">#</span> $ foo(){print &quot;x: $1&quot;}</span>
<span class="Comment"><span class="Comment">#</span> $ map foo a b c d</span>
<span class="Comment"><span class="Comment">#</span> x: a</span>
<span class="Comment"><span class="Comment">#</span> x: b</span>
<span class="Comment"><span class="Comment">#</span> x: c</span>
<span class="Comment"><span class="Comment">#</span> x: d</span>
function map {
local func_name=<span class="Variable"><span class="Variable">$</span>1</span>
shift
<span class="Keyword">for</span> elem <span class="Keyword">in</span> <span class="Variable"><span class="Variable">$</span>@</span><span class="Keyword">;</span> print -- <span class="String"><span class="String">$(</span>eval <span class="StringVariable"><span class="StringVariable">$</span>func_name</span> <span class="StringVariable"><span class="StringVariable">$</span>elem</span><span class="String">)</span></span>
}
<span class="Comment"><span class="Comment">#</span> $ bar() { print $(($1 + $2)) }</span>
<span class="Comment"><span class="Comment">#</span> $ fold bar 0 1 2 3 4 5</span>
<span class="Comment"><span class="Comment">#</span> 15</span>
<span class="Comment"><span class="Comment">#</span> -- but also</span>
<span class="Comment"><span class="Comment">#</span> $ fold bar 0 $( seq 1 100 )</span>
function fold {
<span class="Keyword">if</span> ((<span class="Variable"><span class="Variable">$</span>#</span><span class="Keyword">&lt;</span>2)) {
print -- <span class="String"><span class="String">&quot;</span>ERROR fold use at least 2 arguments<span class="String">&quot;</span></span> <span class="Keyword">&gt;&amp;2</span>
return 1
}
<span class="Keyword">if</span> ((<span class="Variable"><span class="Variable">$</span>#</span><span class="Keyword">&lt;</span>3)) {
print -- <span class="Variable"><span class="Variable">$</span>2</span>
return 0
} <span class="Keyword">else</span> {
local acc
local right
local func_name=<span class="Variable"><span class="Variable">$</span>1</span>
local init_value=<span class="Variable"><span class="Variable">$</span>2</span>
local first_value=<span class="Variable"><span class="Variable">$</span>3</span>
shift 3
right=<span class="String"><span class="String">$(</span> fold <span class="StringVariable"><span class="StringVariable">$</span>func_name</span> <span class="StringVariable"><span class="StringVariable">$</span>init_value</span> <span class="StringVariable"><span class="StringVariable">$</span>@</span> <span class="String">)</span></span>
acc=<span class="String"><span class="String">$(</span> eval <span class="String"><span class="String">&quot;</span><span class="StringVariable"><span class="StringVariable">$</span>func_name</span> <span class="StringVariable"><span class="StringVariable">$</span>first_value</span> <span class="StringVariable"><span class="StringVariable">$</span>right</span><span class="String">&quot;</span></span> <span class="String">)</span></span>
print -- <span class="Variable"><span class="Variable">$</span>acc</span>
return 0
}
}
<span class="Comment"><span class="Comment">#</span> usage:</span>
<span class="Comment"><span class="Comment">#</span></span>
<span class="Comment"><span class="Comment">#</span> $ baz() { print $1 | grep baz }</span>
<span class="Comment"><span class="Comment">#</span> $ filter baz titi bazaar biz</span>
<span class="Comment"><span class="Comment">#</span> bazaar</span>
function filter {
local predicate=<span class="Variable"><span class="Variable">$</span>1</span>
local result
typeset -a result
shift
<span class="Keyword">for</span> elem <span class="Keyword">in</span> <span class="Variable"><span class="Variable">$</span>@</span><span class="Keyword">;</span> <span class="Keyword">do</span>
<span class="Keyword">if</span> eval <span class="Variable"><span class="Variable">$</span>predicate</span> <span class="Variable"><span class="Variable">$</span>elem</span> <span class="Keyword">&gt;</span>/dev/null<span class="Keyword">;</span> <span class="Keyword">then</span>
result=( <span class="Variable"><span class="Variable">$</span>result</span> <span class="Variable"><span class="Variable">$</span>elem</span> )
<span class="Keyword">fi</span>
<span class="Keyword">done</span>
print <span class="Variable"><span class="Variable">$</span>result</span>
}
</pre>
</div></div>
</div>
@ -168,11 +239,6 @@ Why?</p>
<div id="previous_articles">
previous entries
<div class="previous_article">
<a href="/Scratch/en/blog/programming-language-experience/"><span class="nicer">«</span>&nbsp;Programming Language Experience</a>
</div>
<div class="previous_article">
<a href="/Scratch/en/blog/Learn-Vim-Progressively/"><span class="nicer">«</span>&nbsp;Learn Vim Progressively</a>
</div>
@ -183,10 +249,15 @@ Why?</p>
</div>
</div>
<div id="next_articles">
next entries
<div class="next_article">
<a href="/Scratch/en/blog/programming-language-experience/">Programming Language Experience&nbsp;<span class="nicer">»</span></a>
</div>

View file

@ -41,6 +41,7 @@
<div id="choixlang">
<a href="/Scratch/fr/blog/Learn-Vim-Progressively/" onclick="setLanguage('fr')">en Français</a>
</div>
<div class="flush"></div>
</div>
<div id="titre">
<h1>
@ -48,7 +49,6 @@
</h1>
</div>
<div class="flush"></div>
@ -539,12 +539,12 @@ $(document).ready(function() {
next entries
<div class="next_article">
<a href="/Scratch/en/blog/programming-language-experience/">Programming Language Experience&nbsp;<span class="nicer">»</span></a>
<a href="/Scratch/en/blog/Higher-order-function-in-zsh/">Higher order function in zsh&nbsp;<span class="nicer">»</span></a>
</div>
<div class="next_article">
<a href="/Scratch/en/blog/Higher-order-function-in-zsh/">Higher order function in zsh&nbsp;<span class="nicer">»</span></a>
<a href="/Scratch/en/blog/programming-language-experience/">Programming Language Experience&nbsp;<span class="nicer">»</span></a>
</div>

View file

@ -39,6 +39,7 @@
<div id="choixlang">
<a href="/Scratch/fr/blog/Password-Management/" onclick="setLanguage('fr')">en Français</a>
</div>
<div class="flush"></div>
</div>
<div id="titre">
<h1>
@ -46,7 +47,6 @@
</h1>
</div>
<div class="flush"></div>
@ -253,12 +253,12 @@ Further more using shorter password make it even harder for an attaquer to retri
<div class="next_article">
<a href="/Scratch/en/blog/programming-language-experience/">Programming Language Experience&nbsp;<span class="nicer">»</span></a>
<a href="/Scratch/en/blog/Higher-order-function-in-zsh/">Higher order function in zsh&nbsp;<span class="nicer">»</span></a>
</div>
<div class="next_article">
<a href="/Scratch/en/blog/Higher-order-function-in-zsh/">Higher order function in zsh&nbsp;<span class="nicer">»</span></a>
<a href="/Scratch/en/blog/programming-language-experience/">Programming Language Experience&nbsp;<span class="nicer">»</span></a>
</div>

View file

@ -2,20 +2,48 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<id>http://yannesposito.com/</id>
<title>Yogsototh's last blogs entries</title>
<updated>2011-09-27T13:15:23Z</updated>
<updated>2011-09-28T10:21:41Z</updated>
<link href="http://yannesposito.com/" rel="alternate"/>
<link href="http://feeds.feedburner.com/yannespositocomen" rel="self"/>
<author>
<name>Yann Esposito</name>
<uri>http://yannesposito.com</uri>
</author>
<entry>
<id>tag:yannesposito.com,2011-09-28:/Scratch/en/blog/programming-language-experience/</id>
<title type="html">Programming Language Experience</title>
<published>2011-09-28T10:21:41Z</published>
<updated>2011-09-28T10:21:41Z</updated>
<link href="http://yannesposito.com/Scratch/en/blog/programming-language-experience/" rel="alternate"/>
<content type="html">&lt;p&gt;&lt;img alt="Title image" src="/Scratch/img/blog/programming-language-experience/dragon.jpg" /&gt;&lt;/p&gt;
&lt;div class="intro"&gt;
&lt;span class="sc"&gt;&lt;abbr title="Too long; didn't read"&gt;tl;dr&lt;/abbr&gt;: &lt;/span&gt; My short and higly subjective feelings about programming languages I used.
&lt;/div&gt;
&lt;h3 id="basic"&gt;&lt;code&gt;BASIC&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Title image" src="/Scratch/img/blog/programming-language-experience/basic.gif" class="left" /&gt;
The language of my firsts programs!
I was about 10, with an &lt;code&gt;MO5&lt;/code&gt; and &lt;code&gt;Amstrad CPC 6128&lt;/code&gt; and even with my &lt;code&gt;Atari STe&lt;/code&gt;.
This is the language of &lt;code&gt;GOTO&lt;/code&gt;s.
&#212; nostalgia.
Unfortunately this might be the only interesting part of this language.&lt;/p&gt;
&lt;p&gt;Today this language is obsolescent.
It not even a good language to learn pro...&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content>
</entry>
<entry>
<id>tag:yannesposito.com,2011-09-27:/Scratch/en/blog/Higher-order-function-in-zsh/</id>
<title type="html">Higher order function in zsh</title>
<published>2011-09-27T13:15:23Z</published>
<updated>2011-09-27T13:15:23Z</updated>
<link href="http://yannesposito.com/Scratch/en/blog/Higher-order-function-in-zsh/" rel="alternate"/>
<content type="html">&lt;p&gt;&lt;img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.png" /&gt;&lt;/p&gt;
<content type="html">&lt;p&gt;&lt;img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.jpg" /&gt;&lt;/p&gt;
&lt;div class="intro"&gt;
@ -34,39 +62,6 @@
&lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt; project become foo (:t for tail)&lt;/span&gt;
project=&lt;span class="Variable"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/p&gt;</content>
</entry>
<entry>
<id>tag:yannesposito.com,2011-09-05:/Scratch/en/blog/programming-language-experience/</id>
<title type="html">Programming Language Experience</title>
<published>2011-09-05T10:21:41Z</published>
<updated>2011-09-05T10:21:41Z</updated>
<link href="http://yannesposito.com/Scratch/en/blog/programming-language-experience/" rel="alternate"/>
<content type="html">&lt;p&gt;&lt;img alt="Title image" src="/Scratch/img/blog/programming-language-experience/main.png" /&gt;&lt;/p&gt;
&lt;div class="intro"&gt;
&lt;span class="sc"&gt;&lt;abbr title="Too long; didn't read"&gt;tl;dr&lt;/abbr&gt;: &lt;/span&gt; My feelings about programming languages I used.
&lt;/div&gt;
&lt;h3 id="basic"&gt;BASIC&lt;/h3&gt;
&lt;p&gt;The language of my firsts programs!
I was about 10, with an &lt;code&gt;MO5&lt;/code&gt; and &lt;code&gt;Amstrad CPC 6128&lt;/code&gt; and even with my &lt;code&gt;Atari STe&lt;/code&gt;.
This is the language of &lt;code&gt;GOTO&lt;/code&gt;s.
&#212; nostalgia.
Unfortunately this might be the only interesting part of this language.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;pre class="twilight"&gt;
READY
10 PRINT &lt;/pre&gt;&lt;/p&gt;</content>
</entry>
<entry>
<id>tag:yannesposito.com,2011-08-25:/Scratch/en/blog/Learn-Vim-Progressively/</id>
<title type="html">Learn Vim Progressively</title>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/blog/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/blog/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><span class="active" title="You're here.">Blog</span></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>
@ -73,6 +72,48 @@ Last 5 Articles
</div>
<h1>
<span class="date">
<span class="day">28</span>
<span class="month">Sep</span>
<span class="year">2011</span>
</span>
<a href="/Scratch/en/blog/programming-language-experience/">Programming Language Experience <span class="nicer">»</span></a>
</h1>
<div class="corps">
<p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/dragon.jpg" /></p>
<div class="intro">
<span class="sc"><abbr title="Too long; didn't read">tl;dr</abbr>: </span> My short and higly subjective feelings about programming languages I used.
</div>
<h3 id="basic"><code>BASIC</code></h3>
<p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/basic.gif" class="left" />
The language of my firsts programs!
I was about 10, with an <code>MO5</code> and <code>Amstrad CPC 6128</code> and even with my <code>Atari STe</code>.
This is the language of <code>GOTO</code>s.
Ô nostalgia.
Unfortunately this might be the only interesting part of this language.</p>
<p>Today this language is obsolescent.
It not even a good language to learn pro...</p></p></p>
<div class="flush"></div>
<div>
<p>
<a href="/Scratch/en/blog/programming-language-experience/">Read more <span class="nicer">»</span></a>
</p>
</div>
</div>
<h1>
<span class="date">
<span class="day">27</span>
@ -84,7 +125,7 @@ Last 5 Articles
<div class="corps">
<p><img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.png" /></p>
<p><img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.jpg" /></p>
<div class="intro">
@ -112,53 +153,6 @@ Last 5 Articles
</div>
<h1>
<span class="date">
<span class="day">5</span>
<span class="month">Sep</span>
<span class="year">2011</span>
</span>
<a href="/Scratch/en/blog/programming-language-experience/">Programming Language Experience <span class="nicer">»</span></a>
</h1>
<div class="corps">
<p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/main.png" /></p>
<div class="intro">
<span class="sc"><abbr title="Too long; didn't read">tl;dr</abbr>: </span> My feelings about programming languages I used.
</div>
<h3 id="basic">BASIC</h3>
<p>The language of my firsts programs!
I was about 10, with an <code>MO5</code> and <code>Amstrad CPC 6128</code> and even with my <code>Atari STe</code>.
This is the language of <code>GOTO</code>s.
Ô nostalgia.
Unfortunately this might be the only interesting part of this language.</p>
<p>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.</p>
<pre class="twilight">
READY
10 PRINT </pre></p>
<div class="flush"></div>
<div>
<p>
<a href="/Scratch/en/blog/programming-language-experience/">Read more <span class="nicer">»</span></a>
</p>
</div>
</div>
<h1>
<span class="date">
<span class="day">25</span>
@ -304,14 +298,14 @@ It is both safe and easy to use everyday.</p>
<h2 id="archives">Archives</h2>
<div id="sousliens" class="archive"><h4 class="button" onclick="$('#archives_2011').slideToggle()">[2011]</h4><ul id="archives_2011"><li><span class="date">
<span class="day">28</span>
<span class="month">Sep</span>
<span class="year">2011</span>
</span> <a href="/Scratch/en/blog/programming-language-experience/">Programming Language Experience<span class="nicer">»</span></a></li><li><span class="date">
<span class="day">27</span>
<span class="month">Sep</span>
<span class="year">2011</span>
</span> <a href="/Scratch/en/blog/Higher-order-function-in-zsh/">Higher order function in zsh<span class="nicer">»</span></a></li><li><span class="date">
<span class="day">5</span>
<span class="month">Sep</span>
<span class="year">2011</span>
</span> <a href="/Scratch/en/blog/programming-language-experience/">Programming Language Experience<span class="nicer">»</span></a></li><li><span class="date">
<span class="day">25</span>
<span class="month">Aug</span>
<span class="year">2011</span>

View file

@ -39,6 +39,7 @@
<div id="choixlang">
<a href="/Scratch/fr/blog/programming-language-experience/" onclick="setLanguage('fr')">en Français</a>
</div>
<div class="flush"></div>
</div>
<div id="titre">
<h1>
@ -46,7 +47,6 @@
</h1>
</div>
<div class="flush"></div>
@ -56,19 +56,20 @@
<div class="flush"></div>
<div id="afterheader">
<div class="corps">
<p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/main.png" /></p>
<p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/dragon.jpg" /></p>
<div class="intro">
<span class="sc"><abbr title="Too long; didn't read">tl;dr</abbr>: </span> My feelings about programming languages I used.
<span class="sc"><abbr title="Too long; didn't read">tl;dr</abbr>: </span> My short and higly subjective feelings about programming languages I used.
</div>
<h3 id="basic">BASIC</h3>
<h3 id="basic"><code>BASIC</code></h3>
<p>The language of my firsts programs!
<p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/basic.gif" class="left" />
The language of my firsts programs!
I was about 10, with an <code>MO5</code> and <code>Amstrad CPC 6128</code> and even with my <code>Atari STe</code>.
This is the language of <code>GOTO</code>s.
Ô nostalgia.
@ -151,6 +152,8 @@ In the end I prefer C.</p>
<h3 id="c">C</h3>
<p><img alt="Pointer representation from Dancing links" src="/Scratch/img/blog/programming-language-experience/C.jpg" class="left" /></p>
<p>The language of pointers.</p>
<p><em>Le</em> programming language.</p>
@ -187,7 +190,7 @@ What you need to know is this old language had certainly inspired most new objec
<p>More clearly, the language didn&rsquo;t helped you to structure your program.</p>
<p>In order to limit the number of bugs, particularly for huge programs, we started to thing about how to best organize computer programs.
<p>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&rsquo;t a miracle. Proof? How many bug-free software do you use?
Furthermore, OOP doesn&rsquo;t fit all problems.
@ -198,52 +201,62 @@ I mean an information system, the OOP is not so bad.</p>
<h3 id="c-1">C++</h3>
<p><img alt="Messy router" src="/Scratch/img/blog/programming-language-experience/cplusplus.jpg" class="left" /></p>
<p>The ugly</p>
<p>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 <code>DEES</code> my main thesis software.
My only concern was about a lack in the STL.
My only concern was about a lack in the <abbr title="Standard Tempate Library">STL</abbr>.
In the doc, one could use <code>String&lt;T&gt;</code>.
But in reality, T have to be only <code>char</code> or <code>char16</code>.
Then I had to reduce my alphabet to $2^16$ letters.
Then I had to reduce my alphabet to 2<sup>16</sup> letters.
Except for some application, the alphabet must be far larger than that.</p>
<p>To conclude, I&rsquo;d say, C++ is very good if you work alone or with a fixed subset of its features.</p>
<h3 id="eiffel">Eiffel</h3>
<p><img alt="Eiffel tower construction" src="/Scratch/img/blog/programming-language-experience/eiffel.jpg" class="left" /></p>
<p>Yes, it is a really nice language.
Full object in mind. Far cleaner than C++.
But it isn&rsquo;t so popular.
Behind C++ there is a large community to help new users and to write libraries.
Furthermore, I preferred working with C++.</p>
Furthermore, I preferred working with C++.
At that time I programmed a lot with C and like its syntax.</p>
<h3 id="java">Java</h3>
<p><img alt="Holy Grail from the Monty Python" src="/Scratch/img/blog/programming-language-experience/grail.jpg" class="left" /></p>
<p>The first time I heard about Java it was <em>le Grail</em>!</p>
<p>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&hellip; But.</p>
There was incrusted inside the language architecture concepts to help limit mistakes, and force you to use good programming habits. But&hellip;</p>
<p>But It is extremely verbose.
And limitations are quite boring if you know what you&rsquo;re doing.</p>
<p>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.</p>
<p>I made a <abbr title="Graphic User Interface">GUI</abbr> using Java Swing and I created my own notification system between different element of the <abbr title="Graphic User Interface">GUI</abbr>.
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.</p>
Copy/paste are exactly what should be avoided the most by object oriented languages.</p>
<p>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, &hellip;).
<p>Another thing&nbsp;; I had to handle threads.
I had to make my own thread gestion system to avoid locks and notifications between threads (this thread ended, &hellip;).
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.</p>
@ -253,16 +266,18 @@ I wish it is the case, but lacking such an essential feature for a language was
<p>After my experience, I don&rsquo;t recommend Java.
Portability does not worth this price.</p>
<p>GUI protability mean, mediocre experience on all platforms.
Any system it might be (wxWidget, QT, etc&hellip;)
Then for applications that might be distributed it is a bad idea.</p>
<p><abbr title="Graphic User Interface">GUI</abbr> protability mean, mediocre experience on all platforms.
Any system it might be (wxWidget, QT, etc&hellip;).</p>
<p>The Java ideology is &ldquo;closed&rdquo;. 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.</p>
A good programmer will be able to make very interresting with it thought.
Please note I didn&rsquo;t say Java programmer are bad programmer.</p>
<h3 id="objective-c">Objective-C</h3>
<p><img alt="Xcode Logo" src="/Scratch/img/blog/programming-language-experience/xcode_logo.png" class="left" /></p>
<p>The language I learned and used only to make application on Apple<small>&copy;</small> 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.</p>
<p>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 <abbr title="Graphic User Interface">GUI</abbr> programming.
I recommand to continue working with this language.
In the end you&rsquo;ll certainely find it better than expected.</p>
@ -283,10 +298,12 @@ In the end you&rsquo;ll certainely find it better than expected.</p>
<h3 id="php">PHP</h3>
<p><img alt="A Jacky Touch Car" src="/Scratch/img/blog/programming-language-experience/php.jpg" class="left" /></p>
<p>This small script language that we used all to make our website in the time of animated gifs.</p>
<p>Nice but no more. Apparently there were a lot of progress since PHP5. Maybe one day I&rsquo;ll use it again. But behind it, this language has a &ldquo;script kiddies only&rdquo; reputation.
A long history of security holes easy to make, low level community, etc&hellip;</p>
Also long history of easy to make security holes.</p>
<p>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
<h3 id="python">Python</h3>
<p><img alt="Python. Do you speak it?" src="/Scratch/img/blog/programming-language-experience/python.jpg" class="left" /></p>
<p>Revelation!</p>
<p>When you were used to work with compiled languages (C++, Java) and you start learning Python, it&rsquo;s like a punch in the face.
@ -305,11 +324,10 @@ Everything is natural, it&rsquo;s <em>magic</em>.
Yes, as good as this.
But something so good must have some drawback.</p>
<p>And yes, an all interpreted languages, Python is <em>slow</em>.
<p>And yes, like all interpreted languages, Python is <em>slow</em>.
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&hellip; But it is completely usable for many things.
But some application are just forbidden to it.</p>
Argh&hellip; Note it is completely usable for many things.</p>
<h3 id="awk">Awk</h3>
@ -373,63 +391,79 @@ In order to compensate the syntax, you can use CoffeScript.</p>
<h3 id="caml">CamL</h3>
<p>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.</p>
<p>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.</p>
<h3 id="haskell">Haskell</h3>
<p>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 &ldquo;LOL! URAN00B! RTFM!&rdquo;
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).</p>
To master haskell you need to understand very hard concepts.
Monads and Arrows are some of them.
I didn&rsquo;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 &ldquo;LOL! URAN00B! RTFM!&rdquo;
And no concession as been made to make this language more popular (I&rsquo;m looking at you C++, Java and Javascript).
This langage remain pure (I know there are two meaning).</p>
<h2 id="unpopular-languages">Unpopular Languages</h2>
<p>Some languages are designated to create documents.</p>
<h3 id="metapost">MetaPost</h3>
<h3 id="metapost">Metapost</h3>
<p>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:</p>
<pre class="twilight">
x<span class="Keyword">=</span>(<span class="Constant">2</span><span class="Keyword">*</span>y<span class="Keyword">+</span>z)<span class="Keyword">/</span><span class="Constant">2</span>
<span class="Variable">AA</span><span class="Keyword">=</span><span class="Constant">1</span><span class="Keyword">/</span><span class="Constant">3</span>[<span class="Variable">A</span>,<span class="Variable">B</span>]
</pre>
<p>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.</p>
<p>It will place the point <code>AA</code> between the point <code>A</code> and <code>B</code>.
More precisely at the barycenter <code>(2xA + B)/3</code>.</p>
<pre class="twilight">
<span class="Variable">X</span><span class="Keyword">=</span>whatever[<span class="Variable">A</span>,<span class="Variable">B</span>]
<span class="Variable">X</span><span class="Keyword">=</span>whatever[<span class="Variable">C</span>,<span class="Variable">D</span>]
</pre>
<p>This second example, will place the point X at the intersection of the two segments <code>AB</code> and <code>CD</code>.</p>
<p>This feature is very helpful, and not only to draw things.
Most programming language should think about adding it.</p>
<h3 id="zsh">zsh</h3>
<p>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.</p>
<h3 id="prolog">Prolog</h3>
<p>I never made somthing serious with Prolog, but I really loved to use and learn it.
<p>I never made something serious with Prolog, but I really loved to use and learn it.
I had the chance to learn Prolog with <a href="http://alain.colmerauer.free.fr/">Alain Colmerauer</a> 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.</p>
A bit like functional programming but far more powerful.</p>
<h2 id="languages-to-discover">Languages to discover</h2>
<p>It remains many language and framework to try.
<p>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.</p>
<p>Tell me if you have any other experience with these programming languages.
I had only given my impressions.
But I used them all.</p>
Of course, my feelings are highly subjectives.
But I used all of these languages.</p>
</div>
@ -481,6 +515,11 @@ But I used them all.</p>
<div id="previous_articles">
previous entries
<div class="previous_article">
<a href="/Scratch/en/blog/Higher-order-function-in-zsh/"><span class="nicer">«</span>&nbsp;Higher order function in zsh</a>
</div>
<div class="previous_article">
<a href="/Scratch/en/blog/Learn-Vim-Progressively/"><span class="nicer">«</span>&nbsp;Learn Vim Progressively</a>
</div>
@ -491,15 +530,10 @@ But I used them all.</p>
</div>
</div>
<div id="next_articles">
next entries
<div class="next_article">
<a href="/Scratch/en/blog/Higher-order-function-in-zsh/">Higher order function in zsh&nbsp;<span class="nicer">»</span></a>
</div>
@ -514,8 +548,8 @@ But I used them all.</p>
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Copyright ©, Yann Esposito</a>
</div>
<div id="lastmod">
Created: 09/05/2011
Modified: 09/06/2011
Created: 09/28/2011
Modified: 09/27/2011
</div>
<div>
Entirely done with

View file

@ -27,15 +27,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/error/401-authorization_required/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/error/401-authorization_required/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -27,15 +27,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/error/403-forbidden/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/error/403-forbidden/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -27,15 +27,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/error/408-request_timed_out/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/error/408-request_timed_out/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -27,15 +27,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/error/500-internal_server_error/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/error/500-internal_server_error/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -27,15 +27,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/error/503-service_unavailable/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/error/503-service_unavailable/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -103,7 +103,7 @@
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Copyright ©, Yann Esposito</a>
</div>
<div id="lastmod">
Modified: 09/27/2011
Modified: 09/28/2011
</div>
<div>
Entirely done with

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/rss/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/rss/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/softwares/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/softwares/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><span class="active" title="You're here.">Softwares</span></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/softwares/yaquabubbles/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/softwares/yaquabubbles/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/softwares/yclock/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/softwares/yclock/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/softwares/ypassword/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/softwares/ypassword/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/softwares/ypassword/iphoneweb/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/softwares/ypassword/iphoneweb/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/softwares/ypassword/web/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/softwares/ypassword/web/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a> </div>
<div id="choixlang"><a href="/Scratch/fr/validation/" onclick="setLanguage('fr')">en Français</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomen">Subscribe</a></div>
<div id="choixlang"><a href="/Scratch/fr/validation/" onclick="setLanguage('fr')">en Français</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
</div>
<li><a href="/Scratch/en/about/">About</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a> </div>
<div id="choixlang"><a href="/Scratch/en/about/contact/" onclick="setLanguage('en')">in English</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a></div>
<div id="choixlang"><a href="/Scratch/en/about/contact/" onclick="setLanguage('en')">in English</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<li><a href="/Scratch/fr/blog/">Blog</a></li>
<li><a href="/Scratch/fr/softwares/">Softwares</a></li>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul>
</div>
</div>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a> </div>
<div id="choixlang"><a href="/Scratch/en/about/cv/" onclick="setLanguage('en')">in English</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a></div>
<div id="choixlang"><a href="/Scratch/en/about/cv/" onclick="setLanguage('en')">in English</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<li><a href="/Scratch/fr/blog/">Blog</a></li>
<li><a href="/Scratch/fr/softwares/">Softwares</a></li>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul>
</div>
</div>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a> </div>
<div id="choixlang"><a href="/Scratch/en/about/" onclick="setLanguage('en')">in English</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a></div>
<div id="choixlang"><a href="/Scratch/en/about/" onclick="setLanguage('en')">in English</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<li><a href="/Scratch/fr/blog/">Blog</a></li>
<li><a href="/Scratch/fr/softwares/">Softwares</a></li>
<li><span class="active" title="You're here.">À propos</span></li></ul>
</div>
</div>
<li><span class="active" title="You're here.">À propos</span></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a> </div>
<div id="choixlang"><a href="/Scratch/en/about/old/" onclick="setLanguage('en')">in English</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a></div>
<div id="choixlang"><a href="/Scratch/en/about/old/" onclick="setLanguage('en')">in English</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<li><a href="/Scratch/fr/blog/">Blog</a></li>
<li><a href="/Scratch/fr/softwares/">Softwares</a></li>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul>
</div>
</div>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a> </div>
<div id="choixlang"><a href="/Scratch/en/about/technical_details/" onclick="setLanguage('en')">in English</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a></div>
<div id="choixlang"><a href="/Scratch/en/about/technical_details/" onclick="setLanguage('en')">in English</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<li><a href="/Scratch/fr/blog/">Blog</a></li>
<li><a href="/Scratch/fr/softwares/">Softwares</a></li>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul>
</div>
</div>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -0,0 +1,63 @@
#!/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
}

View file

@ -39,6 +39,7 @@
<div id="choixlang">
<a href="/Scratch/en/blog/Higher-order-function-in-zsh/" onclick="setLanguage('en')">in English</a>
</div>
<div class="flush"></div>
</div>
<div id="titre">
<h1>
@ -46,7 +47,6 @@
</h1>
</div>
<div class="flush"></div>
@ -56,7 +56,7 @@
<div class="flush"></div>
<div id="afterheader">
<div class="corps">
<p><img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.png" /></p>
<p><img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.jpg" /></p>
<div class="intro">
@ -107,6 +107,8 @@ Recommençons sur le même principe.</p>
<p>Trouver les fichiers des projets qui ne contiennent pas de s dans leur nom qui ont le même nom que leur projet.</p>
<p>Before ⇒</p>
<pre class="twilight">
<span class="Keyword">for</span> toProject <span class="Keyword">in</span> Projects/*<span class="Keyword">;</span> <span class="Keyword">do</span>
project=<span class="Variable"><span class="Variable">$</span>toProject</span>:t
@ -122,15 +124,17 @@ Recommençons sur le même principe.</p>
<span class="Keyword">done</span>
</pre>
<p>After =&gt;</p>
<p>After </p>
<pre class="twilight">
<span class="Entity">contain_no_s</span>() { print <span class="Variable"><span class="Variable">$</span>1</span> <span class="Keyword">|</span> grep -v s }
function verify_file_name {
local project=<span class="Variable"><span class="Variable">$</span>1</span>:t
<span class="Entity">contains_project_name</span>() { print <span class="Variable"><span class="Variable">$</span>1</span>:t <span class="Keyword">|</span> grep <span class="Variable"><span class="Variable">$</span>project</span> }
map <span class="String"><span class="String">&quot;</span>print -- X<span class="String">&quot;</span></span> <span class="String"><span class="String">$(</span>filter contains_project_name <span class="StringVariable"><span class="StringVariable">$</span>1</span>/*<span class="String"><span class="String">(</span>.N<span class="String">)</span></span><span class="String">)</span></span>
}
map show_project_matchin_file <span class="String"><span class="String">$(</span> filter contain_no_s Projects/* <span class="String">)</span></span>
</pre>
@ -138,6 +142,73 @@ map show_project_matchin_file <span class="String"><span class="String">$(</span
But the second one is clearly far superior in architecture.
Why?</p>
<div class="code"><div class="file"><a href="/Scratch/fr/blog/Higher-order-function-in-zsh/code/functional.sh"> &#x27A5; functional.sh </a></div><div class="withfile">
<pre class="twilight">
<span class="Comment"><span class="Comment">#</span>!/usr/bin/env zsh</span>
<span class="Comment"><span class="Comment">#</span> Provide higer-order functions </span>
<span class="Comment"><span class="Comment">#</span> usage:</span>
<span class="Comment"><span class="Comment">#</span></span>
<span class="Comment"><span class="Comment">#</span> $ foo(){print &quot;x: $1&quot;}</span>
<span class="Comment"><span class="Comment">#</span> $ map foo a b c d</span>
<span class="Comment"><span class="Comment">#</span> x: a</span>
<span class="Comment"><span class="Comment">#</span> x: b</span>
<span class="Comment"><span class="Comment">#</span> x: c</span>
<span class="Comment"><span class="Comment">#</span> x: d</span>
function map {
local func_name=<span class="Variable"><span class="Variable">$</span>1</span>
shift
<span class="Keyword">for</span> elem <span class="Keyword">in</span> <span class="Variable"><span class="Variable">$</span>@</span><span class="Keyword">;</span> print -- <span class="String"><span class="String">$(</span>eval <span class="StringVariable"><span class="StringVariable">$</span>func_name</span> <span class="StringVariable"><span class="StringVariable">$</span>elem</span><span class="String">)</span></span>
}
<span class="Comment"><span class="Comment">#</span> $ bar() { print $(($1 + $2)) }</span>
<span class="Comment"><span class="Comment">#</span> $ fold bar 0 1 2 3 4 5</span>
<span class="Comment"><span class="Comment">#</span> 15</span>
<span class="Comment"><span class="Comment">#</span> -- but also</span>
<span class="Comment"><span class="Comment">#</span> $ fold bar 0 $( seq 1 100 )</span>
function fold {
<span class="Keyword">if</span> ((<span class="Variable"><span class="Variable">$</span>#</span><span class="Keyword">&lt;</span>2)) {
print -- <span class="String"><span class="String">&quot;</span>ERROR fold use at least 2 arguments<span class="String">&quot;</span></span> <span class="Keyword">&gt;&amp;2</span>
return 1
}
<span class="Keyword">if</span> ((<span class="Variable"><span class="Variable">$</span>#</span><span class="Keyword">&lt;</span>3)) {
print -- <span class="Variable"><span class="Variable">$</span>2</span>
return 0
} <span class="Keyword">else</span> {
local acc
local right
local func_name=<span class="Variable"><span class="Variable">$</span>1</span>
local init_value=<span class="Variable"><span class="Variable">$</span>2</span>
local first_value=<span class="Variable"><span class="Variable">$</span>3</span>
shift 3
right=<span class="String"><span class="String">$(</span> fold <span class="StringVariable"><span class="StringVariable">$</span>func_name</span> <span class="StringVariable"><span class="StringVariable">$</span>init_value</span> <span class="StringVariable"><span class="StringVariable">$</span>@</span> <span class="String">)</span></span>
acc=<span class="String"><span class="String">$(</span> eval <span class="String"><span class="String">&quot;</span><span class="StringVariable"><span class="StringVariable">$</span>func_name</span> <span class="StringVariable"><span class="StringVariable">$</span>first_value</span> <span class="StringVariable"><span class="StringVariable">$</span>right</span><span class="String">&quot;</span></span> <span class="String">)</span></span>
print -- <span class="Variable"><span class="Variable">$</span>acc</span>
return 0
}
}
<span class="Comment"><span class="Comment">#</span> usage:</span>
<span class="Comment"><span class="Comment">#</span></span>
<span class="Comment"><span class="Comment">#</span> $ baz() { print $1 | grep baz }</span>
<span class="Comment"><span class="Comment">#</span> $ filter baz titi bazaar biz</span>
<span class="Comment"><span class="Comment">#</span> bazaar</span>
function filter {
local predicate=<span class="Variable"><span class="Variable">$</span>1</span>
local result
typeset -a result
shift
<span class="Keyword">for</span> elem <span class="Keyword">in</span> <span class="Variable"><span class="Variable">$</span>@</span><span class="Keyword">;</span> <span class="Keyword">do</span>
<span class="Keyword">if</span> eval <span class="Variable"><span class="Variable">$</span>predicate</span> <span class="Variable"><span class="Variable">$</span>elem</span> <span class="Keyword">&gt;</span>/dev/null<span class="Keyword">;</span> <span class="Keyword">then</span>
result=( <span class="Variable"><span class="Variable">$</span>result</span> <span class="Variable"><span class="Variable">$</span>elem</span> )
<span class="Keyword">fi</span>
<span class="Keyword">done</span>
print <span class="Variable"><span class="Variable">$</span>result</span>
}
</pre>
</div></div>
</div>
@ -188,11 +259,6 @@ Why?</p>
<div id="previous_articles">
articles précédents
<div class="previous_article">
<a href="/Scratch/fr/blog/programming-language-experience/"><span class="nicer">«</span>&nbsp;programming language experience</a>
</div>
<div class="previous_article">
<a href="/Scratch/fr/blog/Learn-Vim-Progressively/"><span class="nicer">«</span>&nbsp;Apprenez Vim Progressivement</a>
</div>
@ -203,10 +269,15 @@ Why?</p>
</div>
</div>
<div id="next_articles">
articles suivants
<div class="next_article">
<a href="/Scratch/fr/blog/programming-language-experience/">programming language experience&nbsp;<span class="nicer">»</span></a>
</div>

View file

@ -41,6 +41,7 @@
<div id="choixlang">
<a href="/Scratch/en/blog/Learn-Vim-Progressively/" onclick="setLanguage('en')">in English</a>
</div>
<div class="flush"></div>
</div>
<div id="titre">
<h1>
@ -48,7 +49,6 @@
</h1>
</div>
<div class="flush"></div>
@ -546,12 +546,12 @@ $(document).ready(function() {
articles suivants
<div class="next_article">
<a href="/Scratch/fr/blog/programming-language-experience/">programming language experience&nbsp;<span class="nicer">»</span></a>
<a href="/Scratch/fr/blog/Higher-order-function-in-zsh/">Higher order function in zsh&nbsp;<span class="nicer">»</span></a>
</div>
<div class="next_article">
<a href="/Scratch/fr/blog/Higher-order-function-in-zsh/">Higher order function in zsh&nbsp;<span class="nicer">»</span></a>
<a href="/Scratch/fr/blog/programming-language-experience/">programming language experience&nbsp;<span class="nicer">»</span></a>
</div>

View file

@ -39,6 +39,7 @@
<div id="choixlang">
<a href="/Scratch/en/blog/Password-Management/" onclick="setLanguage('en')">in English</a>
</div>
<div class="flush"></div>
</div>
<div id="titre">
<h1>
@ -46,7 +47,6 @@
</h1>
</div>
<div class="flush"></div>
@ -244,12 +244,12 @@ Avec des mots de passes plus petit, il est encore plus difficile pour un attaqua
<div class="next_article">
<a href="/Scratch/fr/blog/programming-language-experience/">programming language experience&nbsp;<span class="nicer">»</span></a>
<a href="/Scratch/fr/blog/Higher-order-function-in-zsh/">Higher order function in zsh&nbsp;<span class="nicer">»</span></a>
</div>
<div class="next_article">
<a href="/Scratch/fr/blog/Higher-order-function-in-zsh/">Higher order function in zsh&nbsp;<span class="nicer">»</span></a>
<a href="/Scratch/fr/blog/programming-language-experience/">programming language experience&nbsp;<span class="nicer">»</span></a>
</div>

View file

@ -2,20 +2,47 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<id>http://yannesposito.com/</id>
<title>Yogsototh's last blogs entries</title>
<updated>2011-09-27T13:15:23Z</updated>
<updated>2011-09-28T10:21:41Z</updated>
<link href="http://yannesposito.com/" rel="alternate"/>
<link href="http://feeds.feedburner.com/yannespositocomfr" rel="self"/>
<author>
<name>Yann Esposito</name>
<uri>http://yannesposito.com</uri>
</author>
<entry>
<id>tag:yannesposito.com,2011-09-28:/Scratch/fr/blog/programming-language-experience/</id>
<title type="html">programming language experience</title>
<published>2011-09-28T10:21:41Z</published>
<updated>2011-09-28T10:21:41Z</updated>
<link href="http://yannesposito.com/Scratch/fr/blog/programming-language-experience/" rel="alternate"/>
<content type="html">&lt;p&gt;&lt;img alt="Title image" src="/Scratch/img/blog/programming-language-experience/dragon.jpg" /&gt;&lt;/p&gt;
&lt;div class="intro"&gt;
&lt;span class="sc"&gt;&lt;abbr title="Trop long &#224; lire"&gt;tl&#224;l&lt;/abbr&gt;&amp;nbsp;: &lt;/span&gt; Mon avis court et hautement subjectif concernant les diff&#233;rents languages de programmations que j&amp;rsquo;ai utilis&#233;.
&lt;/div&gt;
&lt;h3 id="basic"&gt;&lt;code&gt;BASIC&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Title image" src="/Scratch/img/blog/programming-language-experience/basic.gif" class="left" /&gt;&lt;/p&gt;
&lt;p&gt;Ah&amp;nbsp;! Le language de mes premiers programmes&amp;nbsp;!
Je devais avoir 10-11 ans.
Sous &lt;code&gt;MO5&lt;/code&gt;, &lt;code&gt;Amstrad CPC 6128&lt;/code&gt; et m&#234;me &lt;code&gt;Atari STe&lt;/code&gt;.
Le langage des &lt;code&gt;GOTO&lt;/code&gt;s.
Je suis empleint de nostalgie rien que d&amp;rsquo;y penser.
C&amp;rsquo;est &#224; peu pr&#234;t le seul int&#233;r&#234;t de ce...&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content>
</entry>
<entry>
<id>tag:yannesposito.com,2011-09-27:/Scratch/fr/blog/Higher-order-function-in-zsh/</id>
<title type="html">Higher order function in zsh</title>
<published>2011-09-27T13:15:23Z</published>
<updated>2011-09-27T13:15:23Z</updated>
<link href="http://yannesposito.com/Scratch/fr/blog/Higher-order-function-in-zsh/" rel="alternate"/>
<content type="html">&lt;p&gt;&lt;img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.png" /&gt;&lt;/p&gt;
<content type="html">&lt;p&gt;&lt;img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.jpg" /&gt;&lt;/p&gt;
&lt;div class="intro"&gt;
@ -37,34 +64,6 @@ Commen&#231;ons par un programme qui converti tous les gif en png dans plusieurs
Avant&amp;nbsp;:&lt;/p&gt;
&lt;/p&gt;</content>
</entry>
<entry>
<id>tag:yannesposito.com,2011-09-05:/Scratch/fr/blog/programming-language-experience/</id>
<title type="html">programming language experience</title>
<published>2011-09-05T10:21:41Z</published>
<updated>2011-09-05T10:21:41Z</updated>
<link href="http://yannesposito.com/Scratch/fr/blog/programming-language-experience/" rel="alternate"/>
<content type="html">&lt;p&gt;&lt;img alt="Title image" src="/Scratch/img/blog/programming-language-experience/main.png" /&gt;&lt;/p&gt;
&lt;div class="intro"&gt;
&lt;span class="sc"&gt;&lt;abbr title="Trop long &#224; lire"&gt;tl&#224;l&lt;/abbr&gt;&amp;nbsp;: &lt;/span&gt; Mon avis sur les diff&#233;rents languages de programmations que j&amp;rsquo;ai utilis&#233;.
&lt;/div&gt;
&lt;h3 id="basic"&gt;BASIC&lt;/h3&gt;
&lt;p&gt;Ah&amp;nbsp;! Le language de mes premiers programmes&amp;nbsp;!
Je devais avoir 10-11 ans.
Sous &lt;code&gt;MO5&lt;/code&gt;, &lt;code&gt;Amstrad CPC 6128&lt;/code&gt; et m&#234;me &lt;code&gt;Atari STe&lt;/code&gt;.
Le langage des &lt;code&gt;GOTO&lt;/code&gt;s.
Je suis empleint de nostalgie rien que d&amp;rsquo;y penser.
C&amp;rsquo;est &#224; peu pr&#234;t le seul int&#233;r&#234;t de ce langage.&lt;/p&gt;
&lt;p&gt;Aujourd&amp;rsquo;hui ce langage est tomb&#233; en d&#233;su&#233;tude.
Ce n&amp;rsquo;est ni un bon langage pour apprendre, ni un bon langage pour faire de vrai prog...&lt;/p&gt;&lt;/p&gt;</content>
</entry>
<entry>
<id>tag:yannesposito.com,2011-08-25:/Scratch/fr/blog/Learn-Vim-Progressively/</id>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a> </div>
<div id="choixlang"><a href="/Scratch/en/blog/" onclick="setLanguage('en')">in English</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a></div>
<div id="choixlang"><a href="/Scratch/en/blog/" onclick="setLanguage('en')">in English</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<li><span class="active" title="You're here.">Blog</span></li>
<li><a href="/Scratch/fr/softwares/">Softwares</a></li>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul>
</div>
</div>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>
@ -73,6 +72,47 @@ Les 5 derniers articles
</div>
<h1>
<span class="date">
<span class="day">28</span>
<span class="month">Sep</span>
<span class="year">2011</span>
</span>
<a href="/Scratch/fr/blog/programming-language-experience/">programming language experience <span class="nicer">»</span></a>
</h1>
<div class="corps">
<p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/dragon.jpg" /></p>
<div class="intro">
<span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Mon avis court et hautement subjectif concernant les différents languages de programmations que j&rsquo;ai utilisé.
</div>
<h3 id="basic"><code>BASIC</code></h3>
<p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/basic.gif" class="left" /></p>
<p>Ah&nbsp;! Le language de mes premiers programmes&nbsp;!
Je devais avoir 10-11 ans.
Sous <code>MO5</code>, <code>Amstrad CPC 6128</code> et même <code>Atari STe</code>.
Le langage des <code>GOTO</code>s.
Je suis empleint de nostalgie rien que d&rsquo;y penser.
C&rsquo;est à peu prêt le seul intérêt de ce...</p></p></p>
<div class="flush"></div>
<div>
<p>
<a href="/Scratch/fr/blog/programming-language-experience/">en lire plus <span class="nicer">»</span></a>
</p>
</div>
</div>
<h1>
<span class="date">
<span class="day">27</span>
@ -84,7 +124,7 @@ Les 5 derniers articles
<div class="corps">
<p><img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.png" /></p>
<p><img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.jpg" /></p>
<div class="intro">
@ -116,48 +156,6 @@ Avant&nbsp;:</p>
</div>
<h1>
<span class="date">
<span class="day">5</span>
<span class="month">Sep</span>
<span class="year">2011</span>
</span>
<a href="/Scratch/fr/blog/programming-language-experience/">programming language experience <span class="nicer">»</span></a>
</h1>
<div class="corps">
<p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/main.png" /></p>
<div class="intro">
<span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Mon avis sur les différents languages de programmations que j&rsquo;ai utilisé.
</div>
<h3 id="basic">BASIC</h3>
<p>Ah&nbsp;! Le language de mes premiers programmes&nbsp;!
Je devais avoir 10-11 ans.
Sous <code>MO5</code>, <code>Amstrad CPC 6128</code> et même <code>Atari STe</code>.
Le langage des <code>GOTO</code>s.
Je suis empleint de nostalgie rien que d&rsquo;y penser.
C&rsquo;est à peu prêt le seul intérêt de ce langage.</p>
<p>Aujourd&rsquo;hui ce langage est tombé en désuétude.
Ce n&rsquo;est ni un bon langage pour apprendre, ni un bon langage pour faire de vrai prog...</p></p>
<div class="flush"></div>
<div>
<p>
<a href="/Scratch/fr/blog/programming-language-experience/">en lire plus <span class="nicer">»</span></a>
</p>
</div>
</div>
<h1>
<span class="date">
<span class="day">25</span>
@ -294,14 +292,14 @@ Bon, d&rsquo;accord, même si vous ne téléchargez pas mon application vous pou
<h2 id="archives">Archives</h2>
<div id="sousliens" class="archive"><h4 class="button" onclick="$('#archives_2011').slideToggle()">[2011]</h4><ul id="archives_2011"><li><span class="date">
<span class="day">28</span>
<span class="month">Sep</span>
<span class="year">2011</span>
</span> <a href="/Scratch/fr/blog/programming-language-experience/">programming language experience<span class="nicer">»</span></a></li><li><span class="date">
<span class="day">27</span>
<span class="month">Sep</span>
<span class="year">2011</span>
</span> <a href="/Scratch/fr/blog/Higher-order-function-in-zsh/">Higher order function in zsh<span class="nicer">»</span></a></li><li><span class="date">
<span class="day">5</span>
<span class="month">Sep</span>
<span class="year">2011</span>
</span> <a href="/Scratch/fr/blog/programming-language-experience/">programming language experience<span class="nicer">»</span></a></li><li><span class="date">
<span class="day">25</span>
<span class="month">Aoû</span>
<span class="year">2011</span>

View file

@ -39,6 +39,7 @@
<div id="choixlang">
<a href="/Scratch/en/blog/programming-language-experience/" onclick="setLanguage('en')">in English</a>
</div>
<div class="flush"></div>
</div>
<div id="titre">
<h1>
@ -46,7 +47,6 @@
</h1>
</div>
<div class="flush"></div>
@ -56,17 +56,19 @@
<div class="flush"></div>
<div id="afterheader">
<div class="corps">
<p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/main.png" /></p>
<p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/dragon.jpg" /></p>
<div class="intro">
<span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Mon avis sur les différents languages de programmations que j&rsquo;ai utilisé.
<span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Mon avis court et hautement subjectif concernant les différents languages de programmations que j&rsquo;ai utilisé.
</div>
<h3 id="basic">BASIC</h3>
<h3 id="basic"><code>BASIC</code></h3>
<p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/basic.gif" class="left" /></p>
<p>Ah&nbsp;! Le language de mes premiers programmes&nbsp;!
Je devais avoir 10-11 ans.
@ -152,6 +154,8 @@ Mais je préfère largement le C.</p>
<h3 id="c">C</h3>
<p><img alt="Pointer representation from Dancing links" src="/Scratch/img/blog/programming-language-experience/C.jpg" class="left" /></p>
<p>Le langage des pointeurs</p>
<p>Ah, <em>le</em> langage de programmation par excellence. </p>
@ -197,6 +201,8 @@ C&rsquo;est-à-dire un système d&rsquo;information, c&rsquo;est pas trop mal.</
<h3 id="c-1">C++</h3>
<p><img alt="Messy router" src="/Scratch/img/blog/programming-language-experience/cplusplus.jpg" class="left" /></p>
<p>Le malpropre</p>
<p>Et oui l&rsquo;industrie voulait un langage objet, mais elle n&rsquo;é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&rsquo;est qu&rsquo;il fait trop de choses.
L&rsquo;héritage multiple, des templates, etc&hellip;
Bon, je l&rsquo;ai quand même choisi pour faire le plus gros programme que j&rsquo;ai jamais fais lors de ma thèse.
Et je dois avouer que l&rsquo;expérience m&rsquo;a plûe.
Le seul reproche que j&rsquo;ai à faire, c&rsquo;est que la STL n&rsquo;était pas aussi complète que l&rsquo;on aurait pû l&rsquo;espérer pour un détail.
Et je dois avouer que l&rsquo;expérience m&rsquo;a plu.
Le seul reproche que j&rsquo;ai à faire, c&rsquo;est que la <abbr title="Standard Tempate Library">STL</abbr> n&rsquo;était pas aussi complète que l&rsquo;on aurait pu l&rsquo;espérer pour un détail.
On ne peut pas faire de <code>String&lt;T&gt;</code> pour autre chose que des <code>char16</code>.
Du coup, mon alphabet était limité à $2^16$ lettres.
Du coup, mon alphabet était limité à 2<sup>16</sup> lettres.
Hors, pour certaines application, l&rsquo;alphabet doit être gigantesque. </p>
<p>En conclusion je dirai que C++ est un très bon langage si vous vous fixez à l&rsquo;avance un sous ensemble de ses fonctionnalités.</p>
<h3 id="eiffel">Eiffel</h3>
<p><img alt="Eiffel tower construction" src="/Scratch/img/blog/programming-language-experience/eiffel.jpg" class="left" /></p>
<p>Bon, ok c&rsquo;est un très beau langage objet.
Bien plus propre que C++.
Mais, à moins que les choses aient changées, il n&rsquo;est pas très populaire.
@ -222,6 +232,8 @@ Lorsqu&rsquo;on viens du C, il est désagréable de changer ses habitudes.</p>
<h3 id="java">Java</h3>
<p><img alt="Holy Grail from the Monty Python" src="/Scratch/img/blog/programming-language-experience/grail.jpg" class="left" /></p>
<p>On continue vers les langages objets. Alors, à une époque où j&rsquo;en ai entendu parler, c&rsquo;était <em>le Graal</em>&nbsp;! </p>
<p>La portabilité, votre programme marchera partout. Il était orienté objet. Incrusté à l&rsquo;intérieur il y avait des concepts d&rsquo;architecture qui empêchent de faire n&rsquo;importe quoi&hellip; Sauf que.</p>
@ -230,18 +242,20 @@ Lorsqu&rsquo;on viens du C, il est désagréable de changer ses habitudes.</p>
Et que les limitations sont très désagréables si on sait ce que l&rsquo;on fait.</p>
<p>Par exemple, il n&rsquo;y a pas d&rsquo;héritage multiple en Java.
Ce qui est en général un choix que je trouve cohérent s&rsquo;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&rsquo;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&rsquo;ajouter simplement des méthodes à une classe.
En aucun cas on ne peut rajouter un attribut.
Ce qui m&rsquo;a vraiment géner pour faire une interface graphique par exemple.
Typiquement je faisais une GUI en Java Swing, et j&rsquo;avais créé mon propre système de notification entre objets de GUI.
Alors, au début je considérais qu&rsquo;un objet ne devais envoyer des notifications qu&rsquo;à un seul objet.
Les interfaces permettent d&rsquo;ajouter des méthodes à une classe.
En aucun cas on ne peut rajouter un attribut autrement qu&rsquo;en héritant.
Cet état de fait m&rsquo;a vraiment géné.</p>
<p>Typiquement je faisais une <abbr title="Graphic User Interface">GUI</abbr> en Java Swing.
J&rsquo;avais créé mon propre système de notification entre objets.
Au début je considérais qu&rsquo;un objet ne devait envoyer des notifications qu&rsquo;à un seul objet.
Ô quelle erreur lorsque je réalisais qu&rsquo;il fallait non plus gérer un seul objet mais parfois plusieurs.
Je changeais mon implémentation d&rsquo;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.</p>
<p>De plus toujours pour ma GUI, je devais évidemment gérer des threads.
<p>De plus toujours pour ma <abbr title="Graphic User Interface">GUI</abbr>, je devais évidemment gérer des threads.
Hors, il m&rsquo;a fallu faire mon propre système de gestion de threads pour éviter les locks, pour les notifications (ce thread à fini, etc&hellip;).
À l&rsquo;époque j&rsquo;utilisais Java 1.5.
Normallement ce problème devait être réglé sur Java 1.6.
@ -252,17 +266,20 @@ J&rsquo;espère que c&rsquo;est le cas, mais avoir ce type de &ldquo;feature&rdq
<p>Bon, après cette expérience je déconseillerai Java.
La portabilité, n&rsquo;est pas si intéressante que ce qu&rsquo;on pourrait croire.</p>
<p>En ce qui concerne les GUI, portable signifie interface fonctionnelle mais médiocre sur toutes les plateformes.
<p>En ce qui concerne les <abbr title="Graphic User Interface">GUI</abbr>, portable signifie interface fonctionnelle mais médiocre sur toutes les plateformes.
Quelquesoit le système d&rsquo;ailleurs (wxWidget, QT, etc&hellip;).
Donc, pour des applications à distribuer à des tiers, c&rsquo;est à éviter.</p>
<p>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&rsquo;y faire des choses très intéressantes.</p>
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&rsquo;y faire des choses très intéressantes.
Veuillez noter que je n&rsquo;ai pas dit que les programmeurs Java sont de mauvais programmeurs, ce n&rsquo;est pas ce que je pense.</p>
<h3 id="objective-c">Objective-C</h3>
<p><img alt="Xcode Logo" src="/Scratch/img/blog/programming-language-experience/xcode_logo.png" class="left" /></p>
<p>Le langage que je n&rsquo;ai appris et utilisé que pour faire des applications sur les plateformes d&rsquo;Apple<small>&copy;</small>.
J&rsquo;ai appris Objective-C après Python.
Et je dois avouer que j&rsquo;ai eu du mal à m&rsquo;y mettre.
@ -270,7 +287,7 @@ Je n&rsquo;ai pas du tout aimé la syntaxe et pas mal d&rsquo;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&rsquo;est pas le langage qui est la meilleure partie, c&rsquo;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 <abbr title="Graphic User Interface">GUI</abbr>, 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.</p>
<p>Vraiment jusqu&rsquo;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&rsquo;interface graphique.
@ -280,20 +297,27 @@ Je ne peux que vous encourager à vous accrocher à ce langage et de faire un vr
<h3 id="php">PHP</h3>
<p><img alt="A Jacky Touch Car" src="/Scratch/img/blog/programming-language-experience/php.jpg" class="left" /></p>
<p>Le petit langage de script que nous utilisions tous pour faire des sites web à l&rsquo;époque des gifs animées&nbsp;!</p>
<p>Sympatique, mais sans plus. Apparemment il y a eu pas mal de progrès depuis PHP5, un jour peut-être que j&rsquo;y reviendrai. Mais, il a derrière lui une réputation de langage pour les &ldquo;scripts kiddies&rdquo;.
En gros ceux qui ne savent pas coder.
Des trous de sécurité de tous les cotés, etc&hellip;</p>
<p>En réalité, PHP est au niveau d&rsquo;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&rsquo;est un vrai problème.</p>
<p>En réalité, PHP est au niveau d&rsquo;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&rsquo;est un vrai problème.</p>
<p>PHP, reste pour moi le langage de l&rsquo;injection SQL. J&rsquo;en fait encore un peu de temps en temps. Et j&rsquo;ai moi-même dû protéger les accès au SQL pour éviter les injections. Oui, je n&rsquo;ai pas trouvé de librairie toute prête pour protéger les entrées SQL. Je n&rsquo;ai pas beaucoup cherché non plus.</p>
<h3 id="python">Python</h3>
<p>Alors là, attention&nbsp;! Révélation&nbsp;!
Lorsqu&rsquo;on avait l&rsquo;habitude de travailler avec des langages compilé, type C++, Java et qu&rsquo;on passe à Python, on se prend une claque magistrale.
<p><img alt="Python. Do you speak it?" src="/Scratch/img/blog/programming-language-experience/python.jpg" class="left" /></p>
<p>Alors là, attention&nbsp;! Révélation&nbsp;! </p>
<p>Lorsqu&rsquo;on avait l&rsquo;habitude de travailler avec des langages compilé, type C++, Java et qu&rsquo;on passe à Python, on se prend une claque magistrale.
La programmation comme elle doit être faite.
Tout est si naturel, c&rsquo;est <em>magique</em>.
Oui, c&rsquo;est si bien que ça.
@ -369,7 +393,10 @@ Heureusement, en ce qui concerne la syntaxe, on peu pallier à ce problème en u
<h3 id="caml">CamL</h3>
<p>J&rsquo;ai appris CamL à la fac, j&rsquo;avais trouvé cette expérience très interressante. J&rsquo;étais plutôt bon, et j&rsquo;avais les bonnes intuitions mathématiques qui vont avec la programmation fonctionnelle. Mais je dois avouer que je ne l&rsquo;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&rsquo;impression d&rsquo;être un langage pour chercheurs.</p>
<p>J&rsquo;ai appris CamL à la fac, j&rsquo;avais trouvé cette expérience très interressante.
J&rsquo;étais plutôt bon, et j&rsquo;avais les bonnes intuitions mathématiques qui vont avec la programmation fonctionnelle.
Mais je dois avouer que je ne l&rsquo;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&rsquo;impression d&rsquo;être un langage pour chercheurs.</p>
<h3 id="haskell">Haskell</h3>
@ -394,20 +421,32 @@ Alors qu&rsquo;en Java et C++, typiquement certain choix ont été fait en dépi
<h2 id="langages-originaux">Langages originaux</h2>
<p>En plus des langages de programmation proprement dit, il existe des langages dont le seul but et de créer des documents.</p>
<h3 id="metapost">MetaPost</h3>
<h3 id="metapost">Metapost</h3>
<p>Metapost est un langage qui permet de programmer des dessins.
Le gros plus de metapost, c&rsquo;est qu&rsquo;il y a un solveur d&rsquo;é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.</p>
Le gros plus de metapost, c&rsquo;est sa capacité de résoudre automatiquement les systèmes d&rsquo;équations linéaires.
Par exemple, si vous écrivez&nbsp;:</p>
<pre class="twilight">
x<span class="Keyword">=</span>(<span class="Constant">2</span><span class="Keyword">*</span>y<span class="Keyword">+</span>z)<span class="Keyword">/</span><span class="Constant">2</span>
<span class="Variable">AA</span><span class="Keyword">=</span><span class="Constant">1</span><span class="Keyword">/</span><span class="Constant">3</span>[<span class="Variable">A</span>,<span class="Variable">B</span>]
</pre>
<p>Il va position le point <code>AA</code> entre <code>A</code> et <code>B</code>.
Plus précisément, au barycentre <code>(2A + B)/3</code>.</p>
<pre class="twilight">
<span class="Variable">X</span><span class="Keyword">=</span>whatever[<span class="Variable">A</span>,<span class="Variable">B</span>]
<span class="Variable">X</span><span class="Keyword">=</span>whatever[<span class="Variable">C</span>,<span class="Variable">D</span>]
</pre>
<p>Ce deuxième exemple positionne <code>X</code> à l&rsquo;intersection des deux segments <code>AB</code> et <code>CD</code>.
Vous pouvez aussi voir pas mal d&rsquo;<a href="http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html">exemples ici</a>.
You could see <a href="http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html">more example there</a>.</p>
<p>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.</p>
<h3 id="zsh">zsh</h3>
<p>Oui, zsh est un shell.
@ -417,9 +456,10 @@ C&rsquo;est pour l&rsquo;instant le meilleur shell que j&rsquo;ai utilisé. Je l
<h3 id="prolog">Prolog</h3>
<p>Je n&rsquo;ai jamais rien fait de conséquent avec Prolog, mais j&rsquo;ai adoré l&rsquo;utiliser.
<p>Je n&rsquo;ai jamais rien fait de conséquent avec Prolog, mais j&rsquo;ai adoré l&rsquo;apprendre et l&rsquo;utiliser.
J&rsquo;ai eu la chance d&rsquo;apprendre Prolog par <a href="http://alain.colmerauer.free.fr/">Alain Colmerauer</a> lui-même.
C&rsquo;est un langage qui essaye de résoudre les contraintes autant qu&rsquo;il le peut pour vous.
C&rsquo;est assez magique.
Il en ressort un impression de magie.
On ne fait que décrire ce qu&rsquo;il faut et on ne donne pas d&rsquo;ordre.
Un peu comme la programmation fonctionnelle mais en beaucoup plus puissant.</p>
@ -427,13 +467,14 @@ Un peu comme la programmation fonctionnelle mais en beaucoup plus puissant.</p>
<p>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&rsquo;irai voir du LISP, Scala ou Erlang.
Comme je suis plus dans la création de site web, j&rsquo;irai certainement jeter un coup d&rsquo;oeil à clojure aussi.
Peut-être demain que j&rsquo;irai apprendre LISP, Scala ou Erlang.
Comme je suis plus dans la création de site web, j&rsquo;irai certainement jeter un coup d&rsquo;œil à clojure aussi.
Et certainement beaucoup d&rsquo;autres choses.</p>
<p>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.</p>
<p>Dites moi si vous avez une autre expérience avec ces langages de programmation.
Évidement mes impression sont hautement subjectives.
Cependant, j&rsquo;ai utilisé tous les langages dont j&rsquo;ai parlé.</p>
</div>
@ -485,6 +526,11 @@ En tout cas je les ai tous utilisés.</p>
<div id="previous_articles">
articles précédents
<div class="previous_article">
<a href="/Scratch/fr/blog/Higher-order-function-in-zsh/"><span class="nicer">«</span>&nbsp;Higher order function in zsh</a>
</div>
<div class="previous_article">
<a href="/Scratch/fr/blog/Learn-Vim-Progressively/"><span class="nicer">«</span>&nbsp;Apprenez Vim Progressivement</a>
</div>
@ -495,15 +541,10 @@ En tout cas je les ai tous utilisés.</p>
</div>
</div>
<div id="next_articles">
articles suivants
<div class="next_article">
<a href="/Scratch/fr/blog/Higher-order-function-in-zsh/">Higher order function in zsh&nbsp;<span class="nicer">»</span></a>
</div>
@ -518,7 +559,7 @@ En tout cas je les ai tous utilisés.</p>
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.fr">Droits de reproduction ©, Yann Esposito</a>
</div>
<div id="lastmod">
Écrit le : 05/09/2011
Écrit le : 28/09/2011
modifié le : 06/09/2011
</div>
<div>

View file

@ -148,7 +148,7 @@
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.fr">Droits de reproduction ©, Yann Esposito</a>
</div>
<div id="lastmod">
modifié le : 27/09/2011
modifié le : 28/09/2011
</div>
<div>
Site entièrement réalisé avec

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a> </div>
<div id="choixlang"><a href="/Scratch/en/rss/" onclick="setLanguage('en')">in English</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a></div>
<div id="choixlang"><a href="/Scratch/en/rss/" onclick="setLanguage('en')">in English</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<li><a href="/Scratch/fr/blog/">Blog</a></li>
<li><a href="/Scratch/fr/softwares/">Softwares</a></li>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul>
</div>
</div>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a> </div>
<div id="choixlang"><a href="/Scratch/en/softwares/" onclick="setLanguage('en')">in English</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a></div>
<div id="choixlang"><a href="/Scratch/en/softwares/" onclick="setLanguage('en')">in English</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<li><a href="/Scratch/fr/blog/">Blog</a></li>
<li><span class="active" title="You're here.">Softwares</span></li>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul>
</div>
</div>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a> </div>
<div id="choixlang"><a href="/Scratch/en/softwares/yaquabubbles/" onclick="setLanguage('en')">in English</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a></div>
<div id="choixlang"><a href="/Scratch/en/softwares/yaquabubbles/" onclick="setLanguage('en')">in English</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<li><a href="/Scratch/fr/blog/">Blog</a></li>
<li><a href="/Scratch/fr/softwares/">Softwares</a></li>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul>
</div>
</div>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a> </div>
<div id="choixlang"><a href="/Scratch/en/softwares/yclock/" onclick="setLanguage('en')">in English</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a></div>
<div id="choixlang"><a href="/Scratch/en/softwares/yclock/" onclick="setLanguage('en')">in English</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<li><a href="/Scratch/fr/blog/">Blog</a></li>
<li><a href="/Scratch/fr/softwares/">Softwares</a></li>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul>
</div>
</div>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a> </div>
<div id="choixlang"><a href="/Scratch/en/softwares/ypassword/" onclick="setLanguage('en')">in English</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a></div>
<div id="choixlang"><a href="/Scratch/en/softwares/ypassword/" onclick="setLanguage('en')">in English</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<li><a href="/Scratch/fr/blog/">Blog</a></li>
<li><a href="/Scratch/fr/softwares/">Softwares</a></li>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul>
</div>
</div>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a> </div>
<div id="choixlang"><a href="/Scratch/en/softwares/ypassword/iphoneweb/" onclick="setLanguage('en')">in English</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a></div>
<div id="choixlang"><a href="/Scratch/en/softwares/ypassword/iphoneweb/" onclick="setLanguage('en')">in English</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<li><a href="/Scratch/fr/blog/">Blog</a></li>
<li><a href="/Scratch/fr/softwares/">Softwares</a></li>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul>
</div>
</div>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a> </div>
<div id="choixlang"><a href="/Scratch/en/softwares/ypassword/web/" onclick="setLanguage('en')">in English</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a></div>
<div id="choixlang"><a href="/Scratch/en/softwares/ypassword/web/" onclick="setLanguage('en')">in English</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<li><a href="/Scratch/fr/blog/">Blog</a></li>
<li><a href="/Scratch/fr/softwares/">Softwares</a></li>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul>
</div>
</div>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

View file

@ -28,15 +28,14 @@
<div id="entete">
<div id="choix">
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a> </div>
<div id="choixlang"><a href="/Scratch/en/validation/" onclick="setLanguage('en')">in English</a> </div>
<div id="liens">
<ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<div id="choixrss"><a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">s'abonner</a></div>
<div id="choixlang"><a href="/Scratch/en/validation/" onclick="setLanguage('en')">in English</a></div>
<div class="flush"></div>
</div>
<div id="liens"><ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
<li><a href="/Scratch/fr/blog/">Blog</a></li>
<li><a href="/Scratch/fr/softwares/">Softwares</a></li>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul>
</div>
</div>
<li><a href="/Scratch/fr/about/">À propos</a></li></ul></div>
</div>
<img src="/Scratch/img/presentation.png" alt="Presentation drawing"/>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

View file

@ -14,11 +14,11 @@
</url>
<url>
<loc>http://yannesposito.com/Scratch/en/blog/programming-language-experience/</loc>
<lastmod>2011-09-27</lastmod>
<lastmod>2011-09-28</lastmod>
</url>
<url>
<loc>http://yannesposito.com/Scratch/en/blog/Higher-order-function-in-zsh/</loc>
<lastmod>2011-09-27</lastmod>
<lastmod>2011-09-28</lastmod>
</url>
<url>
<loc>http://yannesposito.com/Scratch/fr/blog/</loc>
@ -90,7 +90,7 @@
</url>
<url>
<loc>http://yannesposito.com/Scratch/fr/blog/Higher-order-function-in-zsh/</loc>
<lastmod>2011-09-27</lastmod>
<lastmod>2011-09-28</lastmod>
</url>
<url>
<loc>http://yannesposito.com/Scratch/fr/softwares/ypassword/iphoneweb/</loc>
@ -122,7 +122,7 @@
</url>
<url>
<loc>http://yannesposito.com/Scratch/assets/css/main.css</loc>
<lastmod>2011-09-27</lastmod>
<lastmod>2011-09-28</lastmod>
</url>
<url>
<loc>http://yannesposito.com/Scratch/fr/blog/feed/feed.xml</loc>
@ -162,7 +162,7 @@
</url>
<url>
<loc>http://yannesposito.com/Scratch/fr/blog/programming-language-experience/</loc>
<lastmod>2011-09-27</lastmod>
<lastmod>2011-09-28</lastmod>
</url>
<url>
<loc>http://yannesposito.com/Scratch/en/about/contact/</loc>

View file

@ -188,7 +188,7 @@
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Copyright ©, Yann Esposito</a>
</div>
<div id="lastmod">
Modified: 09/14/2011
Modified: 09/28/2011
</div>
<div>
Entirely done with

1
tasks/convert_images Normal file
View file

@ -0,0 +1 @@
for fic in src/*; do print $fic:t; convert -quality 50 -channel RGBA -matte -colorspace gray $fic $fic:t