diff --git a/content/css/main.css b/content/css/main.css index d63967fb2..ed89193f7 100644 --- a/content/css/main.css +++ b/content/css/main.css @@ -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 diff --git a/content/html/en/blog/Higher-order-function-in-zsh.md b/content/html/en/blog/Higher-order-function-in-zsh.md index 5d77e2457..49ee17278 100644 --- a/content/html/en/blog/Higher-order-function-in-zsh.md +++ b/content/html/en/blog/Higher-order-function-in-zsh.md @@ -8,7 +8,7 @@ author_name: Yann Esposito author_uri: yannesposito.com # tags: ----- -<%= blogimage("main.png","Title image") %> +<%= blogimage("main.jpg","Title image") %> begindiv(intro) @@ -42,6 +42,7 @@ map handle_resources /path/to/projects/*(/N) +Before ⇒ for toProject in Projects/*; do @@ -58,18 +59,85 @@ for toProject in Projects/*; do done -After => +After ⇒ contain_no_s() { print $1 | grep -v s } + function verify_file_name { local project=$1:t contains_project_name() { print $1:t | grep $project } map "print -- X" $(filter contains_project_name $1/*(.N)) } + map show_project_matchin_file $( filter contain_no_s Projects/* ) Also, the first verstion is a bit easier to read. But the second one is clearly far superior in architecture. Why? + + +#!/usr/bin/env zsh + +# Provide higer-order functions + +# usage: +# +# $ foo(){print "x: $1"} +# $ map foo a b c d +# x: a +# x: b +# x: c +# x: d +function map { + local func_name=$1 + shift + for elem in $@; print -- $(eval $func_name $elem) +} + +# $ bar() { print $(($1 + $2)) } +# $ fold bar 0 1 2 3 4 5 +# 15 +# -- but also +# $ fold bar 0 $( seq 1 100 ) +function fold { + if (($#<2)) { + print -- "ERROR fold use at least 2 arguments" >&2 + return 1 + } + if (($#<3)) { + print -- $2 + return 0 + } else { + local acc + local right + local func_name=$1 + local init_value=$2 + local first_value=$3 + shift 3 + right=$( fold $func_name $init_value $@ ) + acc=$( eval "$func_name $first_value $right" ) + print -- $acc + return 0 + } +} + +# usage: +# +# $ baz() { print $1 | grep baz } +# $ filter baz titi bazaar biz +# bazaar +function filter { + local predicate=$1 + local result + typeset -a result + shift + for elem in $@; do + if eval $predicate $elem >/dev/null; then + result=( $result $elem ) + fi + done + print $result +} + diff --git a/content/html/en/blog/programming-language-experience.md b/content/html/en/blog/programming-language-experience.md index 62fc79571..93fb4ac94 100644 --- a/content/html/en/blog/programming-language-experience.md +++ b/content/html/en/blog/programming-language-experience.md @@ -2,20 +2,21 @@ isHidden: false menupriority: 1 kind: article -created_at: 2011-09-05T12:21:41+02:00 +created_at: 2011-09-28T12:21:41+02:00 title: Programming Language Experience author_name: Yann Esposito author_uri: yannesposito.com # tags: ----- -<%= blogimage("main.png","Title image") %> +<%= blogimage("dragon.jpg","Title image") %> begindiv(intro) -<%=tldr%> My feelings about programming languages I used. +<%=tldr%> My short and higly subjective feelings about programming languages I used. enddiv -### BASIC +### `BASIC` +<%= leftblogimage("basic.gif","Title image") %> The language of my firsts programs! I was about 10, with an `MO5` and `Amstrad CPC 6128` and even with my `Atari STe`. This is the language of `GOTO`s. @@ -103,6 +104,8 @@ In the end I prefer C. ### C +<%=leftblogimage("C.jpg","Pointer representation from Dancing links")%> + The language of pointers. _Le_ programming language. @@ -139,7 +142,7 @@ Until here I just described imperatives languages without any object notion. More clearly, the language didn't helped you to structure your program. -In order to limit the number of bugs, particularly for huge programs, we started to thing about how to best organize computer programs. +In order to limit the number of bugs, particularly for huge programs, we started to thin about how to best organize computer programs. In the end, from the imperatives language culture, it produced the Object Oriented programming (OOP). Beware, the Object Oriented programming isn't a miracle. Proof? How many bug-free software do you use? Furthermore, OOP doesn't fit all problems. @@ -151,52 +154,63 @@ Then Object Oriented Languages appeared everywhere. ### C++ +<%=leftblogimage("cplusplus.jpg","Messy router")%> + The ugly Industry wanted an Object Oriented Language without loosing all their old C code. Solution, keep C and add an Object layer on it. The main concern about C++ is it do too many things. -I particularly appreciated multiple inheritage and templates. +I particularly appreciated multiple inheritance and templates. In reality I liked a lot C++ while I was working alone. I used it to write `DEES` my main thesis software. My only concern was about a lack in the STL. In the doc, one could use `String`. But in reality, T have to be only `char` or `char16`. -Then I had to reduce my alphabet to $2^16$ letters. +Then I had to reduce my alphabet to 216 letters. Except for some application, the alphabet must be far larger than that. + +To conclude, I'd say, C++ is very good if you work alone or with a fixed subset of its features. + ### 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: -x=(2*y+z)/2 +AA=1/3[A,B] -It will place the point x at 2/3 of y and 1/3 to z. -This feature is very nice. Most programming language should think about adding it. +It will place the point `AA` between the point `A` and `B`. +More precisely at the barycenter `(2xA + B)/3`. + + +X=whatever[A,B] +X=whatever[C,D] + + +This second example, will place the point X at the intersection of the two segments `AB` and `CD`. + +This feature is very helpful, and not only to draw things. +Most programming language should think about adding it. ### zsh Yes, zsh is a shell. -But it is also a script language extremly well suited to file traitment. +But it is also a script language extremly well suited to file management. For now, it is the best shell I used. I prefer zsh to bash. ### Prolog -I never made somthing serious with Prolog, but I really loved to use and learn it. +I never made something serious with Prolog, but I really loved to use and learn it. +I had the chance to learn Prolog with [Alain Colmerauer](http://alain.colmerauer.free.fr/) himself. This language try to resolve constraints as much as it can. -It is kind of magic. +It has a magic feeling when you use it. We only write constraints, we never put order. -A bit like functionnal programming but far more powerful. +A bit like functional programming but far more powerful. ## Languages to discover -It remains many language and framework to try. +Many languages and framework remains to be learnt and tried. Actually I believe I will stay a while with haskell. -Maybe tomorrow I will see LISP, Scala or Erlang. +Maybe tomorrow I will look at LISP, Scala or Erlang. I also certainly look at clojure to make web application. Tell me if you have any other experience with these programming languages. -I had only given my impressions. -But I used them all. +Of course, my feelings are highly subjectives. +But I used all of these languages. + + +*[STL]: Standard Tempate Library +*[GUI]: Graphic User Interface diff --git a/content/html/fr/blog/Higher-order-function-in-zsh.md b/content/html/fr/blog/Higher-order-function-in-zsh.md index 1b1e2a0e1..e034a4aaf 100644 --- a/content/html/fr/blog/Higher-order-function-in-zsh.md +++ b/content/html/fr/blog/Higher-order-function-in-zsh.md @@ -8,7 +8,7 @@ author_name: Yann Esposito author_uri: yannesposito.com # tags: ----- -<%= blogimage("main.png","Title image") %> +<%= blogimage("main.jpg","Title image") %> begindiv(intro) @@ -55,6 +55,7 @@ Recommençons sur le même principe. Trouver les fichiers des projets qui ne contiennent pas de s dans leur nom qui ont le même nom que leur projet. +Before ⇒ for toProject in Projects/*; do @@ -71,18 +72,85 @@ for toProject in Projects/*; do done -After => +After ⇒ contain_no_s() { print $1 | grep -v s } + function verify_file_name { local project=$1:t contains_project_name() { print $1:t | grep $project } map "print -- X" $(filter contains_project_name $1/*(.N)) } + map show_project_matchin_file $( filter contain_no_s Projects/* ) Also, the first verstion is a bit easier to read. But the second one is clearly far superior in architecture. Why? + + +#!/usr/bin/env zsh + +# Provide higer-order functions + +# usage: +# +# $ foo(){print "x: $1"} +# $ map foo a b c d +# x: a +# x: b +# x: c +# x: d +function map { + local func_name=$1 + shift + for elem in $@; print -- $(eval $func_name $elem) +} + +# $ bar() { print $(($1 + $2)) } +# $ fold bar 0 1 2 3 4 5 +# 15 +# -- but also +# $ fold bar 0 $( seq 1 100 ) +function fold { + if (($#<2)) { + print -- "ERROR fold use at least 2 arguments" >&2 + return 1 + } + if (($#<3)) { + print -- $2 + return 0 + } else { + local acc + local right + local func_name=$1 + local init_value=$2 + local first_value=$3 + shift 3 + right=$( fold $func_name $init_value $@ ) + acc=$( eval "$func_name $first_value $right" ) + print -- $acc + return 0 + } +} + +# usage: +# +# $ baz() { print $1 | grep baz } +# $ filter baz titi bazaar biz +# bazaar +function filter { + local predicate=$1 + local result + typeset -a result + shift + for elem in $@; do + if eval $predicate $elem >/dev/null; then + result=( $result $elem ) + fi + done + print $result +} + diff --git a/content/html/fr/blog/programming-language-experience.md b/content/html/fr/blog/programming-language-experience.md index 5fd127b32..c19780b22 100644 --- a/content/html/fr/blog/programming-language-experience.md +++ b/content/html/fr/blog/programming-language-experience.md @@ -2,20 +2,21 @@ isHidden: false menupriority: 1 kind: article -created_at: 2011-09-05T12:21:41+02:00 +created_at: 2011-09-28T12:21:41+02:00 title: programming language experience author_name: Yann Esposito author_uri: yannesposito.com # tags: ----- -<%= blogimage("main.png","Title image") %> +<%= blogimage("dragon.jpg","Title image") %> begindiv(intro) -<%=tlal%> Mon avis sur les différents languages de programmations que j'ai utilisé. +<%=tlal%> Mon avis court et hautement subjectif concernant les différents languages de programmations que j'ai utilisé. enddiv -### BASIC +### `BASIC` +<%= leftblogimage("basic.gif","Title image") %> Ah ! Le language de mes premiers programmes ! Je devais avoir 10-11 ans. @@ -104,6 +105,8 @@ Mais je préfère largement le C. ### C +<%=leftblogimage("C.jpg","Pointer representation from Dancing links")%> + Le langage des pointeurs Ah, _le_ langage de programmation par excellence. @@ -150,6 +153,8 @@ Donc les langages orientés objets se sont mis à fleurir. ### C++ +<%=leftblogimage("cplusplus.jpg","Messy router")%> + Le malpropre Et oui l'industrie voulait un langage objet, mais elle n'était pas prête à mettre à la poubelle tout ses codes en C. @@ -157,14 +162,19 @@ La solution, prendre C et lui rajouter une couche objet. Le problème avec C++ c'est qu'il fait trop de choses. L'héritage multiple, des templates, etc... Bon, je l'ai quand même choisi pour faire le plus gros programme que j'ai jamais fais lors de ma thèse. -Et je dois avouer que l'expérience m'a plûe. -Le seul reproche que j'ai à faire, c'est que la STL n'était pas aussi complète que l'on aurait pû l'espérer pour un détail. +Et je dois avouer que l'expérience m'a plu. +Le seul reproche que j'ai à faire, c'est que la STL n'était pas aussi complète que l'on aurait pu l'espérer pour un détail. On ne peut pas faire de `String` pour autre chose que des `char16`. -Du coup, mon alphabet était limité à $2^16$ lettres. +Du coup, mon alphabet était limité à 216 lettres. Hors, pour certaines application, l'alphabet doit être gigantesque. +En conclusion je dirai que C++ est un très bon langage si vous vous fixez à l'avance un sous ensemble de ses fonctionnalités. + + ### 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 : -x=(2*y+z)/2 +AA=1/3[A,B] +Il va position le point `AA` entre `A` et `B`. +Plus précisément, au barycentre `(2A + B)/3`. + + +X=whatever[A,B] +X=whatever[C,D] + + +Ce deuxième exemple positionne `X` à l'intersection des deux segments `AB` et `CD`. +Vous pouvez aussi voir pas mal d'[exemples ici](http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html). +You could see [more example there](http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html). + +Cette fonction est très utile. +Et à mon avis pas seulement pour afficher des choses. +De mon point de vue, les autres langages de programmation devraient penser à rajouter les résolutions automatiques simples. ### zsh @@ -372,9 +410,10 @@ C'est pour l'instant le meilleur shell que j'ai utilisé. Je le préfère au bas ### Prolog -Je n'ai jamais rien fait de conséquent avec Prolog, mais j'ai adoré l'utiliser. +Je n'ai jamais rien fait de conséquent avec Prolog, mais j'ai adoré l'apprendre et l'utiliser. +J'ai eu la chance d'apprendre Prolog par [Alain Colmerauer](http://alain.colmerauer.free.fr/) lui-même. C'est un langage qui essaye de résoudre les contraintes autant qu'il le peut pour vous. -C'est assez magique. +Il en ressort un impression de magie. On ne fait que décrire ce qu'il faut et on ne donne pas d'ordre. Un peu comme la programmation fonctionnelle mais en beaucoup plus puissant. @@ -382,10 +421,14 @@ Un peu comme la programmation fonctionnelle mais en beaucoup plus puissant. Il reste encore pas mal de langages et de framework à essayer. Actuellement je pense que je vais passer un moment avec haskell. -Peut-être demain que j'irai voir du LISP, Scala ou Erlang. -Comme je suis plus dans la création de site web, j'irai certainement jeter un coup d'oeil à clojure aussi. +Peut-être demain que j'irai apprendre LISP, Scala ou Erlang. +Comme je suis plus dans la création de site web, j'irai certainement jeter un coup d'œil à clojure aussi. Et certainement beaucoup d'autres choses. -Dites-moi si vous avez une autre expérience avec ces langages de programmation. -Je ne donne que mes impressions. -En tout cas je les ai tous utilisés. +Dites moi si vous avez une autre expérience avec ces langages de programmation. +Évidement mes impression sont hautement subjectives. +Cependant, j'ai utilisé tous les langages dont j'ai parlé. + + +*[STL]: Standard Tempate Library +*[GUI]: Graphic User Interface diff --git a/layouts/article.html b/layouts/article.html index 1b7a722f3..79a31839d 100644 --- a/layouts/article.html +++ b/layouts/article.html @@ -54,6 +54,7 @@ end end.join() %> +

@@ -65,7 +66,6 @@

<% end %>
-
<% if @item[:content_for_summary] %> diff --git a/layouts/default.html b/layouts/default.html index 0f1ca26b1..b2f90b5d0 100644 --- a/layouts/default.html +++ b/layouts/default.html @@ -29,12 +29,11 @@ <% unless @item[:no_entete] %>
-
<%= choixrss %>
-
<%= choixlang %>
-
- <%= generateMenu %> -
+
<%= choixrss %>
+
<%= choixlang %>
+
+
<%= generateMenu %>
<% end %> Presentation drawing diff --git a/multi/blog/Higher-order-function-in-zsh.md b/multi/blog/Higher-order-function-in-zsh.md index 490b5bfad..7e33857ec 100644 --- a/multi/blog/Higher-order-function-in-zsh.md +++ b/multi/blog/Higher-order-function-in-zsh.md @@ -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 ⇒ + # for each directory in projects dir for toProject in /path/to/projects/*(/N); do @@ -34,29 +42,41 @@ for toProject in /path/to/projects/*(/N); do # project become foo (:t for tail) project=${toProject:t} for toResource in $toProject/resources/*.gif(.N); do - convert $toResource ${toResource:r}.png + convert $toResource ${toResource:r}.png && \ \rm -f $toResource done done +en: The `(/N)` means to select only directory and not to crash if there isn't any. +en: The `(.N)` means to select only files and not to crash if there isn't any. + +en: After ⇒ fr: Après gif_to_png() { convert $1 ${1:r}.png && \rm -f $1 } + handle_resources() { map gif_to_png $1/resources/*.gif(.N) } + map handle_resources /path/to/projects/*(/N) +en: No more bloc! +en: It might be a little bit harder to read if you're not used to functional programming notation. +en: But it is more concise and robusts. fr: Plus de bloc ! fr: Oui, c'est un poil plus difficile à lire pour les non initiés. fr: Mais c'est à la fois plus concis et plus robuste. +en: Another example with some tests. fr: Et encore ce code ne possède pas de test. fr: Recommençons sur le même principe. +en: Find all files in project not containing an `s` which their name contains their project name: fr: Trouver les fichiers des projets qui ne contiennent pas de s dans leur nom qui ont le même nom que leur projet. +Before ⇒ for toProject in Projects/*; do @@ -73,18 +93,98 @@ for toProject in Projects/*; do done -After => +After ⇒ contain_no_s() { print $1 | grep -v s } + function verify_file_name { local project=$1:t contains_project_name() { print $1:t | grep $project } map "print -- X" $(filter contains_project_name $1/*(.N)) } + map show_project_matchin_file $( filter contain_no_s Projects/* ) -Also, the first verstion is a bit easier to read. -But the second one is clearly far superior in architecture. -Why? +en: Also, the first verstion is a bit easier to read. +en: But the second one is clearly far superior in architecture. +en: I don't want to argue why here. +en: Just believe me that the functional programming approach is superior. +fr: La première version peu paraître plus facile à lire. +fr: Mais la seconde est plus bien supérieure en terme d'architecture. +fr: Je ne veux pas discuster ici pourquoi c'est mieux. +fr: Je vous demande simplement de me croire quand je dis que l'approche fonctionnelle est supérieure. + +fr: Actuellement il me manque une fonction lambda, si quelqu'un à une idée elle serait la bienvenue. +fr: Je ne sais pas encore comment créer facilement des fonctions anonymes. +en: Actually I lack the lambda operator. +en: If someone has an idea on how to create anonymous functions, just tell me, thanks. + +en: Here is the source code: +fr: Voici le code source : + + +#!/usr/bin/env zsh + +# Provide higer-order functions + +# usage: +# +# $ foo(){print "x: $1"} +# $ map foo a b c d +# x: a +# x: b +# x: c +# x: d +function map { + local func_name=$1 + shift + for elem in $@; print -- $(eval $func_name $elem) +} + +# $ bar() { print $(($1 + $2)) } +# $ fold bar 0 1 2 3 4 5 +# 15 +# -- but also +# $ fold bar 0 $( seq 1 100 ) +function fold { + if (($#<2)) { + print -- "ERROR fold use at least 2 arguments" >&2 + return 1 + } + if (($#<3)) { + print -- $2 + return 0 + } else { + local acc + local right + local func_name=$1 + local init_value=$2 + local first_value=$3 + shift 3 + right=$( fold $func_name $init_value $@ ) + acc=$( eval "$func_name $first_value $right" ) + print -- $acc + return 0 + } +} + +# usage: +# +# $ baz() { print $1 | grep baz } +# $ filter baz titi bazaar biz +# bazaar +function filter { + local predicate=$1 + local result + typeset -a result + shift + for elem in $@; do + if eval $predicate $elem >/dev/null; then + result=( $result $elem ) + fi + done + print $result +} + diff --git a/multi/blog/programming-language-experience.md b/multi/blog/programming-language-experience.md index 589646f88..fa4df7b44 100644 --- a/multi/blog/programming-language-experience.md +++ b/multi/blog/programming-language-experience.md @@ -2,22 +2,23 @@ isHidden: false menupriority: 1 kind: article -created_at: 2011-09-05T12:21:41+02:00 +created_at: 2011-09-28T12:21:41+02:00 en: title: Programming Language Experience fr: title: programming language experience author_name: Yann Esposito author_uri: yannesposito.com # tags: ----- -<%= blogimage("main.png","Title image") %> +<%= blogimage("dragon.jpg","Title image") %> begindiv(intro) -en: <%=tldr%> My feelings about programming languages I used. -fr: <%=tlal%> Mon avis sur les différents languages de programmations que j'ai utilisé. +en: <%=tldr%> My short and higly subjective feelings about programming languages I used. +fr: <%=tlal%> Mon avis court et hautement subjectif concernant les différents languages de programmations que j'ai utilisé. enddiv -### BASIC +### `BASIC` +<%= leftblogimage("basic.gif","Title image") %> en: The language of my firsts programs! en: I was about 10, with an `MO5` and `Amstrad CPC 6128` and even with my `Atari STe`. en: This is the language of `GOTO`s. @@ -133,6 +134,8 @@ fr: Mais je préfère largement le C. ### C +<%=leftblogimage("C.jpg","Pointer representation from Dancing links")%> + en: The language of pointers. fr: Le langage des pointeurs @@ -189,7 +192,7 @@ fr: Bon, oui, le Pascal, le C, le Basic (fortran, Cobol et autres) étaient tous en: More clearly, the language didn't helped you to structure your program. fr: En gros, il n'y avait pas d'aide pour structurer votre code. -en: In order to limit the number of bugs, particularly for huge programs, we started to thing about how to best organize computer programs. +en: In order to limit the number of bugs, particularly for huge programs, we started to thin about how to best organize computer programs. en: In the end, from the imperatives language culture, it produced the Object Oriented programming (OOP). en: Beware, the Object Oriented programming isn't a miracle. Proof? How many bug-free software do you use? en: Furthermore, OOP doesn't fit all problems. @@ -208,6 +211,8 @@ fr: Donc les langages orientés objets se sont mis à fleurir. ### C++ +<%=leftblogimage("cplusplus.jpg","Messy router")%> + fr: Le malpropre en: The ugly @@ -216,25 +221,32 @@ fr: La solution, prendre C et lui rajouter une couche objet. fr: Le problème avec C++ c'est qu'il fait trop de choses. fr: L'héritage multiple, des templates, etc... fr: Bon, je l'ai quand même choisi pour faire le plus gros programme que j'ai jamais fais lors de ma thèse. -fr: Et je dois avouer que l'expérience m'a plûe. -fr: Le seul reproche que j'ai à faire, c'est que la STL n'était pas aussi complète que l'on aurait pû l'espérer pour un détail. +fr: Et je dois avouer que l'expérience m'a plu. +fr: Le seul reproche que j'ai à faire, c'est que la STL n'était pas aussi complète que l'on aurait pu l'espérer pour un détail. fr: On ne peut pas faire de `String` pour autre chose que des `char16`. -fr: Du coup, mon alphabet était limité à $2^16$ lettres. +fr: Du coup, mon alphabet était limité à 216 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`. 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 216 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: -x=(2*y+z)/2 +AA=1/3[A,B] -en: It will place the point x at 2/3 of y and 1/3 to z. -en: This feature is very nice. Most programming language should think about adding it. +fr: Il va position le point `AA` entre `A` et `B`. +fr: Plus précisément, au barycentre `(2A + B)/3`. +en: It will place the point `AA` between the point `A` and `B`. +en: More precisely at the barycenter `(2xA + B)/3`. + + +X=whatever[A,B] +X=whatever[C,D] + + +fr: Ce deuxième exemple positionne `X` à l'intersection des deux segments `AB` et `CD`. +fr: Vous pouvez aussi voir pas mal d'[exemples ici](http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html). +en: This second example, will place the point X at the intersection of the two segments `AB` and `CD`. +fr: You could see [more example there](http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html). + +fr: Cette fonction est très utile. +fr: Et à mon avis pas seulement pour afficher des choses. +fr: De mon point de vue, les autres langages de programmation devraient penser à rajouter les résolutions automatiques simples. +en: This feature is very helpful, and not only to draw things. +en: Most programming language should think about adding it. ### zsh @@ -561,38 +609,44 @@ fr: Mais c'est aussi un langage de script très bien adapté aux traitement de f fr: Je le recommande chaudement. fr: C'est pour l'instant le meilleur shell que j'ai utilisé. Je le préfère au bash. en: Yes, zsh is a shell. -en: But it is also a script language extremly well suited to file traitment. +en: But it is also a script language extremly well suited to file management. en: For now, it is the best shell I used. I prefer zsh to bash. ### Prolog -fr: Je n'ai jamais rien fait de conséquent avec Prolog, mais j'ai adoré l'utiliser. +fr: Je n'ai jamais rien fait de conséquent avec Prolog, mais j'ai adoré l'apprendre et l'utiliser. +fr: J'ai eu la chance d'apprendre Prolog par [Alain Colmerauer](http://alain.colmerauer.free.fr/) lui-même. fr: C'est un langage qui essaye de résoudre les contraintes autant qu'il le peut pour vous. -fr: C'est assez magique. +fr: Il en ressort un impression de magie. fr: On ne fait que décrire ce qu'il faut et on ne donne pas d'ordre. fr: Un peu comme la programmation fonctionnelle mais en beaucoup plus puissant. -en: I never made somthing serious with Prolog, but I really loved to use and learn it. +en: I never made something serious with Prolog, but I really loved to use and learn it. +en: I had the chance to learn Prolog with [Alain Colmerauer](http://alain.colmerauer.free.fr/) himself. en: This language try to resolve constraints as much as it can. -en: It is kind of magic. +en: It has a magic feeling when you use it. en: We only write constraints, we never put order. -en: A bit like functionnal programming but far more powerful. +en: A bit like functional programming but far more powerful. fr: ## Les langages à découvrir en: ## Languages to discover fr: Il reste encore pas mal de langages et de framework à essayer. fr: Actuellement je pense que je vais passer un moment avec haskell. -fr: Peut-être demain que j'irai voir du LISP, Scala ou Erlang. -fr: Comme je suis plus dans la création de site web, j'irai certainement jeter un coup d'oeil à clojure aussi. +fr: Peut-être demain que j'irai apprendre LISP, Scala ou Erlang. +fr: Comme je suis plus dans la création de site web, j'irai certainement jeter un coup d'œil à clojure aussi. fr: Et certainement beaucoup d'autres choses. -en: It remains many language and framework to try. +en: Many languages and framework remains to be learnt and tried. en: Actually I believe I will stay a while with haskell. -en: Maybe tomorrow I will see LISP, Scala or Erlang. +en: Maybe tomorrow I will look at LISP, Scala or Erlang. en: I also certainly look at clojure to make web application. -fr: Dites-moi si vous avez une autre expérience avec ces langages de programmation. -fr: Je ne donne que mes impressions. -fr: En tout cas je les ai tous utilisés. +fr: Dites moi si vous avez une autre expérience avec ces langages de programmation. +fr: Évidement mes impression sont hautement subjectives. +fr: Cependant, j'ai utilisé tous les langages dont j'ai parlé. en: Tell me if you have any other experience with these programming languages. -en: I had only given my impressions. -en: But I used them all. +en: Of course, my feelings are highly subjectives. +en: But I used all of these languages. + + +*[STL]: Standard Tempate Library +*[GUI]: Graphic User Interface diff --git a/output/Scratch/assets/css/main.css b/output/Scratch/assets/css/main.css index 8a7dac410..0c1ae7bc3 100644 --- a/output/Scratch/assets/css/main.css +++ b/output/Scratch/assets/css/main.css @@ -1 +1 @@ -*{transition-property:all;transition-duration:.5s;-moz-transition-property:all;-moz-transition-duration:.5s;-webkit-transition-property:all;-webkit-transition-duration:.5s;-o-transition-property:all;-o-transition-duration:.5s}table.description tr td{border:1px solid#eee}.assombris20{background-color:#eee}body{color:#333;background-color:#fafafa}#content{color:#333;background-color:#fafafa}a:hover{text-shadow:0 0 2px#faa}a,a:link,a:visited,a:active,a:hover,#clickcomment{text-decoration:none;outline:none}a,a:link,a:visited,a:active,#clickcomment{color:#333}a:hover,#clickcomment:hover{color:#a53}hr{color:#eee;border-top:1px solid#eee;border-bottom:none;border-left:none;border-right:none}ul{list-style:square}ol,ul{padding-left:0}ol li,ul li{margin:.5em 0}ol li ul,ol li ol,ul li ol,ul li ul{margin:.5em 1.5em;list-style:circle}body,h1,h2,h3,h4,#entete,.tag{font-family:Georgia,Palatino,"Century Schoolbook L","Times New Roman",Times,serif;line-height:1.4em}pre{background-color:#333;color:#fafafa;box-shadow:0 0 1em black inset;-webkit-box-shadow:0 0 1em black inset;border-radius:3px;padding:1em;line-height:1.2em}pre -moz,pre -webkit{border-radius:3px}pre,code{font-family:monaco,monospace;font-size:.7em}p code{font-family:monospace;font-size:1em}p{margin-bottom:1.2em}blockquote{font-style:italic;padding:.5em 1em;color:#555;background-color:#f2f2f2;border:1px solid#ccc}blockquote a:hover{color:#a53}blockquote strong,blockquote b,blockquote i,blockquote em{font-weight:400;font-style:normal;color:#333}abbr,acronym{font-variant:small-caps;text-decoration:none;border-bottom-width:0}#titre{letter-spacing:-0.06em;border-bottom:4px double#ccc;border-top:4px double#ccc}#liens .active,#sousliens{color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}#liens .active a,#sousliens a{color:#666}#liens .active a:hover,#sousliens a:hover{color:#a53}#liens .active a:hover strong,#liens .active a:hover b,#liens .active a:hover i,#liens .active a:hover em,#liens .active a:hover .nicer,#sousliens a:hover strong,#sousliens a:hover b,#sousliens a:hover i,#sousliens a:hover em,#sousliens a:hover .nicer{color:#fb9}#liens .active hr,#sousliens hr{color:#666;border-top:1px solid#666}#liens .active strong,#liens .active b,#liens .active i,#liens .active em,#sousliens strong,#sousliens b,#sousliens i,#sousliens em{color:#333}#liens a{border:1px solid#eee;background:rgba(0,0,0,0.05);box-shadow:0 0 2px white,0 0 3px#ccc inset;-webkit-box-shadow:0 0 2px white,0 0 3px#ccc inset;border:1px solid rgba(0,0,0,0.1);border-radius:3px}#liens a:hover{background:rgba(0,0,0,0.1);box-shadow:0 0 6px#555 inset;-webkit-box-shadow:0 0 6px#555 inset}#liens .active{text-shadow:0 0 2px rgba(0,0,0,0.5);background-color:#f7f7f7;border:1px solid #e9e9e9;box-shadow:0 0 3px #c7c7c7 inset;-webkit-box-shadow:0 0 3px #c7c7c7 inset;border-radius:3px;border-top:none}#lastmod{font-size:.8em}.nojsbutton{font-size:2.5em}#clickcomment{cursor:pointer;font-size:1.2em;line-height:4em;margin:1em;background:rgba(0,0,0,0.05);box-shadow:0 0 2px white,0 0 3px#ccc inset;-webkit-box-shadow:0 0 2px white,0 0 3px#ccc inset;border:1px solid rgba(0,0,0,0.1);border-radius:3px}#clickcomment:hover{background:rgba(0,0,0,0.1);box-shadow:0 0 6px#555 inset;-webkit-box-shadow:0 0 6px#555 inset}.small{font-size:.8em}.sc{font-variant:small-caps}.impact,.darkimpact{font-size:2em;margin:0 auto 1em auto;line-height:1.3em}h1 > .date{font-size:.6em;color:#333}.date{font-size:.8em;color:#fafafa;border:1px solid#333;text-align:center;width:4.1em;line-height:1.5em;display:inline-block;vertical-align:middle;margin-right:1em}.date .day,.date .month,.date .year{display:block}.date .day{color:#333;background-color:#fafafa;float:left;width:1.7em}.date .month{float:right;width:2.3em;background-color:#333;color:#fafafa}.date .year{line-height:3ex;clear:both;color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}.date .year a{color:#666}.date .year a:hover{color:#a53}.date .year a:hover strong,.date .year a:hover b,.date .year a:hover i,.date .year a:hover em,.date .year a:hover .nicer{color:#fb9}.date .year hr{color:#666;border-top:1px solid#666}.date .year strong,.date .year b,.date .year i,.date .year em{color:#333}body{text-align:center;font-size:1em}body > #entete{position:absolute;left:0;top:.5em;width:100%;min-width:50em;z-index:8000;padding-bottom:1em;margin-bottom:3em}body > #content > #entete > #choix > #choixrss > #rss{font-size:1em}#titre h2{width:80%;margin-left:auto;margin-right:auto;text-align:center;color:#ccc}#titre{text-align:center;width:100%}#titre h1,#titre h2{padding-left:1em;padding-right:1em}#bottom{clear:right;margin-right:0;padding:1.5em;line-height:1.5em;color:#ccc;margin-top:2em;text-align:center}#bottom a{color:#ccc}#bottom a:hover{color:#a53}#sousliens{padding:1em 0;line-height:2em}#sousliens ul{list-style:none;margin-left:4em}ul.horizontal li{display:inline;font-size:.9em}ul.horizontal{margin-top:0;margin-bottom:0}#entete{padding-top:.1em;border-top:1px solid#ccc;border-bottom:1px solid#ccc}#liens{width:100%;padding:0;clear:both;margin-top:.5em}#liens ul{width:100%;clear:both;padding:0;margin:0}#liens ul li{display:inline-block;height:4em;margin-left:.2em;margin-right:.2em;width:23%}#liens ul li a,#liens ul li span{width:100%;display:block;line-height:4em}.clear{clear:both}#content{line-height:4em;margin-left:auto;margin-right:auto;margin-top:0;position:relative;clear:both;width:52em}#content > #choix{margin-top:1em}.encadre,.black,.red,.intro,.resume,.shadow{padding:2em;margin-top:2em;margin-bottom:2em}.encadre,.black,.red,.shadow{color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}.encadre a,.black a,.red a,.shadow a{color:#666}.encadre a:hover,.black a:hover,.red a:hover,.shadow a:hover{color:#a53}.encadre a:hover strong,.encadre a:hover b,.encadre a:hover i,.encadre a:hover em,.encadre a:hover .nicer,.black a:hover strong,.black a:hover b,.black a:hover i,.black a:hover em,.black a:hover .nicer,.red a:hover strong,.red a:hover b,.red a:hover i,.red a:hover em,.red a:hover .nicer,.shadow a:hover strong,.shadow a:hover b,.shadow a:hover i,.shadow a:hover em,.shadow a:hover .nicer{color:#fb9}.encadre hr,.black hr,.red hr,.shadow hr{color:#666;border-top:1px solid#666}.encadre strong,.encadre b,.encadre i,.encadre em,.black strong,.black b,.black i,.black em,.red strong,.red b,.red i,.red em,.shadow strong,.shadow b,.shadow i,.shadow em{color:#333}.intro,.resume{font-size:.9em;font-style:italic;padding:.5em 1em;color:#555}.intro a:hover,.resume a:hover{color:#a53}.intro strong,.intro b,.intro i,.intro em,.resume strong,.resume b,.resume i,.resume em{font-weight:400;font-style:normal;color:#333}#afterheader > h1{width:100%;padding-top:1.5em;text-align:left}#afterheader{padding-left:0;padding-right:0}#sousliens{margin-top:3em;margin-bottom:3em;font-size:1.2em;letter-spacing:1px;text-align:left;clear:both}.twilight{line-height:1.1em}.corps{font-family:Georgia,Palatino,"Century Schoolbook L","Times New Roman",Times,serif;font-size:1.25em;line-height:1.6em;text-align:justify;text-align:left;padding:3em 3em;margin:0;border-bottom:1px#ccc solid;clear:both}.corps img{max-width:30em;border:1px solid#ccc;background-color:#fafafa;padding:.5em;box-shadow:0 10px 15px#ccc;-webkit-box-shadow:0 10px 15px#ccc;border-radius:3px}img.clean{border:none}#address{clear:both}.definitionCell{width:5em;vertical-align:top;font-weight:700;text-align:center}.valueCell{text-align:right}.smallblock{float:left;width:50%;font-size:1em;font-weight:700}.largeblock{float:right;width:70%;font-size:1em}#blackpage,#nojsredirect{top:0;left:0;width:100%;height:100%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:fixed;text-align:center}#blackpage{color:#666;padding-top:10em;background-color:#eee;z-index:9000;cursor:wait}#blackpage img{background:none;border:none}#blackpage a{cursor:pointer}#nojsredirect{z-index:9001}.nojsbutton{width:50%;padding:1em;border:solid 3px white;margin-left:auto;margin-right:auto;margin-top:2em;z-index:9002}.file{font-size:.8em;text-align:right;padding-right:1em;margin-right:.1;margin-bottom:0;background:#333}.file a{color:#fafafa}.flush{clear:both}table.description{border-spacing:5px;border-collapse:separate;margin-right:auto;margin-left:auto}table.description tr td{padding-left:.5em;padding-right:.5em;padding-top:.5ex;padding-bottom:.5ex;vertical-align:middle;margin-right:5px}ul.long li{margin-bottom:1em}img{display:block;margin-left:auto;margin-right:auto;background:none;border:none}img.left{float:left;max-width:30%;margin-right:1em}img.inside{display:inline;vertical-align:middle}pre overflow{y:hidden;x:auto}.withfile pre{margin-top:0;overflow:hidden}.navigationprev,.navigationnext{padding:0;margin-left:.2em;margin-right:.2em;margin-bottom:0;margin-top:3em;width:45%}.navigation .navigationprev,.navigation .navigationnext{width:30%;margin-top:0}.navigation{height:4em;border-bottom:#ccc solid 1px}.presarticleleft,.presarticleright{font-size:1em}.navigationprev{float:left;text-align:left}.navigationnext{float:right;text-align:right}.impact,.darkimpact{text-align:left;width:66%;padding-left:.25em;padding-right:.25em}table.impact{text-align:left}table.impact tr td{padding-left:.25em;padding-right:.25em}#liens{font-size:1.2em}#iemessage{font-size:1.2em}.tag{display:inline;cursor:pointer;margin-left:.5em;margin-right:.5em}.list{margin-top:3em}#menuMessage{font-size:1.2em;line-height:1.5em;width:100%;text-align:center}#choixrss{float:right;width:25%;line-height:2em;margin:1em}#choixlang{line-height:2em;margin:1em}#choix a{color:#888}#choix a:hover{color:#a53}#choixlang a{display:block;width:25%;line-height:4em;text-align:center;background:rgba(0,0,0,0.05);box-shadow:0 0 2px white,0 0 3px#ccc inset;-webkit-box-shadow:0 0 2px white,0 0 3px#ccc inset;border:1px solid rgba(0,0,0,0.1);border-radius:3px}#choixlang a:hover{background:rgba(0,0,0,0.1);box-shadow:0 0 6px#555 inset;-webkit-box-shadow:0 0 6px#555 inset}#choix a{background:rgba(0,0,0,0.05);box-shadow:0 0 2px white,0 0 3px#ccc inset;-webkit-box-shadow:0 0 2px white,0 0 3px#ccc inset;border:1px solid rgba(0,0,0,0.1);border-radius:3px}#choix a:hover{background:rgba(0,0,0,0.1);box-shadow:0 0 6px#555 inset;-webkit-box-shadow:0 0 6px#555 inset}#next_before_articles{clear:both;width:100%;font-size:1.2em;padding-top:1em;padding-bottom:1em}#previous_articles,#next_articles{color:#888;font-style:italic;font-size:.8em}#previous_articles{float:left;margin-left:1em;width:45%;text-align:left}.previous_article,.next_article{margin-top:1em}#next_articles{float:right;width:45%;margin-right:1em;text-align:right}#clickcomment{margin-left:0;width:25%}#rss{font-size:1.2em;text-align:center;display:block;width:100%;float:right;padding:1em .1em}.return a{text-align:center;float:right;width:25%}.corps .return a{color:#eee;padding:.1em;line-height:1.5em;font-size:1.5em;height:1.5em;float:left;font-size:2em;margin-top:-0.5em;margin-left:-2em;width:1.5em}a.return{color:#eee;padding:.1em;line-height:1.5em;font-size:1.5em;height:1.5em;font-size:2em;width:1.5em;display:block}a.return:hover{color:#888}.corps .return a:hover{color:#a53}.footnotes{font-size:.8em}.fontnotes ol{margin-left:0}.typeset img{display:inline;border:none;margin:0;padding:0}strong,b,i,em{font-weight:400;color:#888}strong a,b a,i a,em a{color:#333}strong a:hover,b a:hover,i a:hover,em a:hover{color:#a53}.corps p strong,.corps p b,.corps p i,.corps p em{color:#555}a:hover strong,a:hover b,a:hover i,a:hover em{color:#e25f2f}a:hover .nicer{color:#fb9}.nicer{color:#ccc;font-family:"Lucida Grande",Tahoma}.block{width:31%;text-align:left;line-height:1em;margin-left:1%;margin-right:1%;font-size:.8em}.block a{color:#333}.block a:hover{color:#a53}.block h3{margin:0;font-size:1.3em}.block p{line-height:1.2em}.left{float:left}.right{float:right}.corps p a,.corps ul a{color:#555}.corps p a:hover,.corps ul a:hover{color:#a53}ul.bloglist,.archive ul{list-style-type:none;margin:0}ul.bloglist li,.archive ul li{margin-bottom:1em}.button{cursor:pointer;text-align:center}#tagcloud{font-size:.8em;background:#eee;box-shadow:0 0 6px#ccc;-webkit-box-shadow:0 0 6px#ccc;border-radius:3px;line-height:2.5em;padding:2em} \ No newline at end of file +*{transition-property:all;transition-duration:.5s;-moz-transition-property:all;-moz-transition-duration:.5s;-webkit-transition-property:all;-webkit-transition-duration:.5s;-o-transition-property:all;-o-transition-duration:.5s}table.description tr td{border:1px solid#eee}.assombris20{background-color:#eee}body{color:#333;background-color:#fafafa}#content{color:#333;background-color:#fafafa}a:hover{text-shadow:0 0 2px#faa}a,a:link,a:visited,a:active,a:hover{text-decoration:none;outline:none}a,a:link,a:visited,a:active{color:#333}a:hover{color:#a53}hr{color:#eee;border-top:1px solid#eee;border-bottom:none;border-left:none;border-right:none}ul{list-style:square}ol,ul{padding-left:0}ol li,ul li{margin:.5em 0}ol li ul,ol li ol,ul li ol,ul li ul{margin:.5em 1.5em;list-style:circle}body,h1,h2,h3,h4,#entete,.tag{font-family:Georgia,Palatino,"Century Schoolbook L","Times New Roman",Times,serif;line-height:1.4em}pre{background-color:#333;color:#fafafa;box-shadow:0 0 1em black inset;border-radius:3px;padding:1em;line-height:1.2em}pre,code{font-family:monaco,monospace;font-size:.7em}p code{font-family:monospace;font-size:1em}p{margin-bottom:1.2em}blockquote{font-style:italic;padding:.5em 1em;color:#555;background-color:#f2f2f2;border:1px solid#ccc}blockquote a:hover{color:#a53}blockquote strong,blockquote b,blockquote i,blockquote em{font-weight:400;font-style:normal;color:#333}abbr,acronym{font-variant:small-caps;text-decoration:none;border-bottom-width:0}#titre{letter-spacing:-0.06em;border-bottom:4px double#ccc;border-top:4px double#ccc}#liens .active,#sousliens{color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}#liens .active a,#sousliens a{color:#666}#liens .active a:hover,#sousliens a:hover{color:#a53}#liens .active a:hover strong,#liens .active a:hover b,#liens .active a:hover i,#liens .active a:hover em,#liens .active a:hover .nicer,#sousliens a:hover strong,#sousliens a:hover b,#sousliens a:hover i,#sousliens a:hover em,#sousliens a:hover .nicer{color:#fb9}#liens .active hr,#sousliens hr{color:#666;border-top:1px solid#666}#liens .active strong,#liens .active b,#liens .active i,#liens .active em,#sousliens strong,#sousliens b,#sousliens i,#sousliens em{color:#333}#liens a{border:1px solid#eee;background:rgba(0,0,0,0.05);box-shadow:0 0 2px white,0 0 3px#ccc inset;border:1px solid rgba(0,0,0,0.1);border-radius:3px}#liens a:hover{background:rgba(0,0,0,0.1);box-shadow:0 0 6px#555 inset}#liens .active{text-shadow:0 0 2px rgba(0,0,0,0.5);background-color:#f7f7f7;border:1px solid #e9e9e9;box-shadow:0 0 3px #c7c7c7 inset;border-radius:3px;border-top:none}#lastmod{font-size:.8em}.nojsbutton{font-size:2.5em}#clickcomment,#choixlang > a,#choixrss > a,.return > a{display:block;width:25%;cursor:pointer;margin:1em 0;padding:1em;font-size:16px;line-height:1.4em;border-radius:1.5em;background:rgba(0,0,0,0.05);box-shadow:0 3px 3px rgba(255,255,255,0.5) inset,0 -3px 3px rgba(0,0,0,0.2) inset,0 1px 2px rgba(0,0,0,0.5)}#clickcomment:hover,#choixlang > a:hover,#choixrss > a:hover,.return > a:hover{background:rgba(0,0,0,0.1);box-shadow:0 3px 3px rgba(255,255,255,0.5) inset,0 -3px 3px rgba(0,0,0,0.2) inset,0 1px 5px rgba(60,30,0,0.8)}#clickcomment:active,#choixlang > a:active,#choixrss > a:active,.return > a:active{background:rgba(0,0,0,0.2);box-shadow:0 3px 3px rgba(255,255,255,0.5) inset,0 -3px 3px rgba(0,0,0,0.2) inset,0 1px 5px rgba(60,30,0,0.8)}.return > a,#choixrss > a{float:right}#choix .return > a,#choix #choixrss > a{margin-top:0}.small{font-size:.8em}.sc{font-variant:small-caps}.impact,.darkimpact{font-size:2em;margin:0 auto 1em auto;line-height:1.3em}h1 > .date{font-size:.6em;color:#333}.date{font-size:.8em;color:#fafafa;border:1px solid#333;text-align:center;width:4.1em;line-height:1.5em;display:inline-block;vertical-align:middle;margin-right:1em}.date .day,.date .month,.date .year{display:block}.date .day{color:#333;background-color:#fafafa;float:left;width:1.7em}.date .month{float:right;width:2.3em;background-color:#333;color:#fafafa}.date .year{line-height:3ex;clear:both;color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}.date .year a{color:#666}.date .year a:hover{color:#a53}.date .year a:hover strong,.date .year a:hover b,.date .year a:hover i,.date .year a:hover em,.date .year a:hover .nicer{color:#fb9}.date .year hr{color:#666;border-top:1px solid#666}.date .year strong,.date .year b,.date .year i,.date .year em{color:#333}body{text-align:center;font-size:1em}body > #entete{position:absolute;left:0;top:.5em;width:100%;min-width:50em;z-index:8000;padding-bottom:1em;margin-bottom:3em}#titre h2{width:80%;margin-left:auto;margin-right:auto;text-align:center;color:#ccc}#titre{text-align:center;width:100%}#titre h1,#titre h2{padding-left:1em;padding-right:1em}#bottom{clear:right;margin-right:0;padding:1.5em;line-height:1.5em;color:#ccc;margin-top:2em;text-align:center}#bottom a{color:#ccc}#bottom a:hover{color:#a53}#sousliens{padding:1em 0;line-height:2em}#sousliens ul{list-style:none;margin-left:4em}ul.horizontal li{display:inline;font-size:.9em}ul.horizontal{margin-top:0;margin-bottom:0}#entete{padding-top:.1em;border-top:1px solid#ccc;border-bottom:1px solid#ccc}#liens{width:100%;padding:0;clear:both;margin-top:.5em}#liens ul{width:100%;clear:both;padding:0;margin:0}#liens ul li{display:inline-block;height:4em;margin-left:.2em;margin-right:.2em;width:23%}#liens ul li a,#liens ul li span{width:100%;display:block;line-height:4em}.clear{clear:both}#content{line-height:4em;margin-left:auto;margin-right:auto;margin-top:0;position:relative;clear:both;width:52em}.encadre,.black,.red,.intro,.resume,.shadow{padding:2em;margin-top:2em;margin-bottom:2em}.encadre,.black,.red,.shadow{color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}.encadre a,.black a,.red a,.shadow a{color:#666}.encadre a:hover,.black a:hover,.red a:hover,.shadow a:hover{color:#a53}.encadre a:hover strong,.encadre a:hover b,.encadre a:hover i,.encadre a:hover em,.encadre a:hover .nicer,.black a:hover strong,.black a:hover b,.black a:hover i,.black a:hover em,.black a:hover .nicer,.red a:hover strong,.red a:hover b,.red a:hover i,.red a:hover em,.red a:hover .nicer,.shadow a:hover strong,.shadow a:hover b,.shadow a:hover i,.shadow a:hover em,.shadow a:hover .nicer{color:#fb9}.encadre hr,.black hr,.red hr,.shadow hr{color:#666;border-top:1px solid#666}.encadre strong,.encadre b,.encadre i,.encadre em,.black strong,.black b,.black i,.black em,.red strong,.red b,.red i,.red em,.shadow strong,.shadow b,.shadow i,.shadow em{color:#333}.intro,.resume{font-size:.9em;font-style:italic;padding:.5em 1em;color:#555}.intro a:hover,.resume a:hover{color:#a53}.intro strong,.intro b,.intro i,.intro em,.resume strong,.resume b,.resume i,.resume em{font-weight:400;font-style:normal;color:#333}#afterheader > h1{width:100%;padding-top:1.5em;text-align:left}#afterheader{padding-left:0;padding-right:0}#sousliens{margin-top:3em;margin-bottom:3em;font-size:1.2em;letter-spacing:1px;text-align:left;clear:both}.twilight{line-height:1.1em}.corps{font-family:Georgia,Palatino,"Century Schoolbook L","Times New Roman",Times,serif;font-size:1.25em;line-height:1.6em;text-align:justify;text-align:left;padding:3em 3em;margin:0;border-bottom:1px#ccc solid;clear:both}.corps img{max-width:30em;border:1px solid#ccc;background-color:#fafafa;padding:.5em;box-shadow:0 10px 15px#ccc;border-radius:3px}img.clean{border:none}#address{clear:both}.definitionCell{width:5em;vertical-align:top;font-weight:700;text-align:center}.valueCell{text-align:right}.smallblock{float:left;width:50%;font-size:1em;font-weight:700}.largeblock{float:right;width:70%;font-size:1em}#blackpage,#nojsredirect{top:0;left:0;width:100%;height:100%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:fixed;text-align:center}#blackpage{color:#666;padding-top:10em;background-color:#eee;z-index:9000;cursor:wait}#blackpage img{background:none;border:none}#blackpage a{cursor:pointer}#nojsredirect{z-index:9001}.nojsbutton{width:50%;padding:1em;border:solid 3px white;margin-left:auto;margin-right:auto;margin-top:2em;z-index:9002}.file{font-size:.8em;text-align:right;padding-right:1em;margin-right:.1;margin-bottom:0;background:#333}.file a{color:#fafafa}.flush{clear:both}table.description{border-spacing:5px;border-collapse:separate;margin-right:auto;margin-left:auto}table.description tr td{padding-left:.5em;padding-right:.5em;padding-top:.5ex;padding-bottom:.5ex;vertical-align:middle;margin-right:5px}ul.long li{margin-bottom:1em}img{display:block;margin-left:auto;margin-right:auto;background:none;border:none}img.left{float:left;max-width:30%;margin-right:1em}img.inside{display:inline;vertical-align:middle}pre overflow{y:hidden;x:auto}.withfile pre{margin-top:0;overflow:hidden}.navigationprev,.navigationnext{padding:0;margin-left:.2em;margin-right:.2em;margin-bottom:0;margin-top:3em;width:45%}.navigation .navigationprev,.navigation .navigationnext{width:30%;margin-top:0}.navigation{height:4em;border-bottom:#ccc solid 1px}.presarticleleft,.presarticleright{font-size:1em}.navigationprev{float:left;text-align:left}.navigationnext{float:right;text-align:right}.impact,.darkimpact{text-align:left;width:66%;padding-left:.25em;padding-right:.25em}table.impact{text-align:left}table.impact tr td{padding-left:.25em;padding-right:.25em}#liens{font-size:1.2em}#iemessage{font-size:1.2em}.tag{display:inline;cursor:pointer;margin-left:.5em;margin-right:.5em}.list{margin-top:3em}#menuMessage{font-size:1.2em;line-height:1.5em;width:100%;text-align:center}#next_before_articles{clear:both;width:100%;font-size:1.2em;padding-top:1em;padding-bottom:1em}#previous_articles,#next_articles{color:#888;font-style:italic;font-size:.8em}#previous_articles{float:left;margin-left:1em;width:45%;text-align:left}.previous_article,.next_article{margin-top:1em}#next_articles{float:right;width:45%;margin-right:1em;text-align:right}#rss{font-size:1.2em;text-align:center;display:block;width:100%;float:right;padding:1em .1em}.corps .return a{color:#eee;padding:.1em;line-height:1.5em;font-size:1.5em;height:1.5em;float:left;font-size:2em;margin-top:-0.5em;margin-left:-2em;width:1.5em}a.return{color:#eee;padding:.1em;line-height:1.5em;font-size:1.5em;height:1.5em;font-size:2em;width:1.5em;display:block}a.return:hover{color:#888}.corps .return a:hover{color:#a53}.footnotes{font-size:.8em}.fontnotes ol{margin-left:0}.typeset img{display:inline;border:none;margin:0;padding:0}strong,b,i,em{font-weight:400;color:#888}strong a,b a,i a,em a{color:#333}strong a:hover,b a:hover,i a:hover,em a:hover{color:#a53}.corps p strong,.corps p b,.corps p i,.corps p em{color:#555}a:hover strong,a:hover b,a:hover i,a:hover em{color:#e25f2f}a:hover .nicer{color:#fb9}.nicer{color:#ccc;font-family:"Lucida Grande",Tahoma}.block{width:31%;text-align:left;line-height:1em;margin-left:1%;margin-right:1%;font-size:.8em}.block a{color:#333}.block a:hover{color:#a53}.block h3{margin:0;font-size:1.3em}.block p{line-height:1.2em}.left{float:left}.right{float:right}.corps p a,.corps ul a{color:#555}.corps p a:hover,.corps ul a:hover{color:#a53}ul.bloglist,.archive ul{list-style-type:none;margin:0}ul.bloglist li,.archive ul li{margin-bottom:1em}.button{cursor:pointer;text-align:center}#tagcloud{font-size:.8em;background:#eee;box-shadow:0 0 6px#ccc;border-radius:3px;line-height:2.5em;padding:2em} \ No newline at end of file diff --git a/output/Scratch/en/about/contact/index.html b/output/Scratch/en/about/contact/index.html index 8f470f45a..d20d855ea 100644 --- a/output/Scratch/en/about/contact/index.html +++ b/output/Scratch/en/about/contact/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/en/about/cv/index.html b/output/Scratch/en/about/cv/index.html index 5136acac7..d81e2bb1a 100644 --- a/output/Scratch/en/about/cv/index.html +++ b/output/Scratch/en/about/cv/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/en/about/index.html b/output/Scratch/en/about/index.html index 759f496e9..724e540ca 100644 --- a/output/Scratch/en/about/index.html +++ b/output/Scratch/en/about/index.html @@ -28,15 +28,14 @@
+
  • About
  • Presentation drawing diff --git a/output/Scratch/en/about/old/index.html b/output/Scratch/en/about/old/index.html index 6796200a1..c73446689 100644 --- a/output/Scratch/en/about/old/index.html +++ b/output/Scratch/en/about/old/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/en/about/technical_details/index.html b/output/Scratch/en/about/technical_details/index.html index 12b69deb3..ce28768cb 100644 --- a/output/Scratch/en/about/technical_details/index.html +++ b/output/Scratch/en/about/technical_details/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/en/blog/Higher-order-function-in-zsh/code/functional.sh b/output/Scratch/en/blog/Higher-order-function-in-zsh/code/functional.sh new file mode 100644 index 000000000..5e3900291 --- /dev/null +++ b/output/Scratch/en/blog/Higher-order-function-in-zsh/code/functional.sh @@ -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 +} diff --git a/output/Scratch/en/blog/Higher-order-function-in-zsh/index.html b/output/Scratch/en/blog/Higher-order-function-in-zsh/index.html index 43e7dd88c..c1ac74b39 100644 --- a/output/Scratch/en/blog/Higher-order-function-in-zsh/index.html +++ b/output/Scratch/en/blog/Higher-order-function-in-zsh/index.html @@ -39,6 +39,7 @@ +

    @@ -46,7 +47,6 @@

    -
    @@ -56,7 +56,7 @@
    -

    Title image

    +

    Title image

    @@ -87,6 +87,8 @@ map handle_resources /path/to/projects/*(/N) +

    Before ⇒

    +
     for toProject in Projects/*; do
         project=$toProject:t
    @@ -102,15 +104,17 @@ map handle_resources /path/to/projects/*(/N)
     done
     
    -

    After =>

    +

    After ⇒

     contain_no_s() { print $1 | grep -v s }
    +
     function verify_file_name {                               
         local project=$1:t
         contains_project_name() { print $1:t | grep $project }
         map "print -- X" $(filter contains_project_name $1/*(.N))
     }
    +
     map show_project_matchin_file $( filter contain_no_s Projects/* )
     
    @@ -118,6 +122,73 @@ map show_project_matchin_file $( +
    +
    +#!/usr/bin/env zsh
    +
    +# Provide higer-order functions 
    +
    +# usage:
    +#
    +# $ foo(){print "x: $1"}
    +# $ map foo a b c d
    +# x: a
    +# x: b
    +# x: c
    +# x: d
    +function map {
    +    local func_name=$1
    +    shift
    +    for elem in $@; print -- $(eval $func_name $elem)
    +}
    +
    +# $ bar() { print $(($1 + $2)) }
    +# $ fold bar 0 1 2 3 4 5
    +# 15
    +# -- but also
    +# $ fold bar 0 $( seq 1 100 )
    +function fold {
    +    if (($#<2)) {
    +        print -- "ERROR fold use at least 2 arguments" >&2
    +        return 1
    +    }
    +    if (($#<3)) {
    +        print -- $2
    +        return 0
    +    } else {
    +        local acc
    +        local right
    +        local func_name=$1
    +        local init_value=$2
    +        local first_value=$3
    +        shift 3
    +        right=$( fold $func_name $init_value $@ )
    +        acc=$( eval "$func_name $first_value $right" )
    +        print -- $acc
    +        return 0
    +    }
    +}
    +
    +# usage:
    +#
    +# $ baz() { print $1 | grep baz }
    +# $ filter baz titi bazaar biz
    +# bazaar
    +function filter {
    +    local predicate=$1
    +    local result
    +    typeset -a result
    +    shift
    +    for elem in $@; do
    +        if eval $predicate $elem >/dev/null; then
    +            result=( $result $elem )
    +        fi
    +    done
    +    print $result
    +}
    +
    +
    +
    @@ -168,11 +239,6 @@ Why?

    +

    @@ -48,7 +49,6 @@

    -
    @@ -539,12 +539,12 @@ $(document).ready(function() { next entries diff --git a/output/Scratch/en/blog/Password-Management/index.html b/output/Scratch/en/blog/Password-Management/index.html index 1da4cc43a..f124925b9 100644 --- a/output/Scratch/en/blog/Password-Management/index.html +++ b/output/Scratch/en/blog/Password-Management/index.html @@ -39,6 +39,7 @@ +

    @@ -46,7 +47,6 @@

    -
    @@ -253,12 +253,12 @@ Further more using shorter password make it even harder for an attaquer to retri diff --git a/output/Scratch/en/blog/feed/feed.xml b/output/Scratch/en/blog/feed/feed.xml index 0e5bdf247..eed502711 100644 --- a/output/Scratch/en/blog/feed/feed.xml +++ b/output/Scratch/en/blog/feed/feed.xml @@ -2,20 +2,48 @@ http://yannesposito.com/ Yogsototh's last blogs entries - 2011-09-27T13:15:23Z + 2011-09-28T10:21:41Z Yann Esposito http://yannesposito.com + + tag:yannesposito.com,2011-09-28:/Scratch/en/blog/programming-language-experience/ + Programming Language Experience + 2011-09-28T10:21:41Z + 2011-09-28T10:21:41Z + + <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> + tag:yannesposito.com,2011-09-27:/Scratch/en/blog/Higher-order-function-in-zsh/ Higher order function in zsh 2011-09-27T13:15:23Z 2011-09-27T13:15:23Z - <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"> @@ -34,39 +62,6 @@ <span class="Comment"><span class="Comment">#</span> project become foo (:t for tail)</span> project=<span class="Variable"></span></pre></p> - - tag:yannesposito.com,2011-09-05:/Scratch/en/blog/programming-language-experience/ - Programming Language Experience - 2011-09-05T10:21:41Z - 2011-09-05T10:21:41Z - - <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> - tag:yannesposito.com,2011-08-25:/Scratch/en/blog/Learn-Vim-Progressively/ Learn Vim Progressively diff --git a/output/Scratch/en/blog/index.html b/output/Scratch/en/blog/index.html index 83be66d7e..35f39b985 100644 --- a/output/Scratch/en/blog/index.html +++ b/output/Scratch/en/blog/index.html @@ -28,15 +28,14 @@ Presentation drawing @@ -73,6 +72,48 @@ Last 5 Articles +

    + + 28 + Sep + 2011 + + Programming Language Experience » +

    + +
    + +

    Title image

    + + +
    + +tl;dr: My short and higly subjective feelings about programming languages I used. + +
    + + +

    BASIC

    + +

    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 GOTOs. +Ô nostalgia. +Unfortunately this might be the only interesting part of this language.

    + +

    Today this language is obsolescent. +It not even a good language to learn pro...

    + +
    +
    +

    + Read more » +

    +
    + +
    +

    27 @@ -84,7 +125,7 @@ Last 5 Articles
    -

    Title image

    +

    Title image

    @@ -112,53 +153,6 @@ Last 5 Articles
    -

    - - 5 - Sep - 2011 - - Programming Language Experience » -

    - -
    - -

    Title image

    - - -
    - -tl;dr: My feelings about programming languages I used. - -
    - - -

    BASIC

    - -

    The language of my firsts programs! -I was about 10, with an MO5 and Amstrad CPC 6128 and even with my Atari STe. -This is the language of GOTOs. -Ô nostalgia. -Unfortunately this might be the only interesting part of this language.

    - -

    Today this language is obsolescent. -It not even a good language to learn programming. -I know there exist some compiler now. -But this is not enough to try to learn it.

    - -
    -READY
    -10 PRINT 

    - -
    -
    -

    - Read more » -

    -
    - -
    -

    25 @@ -304,14 +298,14 @@ It is both safe and easy to use everyday.

    Archives

    [2011]

    @@ -46,7 +47,6 @@

    -
    @@ -56,19 +56,20 @@
    -

    Title image

    +

    Title image

    -tl;dr: My feelings about programming languages I used. +tl;dr: My short and higly subjective feelings about programming languages I used.
    -

    BASIC

    +

    BASIC

    -

    The language of my firsts programs! +

    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 GOTOs. Ô nostalgia. @@ -151,6 +152,8 @@ In the end I prefer C.

    C

    +

    Pointer representation from Dancing links

    +

    The language of pointers.

    Le programming language.

    @@ -187,7 +190,7 @@ What you need to know is this old language had certainly inspired most new objec

    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. @@ -198,52 +201,62 @@ I mean an information system, the OOP is not so bad.

    C++

    +

    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. +My only concern was about a lack in the STL. In the doc, one could use String<T>. But in reality, T have to be only char or char16. -Then I had to reduce my alphabet to $2^16$ letters. +Then I had to reduce my alphabet to 216 letters. Except for some application, the alphabet must be far larger than that.

    +

    To conclude, I’d say, C++ is very good if you work alone or with a fixed subset of its features.

    +

    Eiffel

    +

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

    +Furthermore, I preferred working with C++. +At that time I programmed a lot with C and like its syntax.

    Java

    +

    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. -I made a GUI using Java Swing and I created my own notification system between different element of the GUI. +Generally it is a coherent choice when there are a way to compensate. +In Java, there are interfaces for this. +Except, interfaces can only add methods to a class. +You cannot add any attribute to a class except by subclassing. +I really lacked this feature.

    + +

    I made a GUI using Java Swing and I created my own notification system between different element of the GUI. Then, at the begining I only needed to send notification 1 to 1. After some times, I needed to make 1 to many notifications. And I add to make a bunch of copy/paste inside all my subclasses! -Copy/paste are exactly what should be avoided the most by Object oriented languages.

    +Copy/paste are exactly what should be avoided the most by object oriented languages.

    -

    Another thing, I had to handle threads. -Except I had to make my own thread gestion system to avoid locks and notifications between threads (this thread ended, …). +

    Another thing ; I had to handle threads. +I had to make my own thread gestion system to avoid locks and notifications between threads (this thread ended, …). At that time I used Java 1.5. Normally this problem should have been solved with Java 1.6. I wish it is the case, but lacking such an essential feature for a language was very bad.

    @@ -253,16 +266,18 @@ I wish it is the case, but lacking such an essential feature for a language was

    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.

    +

    GUI protability mean, mediocre experience on all platforms. +Any system it might be (wxWidget, QT, etc…).

    The Java ideology is “closed”. But it resolve a big problem. It helps medium to low quality developper to work in team without the ability to make too much harm to the product. -A good programmer will be able to make very interresting with it thought.

    +A good programmer will be able to make very interresting with it thought. +Please note I didn’t say Java programmer are bad programmer.

    Objective-C

    +

    Xcode Logo

    +

    The language I learned and used only to make application on Apple© platform. I learned Objective-C just after Python. It was hard to do it. @@ -275,7 +290,7 @@ Both simple and efficient. It might seems like small details on paper, but once you start using it, it make all the difference.

    Even if Objective-C is a relatively low level language. -Its dynamic typing ability make it very good for GUI programming. +Its dynamic typing ability make it very good for GUI programming. I recommand to continue working with this language. In the end you’ll certainely find it better than expected.

    @@ -283,10 +298,12 @@ In the end you’ll certainely find it better than expected.

    PHP

    +

    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. @@ -297,6 +314,8 @@ I make a bit of PHP not so long ago, and it was a pain to protect my application

    Python

    +

    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. @@ -305,11 +324,10 @@ Everything is natural, it’s magic. Yes, as good as this. But something so good must have some drawback.

    -

    And yes, an all interpreted languages, Python is slow. +

    And yes, like all interpreted languages, Python is slow. Beware, no just a bit slow like 2 or 3 times slower than C. (like Java for example). No, really slow, about 10 to 20 times slower than C. -Argh… But it is completely usable for many things. -But some application are just forbidden to it.

    +Argh… Note it is completely usable for many things.

    Awk

    @@ -373,63 +391,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:

    -x=(2*y+z)/2
    +AA=1/3[A,B]
     
    -

    It will place the point x at 2/3 of y and 1/3 to z. -This feature is very nice. Most programming language should think about adding it.

    +

    It will place the point AA between the point A and B. +More precisely at the barycenter (2xA + B)/3.

    + +
    +X=whatever[A,B]
    +X=whatever[C,D]
    +
    + +

    This second example, will place the point X at the intersection of the two segments AB and CD.

    + +

    This feature is very helpful, and not only to draw things. +Most programming language should think about adding it.

    zsh

    Yes, zsh is a shell. -But it is also a script language extremly well suited to file traitment. +But it is also a script language extremly well suited to file management. For now, it is the best shell I used. I prefer zsh to bash.

    Prolog

    -

    I never made somthing serious with Prolog, but I really loved to use and learn it. +

    I never made something serious with Prolog, but I really loved to use and learn it. +I had the chance to learn Prolog with Alain Colmerauer 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.

    +
    @@ -481,6 +515,11 @@ But I used them all.

    -
    - Created: 09/05/2011 - Modified: 09/06/2011 + Created: 09/28/2011 + Modified: 09/27/2011
    Entirely done with diff --git a/output/Scratch/en/error/401-authorization_required/index.html b/output/Scratch/en/error/401-authorization_required/index.html index fc1b5d8e2..3ff0c4d8e 100644 --- a/output/Scratch/en/error/401-authorization_required/index.html +++ b/output/Scratch/en/error/401-authorization_required/index.html @@ -27,15 +27,14 @@
    Presentation drawing diff --git a/output/Scratch/en/error/403-forbidden/index.html b/output/Scratch/en/error/403-forbidden/index.html index 28be61f05..84c03cedc 100644 --- a/output/Scratch/en/error/403-forbidden/index.html +++ b/output/Scratch/en/error/403-forbidden/index.html @@ -27,15 +27,14 @@

    Presentation drawing diff --git a/output/Scratch/en/error/408-request_timed_out/index.html b/output/Scratch/en/error/408-request_timed_out/index.html index eb86100d5..1aff1c2f0 100644 --- a/output/Scratch/en/error/408-request_timed_out/index.html +++ b/output/Scratch/en/error/408-request_timed_out/index.html @@ -27,15 +27,14 @@ Presentation drawing diff --git a/output/Scratch/en/error/500-internal_server_error/index.html b/output/Scratch/en/error/500-internal_server_error/index.html index d81fdc0c1..c94281758 100644 --- a/output/Scratch/en/error/500-internal_server_error/index.html +++ b/output/Scratch/en/error/500-internal_server_error/index.html @@ -27,15 +27,14 @@ Presentation drawing diff --git a/output/Scratch/en/error/503-service_unavailable/index.html b/output/Scratch/en/error/503-service_unavailable/index.html index e3d3d4a79..c93605a76 100644 --- a/output/Scratch/en/error/503-service_unavailable/index.html +++ b/output/Scratch/en/error/503-service_unavailable/index.html @@ -27,15 +27,14 @@ Presentation drawing diff --git a/output/Scratch/en/index.html b/output/Scratch/en/index.html index d38736ab6..27efb4324 100644 --- a/output/Scratch/en/index.html +++ b/output/Scratch/en/index.html @@ -103,7 +103,7 @@ Copyright ©, Yann Esposito
    - Modified: 09/27/2011 + Modified: 09/28/2011
    Entirely done with diff --git a/output/Scratch/en/rss/index.html b/output/Scratch/en/rss/index.html index f0b476464..642dba1d5 100644 --- a/output/Scratch/en/rss/index.html +++ b/output/Scratch/en/rss/index.html @@ -28,15 +28,14 @@
    Presentation drawing diff --git a/output/Scratch/en/softwares/index.html b/output/Scratch/en/softwares/index.html index 47e7b892f..38bfd30e7 100644 --- a/output/Scratch/en/softwares/index.html +++ b/output/Scratch/en/softwares/index.html @@ -28,15 +28,14 @@
    - - - +
    -
    -
    +
  • About
  • Presentation drawing diff --git a/output/Scratch/en/softwares/yaquabubbles/index.html b/output/Scratch/en/softwares/yaquabubbles/index.html index 117bc4db3..793e697e4 100644 --- a/output/Scratch/en/softwares/yaquabubbles/index.html +++ b/output/Scratch/en/softwares/yaquabubbles/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/en/softwares/yclock/index.html b/output/Scratch/en/softwares/yclock/index.html index c6c43c475..0488e8750 100644 --- a/output/Scratch/en/softwares/yclock/index.html +++ b/output/Scratch/en/softwares/yclock/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/en/softwares/ypassword/index.html b/output/Scratch/en/softwares/ypassword/index.html index 1e2b26f93..194320fa6 100644 --- a/output/Scratch/en/softwares/ypassword/index.html +++ b/output/Scratch/en/softwares/ypassword/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/en/softwares/ypassword/iphoneweb/index.html b/output/Scratch/en/softwares/ypassword/iphoneweb/index.html index 5a9063162..acd12e67d 100644 --- a/output/Scratch/en/softwares/ypassword/iphoneweb/index.html +++ b/output/Scratch/en/softwares/ypassword/iphoneweb/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/en/softwares/ypassword/web/index.html b/output/Scratch/en/softwares/ypassword/web/index.html index 389acabd0..cc5c6e9e5 100644 --- a/output/Scratch/en/softwares/ypassword/web/index.html +++ b/output/Scratch/en/softwares/ypassword/web/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/en/validation/index.html b/output/Scratch/en/validation/index.html index e9016de40..aa71fe822 100644 --- a/output/Scratch/en/validation/index.html +++ b/output/Scratch/en/validation/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/fr/about/contact/index.html b/output/Scratch/fr/about/contact/index.html index b99bbfbb6..5874e3024 100644 --- a/output/Scratch/fr/about/contact/index.html +++ b/output/Scratch/fr/about/contact/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/fr/about/cv/index.html b/output/Scratch/fr/about/cv/index.html index 25f65a74c..deb0a685b 100644 --- a/output/Scratch/fr/about/cv/index.html +++ b/output/Scratch/fr/about/cv/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/fr/about/index.html b/output/Scratch/fr/about/index.html index c28243a08..0abbdf2af 100644 --- a/output/Scratch/fr/about/index.html +++ b/output/Scratch/fr/about/index.html @@ -28,15 +28,14 @@
    +
  • À propos
  • Presentation drawing diff --git a/output/Scratch/fr/about/old/index.html b/output/Scratch/fr/about/old/index.html index d29dc9e48..68ee0d1c5 100644 --- a/output/Scratch/fr/about/old/index.html +++ b/output/Scratch/fr/about/old/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/fr/about/technical_details/index.html b/output/Scratch/fr/about/technical_details/index.html index 7b4e090c3..68a15a2ef 100644 --- a/output/Scratch/fr/about/technical_details/index.html +++ b/output/Scratch/fr/about/technical_details/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/fr/blog/Higher-order-function-in-zsh/code/functional.sh b/output/Scratch/fr/blog/Higher-order-function-in-zsh/code/functional.sh new file mode 100644 index 000000000..5e3900291 --- /dev/null +++ b/output/Scratch/fr/blog/Higher-order-function-in-zsh/code/functional.sh @@ -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 +} diff --git a/output/Scratch/fr/blog/Higher-order-function-in-zsh/index.html b/output/Scratch/fr/blog/Higher-order-function-in-zsh/index.html index e9587b45d..978507322 100644 --- a/output/Scratch/fr/blog/Higher-order-function-in-zsh/index.html +++ b/output/Scratch/fr/blog/Higher-order-function-in-zsh/index.html @@ -39,6 +39,7 @@ +

    @@ -46,7 +47,6 @@

    -
    @@ -56,7 +56,7 @@
    -

    Title image

    +

    Title image

    @@ -107,6 +107,8 @@ Recommençons sur le même principe.

    Trouver les fichiers des projets qui ne contiennent pas de s dans leur nom qui ont le même nom que leur projet.

    +

    Before ⇒

    +
     for toProject in Projects/*; do
         project=$toProject:t
    @@ -122,15 +124,17 @@ Recommençons sur le même principe.

    done
    -

    After =>

    +

    After ⇒

     contain_no_s() { print $1 | grep -v s }
    +
     function verify_file_name {                               
         local project=$1:t
         contains_project_name() { print $1:t | grep $project }
         map "print -- X" $(filter contains_project_name $1/*(.N))
     }
    +
     map show_project_matchin_file $( filter contain_no_s Projects/* )
     
    @@ -138,6 +142,73 @@ map show_project_matchin_file $( +
    +
    +#!/usr/bin/env zsh
    +
    +# Provide higer-order functions 
    +
    +# usage:
    +#
    +# $ foo(){print "x: $1"}
    +# $ map foo a b c d
    +# x: a
    +# x: b
    +# x: c
    +# x: d
    +function map {
    +    local func_name=$1
    +    shift
    +    for elem in $@; print -- $(eval $func_name $elem)
    +}
    +
    +# $ bar() { print $(($1 + $2)) }
    +# $ fold bar 0 1 2 3 4 5
    +# 15
    +# -- but also
    +# $ fold bar 0 $( seq 1 100 )
    +function fold {
    +    if (($#<2)) {
    +        print -- "ERROR fold use at least 2 arguments" >&2
    +        return 1
    +    }
    +    if (($#<3)) {
    +        print -- $2
    +        return 0
    +    } else {
    +        local acc
    +        local right
    +        local func_name=$1
    +        local init_value=$2
    +        local first_value=$3
    +        shift 3
    +        right=$( fold $func_name $init_value $@ )
    +        acc=$( eval "$func_name $first_value $right" )
    +        print -- $acc
    +        return 0
    +    }
    +}
    +
    +# usage:
    +#
    +# $ baz() { print $1 | grep baz }
    +# $ filter baz titi bazaar biz
    +# bazaar
    +function filter {
    +    local predicate=$1
    +    local result
    +    typeset -a result
    +    shift
    +    for elem in $@; do
    +        if eval $predicate $elem >/dev/null; then
    +            result=( $result $elem )
    +        fi
    +    done
    +    print $result
    +}
    +
    +
    +
    @@ -188,11 +259,6 @@ Why?

    +

    @@ -48,7 +49,6 @@

    -
    @@ -546,12 +546,12 @@ $(document).ready(function() { articles suivants diff --git a/output/Scratch/fr/blog/Password-Management/index.html b/output/Scratch/fr/blog/Password-Management/index.html index f9cfb626f..ef529ef56 100644 --- a/output/Scratch/fr/blog/Password-Management/index.html +++ b/output/Scratch/fr/blog/Password-Management/index.html @@ -39,6 +39,7 @@ +

    @@ -46,7 +47,6 @@

    -
    @@ -244,12 +244,12 @@ Avec des mots de passes plus petit, il est encore plus difficile pour un attaqua diff --git a/output/Scratch/fr/blog/feed/feed.xml b/output/Scratch/fr/blog/feed/feed.xml index 7262059d1..cc1ff0463 100644 --- a/output/Scratch/fr/blog/feed/feed.xml +++ b/output/Scratch/fr/blog/feed/feed.xml @@ -2,20 +2,47 @@ http://yannesposito.com/ Yogsototh's last blogs entries - 2011-09-27T13:15:23Z + 2011-09-28T10:21:41Z Yann Esposito http://yannesposito.com + + tag:yannesposito.com,2011-09-28:/Scratch/fr/blog/programming-language-experience/ + programming language experience + 2011-09-28T10:21:41Z + 2011-09-28T10:21:41Z + + <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> + tag:yannesposito.com,2011-09-27:/Scratch/fr/blog/Higher-order-function-in-zsh/ Higher order function in zsh 2011-09-27T13:15:23Z 2011-09-27T13:15:23Z - <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"> @@ -37,34 +64,6 @@ Commençons par un programme qui converti tous les gif en png dans plusieurs Avant&nbsp;:</p> </p> - - - tag:yannesposito.com,2011-09-05:/Scratch/fr/blog/programming-language-experience/ - programming language experience - 2011-09-05T10:21:41Z - 2011-09-05T10:21:41Z - - <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> tag:yannesposito.com,2011-08-25:/Scratch/fr/blog/Learn-Vim-Progressively/ diff --git a/output/Scratch/fr/blog/index.html b/output/Scratch/fr/blog/index.html index c065e5c25..174b84e2c 100644 --- a/output/Scratch/fr/blog/index.html +++ b/output/Scratch/fr/blog/index.html @@ -28,15 +28,14 @@ Presentation drawing @@ -73,6 +72,47 @@ Les 5 derniers articles +

    + + 28 + Sep + 2011 + + programming language experience » +

    + +
    + +

    Title image

    + + +
    + +tlàl : Mon avis court et hautement subjectif concernant les différents languages de programmations que j’ai utilisé. + +
    + + +

    BASIC

    + +

    Title image

    + +

    Ah ! Le language de mes premiers programmes ! +Je devais avoir 10-11 ans. +Sous MO5, Amstrad CPC 6128 et même Atari STe. +Le langage des GOTOs. +Je suis empleint de nostalgie rien que d’y penser. +C’est à peu prêt le seul intérêt de ce...

    + +
    +
    +

    + en lire plus » +

    +
    + +
    +

    27 @@ -84,7 +124,7 @@ Les 5 derniers articles
    -

    Title image

    +

    Title image

    @@ -116,48 +156,6 @@ Avant :

    -

    - - 5 - Sep - 2011 - - programming language experience » -

    - -
    - -

    Title image

    - - -
    - -tlàl : Mon avis sur les différents languages de programmations que j’ai utilisé. - -
    - - -

    BASIC

    - -

    Ah ! Le language de mes premiers programmes ! -Je devais avoir 10-11 ans. -Sous MO5, Amstrad CPC 6128 et même Atari STe. -Le langage des GOTOs. -Je suis empleint de nostalgie rien que d’y penser. -C’est à peu prêt le seul intérêt de ce langage.

    - -

    Aujourd’hui ce langage est tombé en désuétude. -Ce n’est ni un bon langage pour apprendre, ni un bon langage pour faire de vrai prog...

    - -
    -
    -

    - en lire plus » -

    -
    - -
    -

    25 @@ -294,14 +292,14 @@ Bon, d’accord, même si vous ne téléchargez pas mon application vous pou

    Archives

    [2011]

    @@ -46,7 +47,6 @@

    -
    @@ -56,17 +56,19 @@
    -

    Title image

    +

    Title image

    -tlàl : Mon avis sur les différents languages de programmations que j’ai utilisé. +tlàl : Mon avis court et hautement subjectif concernant les différents languages de programmations que j’ai utilisé.
    -

    BASIC

    +

    BASIC

    + +

    Title image

    Ah ! Le language de mes premiers programmes ! Je devais avoir 10-11 ans. @@ -152,6 +154,8 @@ Mais je préfère largement le C.

    C

    +

    Pointer representation from Dancing links

    +

    Le langage des pointeurs

    Ah, le langage de programmation par excellence.

    @@ -197,6 +201,8 @@ C’est-à-dire un système d’information, c’est pas trop mal.C++

    +

    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. @@ -204,14 +210,18 @@ La solution, prendre C et lui rajouter une couche objet. Le problème avec C++ c’est qu’il fait trop de choses. L’héritage multiple, des templates, etc… Bon, je l’ai quand même choisi pour faire le plus gros programme que j’ai jamais fais lors de ma thèse. -Et je dois avouer que l’expérience m’a plûe. -Le seul reproche que j’ai à faire, c’est que la STL n’était pas aussi complète que l’on aurait pû l’espérer pour un détail. +Et je dois avouer que l’expérience m’a plu. +Le seul reproche que j’ai à faire, c’est que la STL n’était pas aussi complète que l’on aurait pu l’espérer pour un détail. On ne peut pas faire de String<T> pour autre chose que des char16. -Du coup, mon alphabet était limité à $2^16$ lettres. +Du coup, mon alphabet était limité à 216 lettres. Hors, pour certaines application, l’alphabet doit être gigantesque.

    +

    En conclusion je dirai que C++ est un très bon langage si vous vous fixez à l’avance un sous ensemble de ses fonctionnalités.

    +

    Eiffel

    +

    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. @@ -222,6 +232,8 @@ Lorsqu’on viens du C, il est désagréable de changer ses habitudes.

    Java

    +

    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.

    @@ -230,18 +242,20 @@ Lorsqu’on viens du C, il est désagréable de changer ses habitudes.

    Et que les limitations sont très désagréables si on sait ce que l’on fait.

    Par exemple, il n’y a pas d’héritage multiple en Java. -Ce qui est en général un choix que je trouve cohérent s’il est bien appuyé par des système qui compensent ce manque. +Ce qui est en général un choix que je trouve cohérent s’il est bien appuyé par des systèmes qui compensent ce manque. En java, il existe les interfaces. -Hors, les interfaces sont un moyen d’ajouter simplement des méthodes à une classe. -En aucun cas on ne peut rajouter un attribut. -Ce qui m’a vraiment géner pour faire une interface graphique par exemple. -Typiquement je faisais une GUI en Java Swing, et j’avais créé mon propre système de notification entre objets de GUI. -Alors, au début je considérais qu’un objet ne devais envoyer des notifications qu’à un seul objet. +Les interfaces permettent d’ajouter des méthodes à une classe. +En aucun cas on ne peut rajouter un attribut autrement qu’en héritant. +Cet état de fait m’a vraiment géné.

    + +

    Typiquement je faisais une GUI en Java Swing. +J’avais créé mon propre système de notification entre objets. +Au début je considérais qu’un objet ne devait envoyer des notifications qu’à un seul objet. Ô quelle erreur lorsque je réalisais qu’il fallait non plus gérer un seul objet mais parfois plusieurs. Je changeais mon implémentation d’interface partout, conséquence, des copier/coller dans tous les sens pour mes classes. Les copier/coller qui sont justement un problème censé être évité par les langages orientés objets.

    -

    De plus toujours pour ma GUI, je devais évidemment gérer des threads. +

    De plus toujours pour ma GUI, je devais évidemment gérer des threads. Hors, il m’a fallu faire mon propre système de gestion de threads pour éviter les locks, pour les notifications (ce thread à fini, etc…). À l’époque j’utilisais Java 1.5. Normallement ce problème devait être réglé sur Java 1.6. @@ -252,17 +266,20 @@ J’espère que c’est le cas, mais avoir ce type de “feature&rdq

    Bon, après cette expérience je déconseillerai Java. La portabilité, n’est pas si intéressante que ce qu’on pourrait croire.

    -

    En ce qui concerne les GUI, portable signifie interface fonctionnelle mais médiocre sur toutes les plateformes. +

    En ce qui concerne les GUI, portable signifie interface fonctionnelle mais médiocre sur toutes les plateformes. Quelquesoit le système d’ailleurs (wxWidget, QT, etc…). Donc, pour des applications à distribuer à des tiers, c’est à éviter.

    Le système de Java est très clos. Par contre il résoud un très bon problème. -Il permet à des développeurs médiocre de travailler en groupe sans faire trop de mal. -Et un bon programmeur sera tout de même capable d’y faire des choses très intéressantes.

    +Il permet à des développeurs médiocres de travailler en groupe sans faire trop de mal. +Et un bon programmeur sera tout de même capable d’y faire des choses très intéressantes. +Veuillez noter que je n’ai pas dit que les programmeurs Java sont de mauvais programmeurs, ce n’est pas ce que je pense.

    Objective-C

    +

    Xcode Logo

    +

    Le langage que je n’ai appris et utilisé que pour faire des applications sur les plateformes d’Apple©. J’ai appris Objective-C après Python. Et je dois avouer que j’ai eu du mal à m’y mettre. @@ -270,7 +287,7 @@ Je n’ai pas du tout aimé la syntaxe et pas mal d’autres détails. Mais ça fait parti de ces langages que plus on utilise, plus on aime. En réalité, il y a quelque chose dans ce langage qui fait que tout est bien pensé. Mais surtout, ici, ce n’est pas le langage qui est la meilleure partie, c’est plutôt le framework Cocoa qui lui est le plus souvent associé qui est une merveille. -Par rapport à tous les autres framework permettant de fabriquer des GUI, Cocoa est de très loin supérieur. +Par rapport à tous les autres framework permettant de fabriquer des GUI, Cocoa est de très loin supérieur. Même si ça semble être des détails sur le papier, en pratique cela fait une grande différence.

    Vraiment jusqu’ici, même si Objective-C reste assez bas niveau, le fait que le typage de ce langage soit dynamique est un vrai plus pour l’interface graphique. @@ -280,20 +297,27 @@ Je ne peux que vous encourager à vous accrocher à ce langage et de faire un vr

    PHP

    +

    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

    -

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

    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. @@ -369,7 +393,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

    @@ -394,20 +421,32 @@ Alors qu’en Java et C++, typiquement certain choix ont été fait en dépi

    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 :

    -x=(2*y+z)/2
    +AA=1/3[A,B]
     
    +

    Il va position le point AA entre A et B. +Plus précisément, au barycentre (2A + B)/3.

    + +
    +X=whatever[A,B]
    +X=whatever[C,D]
    +
    + +

    Ce deuxième exemple positionne X à l’intersection des deux segments AB et CD. +Vous pouvez aussi voir pas mal d’exemples ici. +You could see more example there.

    + +

    Cette fonction est très utile. +Et à mon avis pas seulement pour afficher des choses. +De mon point de vue, les autres langages de programmation devraient penser à rajouter les résolutions automatiques simples.

    +

    zsh

    Oui, zsh est un shell. @@ -417,9 +456,10 @@ C’est pour l’instant le meilleur shell que j’ai utilisé. Je l

    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 lui-même. C’est un langage qui essaye de résoudre les contraintes autant qu’il le peut pour vous. -C’est assez magique. +Il en ressort un impression de magie. On ne fait que décrire ce qu’il faut et on ne donne pas d’ordre. Un peu comme la programmation fonctionnelle mais en beaucoup plus puissant.

    @@ -427,13 +467,14 @@ Un peu comme la programmation fonctionnelle mais en beaucoup plus puissant.

    Il reste encore pas mal de langages et de framework à essayer. Actuellement je pense que je vais passer un moment avec haskell. -Peut-être demain que j’irai voir du LISP, Scala ou Erlang. -Comme je suis plus dans la création de site web, j’irai certainement jeter un coup d’oeil à clojure aussi. +Peut-être demain que j’irai apprendre LISP, Scala ou Erlang. +Comme je suis plus dans la création de site web, j’irai certainement jeter un coup d’œil à clojure aussi. Et certainement beaucoup d’autres choses.

    -

    Dites-moi si vous avez une autre expérience avec ces langages de programmation. -Je ne donne que mes impressions. -En tout cas je les ai tous utilisés.

    +

    Dites moi si vous avez une autre expérience avec ces langages de programmation. +Évidement mes impression sont hautement subjectives. +Cependant, j’ai utilisé tous les langages dont j’ai parlé.

    +
    @@ -485,6 +526,11 @@ En tout cas je les ai tous utilisés.

    -
    - Écrit le : 05/09/2011 + Écrit le : 28/09/2011 modifié le : 06/09/2011
    diff --git a/output/Scratch/fr/index.html b/output/Scratch/fr/index.html index 9a453ebda..8526e6081 100644 --- a/output/Scratch/fr/index.html +++ b/output/Scratch/fr/index.html @@ -148,7 +148,7 @@ Droits de reproduction ©, Yann Esposito
    - modifié le : 27/09/2011 + modifié le : 28/09/2011
    Site entièrement réalisé avec diff --git a/output/Scratch/fr/rss/index.html b/output/Scratch/fr/rss/index.html index 2930c6807..368077358 100644 --- a/output/Scratch/fr/rss/index.html +++ b/output/Scratch/fr/rss/index.html @@ -28,15 +28,14 @@
    Presentation drawing diff --git a/output/Scratch/fr/softwares/index.html b/output/Scratch/fr/softwares/index.html index f65606449..bd68dbec7 100644 --- a/output/Scratch/fr/softwares/index.html +++ b/output/Scratch/fr/softwares/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/fr/softwares/yaquabubbles/index.html b/output/Scratch/fr/softwares/yaquabubbles/index.html index 344b6c36b..94c951944 100644 --- a/output/Scratch/fr/softwares/yaquabubbles/index.html +++ b/output/Scratch/fr/softwares/yaquabubbles/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/fr/softwares/yclock/index.html b/output/Scratch/fr/softwares/yclock/index.html index 80f0fadca..46e112b83 100644 --- a/output/Scratch/fr/softwares/yclock/index.html +++ b/output/Scratch/fr/softwares/yclock/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/fr/softwares/ypassword/index.html b/output/Scratch/fr/softwares/ypassword/index.html index 6e2efe80b..dfc4ef0b8 100644 --- a/output/Scratch/fr/softwares/ypassword/index.html +++ b/output/Scratch/fr/softwares/ypassword/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/fr/softwares/ypassword/iphoneweb/index.html b/output/Scratch/fr/softwares/ypassword/iphoneweb/index.html index 1555690ac..905487f99 100644 --- a/output/Scratch/fr/softwares/ypassword/iphoneweb/index.html +++ b/output/Scratch/fr/softwares/ypassword/iphoneweb/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/fr/softwares/ypassword/web/index.html b/output/Scratch/fr/softwares/ypassword/web/index.html index 068cc0779..2cb22cff1 100644 --- a/output/Scratch/fr/softwares/ypassword/web/index.html +++ b/output/Scratch/fr/softwares/ypassword/web/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/fr/validation/index.html b/output/Scratch/fr/validation/index.html index 170b17a32..aa2f23388 100644 --- a/output/Scratch/fr/validation/index.html +++ b/output/Scratch/fr/validation/index.html @@ -28,15 +28,14 @@ Presentation drawing diff --git a/output/Scratch/img/blog/Higher-order-function-in-zsh/main.jpg b/output/Scratch/img/blog/Higher-order-function-in-zsh/main.jpg new file mode 100644 index 000000000..64328387e Binary files /dev/null and b/output/Scratch/img/blog/Higher-order-function-in-zsh/main.jpg differ diff --git a/output/Scratch/img/blog/Higher-order-function-in-zsh/src/main.jpg b/output/Scratch/img/blog/Higher-order-function-in-zsh/src/main.jpg new file mode 100644 index 000000000..aec86bb7f Binary files /dev/null and b/output/Scratch/img/blog/Higher-order-function-in-zsh/src/main.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/C.jpg b/output/Scratch/img/blog/programming-language-experience/C.jpg new file mode 100644 index 000000000..5f6751577 Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/C.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/basic.gif b/output/Scratch/img/blog/programming-language-experience/basic.gif new file mode 100644 index 000000000..63388d817 Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/basic.gif differ diff --git a/output/Scratch/img/blog/programming-language-experience/basic.jpg b/output/Scratch/img/blog/programming-language-experience/basic.jpg new file mode 100644 index 000000000..a2c49d0a6 Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/basic.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/cplusplus.jpg b/output/Scratch/img/blog/programming-language-experience/cplusplus.jpg new file mode 100644 index 000000000..48e8dfa4e Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/cplusplus.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/dragon.jpg b/output/Scratch/img/blog/programming-language-experience/dragon.jpg index 4e976b3d5..3f9a26fe4 100644 Binary files a/output/Scratch/img/blog/programming-language-experience/dragon.jpg and b/output/Scratch/img/blog/programming-language-experience/dragon.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/eiffel.jpg b/output/Scratch/img/blog/programming-language-experience/eiffel.jpg new file mode 100644 index 000000000..95795a706 Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/eiffel.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/grail.jpg b/output/Scratch/img/blog/programming-language-experience/grail.jpg new file mode 100644 index 000000000..c7d139adc Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/grail.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/php.jpg b/output/Scratch/img/blog/programming-language-experience/php.jpg new file mode 100644 index 000000000..400789eeb Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/php.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/python.jpg b/output/Scratch/img/blog/programming-language-experience/python.jpg new file mode 100644 index 000000000..a07242ea4 Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/python.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/src/C.jpg b/output/Scratch/img/blog/programming-language-experience/src/C.jpg new file mode 100644 index 000000000..aea390136 Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/src/C.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/src/basic.gif b/output/Scratch/img/blog/programming-language-experience/src/basic.gif new file mode 100644 index 000000000..21a338588 Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/src/basic.gif differ diff --git a/output/Scratch/img/blog/programming-language-experience/src/basic.jpg b/output/Scratch/img/blog/programming-language-experience/src/basic.jpg new file mode 100644 index 000000000..887d7c0bb Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/src/basic.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/src/cplusplus.jpg b/output/Scratch/img/blog/programming-language-experience/src/cplusplus.jpg new file mode 100644 index 000000000..209834cb1 Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/src/cplusplus.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/src/dragon.jpg b/output/Scratch/img/blog/programming-language-experience/src/dragon.jpg new file mode 100644 index 000000000..ec79f87c9 Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/src/dragon.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/src/eiffel.jpg b/output/Scratch/img/blog/programming-language-experience/src/eiffel.jpg new file mode 100644 index 000000000..2a8af6246 Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/src/eiffel.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/src/grail.jpg b/output/Scratch/img/blog/programming-language-experience/src/grail.jpg new file mode 100644 index 000000000..af67497ef Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/src/grail.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/src/php.jpg b/output/Scratch/img/blog/programming-language-experience/src/php.jpg new file mode 100644 index 000000000..09533f7eb Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/src/php.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/src/python.jpg b/output/Scratch/img/blog/programming-language-experience/src/python.jpg new file mode 100644 index 000000000..ac9e097ca Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/src/python.jpg differ diff --git a/output/Scratch/img/blog/programming-language-experience/src/xcode_logo.png b/output/Scratch/img/blog/programming-language-experience/src/xcode_logo.png new file mode 100644 index 000000000..b71c043b4 Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/src/xcode_logo.png differ diff --git a/output/Scratch/img/blog/programming-language-experience/xcode_logo.png b/output/Scratch/img/blog/programming-language-experience/xcode_logo.png new file mode 100644 index 000000000..73e4da22f Binary files /dev/null and b/output/Scratch/img/blog/programming-language-experience/xcode_logo.png differ diff --git a/output/Scratch/sitemap.xml b/output/Scratch/sitemap.xml index 15cda6dbc..1df8ea503 100644 --- a/output/Scratch/sitemap.xml +++ b/output/Scratch/sitemap.xml @@ -14,11 +14,11 @@ http://yannesposito.com/Scratch/en/blog/programming-language-experience/ - 2011-09-27 + 2011-09-28 http://yannesposito.com/Scratch/en/blog/Higher-order-function-in-zsh/ - 2011-09-27 + 2011-09-28 http://yannesposito.com/Scratch/fr/blog/ @@ -90,7 +90,7 @@ http://yannesposito.com/Scratch/fr/blog/Higher-order-function-in-zsh/ - 2011-09-27 + 2011-09-28 http://yannesposito.com/Scratch/fr/softwares/ypassword/iphoneweb/ @@ -122,7 +122,7 @@ http://yannesposito.com/Scratch/assets/css/main.css - 2011-09-27 + 2011-09-28 http://yannesposito.com/Scratch/fr/blog/feed/feed.xml @@ -162,7 +162,7 @@ http://yannesposito.com/Scratch/fr/blog/programming-language-experience/ - 2011-09-27 + 2011-09-28 http://yannesposito.com/Scratch/en/about/contact/ diff --git a/output/index.html b/output/index.html index 9449d4190..264356805 100644 --- a/output/index.html +++ b/output/index.html @@ -188,7 +188,7 @@ Copyright ©, Yann Esposito
    - Modified: 09/14/2011 + Modified: 09/28/2011
    Entirely done with diff --git a/tasks/convert_images b/tasks/convert_images new file mode 100644 index 000000000..fd276a9b6 --- /dev/null +++ b/tasks/convert_images @@ -0,0 +1 @@ + for fic in src/*; do print $fic:t; convert -quality 50 -channel RGBA -matte -colorspace gray $fic $fic:t