diff --git a/content/html/en/blog/Yesod-tutorial-for-newbies.md b/content/html/en/blog/Yesod-tutorial-for-newbies.md index 00afe47ec..2778ddaf5 100644 --- a/content/html/en/blog/Yesod-tutorial-for-newbies.md +++ b/content/html/en/blog/Yesod-tutorial-for-newbies.md @@ -725,12 +725,34 @@ Just for fun, you can try to create an article with the following content: This is the end of this tutorial. I made it very minimal. -If you want to go further, you should take a look at the + +If you already know Haskell and you want to go further, +you should take a look at the recent [i18n blog tutorial](http://yesodweb.com/blog/2012/01/blog-example). It will be obvious I inspired my own tutorial on it. You'll learn in a very straightforward way how easy it is to use authorizations, Time and internationalization. The example on also add a comment system. -_ps:_ You can download the source of the blog at +If, on the other hand you don't know Haskell. +Then you shouldn't jump directly to web programming. +Haskell is a very complex and unusual language. +My advice to go as fast as possible in using Haskell for web programming is: + +1. Start by [try Haskell in your browser](http://tryhaskell.org) +2. Then read the excellent [Learn you a Haskell for Great Good](http://learnyouahaskell.com) +3. If you have difficulties in understanding concepts like monads, you should really read [these articles](http://homepages.inf.ed.ac.uk/wadler/topics/monads.html). For me they were enlightening. +4. If you feel confident, you should be able to follows the [yesod book](http://yesodweb.com/book) and if you find difficult to follows the yesod book, you should read [real world Haskell](book.realworldhaskell.org) first (it is a must read). + +Also, note that: + +- [haskell.org](http://haskell.org) is full of excellent resources. +- [hoogle](http://www.haskell.org/hoogle/) will be very useful +- Use [hlint](http://community.haskell.org/~ndm/hlint/) as soon as possible to get good habits. + +As you should see, if you don't already know Haskell, +the path is long but I guaranty you it will be very rewarding! + +_ps:_ You can download the source of this yesod blog tutorial at [github.com/yogsototh/yosog](http://github.com/yogsototh/yosog). + diff --git a/content/html/fr/blog/Yesod-tutorial-for-newbies.md b/content/html/fr/blog/Yesod-tutorial-for-newbies.md index 92b5ddeb7..b142e0ad3 100644 --- a/content/html/fr/blog/Yesod-tutorial-for-newbies.md +++ b/content/html/fr/blog/Yesod-tutorial-for-newbies.md @@ -726,12 +726,34 @@ Just for fun, you can try to create an article with the following content: This is the end of this tutorial. I made it very minimal. -If you want to go further, you should take a look at the + +If you already know Haskell and you want to go further, +you should take a look at the recent [i18n blog tutorial](http://yesodweb.com/blog/2012/01/blog-example). It will be obvious I inspired my own tutorial on it. You'll learn in a very straightforward way how easy it is to use authorizations, Time and internationalization. The example on also add a comment system. -_ps:_ You can download the source of the blog at +If, on the other hand you don't know Haskell. +Then you shouldn't jump directly to web programming. +Haskell is a very complex and unusual language. +My advice to go as fast as possible in using Haskell for web programming is: + +1. Start by [try Haskell in your browser](http://tryhaskell.org) +2. Then read the excellent [Learn you a Haskell for Great Good](http://learnyouahaskell.com) +3. If you have difficulties in understanding concepts like monads, you should really read [these articles](http://homepages.inf.ed.ac.uk/wadler/topics/monads.html). For me they were enlightening. +4. If you feel confident, you should be able to follows the [yesod book](http://yesodweb.com/book) and if you find difficult to follows the yesod book, you should read [real world Haskell](book.realworldhaskell.org) first (it is a must read). + +Also, note that: + +- [haskell.org](http://haskell.org) is full of excellent resources. +- [hoogle](http://www.haskell.org/hoogle/) will be very useful +- Use [hlint](http://community.haskell.org/~ndm/hlint/) as soon as possible to get good habits. + +As you should see, if you don't already know Haskell, +the path is long but I guaranty you it will be very rewarding! + +_ps:_ You can download the source of this yesod blog tutorial at [github.com/yogsototh/yosog](http://github.com/yogsototh/yosog). + diff --git a/output/Scratch/assets/css/main.css b/output/Scratch/assets/css/main.css index 45502dcb5..9da64b387 100644 --- a/output/Scratch/assets/css/main.css +++ b/output/Scratch/assets/css/main.css @@ -1 +1 @@ -@charset "UTF-8";table.description tr td{border:1px solid#eee}.assombris20{background-color:#eee}body{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}.article #afterheader{counter-reset:niv02}.article #afterheader h2{counter-increment:niv02;counter-reset:niv03;marker-offset:3em}.article #afterheader h2:before{content:counter(niv02) ". "}.article #afterheader h3{counter-increment:niv03;counter-reset:niv04}.article #afterheader h3:before{content:counter(niv02) "." counter(niv03) ". "}.article #afterheader h4{counter-increment:niv04}.article #afterheader h4:before{content:counter(niv02) "." counter(niv03) "." counter(niv04) ". "}pre{background-color:#333;color:#fafafa;box-shadow:0 0 1em black inset;border-radius:3px;padding:1em;line-height:1.2em;font-size:.9em}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:5px;border:2px solid #fafafa;color:#ccc}#clickcomment:hover,#choixlang > a:hover,#choixrss > a:hover,.return > a:hover{color:#e25f2f;text-shadow:0 0 2px#faa;background:#ececec;box-shadow:0 -1px 8px#ccc inset}#clickcomment:active,#choixlang > a:active,#choixrss > a:active,.return > a:active{color:#e25f2f;text-shadow:0 0 2px#faa;background:#eee;box-shadow:0 -1px 8px#aaa inset}.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;border-radius:0}.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:16px}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;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}.corps a:hover img{background-color:#b42}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}.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:1.2em auto;background:none;border:none}img.left{float:left;max-width:30%;margin-top:.6em;margin-right:2em}img.inside{display:inline;vertical-align:middle}pre{overflow-x:auto;overflow-y:hidden}.withfile pre{margin-top:0}.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}.footnotes ol{color:#ccc;font-weight:700}.footnotes ol p{color:#333;font-weight:400}.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;text-align:justify}.pala{font-family:Palatino}.article .corps a:after{content:"†";vertical-align:super;line-height:0;font-size:.66em;color:#888}.article .corps .footnotes a:after,.article .corps sup a:after{content:""}.article .corps sup a{font-weight:700;background:#ccc;padding:0 .3em;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;color:#fafafa}.article .corps sup a:hover{background:#a53}ul#markdown-toc{font-variant:small-caps;list-style:none;padding-left:1.5em}ul#markdown-toc ul{padding-left:1.5em}ul#markdown-toc a:after{content:""}table{border:1px solid#ccc}table tr td{padding:2px .5em}table tr:nth-child(odd){background-color:#f2f2f2}table tr:nth-child(even){background-color:#fafafa}p code{background:#f2f2f2;border:solid 1px#ccc;padding:2px}ul.sameline{list-style:none}ul.sameline li{float:left;margin-left:.5em}.resumearticle{background-color:#f2f2f2;border-radius:7px;box-shadow:0 0 5px #c7c7c7 inset,0 0 5px white;margin:1em 0;padding:1em} \ No newline at end of file +table.description tr td{border:1px solid#eee}.assombris20{background-color:#eee}body{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}.article #afterheader{counter-reset:niv02}.article #afterheader h2{counter-increment:niv02;counter-reset:niv03;marker-offset:3em}.article #afterheader h2:before{content:counter(niv02) ". "}.article #afterheader h3{counter-increment:niv03;counter-reset:niv04}.article #afterheader h3:before{content:counter(niv02) "." counter(niv03) ". "}.article #afterheader h4{counter-increment:niv04}.article #afterheader h4:before{content:counter(niv02) "." counter(niv03) "." counter(niv04) ". "}pre{background-color:#333;color:#fafafa;box-shadow:0 0 1em black inset;border-radius:3px;padding:1em;line-height:1.2em;font-size:.9em}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:5px;border:2px solid #fafafa;color:#ccc}#clickcomment:hover,#choixlang > a:hover,#choixrss > a:hover,.return > a:hover{color:#e25f2f;text-shadow:0 0 2px#faa;background:#ececec;box-shadow:0 -1px 8px#ccc inset}#clickcomment:active,#choixlang > a:active,#choixrss > a:active,.return > a:active{color:#e25f2f;text-shadow:0 0 2px#faa;background:#eee;box-shadow:0 -1px 8px#aaa inset}.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;border-radius:0}.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:16px}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;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}.corps a:hover img{background-color:#b42}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}.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:1.2em auto;background:none;border:none}img.left{float:left;max-width:30%;margin-top:.6em;margin-right:2em}img.inside{display:inline;vertical-align:middle}pre{overflow-x:auto;overflow-y:hidden}.withfile pre{margin-top:0}.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}.footnotes ol{color:#ccc;font-weight:700}.footnotes ol p{color:#333;font-weight:400}.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;text-align:justify}.pala{font-family:Palatino}.article .corps a:after{content:"†";vertical-align:super;line-height:0;font-size:.66em;color:#888}.article .corps .footnotes a:after,.article .corps sup a:after{content:""}.article .corps sup a{font-weight:700;background:#ccc;padding:0 .3em;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;color:#fafafa}.article .corps sup a:hover{background:#a53}ul#markdown-toc{font-variant:small-caps;list-style:none;padding-left:1.5em}ul#markdown-toc ul{padding-left:1.5em}ul#markdown-toc a:after{content:""}table{border:1px solid#ccc}table tr td{padding:2px .5em}table tr:nth-child(odd){background-color:#f2f2f2}table tr:nth-child(even){background-color:#fafafa}p code{background:#f2f2f2;border:solid 1px#ccc;padding:2px}ul.sameline{list-style:none}ul.sameline li{float:left;margin-left:.5em}.resumearticle{background-color:#f2f2f2;border-radius:7px;box-shadow:0 0 5px #c7c7c7 inset,0 0 5px white;margin:1em 0;padding:1em} \ 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 c559afef3..697431aaf 100644 --- a/output/Scratch/en/about/contact/index.html +++ b/output/Scratch/en/about/contact/index.html @@ -60,7 +60,7 @@
-yann.esposito@gmail.com
Follow me on twitter
My preferred bookmarks pinboard
Open Source github
diff --git a/output/Scratch/en/about/index.html b/output/Scratch/en/about/index.html
index 70d10c86a..100705a7a 100644
--- a/output/Scratch/en/about/index.html
+++ b/output/Scratch/en/about/index.html
@@ -104,7 +104,7 @@
But before all, I love to learn. For example, I learned many programming languages: C
, C++
, Objective-C
, Python
, Java
, Perl
, awk
, bash
, zsh
, LaTeX
, Metapost
, camL
… And I’ve got the same passion about computer science research, computer security, philosophy and many other things.
But before all, I love to learn. For example, I learned many programming languages: C
, C++
, Objective-C
, Python
, Java
, Perl
, awk
, bash
, zsh
, LaTeX
, Metapost
, camL
… And I’ve got the same passion about computer science research, computer security, philosophy and many other things.
Then I had a post Ph. D. Degree position in the Hubert Curien Laboratory at St-Etienne. My mission consisted to develop a scientific application (SEDiL). This application should be used by biologist and should have a simple and nice user interface.
-Today I work for AirFrance© via Astek. This job need many differents skills, CMS and Web technologies, Perl, JSP, meta-programming…
+Today I work for AirFrance© via Astek. This job need many differents skills, CMS and Web technologies, Perl, JSP, meta-programming…
diff --git a/output/Scratch/en/blog/01_nanoc/index.html b/output/Scratch/en/blog/01_nanoc/index.html index 414147433..0f37a1274 100644 --- a/output/Scratch/en/blog/01_nanoc/index.html +++ b/output/Scratch/en/blog/01_nanoc/index.html @@ -59,11 +59,11 @@ But a Framework to generate static web pages.You have to program yourself webpages, the code -to generate the menu…
+to generate the menu…I added feature to make my website multilingual for example
-You’ll can find many informations on the +
You’ll can find many informations on the official nanoc website.
diff --git a/output/Scratch/en/blog/02_ackgrep/index.html b/output/Scratch/en/blog/02_ackgrep/index.html index 0c62da131..b82d3aab0 100644 --- a/output/Scratch/en/blog/02_ackgrep/index.html +++ b/output/Scratch/en/blog/02_ackgrep/index.html @@ -54,11 +54,11 @@As Andy Lester told me ack
is a simple file you only have to copy in your ~/bin
folder. Now I’ve got ack
on my professional server.
As Andy Lester told me ack
is a simple file you only have to copy in your ~/bin
folder. Now I’ve got ack
on my professional server.
Go on http://betterthangrep.com to download it.
-Sincerely, I don’t understand ack
don’t become a common command on all UNIX systems. I can no more live without. For me it is as essential as which
or find
.
Sincerely, I don’t understand ack
don’t become a common command on all UNIX systems. I can no more live without. For me it is as essential as which
or find
.
In a first, it is clear for me, it is not a fantastic movie. If you follow this line, you’ll face many problem explaining some scenes.
+In a first, it is clear for me, it is not a fantastic movie. If you follow this line, you’ll face many problem explaining some scenes.
-My hypothesis is the movie describe the Fred’s representation of reality. +
My hypothesis is the movie describe the Fred’s representation of reality. Each of his tries to escape reality will fail.
-Fred had commited an horrible act, a murder, and try to repair his memory to accepts it. He’ll then create alternative realities.
+Fred had commited an horrible act, a murder, and try to repair his memory to accepts it. He’ll then create alternative realities.
Because of the dialog at the begining of the movie. Cops ask Fred if he’s own a video camera:
+Because of the dialog at the begining of the movie. Cops ask Fred if he’s own a video camera:
--“Do you own a video camera?”
+
-“No, Fred hates them.”
-“I like to remember things my own way.”
-“What do you mean by that?”
-“How I remember them, not necessarily the way they happened.”“Do you own a video camera?”
+“No, Fred hates them.”
+“I like to remember things my own way.”
+“What do you mean by that?”
+“How I remember them, not necessarily the way they happened.”
Then, what we see is not reality but the Fred’s perception. Fred is the God of the reality we see. This is why some God/Devil interpretation of the movie works not so bad.
+Then, what we see is not reality but the Fred’s perception. Fred is the God of the reality we see. This is why some God/Devil interpretation of the movie works not so bad.
Who’s this mysterious man? He tells Fred it’s him who invited him in his house. He’s present at the party and in the house of Fred in the same time. Eyes wide open, looking everything Fred’s doing?
+Who’s this mysterious man? He tells Fred it’s him who invited him in his house. He’s present at the party and in the house of Fred in the same time. Eyes wide open, looking everything Fred’s doing?
-It’s a key of the movie. In my humble opinion, I believe it represents the bad part of Fred. Certainly jalousy. If I was catholic, I’ll said he’s Satan. He observe, film but don’t act. He helps Fred to kill Dick Laurent. +
It’s a key of the movie. In my humble opinion, I believe it represents the bad part of Fred. Certainly jalousy. If I was catholic, I’ll said he’s Satan. He observe, film but don’t act. He helps Fred to kill Dick Laurent. Fred had let him enter and cannot let him go. As Iago of Shakespeare is imprisonned by its own jalousy. The Mysterious Man help Fred doing the acts of violence. It also force Fred to remember the reality.
-When he makes love to his wife (Renee), he sees the face of the Mysterious Man instead of his wife’s face. In reality, it’s the same person for Fred. It should be her who’s the origin of his interior badness.
+When he makes love to his wife (Renee), he sees the face of the Mysterious Man instead of his wife’s face. In reality, it’s the same person for Fred. It should be her who’s the origin of his interior badness.
Certainly it’s the mysterious man (Fred himself) who makes them. +
Certainly it’s the mysterious man (Fred himself) who makes them. Their reason should be:
The second hypothesis seems better. We can make much more interpretation with it. It explain in most part the strange phone call from Dick Laurent to Pete. -But the first hypothesis remain coherent. And, we should probably make an in depth explanantion using the first hypothesis. And I’m not sure it would be better.
+But the first hypothesis remain coherent. And, we should probably make an in depth explanantion using the first hypothesis. And I’m not sure it would be better.One of the strength of this movie is to understand there is many other coherent hypothesis. It is an expression of the Rashomon effect. Many different persons could describe in a coherent manner what they saw. But each description contradicts the others.
@@ -85,9 +85,9 @@ But the first hypothesis remain coherent. And, we should probably make an in depThere is much to tell about this movie. But I believe I put all essential keys here. It is a proof this movie is not a random one.
-I believe it is essential to remember the “test of Rorschach effet” when watching this movie.
+I believe it is essential to remember the “test of Rorschach effet” when watching this movie.
-I’d like to know or opinion ; is my interpration wrong?
+I’d like to know or opinion ; is my interpration wrong?
and I don’t speak about many point of view found in forums.
+and I don’t speak about many point of view found in forums.
I finished to find two good site talking about this movie. But none of them still totally convinced me:
@@ -84,7 +84,7 @@ Here some of explanations of Lost Highway I found on the Internet:Nonetheless, this movie must be watched knowing you’ll cannot resolve the solution. At his best you’ll can suggest an interpretation close to the one of David Lynch.
+Nonetheless, this movie must be watched knowing you’ll cannot resolve the solution. At his best you’ll can suggest an interpretation close to the one of David Lynch.
I believe I had found a coherent interpretation which allow to follow the movie without being totally lost. I believed it can give the keys necessary to make its own idea of the movie.
@@ -92,16 +92,16 @@ Here some of explanations of Lost Highway I found on the Internet: -Like the protagonist, everybody see what he want to see in this movie. It is an invitation to think. Watch this movie is a little like watch a Rorschach’s test. What do we see in it? Everybody put its own personnality in the interpretation of the movie.
+Like the protagonist, everybody see what he want to see in this movie. It is an invitation to think. Watch this movie is a little like watch a Rorschach’s test. What do we see in it? Everybody put its own personnality in the interpretation of the movie.
Generally, we stay in this movie and we fail explaining everything. There is almost always a point that don’t fit within the interpretation of the movie. This is why trying to find a unique good interpretation of this movie is a mistake.
+Generally, we stay in this movie and we fail explaining everything. There is almost always a point that don’t fit within the interpretation of the movie. This is why trying to find a unique good interpretation of this movie is a mistake.
-I give an interpretation and not an explanation. Just to tell my vision of the movie should be very different from yours. There is certainly many coherent explanations.
diff --git a/output/Scratch/en/blog/04_drm/index.html b/output/Scratch/en/blog/04_drm/index.html index f6b27e01d..812eda4af 100644 --- a/output/Scratch/en/blog/04_drm/index.html +++ b/output/Scratch/en/blog/04_drm/index.html @@ -66,7 +66,7 @@WTF?
Result, my wife would never buy any TV show on iTunes. She don’t like DVD because it is not as easy to buy and to use than to simply download episodes.
+Result, my wife would never buy any TV show on iTunes. She don’t like DVD because it is not as easy to buy and to use than to simply download episodes.
My wife won’t see these episodes.
-This is a ‘LOSE-LOSE’ cooperation.
My wife won’t see these episodes.
+This is a ‘LOSE-LOSE’ cooperation.
I use Git to manage my personnal projects. I have a centralized repository which all my computer should synchronize with. -Unfortunately I didn’t find clearly what I needed on the official Git documentation.
+Unfortunately I didn’t find clearly what I needed on the official Git documentation.In two words, if you want to use an SVN workflow with Git (and all its advantages) here is how to proceed.
@@ -70,7 +70,7 @@ Unfortunately I didn’t find clearly what I needed on the official Git documentSuppose I’ve got a directory on my local computer containing a project I want to manage via Git. Here what to do:
+Suppose I’ve got a directory on my local computer containing a project I want to manage via Git. Here what to do:
diff --git a/output/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html b/output/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html index 6474cfb3b..536234a1e 100644 --- a/output/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html +++ b/output/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html @@ -56,15 +56,15 @@@@ -72,7 +72,7 @@How to recompile your screensaver to be Snow Leopard© compatible
-I upgraded to Mac OS X 10.6 Snow Leopard©, and my YClock screensaver didn’t work on it. After searching on google, the problem seems to be just a recompilation away. -Unfortunately, even recompiling it in 64 bit it didn’t work either. +
I upgraded to Mac OS X 10.6 Snow Leopard©, and my YClock screensaver didn’t work on it. After searching on google, the problem seems to be just a recompilation away. +Unfortunately, even recompiling it in 64 bit it didn’t work either. After a bit more research (thanks to ElectricSheep ).
I discovered the good parameters for compilation.
-For now I didn’t compiled it to work also on Tiger and Leopard. I don’t know XCode enought to know how to make the Garbage collector to be disabled on 32 bits version and enabled on 64 bits version.
+For now I didn’t compiled it to work also on Tiger and Leopard. I don’t know XCode enought to know how to make the Garbage collector to be disabled on 32 bits version and enabled on 64 bits version.
It was a bit difficult to discover these informations. Hope this post helped someone.
diff --git a/output/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html b/output/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html index 3474415ba..3eca6d070 100644 --- a/output/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html +++ b/output/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html @@ -72,7 +72,7 @@ ssh -p 443 -D 9050 username@hostSsh and Snow Leopard©
-Here I don’t want to talk about how great socks proxy via ssh tunneling is but how to configure my local server.
+Here I don’t want to talk about how great socks proxy via ssh tunneling is but how to configure my local server.
I have Mac with Snow Leopard© at home and it is far from enough to modify the
diff --git a/output/Scratch/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html b/output/Scratch/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html index c15fa7801..57cc7965b 100644 --- a/output/Scratch/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html +++ b/output/Scratch/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html @@ -83,13 +83,13 @@/etc/sshd.config
file. The system uselaunchd
to launch starting daemons.The idea are:
-
- synchronize to a temporary folder then swap the name therefore the website isn’t accessible only during the swap time. It takes only the time of two rename.
+- synchronize to a temporary folder then swap the name therefore the website isn’t accessible only during the swap time. It takes only the time of two rename.
- reiterate all operations until they work (for example, renaming).
For now I use
-rsync
which in fact is no more efficient than a simplecp
with WebDav. And I should use a method to keep track of elements who have changed. before the publication.In fact when I’m on a Mac, I use Transmit which is very cool and far more efficient than the Finder to synchronize files. After the synchronization, I swap the directories.
+In fact when I’m on a Mac, I use Transmit which is very cool and far more efficient than the Finder to synchronize files. After the synchronization, I swap the directories.
My script take a
diff --git a/output/Scratch/en/blog/11_Load_Disqus_Asynchronously/index.html b/output/Scratch/en/blog/11_Load_Disqus_Asynchronously/index.html index c82d4d7ba..4f48b128c 100644 --- a/output/Scratch/en/blog/11_Load_Disqus_Asynchronously/index.html +++ b/output/Scratch/en/blog/11_Load_Disqus_Asynchronously/index.html @@ -58,7 +58,7 @@-s
option in order to make only the swap option. It also take a-a
in order to put the newindex.html
which should point to the new homepage (not the iWeb one).In fact this method works for old threads. But it fails to create new post threads. This is why I tried and be conquered by intensedebate, as you can see in the bottom of this page.
-Remark I didn’t have any comment on my blog when I switched. Therefore my lack of influence was a good thing :-).
+Remark I didn’t have any comment on my blog when I switched. Therefore my lack of influence was a good thing :-).
I also know there is a jQuery plugin to make just that. Unfortunately I had some issue with CSS.
-Now let’s begin.
+Now let’s begin.
Why should I want to load the disqus javascript asynchronously?
I give a solution with jQuery, but I’m certain it will work with many other js library.
+I give a solution with jQuery, but I’m certain it will work with many other js library.
But with this option you still need to provide a CSS. This is why you have to copy the css code from the embed.js
file and rewrite it in a CSS file. You can download the CSS I obtained.
Now it’s done. I believe all should be fine but I just finished the manip for my own site only 1 hour ago. Therefore there should be some error, tell me if it is the case.
+Now it’s done. I believe all should be fine but I just finished the manip for my own site only 1 hour ago. Therefore there should be some error, tell me if it is the case.
diff --git a/output/Scratch/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html b/output/Scratch/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html index 6cd3a90f6..9527ebf8c 100644 --- a/output/Scratch/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html +++ b/output/Scratch/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html @@ -56,7 +56,7 @@I made a blog entry about how I tried to integrate Disqus. I had to wait Disqus comment to be displayed before loading correctly my page. This is why I tried to include it in a “non-blocking” way. Unfortunately, I had difficulties to make it works correctly.
+I made a blog entry about how I tried to integrate Disqus. I had to wait Disqus comment to be displayed before loading correctly my page. This is why I tried to include it in a “non-blocking” way. Unfortunately, I had difficulties to make it works correctly.
Furthermore, it was not trivial to make comment to be shared between multiple version of the same page (each page has three differents representations, one for each language and one more for the multi-language version).
@@ -64,7 +64,7 @@During the time I tried to integrate Disqus I never tried Intense Debate. Now that I have tried, i must confess it does exactly what I needed.
-In order to make it fully asynchronous, you’ve just to download their common js and replace the following line:
+In order to make it fully asynchronous, you’ve just to download their common js and replace the following line:
@@ -87,8 +87,8 @@To conclude, main advantages (for me) of Intense Debate over Disqus:
Voilà.
diff --git a/output/Scratch/en/blog/2009-09-jQuery-Tag-Cloud/index.html b/output/Scratch/en/blog/2009-09-jQuery-Tag-Cloud/index.html index 86e980743..9f27b6fa9 100644 --- a/output/Scratch/en/blog/2009-09-jQuery-Tag-Cloud/index.html +++ b/output/Scratch/en/blog/2009-09-jQuery-Tag-Cloud/index.html @@ -59,7 +59,7 @@ All my site is static and pages are generated with -This is why I’ll give only a Ruby Generator, not a full javascript generator. +
This is why I’ll give only a Ruby Generator, not a full javascript generator. But you can easily translate from Ruby to Javascript.
Here is what you should obtain:
@@ -79,7 +79,7 @@ But you can easily translate from Ruby to Javascript. $('.tag.selected').removeClass('selected'); $('#tag_'+id).addClass('selected'); } -I believe the goal researched by minimalism is Focus. But I don’t believe minimalism should be the goal. Focus should be the goal, and I believe minimalism isn’t necessary to reach it.
+I believe the goal researched by minimalism is Focus. But I don’t believe minimalism should be the goal. Focus should be the goal, and I believe minimalism isn’t necessary to reach it.
-This is why my design is not minimalist, but I decided to remove most of the navigation stuff of all pages of my website. May be I’ll prefer to hide the menu only when you are on blog article. For now, I hide the menu everywhere on the website.
+This is why my design is not minimalist, but I decided to remove most of the navigation stuff of all pages of my website. May be I’ll prefer to hide the menu only when you are on blog article. For now, I hide the menu everywhere on the website.
I first tried to integrate queryLoader, but it didn’t fill my needs.
+I first tried to integrate queryLoader, but it didn’t fill my needs.
The plugin add a black div to hide all the content. But as the script had to be launched at the end of the source code my website show for a small time.
diff --git a/output/Scratch/en/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html b/output/Scratch/en/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html index b17d9ae17..c742264a8 100644 --- a/output/Scratch/en/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html +++ b/output/Scratch/en/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html @@ -135,7 +135,7 @@Simple and lightweight. No timer (almost), no memory leak, no Date…
+Simple and lightweight. No timer (almost), no memory leak, no Date…
Here is a tip, I don’t know why, but I almost always forgot how to do that.
+Here is a tip, I don’t know why, but I almost always forgot how to do that.
When you want to launch a command and this command should not be killed after you close your terminal. Here is how to accomplish that from command line:
diff --git a/output/Scratch/en/blog/2009-10-untaught-git-usage/index.html b/output/Scratch/en/blog/2009-10-untaught-git-usage/index.html index 77251606a..091c5c2ec 100644 --- a/output/Scratch/en/blog/2009-10-untaught-git-usage/index.html +++ b/output/Scratch/en/blog/2009-10-untaught-git-usage/index.html @@ -54,9 +54,9 @@I explain why I had so much difficulties to use Git. There is an “untaught rule” that make hard to work without. Until I read the good document.
+I explain why I had so much difficulties to use Git. There is an “untaught rule” that make hard to work without. Until I read the good document.
-“Cheap branches” aren’t designed to be totally isolated branches but rather should follow a “Master Branch”. There is a Standard Workflow to follow. If you don’t follow it, you prepare yourself with some hard time with Git.
+“Cheap branches” aren’t designed to be totally isolated branches but rather should follow a “Master Branch”. There is a Standard Workflow to follow. If you don’t follow it, you prepare yourself with some hard time with Git.
I must say I was completely convinced. And the more you learn about DCVS the more you see good reason to use them.
-I then needed a versioning system for my team. As they were not used to open source versioning system except those heavy, with a GUI and with and administrator†
+I then needed a versioning system for my team. As they were not used to open source versioning system except those heavy, with a GUI and with and administrator†
After some web searches, I founded three main choices:
@@ -82,7 +82,7 @@After trying each other I chosen Bazaar. It has the simplest User Interface*. My choice was done.
+After trying each other I chosen Bazaar. It has the simplest User Interface*. My choice was done.
After some times, reading on many blogs, I realize Git is far more popular and by influent people.
I then decide to use Git in particular to version this current website. -But after trying it, I found it difficult and couter intuitive (I’ll speak a work about it later).
+But after trying it, I found it difficult and couter intuitive (I’ll speak a work about it later).After calling for some help, when I say Bazaar is much simpler to learn, some people answer me that Git:
-— SO-MUCH-EASY my 12 year old daughter uses it to version its school documents. She has no difficulties at all, creating branches, blah, blah, blah…
+— SO-MUCH-EASY my 12 year old daughter uses it to version its school documents. She has no difficulties at all, creating branches, blah, blah, blah…
If a 12 years old girl has no problem with Git and I (with my Computer Science Ph.D.) have difficulties to uses it like I want, it is frustrating and humiliating. But what makes Git natural for some people and confusing for me?
-I finally understood why reading a document I didn’t read before. It was the untaught part of the conception. The part every developer found so natural it is not necessary to say a word about it. But it was not natural for me.
+I finally understood why reading a document I didn’t read before. It was the untaught part of the conception. The part every developer found so natural it is not necessary to say a word about it. But it was not natural for me.
-† - I speak about ClearCase©. I know there exists command line tools. But it was not the way my team used it.
+† - I speak about ClearCase©. I know there exists command line tools. But it was not the way my team used it.
-* - I never really given its chance to Mercurial. The terminology they chosen was too far from the svn one. And I was used to it.
+* - I never really given its chance to Mercurial. The terminology they chosen was too far from the svn one. And I was used to it.
When you see explanation about branches and DCVS we imagine each branch is totally uncorrelated to each other, except when merging. Everything is magic. This is the “Parallel World” explanation. This way of seeing is explained more in depth in the real good article about branches on betterexplained.
+When you see explanation about branches and DCVS we imagine each branch is totally uncorrelated to each other, except when merging. Everything is magic. This is the “Parallel World” explanation. This way of seeing is explained more in depth in the real good article about branches on betterexplained.
Git was designed to manage the Linux Kernel. Git was designed using the concept of Patch instead of Parallel Worlds.
@@ -124,11 +124,11 @@ But after trying it, I found it difficult and couter intuitive (I’ll speak a wI will not argument about which is the best. Just tell my vision of DCVS come from the Parallel World vision and Git was designed the other way‡.
+I will not argument about which is the best. Just tell my vision of DCVS come from the Parallel World vision and Git was designed the other way‡.
I believe I understood conceptual mechanism under Git. But I had some difficulties with real usage. The worst point, the one I didn’t get before long was because I didn’t get really well the notion of Cheap Branching.
+I believe I understood conceptual mechanism under Git. But I had some difficulties with real usage. The worst point, the one I didn’t get before long was because I didn’t get really well the notion of Cheap Branching.
What is a Cheap Branch? If like me you come from Bazaar, it is a totally new notion. It is in fact the ability to create a branches all of them using the same directory.
@@ -136,10 +136,10 @@ But after trying it, I found it difficult and couter intuitive (I’ll speak a wIn theory, Cheap Branches are exactly like Bazaar branches. The word used is Branch and not Cheap Branch. But there is a slight difference between them. A slight difference between a Cloned Branch and a Cheap Branch.
-A “Standard branch” is what is theoretically a kind of new Parallel World. +
A “Standard branch” is what is theoretically a kind of new Parallel World. But Cheap branch was designed to be future Patch for the main branch of the directory/Cloned branch.
-Of course, I know anybody can state you can totally use Cheap branches as Cloned branches. But they weren’t designed for that. On daily usage, it is a bit uneasy to use it like this.
+Of course, I know anybody can state you can totally use Cheap branches as Cloned branches. But they weren’t designed for that. On daily usage, it is a bit uneasy to use it like this.
Here how Git cheap branches should be used (for more details see Git for Designers):
@@ -148,11 +148,11 @@ But Cheap branch was designed to be future Patch for the mainHere’s how you should not use Git:
+Here’s how you should not use Git:
This simple minor difference of point of view confused me a lot.
@@ -232,15 +232,15 @@ With Bazaar it is:--
- — Try to find the good keyword for this operation
-- — Wrong! Try again!
-- — False, it is not yet right!
+- — Try to find the good keyword for this operation
+- — Wrong! Try again!
+- — False, it is not yet right!
That were the Git bad side. But It has many advantages. Once you’ve understood the cheap branching paradigm. All became clearer for me after. Even if there is also some difficulties with the edit of the .git/config
files (not user friendly at all).
That were the Git bad side. But It has many advantages. Once you’ve understood the cheap branching paradigm. All became clearer for me after. Even if there is also some difficulties with the edit of the .git/config
files (not user friendly at all).
‡ I must precise that I worked a lot with multi-modal logic and particularly about “Temporal Logics” (linear or not). This is why I was more inclined to see things this way. “Ah ! Just to remember my firsts love with computer science !”
+‡ I must precise that I worked a lot with multi-modal logic and particularly about “Temporal Logics” (linear or not). This is why I was more inclined to see things this way. “Ah ! Just to remember my firsts love with computer science !”
Speaking about features I’ll tell Git is the best. -But Git was too much in my way. Is was exactly what I didn’t want for my first DCVS.
+Speaking about features I’ll tell Git is the best. +But Git was too much in my way. Is was exactly what I didn’t want for my first DCVS.
-I shouldn’t have had those difficulties about understanding cheap branching which must be a patch. In reality, Git make a difference between the Tree and the Branch. Which is obviously not the case for Bazaar. Conceptually, bazaar is simpler to understand.
+I shouldn’t have had those difficulties about understanding cheap branching which must be a patch. In reality, Git make a difference between the Tree and the Branch. Which is obviously not the case for Bazaar. Conceptually, bazaar is simpler to understand.
In conclusion, I use Git more often than Bazaar and I must say, that I have some preferences for Git. However, Git lack hardly clear commands name like revert
.
-For now I don’t made alias to correct that. But may be one day I should do that.
Git is a DCVS, which means a Decentralized Concurrent Versions System. Let’s analyze each part of this long term:
+Git is a DCVS, which means a Decentralized Concurrent Versions System. Let’s analyze each part of this long term:
Firstly, versions system manage files. When somebody work with files without a versions system, the following happens frequently:
-When you modify a somehow critical file you don’t want to loose. You copy naturally this file with another name. For example:
+When you modify a somehow critical file you don’t want to loose. You copy naturally this file with another name. For example:
$ cp fichier_important.c fichier_important.c.bak
In consequence of what, the new file, play the role of backup. If you break everything, you can always return in the last state by overwriting your modifications. -Of course, this method is not very professional and is a bit limited. If you make many modifications, you’ll end with many files with strange names like:
+Of course, this method is not very professional and is a bit limited. If you make many modifications, you’ll end with many files with strange names like:@@ -97,7 +97,7 @@ old.fichier_important.c
If you want to make it works correctly, you’ll have to use naming convention. Files take many place even if you modify most of time only some lines.
+If you want to make it works correctly, you’ll have to use naming convention. Files take many place even if you modify most of time only some lines.
Fortunately, versions system are here to help.
@@ -105,13 +105,13 @@ old.fichier_important.cOnce upon a time versions were managed for each file separately. I think about CVS. Then it naturally appears projects are a coherent set of files. Recover each file separately was a tedious work. This is why versions number passed from files to the entire project.
-It is therefore possible to say, “I want to get back three days earlier”.
+It is therefore possible to say, “I want to get back three days earlier”.
What gives versions system? (I didn’t mention everything at all)
+What gives versions system? (I didn’t mention everything at all)
Version Systems are already useful to manage its own projects. They help to organize and resolve partially backup problems. I say partially because you have to backup your repository on a decent file system. But versions system are really interesting is on projects done by many people.
-Let’s begin by an example, a two person project ; Alex and Beatrice. On a file containing a Lovecraft’s gods list:
+Let’s begin by an example, a two person project ; Alex and Beatrice. On a file containing a Lovecraft’s gods list:
@@ -187,7 +187,7 @@ Yogsototh
This word became popular only recently about CVS. And it mainly means two things:
-First, until really recently (SVN), you’ll have to be connected to the distant server to get informations about a project. Like get the history. New decentralized systems work with a local REPOSITORY (directory containing backups and many informations linked to the versions system functionalities). Hence, one can view the history of a project without the need of being connected.
+First, until really recently (SVN), you’ll have to be connected to the distant server to get informations about a project. Like get the history. New decentralized systems work with a local REPOSITORY (directory containing backups and many informations linked to the versions system functionalities). Hence, one can view the history of a project without the need of being connected.
All instances of a project can live independently.
@@ -212,7 +212,7 @@ YogsotothTypical example:
-I develop my project. I’m ameliorating something. An urgent bug is reported.
+I develop my project. I’m ameliorating something. An urgent bug is reported.
With a DCVS I can easily, get back to the version with the bug. Fix it. Send the fix. Get back to my feature work. And even, use the fix for the new version with my new feature.
@@ -237,7 +237,7 @@ YogsotothTo resume
-Let’s resume what we can easily do with DCVS:
+Let’s resume what we can easily do with DCVS:
Versions Systems
@@ -263,7 +263,7 @@ Yogsototh- Easily manipulate branches
-Now let’s see how to obtain all these things easily with Git.
+Now let’s see how to obtain all these things easily with Git.
Conflicts can arise when you change the same line of code on the same file from another branch you’re merging. It can seems a bit intimidating, but with Git this kind of thing is really simple to handle.
+Conflicts can arise when you change the same line of code on the same file from another branch you’re merging. It can seems a bit intimidating, but with Git this kind of thing is really simple to handle.
Now you’re ready to use Git. -Git provide many other functionnalities. Now we’ll see some Git usages older CVS couldn’t handle.
+Now you’re ready to use Git. +Git provide many other functionnalities. Now we’ll see some Git usages older CVS couldn’t handle.
diff --git a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/comprendre/index.html b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/comprendre/index.html index 1f0b9c81c..7d4c15654 100644 --- a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/comprendre/index.html +++ b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/comprendre/index.html @@ -70,9 +70,9 @@All was done to code and decide how to organize your versions after. In other VCS it is not as natural as in Git.
-With Git you can depend of many different sources. Then, there is not necessarily a ‘master’ repository where everybody puts its modifications.
+With Git you can depend of many different sources. Then, there is not necessarily a ‘master’ repository where everybody puts its modifications.
-What changes the most with Git when you come from SVN, it’s the idea of a centralized project on one server. With Git many people could work on the same project but not necessarily on the same repository as main reference. One can easily fix a bug and send a patch to many different versions of a project.
+What changes the most with Git when you come from SVN, it’s the idea of a centralized project on one server. With Git many people could work on the same project but not necessarily on the same repository as main reference. One can easily fix a bug and send a patch to many different versions of a project.
diff --git a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/conf-et-install/index.html b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/conf-et-install/index.html index aa6e563f4..e8230cfb6 100644 --- a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/conf-et-install/index.html +++ b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/conf-et-install/index.html @@ -127,7 +127,7 @@ $ cd ~/Projets $ git clone git://main.server/path/to/file -If there is no git server but you’ve got an ssh
access. Just replace the git://host
by ssh://user@host
. In order not to type your password each time, use:
If there is no git server but you’ve got an ssh
access. Just replace the git://host
by ssh://user@host
. In order not to type your password each time, use:
$ ssh-keygen -t rsa @@ -151,7 +151,7 @@ me@main.server$ rm id_rsa.pub me@main.server$ logout
Now you don’t need to write your password to access the main.server
.
Now you don’t need to write your password to access the main.server
.
Let do a small remark. If you don’t want to version every file. Typically intermediate compilation file, swap files… Then you need to exclude them. Just before launching the git add .
command. You need to create a .gitignore
file in the root directory of your project. This file will contain all exclude pattern. For example:
Let do a small remark. If you don’t want to version every file. Typically intermediate compilation file, swap files… Then you need to exclude them. Just before launching the git add .
command. You need to create a .gitignore
file in the root directory of your project. This file will contain all exclude pattern. For example:
*.o diff --git a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/index.html b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/index.html index febab8250..b34e6a7b8 100644 --- a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/index.html +++ b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/index.html @@ -62,7 +62,7 @@-@@ -110,7 +110,7 @@ git commit -a -m "Fix bug git pushA detailed tutorial of Git for people knowing very few about versions systems. You’ll understand utility of such program and how we use modern version control system. I try to stay as pragmatic as possible.
+A detailed tutorial of Git for people knowing very few about versions systems. You’ll understand utility of such program and how we use modern version control system. I try to stay as pragmatic as possible.
This article is written for people knowing very few about versionning systems. It is also written for those who had didn’t followed progress since CVS or subversion (SVN). This is why, in a first time I’ll explain quickly which are the goal of such systems. Secondly, I’ll explain how to install and configure Git. Then, I give the command for each feature a DCVS must have.
+This article is written for people knowing very few about versionning systems. It is also written for those who had didn’t followed progress since CVS or subversion (SVN). This is why, in a first time I’ll explain quickly which are the goal of such systems. Secondly, I’ll explain how to install and configure Git. Then, I give the command for each feature a DCVS must have.
diff --git a/output/Scratch/en/blog/2009-12-06-iphone-call-filter/index.html b/output/Scratch/en/blog/2009-12-06-iphone-call-filter/index.html index 0b5477768..486210497 100644 --- a/output/Scratch/en/blog/2009-12-06-iphone-call-filter/index.html +++ b/output/Scratch/en/blog/2009-12-06-iphone-call-filter/index.html @@ -56,7 +56,7 @@It is unbelievable you cannot filter your call with an iPhone! The only reason I see for that is a negotiation with phone operator to force users to get phone advertising. It is simple unacceptable.
-I’m a λ iPhone’s user. The only way to filter your call and to manage blacklist is to jailbreak your iPhone. And I don’t want to do that. Then, if like me you find it unacceptable, just write a line to Apple: http://www.apple.com/feedback/iphone.html
+I’m a λ iPhone’s user. The only way to filter your call and to manage blacklist is to jailbreak your iPhone. And I don’t want to do that. Then, if like me you find it unacceptable, just write a line to Apple: http://www.apple.com/feedback/iphone.html
Why even if I believe git
has many bad point I believe it is the best DCVS around to work with. This is why I first tell why I prefer Bazaar over Git. Secondly I’ll talk about the only advantage of git against Bazaar which lead me to prefer it.
Why even if I believe git
has many bad point I believe it is the best DCVS around to work with. This is why I first tell why I prefer Bazaar over Git. Secondly I’ll talk about the only advantage of git against Bazaar which lead me to prefer it.
There is two way of perceive version control system. Either you think in term of branches (see the really good article on betterexplained) or think in term of patches. Another way to say that, is weather you concentrate on vertices or on transitions of the graph of possible states of your project.
-This is the second approach who was behind git
and this is the first behind Bazaar. git
was created by Linus Torvald in order to close some gap in the version system used to develop the Linux kernel. And patches is a term which is more present than ‘state’ in the development community.
This is the second approach who was behind git
and this is the first behind Bazaar. git
was created by Linus Torvald in order to close some gap in the version system used to develop the Linux kernel. And patches is a term which is more present than ‘state’ in the development community.
I first was convinced by Bazaar. Why? Argument in favor of Bazaar were: user friendly, terminology close to the subversion one. And I tried a bit the two, and it was clearly more natural for me to use Bazaar. But after seeing so many people using git
I decided to give it a serious try.
Yes, hum…
+Yes, hum…
It works, but it is clearly not really user friendly. Furthermore, checkout had a complete different signification in older CSV like cvs
et svn
. checkout
was used to get a distant project locally.
Bazaar terminology is far more natural, because there is no command to change the current branch as there is only one branch per directory. Changing a branch in Bazaar is changing the current directory. I also believe it is the biggest problem of Bazaar, I’ll tell you why. And to undo things in Bazaar:
+Bazaar terminology is far more natural, because there is no command to change the current branch as there is only one branch per directory. Changing a branch in Bazaar is changing the current directory. I also believe it is the biggest problem of Bazaar, I’ll tell you why. And to undo things in Bazaar:
bzr revert pipo
@@ -159,7 +159,7 @@ git commit -m "reverted 3
The rule is simple: NEVER use the git reset
command on a version somebody else could have fetched
-It was said. Discover the best method took me some time. I’d made many different tries. The safer and best way of reverting back your tree is to use this method. If you want to make it automatic just had the following alias in your ~/.gitconfig
. Of course this alias will work only on environment having zsh
installed. Which is the cas for most UNIX (Ubuntu, Mac OS X…).
+It was said. Discover the best method took me some time. I’d made many different tries. The safer and best way of reverting back your tree is to use this method. If you want to make it automatic just had the following alias in your ~/.gitconfig
. Of course this alias will work only on environment having zsh
installed. Which is the cas for most UNIX (Ubuntu, Mac OS X…).
@@ -170,7 +170,7 @@ git commit -m "reverted 3
What make git
by far the best DCVS today
-After talking about the negatives points of git
, now it’s time to speak about the very positive feature that make git
the best DCVS in my humble opinion.
+After talking about the negatives points of git
, now it’s time to speak about the very positive feature that make git
the best DCVS in my humble opinion.
Cheap branching
diff --git a/output/Scratch/en/blog/2010-02-15-All-but-something-regexp/index.html b/output/Scratch/en/blog/2010-02-15-All-but-something-regexp/index.html
index 6a5bc1fb3..1deece8e6 100644
--- a/output/Scratch/en/blog/2010-02-15-All-but-something-regexp/index.html
+++ b/output/Scratch/en/blog/2010-02-15-All-but-something-regexp/index.html
@@ -66,7 +66,7 @@
But, there exists a major problem: the complementary of a regular language might not be regular.
Then, for some expression it is absolutely impossible to negate a regular expression.
-But sometimes with some simple regular expression it should be possible†. Say you want to match everything containing the some word say bull
but don’t want to match bullshit
. Here is a nice way to do that:
+But sometimes with some simple regular expression it should be possible†. Say you want to match everything containing the some word say bull
but don’t want to match bullshit
. Here is a nice way to do that:
# match all string containing 'bull' (bullshit comprised)
@@ -122,7 +122,7 @@ There certainly exists many other methods. But the important lesson is
it is not straightforward to exclude something of a regular expression.
-†
+
†
It can be proved that any regular set minus a finite set is also regular.
diff --git a/output/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/index.html b/output/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/index.html
index dc2f51842..d6c4d3327 100644
--- a/output/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/index.html
+++ b/output/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/index.html
@@ -54,7 +54,7 @@
- In my previous post I had given some trick to match all except something. On the same idea, the trick to match the smallest possible string. Say you want to match the string between ‘a’ and ‘b’, for example, you want to match:
+ In my previous post I had given some trick to match all except something. On the same idea, the trick to match the smallest possible string. Say you want to match the string between ‘a’ and ‘b’, for example, you want to match:
a.....a......b..b..a....a....b...
@@ -75,7 +75,7 @@ a.....a......b..b..a....
The next natural way, is to change the greediness. But it is not enough as you will match from the first a
to the first b
.
-Then a simple constatation is that our matching string shouldn’t contain any a
nor b
. Which lead to the last elegant solution.
+Then a simple constatation is that our matching string shouldn’t contain any a
nor b
. Which lead to the last elegant solution.
/a[^ab]*b/
@@ -105,7 +105,7 @@ For example:
<li>...<li</li>
-That string should not match. This is why if we really want to match it correctly† we need to add:
+That string should not match. This is why if we really want to match it correctly† we need to add:
<li>([^<]|<[^l]|<l[^i]|<li[^>])*(|<|<l|<li)</li>
@@ -142,7 +142,7 @@ For example:
And it works in only 9 lines for any beginning and ending string. This solution should look less I AM THE GREAT REGEXP M45T3R, URAN00B, but is more convenient in my humble opinion. Further more, using this last solution prove you master regexp, because you know it is difficult to manage such problems with only a regexp.
-† I know I used an HTML syntax example, but in my real life usage, I needed to match between en:
and ::
. And sometimes the string could finish with e::
.
+† I know I used an HTML syntax example, but in my real life usage, I needed to match between en:
and ::
. And sometimes the string could finish with e::
.
diff --git a/output/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/index.html b/output/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/index.html
index 386eed944..a41e77c8c 100644
--- a/output/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/index.html
+++ b/output/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/index.html
@@ -54,7 +54,7 @@
- Strangely enough, I didn’t find any built-in tool to split a file by keyword. I made one myself in awk
. I put it here mostly for myself. But it could also helps someone else.
+
Strangely enough, I didn’t find any built-in tool to split a file by keyword. I made one myself in awk
. I put it here mostly for myself. But it could also helps someone else.
The following code split a file for each line containing the word UTC
.
diff --git a/output/Scratch/en/blog/2010-03-22-Git-Tips/index.html b/output/Scratch/en/blog/2010-03-22-Git-Tips/index.html
index f9d1e576b..ca017a431 100644
--- a/output/Scratch/en/blog/2010-03-22-Git-Tips/index.html
+++ b/output/Scratch/en/blog/2010-03-22-Git-Tips/index.html
@@ -72,7 +72,7 @@ git clone git+ssh://git@github.com:443/yogsototh/project.git
git clone
can only fetch the master branch.
-If you don’t have much branches, you can simply use clone your project and then use the following command:
+If you don’t have much branches, you can simply use clone your project and then use the following command:
git branch --track local_branch remote_branch
diff --git a/output/Scratch/en/blog/2010-03-23-Encapsulate-git/index.html b/output/Scratch/en/blog/2010-03-23-Encapsulate-git/index.html
index 4e27a1fe9..b8c3bce0f 100644
--- a/output/Scratch/en/blog/2010-03-23-Encapsulate-git/index.html
+++ b/output/Scratch/en/blog/2010-03-23-Encapsulate-git/index.html
@@ -128,7 +128,7 @@ git co clientB && git merge client
:dev => [ :master ],
:client => [ :clientA, :clientB ] }
-def get_current_branch()
+def get_current_branch()
(`git branch --no-color | awk '$1 == "*" {print $2}'`).chop.intern
end
diff --git a/output/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/index.html b/output/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/index.html
index 136737ad6..bc4f5f05b 100644
--- a/output/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/index.html
+++ b/output/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/index.html
@@ -60,14 +60,14 @@
The more you wait to do something, the more difficult it is to start doing it.
-I had to write another post for this blog. I had added many article idea in my todolist. But, I made many other things, and I’ve always said (until now), I’ll do this later. What changed my mind is the haunt of this simple remark about how to be productive in programming.
+
I had to write another post for this blog. I had added many article idea in my todolist. But, I made many other things, and I’ve always said (until now), I’ll do this later. What changed my mind is the haunt of this simple remark about how to be productive in programming.
> Stop write TODO
in your code and make it now!
-> You’ll be surprised by the results.
+> You’ll be surprised by the results.
In short:
> Just do it! ou Juste fait le comme auraient dit les nuls.
-Finally I’ll certainly write blog post more often for a short period of time.
+Finally I’ll certainly write blog post more often for a short period of time.
What did I do?
@@ -77,7 +77,7 @@
I also have a real life. I enjoyed some vacancies with my family.
-I work with Luc on a simple ruby REST/JSON/API oriented framework. It works fairly well, with really few bug until now. We planify to make a simple todolist tutorial. May be in two to three blog posts. This framework is not public for now. It will certainly be after we’ll create some simple web service with it and made a nice website for it.
+I work with Luc on a simple ruby REST/JSON/API oriented framework. It works fairly well, with really few bug until now. We planify to make a simple todolist tutorial. May be in two to three blog posts. This framework is not public for now. It will certainly be after we’ll create some simple web service with it and made a nice website for it.
Then what I plan to do from now:
@@ -89,7 +89,7 @@
provide the sources of this website on github
-There is some random in some of these achivement mostly because they don’t depend totally on me.
+There is some random in some of these achivement mostly because they don’t depend totally on me.
diff --git a/output/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html b/output/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html
index 380bbd4fa..fee760a78 100644
--- a/output/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html
+++ b/output/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html
@@ -86,7 +86,7 @@
Argh! In the middle of an <img>
tag.
-In fact, it is not as difficult as it should sound first. The secret is, you don’t need to keep the complete tree structure to repair it, but only the list of not closed parents.
+In fact, it is not as difficult as it should sound first. The secret is, you don’t need to keep the complete tree structure to repair it, but only the list of not closed parents.
Given with our example, when we are after the first paragraph. we only have to close the div
for class corps
and the XML is repaired. Of course, when you cut inside a tag, you sould go back, as if you where just before it. Delete this tag and all is ok.
@@ -159,7 +159,7 @@ for each tag in the stack, pop it, and write:
-I don’t know if the code can help you, but the raisonning should definitively be known.
+I don’t know if the code can help you, but the raisonning should definitively be known.
diff --git a/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_destination_tree.png b/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_destination_tree.png
index 152c6c1d2..a39289809 100644
Binary files a/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_destination_tree.png and b/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_destination_tree.png differ
diff --git a/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_source_tree.png b/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_source_tree.png
index 4b2d67e93..ae8c96b84 100644
Binary files a/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_source_tree.png and b/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_source_tree.png differ
diff --git a/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html b/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html
index a6704324f..aaedeb786 100644
--- a/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html
+++ b/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html
@@ -71,7 +71,7 @@
Used a pen and a sheet of paper
Made some math.
Crushed the problem in 10 minutes
- Conclusion: The pragmatism shouldn’t mean “never use theory”.
+ Conclusion: The pragmatism shouldn’t mean “never use theory”.
@@ -86,10 +86,10 @@ I entered in the infernal: try & repair loop.
Each step was like:
- – Just this thing to repair and that should be done.
- – OK, now that should just work.
- – Yeah!!!
- – Oops! I forgotten that…
+
– Just this thing to repair and that should be done.
+ – OK, now that should just work.
+ – Yeah!!!
+ – Oops! I forgotten that…
repeat until death
@@ -173,7 +173,7 @@ I had to face a problem of the same kind at my job. The problem was simple to th
You can try if you want. If you attack the problem directly opening an editor, I assure you, it will certainly be not so simple.
-I can tell that, because it’s what I’ve done. And I must say I lost almost a complete day at work trying to resolve this. There was also, many small problems around that make me lose more than two days for this problem.
+I can tell that, because it’s what I’ve done. And I must say I lost almost a complete day at work trying to resolve this. There was also, many small problems around that make me lose more than two days for this problem.
Why after two days did I was unable to resolve this problem which seems so simple?
@@ -194,14 +194,14 @@ I thought about how to resolve the problem but with the eyes of a pragmatic
That should be a simple perl search and replace program.
-Let’s begin to write code
+Let’s begin to write code
This is the second sentence that was plainly wrong. I started in the wrong direction. And the workflow did not work from this entry point.
Think
-After some times, I just stopped to work. Tell myself “it is enough, now, I must finish it!”.
+
After some times, I just stopped to work. Tell myself “it is enough, now, I must finish it!”.
I took a sheet of paper, a pen and began to draw some trees.
I began by make by removing most of the verbosity.
@@ -307,7 +307,7 @@ M - V - M - V - tag2 tag1
can be done using the following one state deterministic tree transducer:
- C → ε
+
C → ε
E → M
R → V
@@ -338,10 +338,10 @@ M - V - M - V - tag2 tag1
-
-
Hopefully I am in the 10% who had given a bug free implementation.↩
+ Hopefully I am in the 10% who had given a bug free implementation.↩
-
-
I did a program which generate automatically the weight in a matrix of each edit distance from data.↩
+ I did a program which generate automatically the weight in a matrix of each edit distance from data.↩
diff --git a/output/Scratch/en/blog/2010-06-14-multi-language-choices/index.html b/output/Scratch/en/blog/2010-06-14-multi-language-choices/index.html
index 9716439b3..b505f908b 100644
--- a/output/Scratch/en/blog/2010-06-14-multi-language-choices/index.html
+++ b/output/Scratch/en/blog/2010-06-14-multi-language-choices/index.html
@@ -73,7 +73,7 @@ here is an example of english text.
This way of handling translations force you to write completely an article in one language, copy it, and translate it.
-However, most of time, there are common parts like images, source code, etc…
+
However, most of time, there are common parts like images, source code, etc…
When I want to correct some mistake on these parts, I have to make twice the work. With sometimes adding another mistake in only one language.
This is why I preferred to handle it differently.
@@ -89,7 +89,7 @@ Finally my files looks like:
[image](url)
-As I edit my files with vim, it is really easy to add fr:
or en:
at some line’s beginning using the useful C-v
.
+
As I edit my files with vim, it is really easy to add fr:
or en:
at some line’s beginning using the useful C-v
.
However nanoc was conceived to be used for one language only. Or to be used with the first method. I tried to adapt nanoc to my usage. But after a while, I found it easier to pre-filter the nanoc work by a simple script. My script transform my file into two new files. And all work like a charm.
You can get my blog code source (without most of articles) at github.com/yogsototh/Scratch.
diff --git a/output/Scratch/en/blog/2010-06-15-Get-my-blog-engine/index.html b/output/Scratch/en/blog/2010-06-15-Get-my-blog-engine/index.html
index ca219514a..45eacf58b 100644
--- a/output/Scratch/en/blog/2010-06-15-Get-my-blog-engine/index.html
+++ b/output/Scratch/en/blog/2010-06-15-Get-my-blog-engine/index.html
@@ -66,7 +66,7 @@ You can get it on github.com
intenseDebate comments integration (asynchronous) ;
Portable with and without javascript, XHTML Strict 1.0 / CSS3,
Write in markdown format (no HTML editing needed),
- Typographic ameliorations (no ‘:’ starting a line in French for example),
+ Typographic ameliorations (no ‘:’ starting a line in French for example),
Graphviz graph generation integration.
@@ -104,9 +104,9 @@ $ ./task/recompile
Multi-language
All files in multi
are processed and copied in the content
directory.
-For each file in multi, each line starting by ‘fr:
’ are copied (without the fr:
into the content/html/fr/
tree, but not into the content/html/en
tree. File not starting by fr:
or en:
are copied in each destinations.
+For each file in multi, each line starting by ‘fr:
’ are copied (without the fr:
into the content/html/fr/
tree, but not into the content/html/en
tree. File not starting by fr:
or en:
are copied in each destinations.
-If you want to add another language, you’ll have to modify tasks/config
, and config.yaml
, create a content/html/xx
where xx
is the language code.
+If you want to add another language, you’ll have to modify tasks/config
, and config.yaml
, create a content/html/xx
where xx
is the language code.
Edition & Rendering
@@ -120,7 +120,7 @@ For each file in multi, each line starting by ‘fr:
’ are copied
Typography
-In French all ‘:’, ‘;’, ‘!’ and ‘?’ are preceded automatically by  
. This enable not to have a line starting by a single special character.
+In French all ‘:’, ‘;’, ‘!’ and ‘?’ are preceded automatically by  
. This enable not to have a line starting by a single special character.
You can use small caps using <sc>
tags.
diff --git a/output/Scratch/en/blog/2010-06-17-track-events-with-google-analytics/index.html b/output/Scratch/en/blog/2010-06-17-track-events-with-google-analytics/index.html
index a1c86c060..f776f23a8 100644
--- a/output/Scratch/en/blog/2010-06-17-track-events-with-google-analytics/index.html
+++ b/output/Scratch/en/blog/2010-06-17-track-events-with-google-analytics/index.html
@@ -119,7 +119,7 @@ _gaq.push([
-Replace the: UA-XXXXXXXX-1
by your google analytics code and you’re done.
+Replace the: UA-XXXXXXXX-1
by your google analytics code and you’re done.
To see what occurs, simply go in Content
and Event Tracking
as shown in the following screenshot:
diff --git a/output/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/index.html b/output/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/index.html
index ff53e9896..4adb3771a 100644
--- a/output/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/index.html
+++ b/output/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/index.html
@@ -64,7 +64,7 @@
Tried to make YPassword in jQuery and with Cappuccino.
Cappuccino nice in desktop browser but 1.4MB, not compatible with iPhone.
jQuery not as nice as the Cappuccino version but 106KB. iPhone compatible.
- I’ll give a try to Dashcode 3.
+ I’ll give a try to Dashcode 3.
@@ -97,7 +97,7 @@ I then made a second version with the Cappuccino
-If you don’t mind about what does my widget and just want to know how the two frameworkcompare, you should go
+
If you don’t mind about what does my widget and just want to know how the two frameworkcompare, you should go
directly to the next part.
@@ -137,7 +137,7 @@ hash=sha1( masterPasswo
maximal length,
must not contain a special character,
must contain a special character,
- etc…
+ etc…
And if you want to change your password the leak number is here for that.
@@ -153,14 +153,14 @@ All informations such as user name, maximal length can be stored in a public fil
Cappuccino
-First, I’d like to say Cappuccino applications look simply awesome.
+
First, I’d like to say Cappuccino applications look simply awesome.
It is like having a Cocoa application in your web browser.
And this is great.
I also must admit I enjoyed making my application with Cappuccino.
It is like programming for an iPhone application.
If you are a bit familiar with Cocoa, you feel at home.
-If you don’t know anything about Cocoa, I suggest you to look at it.
+If you don’t know anything about Cocoa, I suggest you to look at it.
This is a really great framework to make User Interface.
I am not a specialist, but I have done some MFC, java Swing1 and WXWindows User Interfaces (some years ago).
And I must say, Cocoa is far better than those.
@@ -177,45 +177,45 @@ But there was also some drawbacks
I could have done the User Interface using Interface Builder.
-Some things I didn’t like:
+Some things I didn’t like:
- I made some time to understand how to handle the
onChange
on the text fields.
- Documentation lacked a bit of organisation.
- - It doesn’t work on iPhone.
+ - It doesn’t work on iPhone.
- It weighted 11MB to deploy.
- It weight 1.3MB to load.
-I didn’t use bindings because I believe they are not ready by now.
+I didn’t use bindings because I believe they are not ready by now.
jQuery
-The jQuery version of YPassword is not as finished as the Cappuccino one. Because, there is no slider directly with jQuery. I’d have to use jQueryUI. And I believe, using it will make the application weight far more than the today 106KB.
+The jQuery version of YPassword is not as finished as the Cappuccino one. Because, there is no slider directly with jQuery. I’d have to use jQueryUI. And I believe, using it will make the application weight far more than the today 106KB.
-To make this version I simply copied my widget source code and adapted it. It was straightforward. But jQuery is not an application oriented framework. It is more a “dark side javascript animation framework”2.
+To make this version I simply copied my widget source code and adapted it. It was straightforward. But jQuery is not an application oriented framework. It is more a “dark side javascript animation framework”2.
-I don’t have too much to say about the jQuery version. But this was way more low level programming than Cappuccino.
+I don’t have too much to say about the jQuery version. But this was way more low level programming than Cappuccino.
My conclusion
-If you want to make an iPhone compatible web application just don’t use Cappuccino yet.
+
If you want to make an iPhone compatible web application just don’t use Cappuccino yet.
If you want to make simple application like mine, I also believe, Cappuccino is a bit too much.
If you want to make a complex web oriented application, Cappuccino is a great choice.
But you may have some difficulties to begin programming with it.
-Finally, to terminate my web version of my widget, I’ll give a try to Dashcode 3.
+
Finally, to terminate my web version of my widget, I’ll give a try to Dashcode 3.
It seems to be a good alternative to create web widgets.
-I don’t know if Dashcode 3 is portable on non webkit browser.
+I don’t know if Dashcode 3 is portable on non webkit browser.
But if it is, it could be the end of projects like Cappuccino and Sproutcore.
-
-
If you are interested you can take a look at SEDiL. I am proud of the tree drawing view made from scratch.↩
+ If you are interested you can take a look at SEDiL. I am proud of the tree drawing view made from scratch.↩
-
-
I don’t want to feel like a troll I use jQuery to make some dark side animation on this blog. But the javascript on my blog is not needed except for commenting.↩
+ I don’t want to feel like a troll I use jQuery to make some dark side animation on this blog. But the javascript on my blog is not needed except for commenting.↩
diff --git a/output/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html b/output/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html
index 3204aadd0..9c38c3917 100644
--- a/output/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html
+++ b/output/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html
@@ -55,7 +55,7 @@
Some Reddit users reported my website was really long to load and to scroll.
-They thinks it was because of the ‘1px shadow’ I apply on all the text.
+They thinks it was because of the ‘1px shadow’ I apply on all the text.
I was a bit surprised, because I make some test into a really slow virtual machine. And all have always worked fine. In fact, what slow down so much are by order of importance:
@@ -69,7 +69,7 @@ I was a bit surprised, because I make some test into a really slow virt
Safari and Chrome use webkit, when you access my website with javascript enabled, an additionnal browser specific CSS is loaded. Until now I switched only between: IE, Mozilla and Webkit. Now I added one more special case for Chrome. Now I continue to use gradient for Safari but no more on Chrome.
-I didn’t tried to verify the efficiency of all new CSS 3 features. But I advise you not to use -webkit-gradient
on Chrome. At least when the host is a Linux.
+I didn’t tried to verify the efficiency of all new CSS 3 features. But I advise you not to use -webkit-gradient
on Chrome. At least when the host is a Linux.
Box Shadows
@@ -77,7 +77,7 @@ I was a bit surprised, because I make some test into a really slow virt
Text Shadows
-Many tell me to use text-shadows sparingly. But I believe it was not the real reason of the slow down. This is why I’ll get them back.
+Many tell me to use text-shadows sparingly. But I believe it was not the real reason of the slow down. This is why I’ll get them back.
Conclusion
diff --git a/output/Scratch/en/blog/2010-07-09-Indecidabilities/index.html b/output/Scratch/en/blog/2010-07-09-Indecidabilities/index.html
index 9fd20c335..b76e3bc81 100644
--- a/output/Scratch/en/blog/2010-07-09-Indecidabilities/index.html
+++ b/output/Scratch/en/blog/2010-07-09-Indecidabilities/index.html
@@ -85,10 +85,10 @@
If a demiurge made our world, he certainly had a great sense of humor.
After this read, you should be convinced.
-I’ll pretend to be him.
-I’ll create a simplified world.
+I’ll pretend to be him.
+I’ll create a simplified world.
A world that obey to simple mathematical rules.
-And I’ll tell you about one of the curse on this world: the undecidability.
+And I’ll tell you about one of the curse on this world: the undecidability.
The inability to know if we had find the truth.
The inability to predict many things that should be natural.
Here begin the story.
@@ -102,9 +102,9 @@ Here begin the story.
In the beginning there was only void.
Then a blog post beginning to be written.
I breath profoundly to feel the weight of the act I will accomplish.
-A last tense moment and… I create the Universe.
+A last tense moment and… I create the Universe.
An incredible Universe which will exists only the time of this read.
-I’m the demiurge of this universe and you are its observer.
+I’m the demiurge of this universe and you are its observer.
I construct this world using only simples rules.
I decide that real rules of this world will be the one we believe are true for our world.
@@ -113,7 +113,7 @@ For their world, everything we believe today is true for them.
Their world is then probably simpler than our.
Particularly, we can describe this world with axioms and mathematic rules.
It is not so sure for our Universe.
-But we’ll talk about that later.
+But we’ll talk about that later.
Lets the work begin.
I create an Earth.
@@ -123,14 +123,14 @@ In particular they try to understand their world.
They believe that if they know the rules of their world they will be able to predict the consequences of most of their acts.
They are so naive.
If only they knew.
-But I’m here to help them.
+But I’m here to help them.
I am a God who likes jokes.
The first joke I make to Ys is to make their sense imperfect.
Furthermore it is not possible to make perfect precise measure in my world.
I let Ys ameliorate their technology but there is a theoretical limit to the best precision they can reach.
-I’d like to precise that these people believe their world is flat.
+
I’d like to precise that these people believe their world is flat.
Some believe it is possible to find the rules of their Universe.
Now, let the game begins.
@@ -157,14 +157,14 @@ The proof is based on rules and axioms.
How to be certain these rules and axioms are right in their world?
They will try to measure again and again the sum of the angles of triangles.
The measure will never fail.
-But they’ll never be certain the rules and axioms are right.
+But they’ll never be certain the rules and axioms are right.
Because then only way to verify all axioms depends of observation.
And as a facetious god, I forbid perfect measure in observation.
Of course, they prey, they call me to help.
-And as any respectful god, I don’t answer.
-Ah ah ah! I’ve always loved to make these kind of thing.
-Let’s act as if I don’t exists.
+And as any respectful god, I don’t answer.
+Ah ah ah! I’ve always loved to make these kind of thing.
+Let’s act as if I don’t exists.
What a good joke!
They feel sad. But they have some hope:
@@ -180,7 +180,7 @@ What a good joke!
Unfortunately, the three bodies problem will crush this hope.
-Using Newton’s Universal Law of gravitation with two bodies, we can predict with precision what will be their position and speed in the future.
+Using Newton’s Universal Law of gravitation with two bodies, we can predict with precision what will be their position and speed in the future.
Until there all seems OK.
But now, add another body.
All errors will grow.
@@ -198,13 +198,13 @@ Errors will grow at a point that any prediction will be unusable.
-Consider some GPS coordinates on a point around the cost of the “Bretagne” in France.
+
Consider some GPS coordinates on a point around the cost of the “Bretagne” in France.
The coordinates are 3 feet precise.
Is the point in the water or on Earth?
For some coordinates it is not possible to know.
Even if we are authorize to move a bit to dodge the borders.
-Because there are some zone in which all point could be a “border” for any size of the zone.
+Because there are some zone in which all point could be a “border” for any size of the zone.
We can even imagine some mathematical structure where all points are at the border[^2].
[^2]: The set R\Q has this property.
@@ -215,7 +215,7 @@ Because there are some zone in which all point could be a “border” for any s
Until there all problem were undecidable because of measure errors.
May be in a controlled world without any error we should be able to predict anything.
-I’m sorry to say no.
+I’m sorry to say no.
Even in a self-contained mathematical world it can be possible to create object with an unpredictable behaviour.
It is the halting problem.
@@ -231,8 +231,8 @@ More precisely:
Hypothesis: there exists a program P
such that:
- P(x,y)
return “stop” in a finite amount of time if x(y)
1 will stop running.
- P(x,y)
return “loop” in a finite amount of time if x(y)
will never stop running.
+ P(x,y)
return “stop” in a finite amount of time if x(y)
1 will stop running.
+ P(x,y)
return “loop” in a finite amount of time if x(y)
will never stop running.
Remark: Any program can be represented as a string. Therefore, a program can be used as the input of another program.
@@ -241,15 +241,15 @@ It is authorized to write P(x,x)
.
Let Q
be the following program using the return value of P
.
<pre class="twilight">
Q(x) :
- if P(x,x)=”stop” then I enter in an infinite loop
- if P(x,x)=”loop” then I stop
+ if P(x,x)=”stop” then I enter in an infinite loop
+ if P(x,x)=”loop” then I stop
</pre>
Now, what is the value of P(Q,Q)
?
- - if
P(Q,Q)
returns “stop” that imply by construction of Q
that P(Q,Q)
returns “loop”.
- - if
P(Q,Q)
returns “loop” that means by construction of Q
that P(Q,Q)
return “stop”.
+ - if
P(Q,Q)
returns “stop” that imply by construction of Q
that P(Q,Q)
returns “loop”.
+ - if
P(Q,Q)
returns “loop” that means by construction of Q
that P(Q,Q)
return “stop”.
Therefore there is a contradiction the only way to handle is by the non existence of the program P
.
@@ -257,7 +257,7 @@ Q(x) :
I am the demiurge of this imaginary world.
And I cannot know the future of this world.
-Therefore, creative power isn’t equivalent to omnipotence.
+Therefore, creative power isn’t equivalent to omnipotence.
@@ -267,11 +267,11 @@ Therefore, creative power isn’t equivalent to omnipotence.
After all this, it becomes difficult to know what we can believe.
But it would be another error to throw away all our knowledge.
-In a future next part, I’ll explain what we can hope and what attitude we should have once we’ve realized most of truth are unaccessible.
+In a future next part, I’ll explain what we can hope and what attitude we should have once we’ve realized most of truth are unaccessible.
diff --git a/output/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/index.html b/output/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/index.html
index 91ea7ff81..5466658d4 100644
--- a/output/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/index.html
+++ b/output/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/index.html
@@ -135,12 +135,12 @@ heroku create
git push heroku master
-Now I’ll should be able to redirect properly to my own 404 page for example.
+
Now I’ll should be able to redirect properly to my own 404 page for example.
I hope it is helpful.
diff --git a/output/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html b/output/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html
index ff166039c..11cc0aae9 100644
--- a/output/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html
+++ b/output/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html
@@ -55,8 +55,8 @@
I had to send a mail using only command line.
-I was surprised it isn’t straightforward at all.
-I didn’t had pine
nor mutt
or anything like that.
+I was surprised it isn’t straightforward at all.
+I didn’t had pine
nor mutt
or anything like that.
Just mail
and mailx
.
What Internet say (via google) is
@@ -67,7 +67,7 @@ uuencode fic.jpg fic.jpg | mail -s
@@ -118,7 +118,7 @@ H4sICB6Ke0wAA2Rjcl93aXRob3V0X2tleXdvcmQuY3N2ANSdW5ubOJPH7/e7
...
-And to obtain the “encoded” file in base64 I used:
+And to obtain the “encoded” file in base64 I used:
uuencode -m fic.jpg fic.jpg
diff --git a/output/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html b/output/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html
index e17e6e255..1836764c5 100644
--- a/output/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html
+++ b/output/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html
@@ -57,7 +57,7 @@
You can remark at the bottom of each page I provide a last modification date.
This label was first calculated using the mtime
of the file on the file system.
But many times I modify this date just to force some recompilation.
-Therefore the date wasn’t a date of real modification.
+Therefore the date wasn’t a date of real modification.
I use git to version my website.
And fortunately I can know the last date of real change of a file.
diff --git a/output/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html b/output/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html
index 5efc8aa7c..19d6ae195 100644
--- a/output/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html
+++ b/output/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html
@@ -60,7 +60,7 @@ here are two functions to add to your code to have base64
and To use it, simply copy the code in your class and use as this:
-#import <CommonCrypto/CommonDigest.h>
+#import <CommonCrypto/CommonDigest.h>
...
NSString *b64_hash = [self b64_sha1:@"some NSString to be sha1'ed"];
...
@@ -72,46 +72,46 @@ here are two functions to add to your code to have base64
and
-- (unsigned char *)sha1:(NSString *)baseString result:(unsigned char *)result {
- char *c_baseString=(char *)[baseString UTF8String];
- CC_SHA1(c_baseString, strlen(c_baseString), result);
- return result;
+- (unsigned char *)sha1:(NSString *)baseString result:(unsigned char *)result {
+ char *c_baseString=(char *)[baseString UTF8String];
+ CC_SHA1(c_baseString, strlen(c_baseString), result);
+ return result;
}
-- (NSString *)base64:(unsigned char *)result {
- NSString *password=[[NSString alloc] init];
- static const unsigned char cb64[65]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i+=3) {
- password=[password stringByAppendingFormat:@"%c%c%c%c",
- cb64[(result[i] &0xFC)>>2],
- cb64[((result[i] & 0x03) << 4)
- | ((result[i + 1] & 0xF0) >> 4)],
- cb64[((result[i + 1] & 0x0F) << 2)
- | ((result[i + 2] & 0xC0) >> 6)],
- cb64[result[i+2]&0x3F]
+- (NSString *)base64:(unsigned char *)result {
+ NSString *password=[[NSString alloc] init];
+ static const unsigned char cb64[65]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i+=3) {
+ password=[password stringByAppendingFormat:@"%c%c%c%c",
+ cb64[(result[i] &0xFC)>>2],
+ cb64[((result[i] & 0x03) << 4)
+ | ((result[i + 1] & 0xF0) >> 4)],
+ cb64[((result[i + 1] & 0x0F) << 2)
+ | ((result[i + 2] & 0xC0) >> 6)],
+ cb64[result[i+2]&0x3F]
];
}
- return password;
+ return password;
}
-- (NSString *)hexadecimalRepresentation:(unsigned char *)result {
- NSString *password=[[NSString alloc] init];
- for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) {
- password=[password stringByAppendingFormat:@"%02x", result[i]];
+- (NSString *)hexadecimalRepresentation:(unsigned char *)result {
+ NSString *password=[[NSString alloc] init];
+ for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) {
+ password=[password stringByAppendingFormat:@"%02x", result[i]];
}
- return password;
+ return password;
}
-- (NSString *)b64_sha1:(NSString *)inputString {
- unsigned char result[CC_SHA1_DIGEST_LENGTH+1];
- [self sha1:inputString result:result];
- return [self base64:result];
+- (NSString *)b64_sha1:(NSString *)inputString {
+ unsigned char result[CC_SHA1_DIGEST_LENGTH+1];
+ [self sha1:inputString result:result];
+ return [self base64:result];
}
-- (NSString *)hex_sha1:(NSString *)inputString {
- unsigned char result[CC_SHA1_DIGEST_LENGTH+1];
- [self sha1:inputString result:result];
- return [self hexadecimalRepresentation:result];
+- (NSString *)hex_sha1:(NSString *)inputString {
+ unsigned char result[CC_SHA1_DIGEST_LENGTH+1];
+ [self sha1:inputString result:result];
+ return [self hexadecimalRepresentation:result];
}
diff --git a/output/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/index.html b/output/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/index.html
index 75d575753..d20fd95d8 100644
--- a/output/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/index.html
+++ b/output/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/index.html
@@ -64,7 +64,7 @@ But the major problem came from, font-shadow
and gradients.
Then my new design obey to the following rules:
- - no CSS element begining by ‘-moz’ or ‘-webkit’, etc…,
+ - no CSS element begining by ‘-moz’ or ‘-webkit’, etc…,
- no text shadow,
- clean (I mean delete) most javascript.
diff --git a/output/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html b/output/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html
index 3b419ebed..87837855e 100644
--- a/output/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html
+++ b/output/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html
@@ -75,10 +75,10 @@
-I’ve (re)discovered how to become S/MIME compliant.
+
I’ve (re)discovered how to become S/MIME compliant.
I am now suprised how easy it was.
Some years ago it was far more difficult.
-Now I’m able to sign and encrypt my emails.
+Now I’m able to sign and encrypt my emails.
Why is it important?
diff --git a/output/Scratch/en/blog/2010-10-14-Fun-with-wav/index.html b/output/Scratch/en/blog/2010-10-14-Fun-with-wav/index.html
index d09f1421e..cffb5284e 100644
--- a/output/Scratch/en/blog/2010-10-14-Fun-with-wav/index.html
+++ b/output/Scratch/en/blog/2010-10-14-Fun-with-wav/index.html
@@ -60,7 +60,7 @@
tl;dr: Played to process a wav
file. C
was easier and cleaner than Ruby.
-edit: I wanted this program to work only on one specific machine (a x86 on a 32 bit Ubuntu). Therefore I didn’t had any portability consideration. This is only a hack.
+edit: I wanted this program to work only on one specific machine (a x86 on a 32 bit Ubuntu). Therefore I didn’t had any portability consideration. This is only a hack.
@@ -69,7 +69,7 @@
I had to compute the sum of the absolute values of data of a .wav
file.
For efficiency (and fun) reasons, I had chosen C
language.
-I didn’t programmed in C
for a long time.
+
I didn’t programmed in C
for a long time.
From my memory it was a pain to read and write to files.
But in the end I was really impressed by the code I get.
It was really clean.
@@ -81,27 +81,27 @@ The header is then a block of packed bytes.
- The 4th first bytes must contains
RIFF
in ASCII,
- - the following 4th Bytes is an 32 bits integer giving the size of the file minus 8, etc…
+ - the following 4th Bytes is an 32 bits integer giving the size of the file minus 8, etc…
Surprisingly, I believe that reading this kind of file is easier in C
than in most higher level language.
Proof: I only have to search on the web the complete header format and write it in a struct.
-struct wavfile
+struct wavfile
{
- char id[4]; // should always contain "RIFF"
- int totallength; // total file length minus 8
- char wavefmt[8]; // should be "WAVEfmt "
- int format; // 16 for PCM format
- short pcm; // 1 for PCM format
- short channels; // channels
- int frequency; // sampling frequency
- int bytes_per_second;
- short bytes_by_capture;
- short bits_per_sample;
- char data[4]; // should always contain "data"
- int bytes_in_data;
+ char id[4]; // should always contain "RIFF"
+ int totallength; // total file length minus 8
+ char wavefmt[8]; // should be "WAVEfmt "
+ int format; // 16 for PCM format
+ short pcm; // 1 for PCM format
+ short channels; // channels
+ int frequency; // sampling frequency
+ int bytes_per_second;
+ short bytes_by_capture;
+ short bits_per_sample;
+ char data[4]; // should always contain "data"
+ int bytes_in_data;
};
@@ -109,7 +109,7 @@ struct wavfile
But in C
I simply written:
-fread(&header,sizeof(header),1,wav)
+fread(&header,sizeof(header),1,wav)
Only one step to fill my data structure. Magic!
@@ -118,9 +118,9 @@ fread(&header,sizeof(header),1,wav)
In C
, to read a sequence of 2 Bytes numbers I only had to write:
-short value=0;
-while( fread(&value,sizeof(value),1,wav) ) {
- // do something with value
+short value=0;
+while( fread(&value,sizeof(value),1,wav) ) {
+ // do something with value
}
@@ -128,63 +128,63 @@ while( fread(&value,sizeof(value),1,wav) ) {
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
-struct wavfile
+struct wavfile
{
- char id[4]; // should always contain "RIFF"
- int totallength; // total file length minus 8
- char wavefmt[8]; // should be "WAVEfmt "
- int format; // 16 for PCM format
- short pcm; // 1 for PCM format
- short channels; // channels
- int frequency; // sampling frequency
- int bytes_per_second;
- short bytes_by_capture;
- short bits_per_sample;
- char data[4]; // should always contain "data"
- int bytes_in_data;
+ char id[4]; // should always contain "RIFF"
+ int totallength; // total file length minus 8
+ char wavefmt[8]; // should be "WAVEfmt "
+ int format; // 16 for PCM format
+ short pcm; // 1 for PCM format
+ short channels; // channels
+ int frequency; // sampling frequency
+ int bytes_per_second;
+ short bytes_by_capture;
+ short bits_per_sample;
+ char data[4]; // should always contain "data"
+ int bytes_in_data;
};
-int main(int argc, char *argv[]) {
- char *filename=argv[1];
- FILE *wav = fopen(filename,"rb");
- struct wavfile header;
+int main(int argc, char *argv[]) {
+ char *filename=argv[1];
+ FILE *wav = fopen(filename,"rb");
+ struct wavfile header;
- if ( wav == NULL ) {
- fprintf(stderr,"Can't open input file %s", filename);
- exit(1);
+ if ( wav == NULL ) {
+ fprintf(stderr,"Can't open input file %s", filename);
+ exit(1);
}
- // read header
- if ( fread(&header,sizeof(header),1,wav) < 1 )
+ // read header
+ if ( fread(&header,sizeof(header),1,wav) < 1 )
{
- fprintf(stderr,"Can't read file header\n");
- exit(1);
+ fprintf(stderr,"Can't read file header\n");
+ exit(1);
}
- if ( header.id[0] != 'R'
- || header.id[1] != 'I'
- || header.id[2] != 'F'
- || header.id[3] != 'F' ) {
- fprintf(stderr,"ERROR: Not wav format\n");
- exit(1);
+ if ( header.id[0] != 'R'
+ || header.id[1] != 'I'
+ || header.id[2] != 'F'
+ || header.id[3] != 'F' ) {
+ fprintf(stderr,"ERROR: Not wav format\n");
+ exit(1);
}
- fprintf(stderr,"wav format\n");
+ fprintf(stderr,"wav format\n");
- // read data
- long sum=0;
- short value=0;
- while( fread(&value,sizeof(value),1,wav) ) {
- // fprintf(stderr,"%d\n", value);
- if (value<0) { value=-value; }
+ // read data
+ long sum=0;
+ short value=0;
+ while( fread(&value,sizeof(value),1,wav) ) {
+ // fprintf(stderr,"%d\n", value);
+ if (value<0) { value=-value; }
sum += value;
}
- printf("%ld\n",sum);
- exit(0);
+ printf("%ld\n",sum);
+ exit(0);
}
@@ -213,7 +213,7 @@ __attribute__((__packed__))
Therefore this implementation should for big and little endian architecture.
However, it must be compiled with gcc
.
-The new code make more tests but still don’t use mmap
.
+The new code make more tests but still don’t use mmap
.
Here it is:
@@ -222,111 +222,111 @@ Here it is:
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h> // for memcmp
-#include <stdint.h> // for int16_t and int32_t
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h> // for memcmp
+#include <stdint.h> // for int16_t and int32_t
-struct wavfile
+struct wavfile
{
- char id[4]; // should always contain "RIFF"
- int32_t totallength; // total file length minus 8
- char wavefmt[8]; // should be "WAVEfmt "
- int32_t format; // 16 for PCM format
- int16_t pcm; // 1 for PCM format
- int16_t channels; // channels
- int32_t frequency; // sampling frequency
- int32_t bytes_per_second;
- int16_t bytes_by_capture;
- int16_t bits_per_sample;
- char data[4]; // should always contain "data"
- int32_t bytes_in_data;
+ char id[4]; // should always contain "RIFF"
+ int32_t totallength; // total file length minus 8
+ char wavefmt[8]; // should be "WAVEfmt "
+ int32_t format; // 16 for PCM format
+ int16_t pcm; // 1 for PCM format
+ int16_t channels; // channels
+ int32_t frequency; // sampling frequency
+ int32_t bytes_per_second;
+ int16_t bytes_by_capture;
+ int16_t bits_per_sample;
+ char data[4]; // should always contain "data"
+ int32_t bytes_in_data;
} __attribute__((__packed__));
-int is_big_endian(void) {
- union {
- uint32_t i;
- char c[4];
- } bint = {0x01000000};
- return bint.c[0]==1;
+int is_big_endian(void) {
+ union {
+ uint32_t i;
+ char c[4];
+ } bint = {0x01000000};
+ return bint.c[0]==1;
}
-int main(int argc, char *argv[]) {
- char *filename=argv[1];
- FILE *wav = fopen(filename,"rb");
- struct wavfile header;
+int main(int argc, char *argv[]) {
+ char *filename=argv[1];
+ FILE *wav = fopen(filename,"rb");
+ struct wavfile header;
- if ( wav == NULL ) {
- fprintf(stderr,"Can't open input file %s\n", filename);
- exit(1);
+ if ( wav == NULL ) {
+ fprintf(stderr,"Can't open input file %s\n", filename);
+ exit(1);
}
- // read header
- if ( fread(&header,sizeof(header),1,wav) < 1 ) {
- fprintf(stderr,"Can't read input file header %s\n", filename);
- exit(1);
+ // read header
+ if ( fread(&header,sizeof(header),1,wav) < 1 ) {
+ fprintf(stderr,"Can't read input file header %s\n", filename);
+ exit(1);
}
- // if wav file isn't the same endianness than the current environment
- // we quit
- if ( is_big_endian() ) {
- if ( memcmp( header.id,"RIFX", 4) != 0 ) {
- fprintf(stderr,"ERROR: %s is not a big endian wav file\n", filename);
- exit(1);
+ // if wav file isn't the same endianness than the current environment
+ // we quit
+ if ( is_big_endian() ) {
+ if ( memcmp( header.id,"RIFX", 4) != 0 ) {
+ fprintf(stderr,"ERROR: %s is not a big endian wav file\n", filename);
+ exit(1);
}
- } else {
- if ( memcmp( header.id,"RIFF", 4) != 0 ) {
- fprintf(stderr,"ERROR: %s is not a little endian wav file\n", filename);
- exit(1);
+ } else {
+ if ( memcmp( header.id,"RIFF", 4) != 0 ) {
+ fprintf(stderr,"ERROR: %s is not a little endian wav file\n", filename);
+ exit(1);
}
}
- if ( memcmp( header.wavefmt, "WAVEfmt ", 8) != 0
- || memcmp( header.data, "data", 4) != 0
+ if ( memcmp( header.wavefmt, "WAVEfmt ", 8) != 0
+ || memcmp( header.data, "data", 4) != 0
) {
- fprintf(stderr,"ERROR: Not wav format\n");
- exit(1);
+ fprintf(stderr,"ERROR: Not wav format\n");
+ exit(1);
}
- if (header.format != 16) {
- fprintf(stderr,"\nERROR: not 16 bit wav format.");
- exit(1);
+ if (header.format != 16) {
+ fprintf(stderr,"\nERROR: not 16 bit wav format.");
+ exit(1);
}
- fprintf(stderr,"format: %d bits", header.format);
- if (header.format == 16) {
- fprintf(stderr,", PCM");
- } else {
- fprintf(stderr,", not PCM (%d)", header.format);
+ fprintf(stderr,"format: %d bits", header.format);
+ if (header.format == 16) {
+ fprintf(stderr,", PCM");
+ } else {
+ fprintf(stderr,", not PCM (%d)", header.format);
}
- if (header.pcm == 1) {
- fprintf(stderr, " uncompressed" );
- } else {
- fprintf(stderr, " compressed" );
+ if (header.pcm == 1) {
+ fprintf(stderr, " uncompressed" );
+ } else {
+ fprintf(stderr, " compressed" );
}
- fprintf(stderr,", channel %d", header.pcm);
- fprintf(stderr,", freq %d", header.frequency );
- fprintf(stderr,", %d bytes per sec", header.bytes_per_second );
- fprintf(stderr,", %d bytes by capture", header.bytes_by_capture );
- fprintf(stderr,", %d bits per sample", header.bytes_by_capture );
- fprintf(stderr,"\n" );
+ fprintf(stderr,", channel %d", header.pcm);
+ fprintf(stderr,", freq %d", header.frequency );
+ fprintf(stderr,", %d bytes per sec", header.bytes_per_second );
+ fprintf(stderr,", %d bytes by capture", header.bytes_by_capture );
+ fprintf(stderr,", %d bits per sample", header.bytes_by_capture );
+ fprintf(stderr,"\n" );
- if ( memcmp( header.data, "data", 4) != 0 ) {
- fprintf(stderr,"ERROR: Prrroblem?\n");
- exit(1);
+ if ( memcmp( header.data, "data", 4) != 0 ) {
+ fprintf(stderr,"ERROR: Prrroblem?\n");
+ exit(1);
}
- fprintf(stderr,"wav format\n");
+ fprintf(stderr,"wav format\n");
- // read data
- long long sum=0;
- int16_t value;
- int i=0;
- fprintf(stderr,"---\n", value);
- while( fread(&value,sizeof(value),1,wav) ) {
- if (value<0) { value=-value; }
+ // read data
+ long long sum=0;
+ int16_t value;
+ int i=0;
+ fprintf(stderr,"---\n", value);
+ while( fread(&value,sizeof(value),1,wav) ) {
+ if (value<0) { value=-value; }
sum += value;
}
- printf("%lld\n",sum);
- exit(0);
+ printf("%lld\n",sum);
+ exit(0);
}
diff --git a/output/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html b/output/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html
index abefbf881..8f6bc3997 100644
--- a/output/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html
+++ b/output/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html
@@ -58,7 +58,7 @@
-tl;dr: I made a simple macro system for my blog. Now I juste have to write %latex and it show as LaTeX.
+tl;dr: I made a simple macro system for my blog. Now I juste have to write %latex and it show as LaTeX.
@@ -78,8 +78,8 @@ In the header of my files I simply write:
In the body it will replace every occurrence of:
- - %test by This is a macro test,
- - and %latex by LaTeX.
+ - %test by This is a macro test,
+ - and %latex by LaTeX.
The source code is really simple.
diff --git a/output/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html b/output/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html
index cdf08ede0..e0bd4b344 100644
--- a/output/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html
+++ b/output/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html
@@ -62,7 +62,7 @@
Update: I might change my mind now. Why?
I just discovered a js2coffee converter. Furthermore Denis Knauf told me about a CoffeeScript.eval
function.
-And as Denis said: “it is time to use Coffeescript as a javascript with Ruby-like syntax not a Ruby-like programming language”.
+And as Denis said: “it is time to use Coffeescript as a javascript with Ruby-like syntax not a Ruby-like programming language”.
@@ -85,30 +85,30 @@ Recently I used a lot of javascript. After trying
Cappuccino, looking at
backbone.js &
javascriptMVC,
-I’ve finally decided to make my own minimal javascript MVC framework.1
+I’ve finally decided to make my own minimal javascript MVC framework.1
I had to fight the horrible syntax of javascript. It was like experiencing a back-in-time travel:
- Verbose Java-like syntax,
- Strange and insanely Verbose Object Oriented Programming,
- - No easy way to refer to current instance of a class (
this
doesn’t work really well),
- - etc…
+ - No easy way to refer to current instance of a class (
this
doesn’t work really well),
+ - etc…
It was so annoying at a point, I had thinked about creating my own CoffeeScript.
-I’d finished a first draft of my MVC javascript framework.
+
I’d finished a first draft of my MVC javascript framework.
Just after I learned about the existence of CoffeeScript, I immediately created a new git branch to try it.
Here is my experience:
- - I had to install
node.js
and use npm
just to use CoffeeScript. It wasn’t a big deal but it wasn’t as straightfoward as I expected either.
+ - I had to install
node.js
and use npm
just to use CoffeeScript. It wasn’t a big deal but it wasn’t as straightfoward as I expected either.
- Existing javascript file are not coffee compatible.
I had to translate them by hand.
There were no script to help me in this process.
- Thanks to vim, it wasn’t too hard to translate 90% of the javascript using some regexp.
+ Thanks to vim, it wasn’t too hard to translate 90% of the javascript using some regexp.
The
--watch
option of coffee was also really helpful to help in the translation.
But I had to write my own shell script in order to follow an entire directory tree.
- An unexpected event. I made some meta-programming in javascript using
eval
. But in order to work, the string in the eval must be written in pure javascript not in coffee. It was like writing in two different languages. Really not so good.
@@ -141,7 +141,7 @@ Just after I learned about the existence of CoffeeScript, I immediately created
The last two point were definitively really problematic for me.
-But even if I’ll have to work alone, I certainly won’t use CoffeeScript either.
+
But even if I’ll have to work alone, I certainly won’t use CoffeeScript either.
CoffeeScript is a third party and any of their update can break my code.
I experienced this kind of situation many times, and it is very annoying.
Far more than coding with a bad syntax.
@@ -185,10 +185,10 @@ But I believe it would be a really hard task just to simulate the access of curr
-
-
I know it may not be the best nor productive decision, but I’d like to start from scratch and understand how things works under the hood.↩
+ I know it may not be the best nor productive decision, but I’d like to start from scratch and understand how things works under the hood.↩
-
-
I know there is rb2js
, but it doesn’t handle the problem I talk about.↩
+ I know there is rb2js
, but it doesn’t handle the problem I talk about.↩
diff --git a/output/Scratch/en/blog/Haskell-Mandelbrot/index.html b/output/Scratch/en/blog/Haskell-Mandelbrot/index.html
index 6e4c9cf92..c1cf9ce28 100644
--- a/output/Scratch/en/blog/Haskell-Mandelbrot/index.html
+++ b/output/Scratch/en/blog/Haskell-Mandelbrot/index.html
@@ -69,7 +69,7 @@ main = putStrLn $ im 0 where
-To launch it, you’ll need to have haskell installed and to run:
+To launch it, you’ll need to have haskell installed and to run:
ghc --make animandel.hs && animandel
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 ac2161e79..e0fc9376a 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
@@ -71,7 +71,7 @@ Simply because, the more I programmed with zsh the more I tended to work using f
The minimal to have better code are the functions map
, filter
and fold
.
-Let’s compare.
+
Let’s compare.
First a program which convert all gif to png in many different directories of different projects.
Before ⇒
@@ -90,8 +90,8 @@ First a program which convert all gif to png in many different directories of di
(/N)
means to select only directory and not to crash if there isn’t any.(.N)
means to select only files and not to crash if there isn’t any.(/N)
means to select only directory and not to crash if there isn’t any.(.N)
means to select only files and not to crash if there isn’t any.:t
means tail; if toto=/path/to/file.ext
then ${toto:t}=file.ext
.No more bloc! -It might be a little bit harder to read if you’re not used to functional programming notation. +It might be a little bit harder to read if you’re not used to functional programming notation. But it is more concise and robusts.
Another example with some tests.
@@ -146,7 +146,7 @@ map verify_file_name $( filterAlso, the first verstion is a bit easier to read. But the second one is clearly far superior in architecture. -I don’t want to argue why here. +I don’t want to argue why here. Just believe me that the functional programming approach is superior.
Actually I lack the lambda operator. diff --git a/output/Scratch/en/blog/Learn-Vim-Progressively/index.html b/output/Scratch/en/blog/Learn-Vim-Progressively/index.html index 613f8fac9..dae67ce58 100644 --- a/output/Scratch/en/blog/Learn-Vim-Progressively/index.html +++ b/output/Scratch/en/blog/Learn-Vim-Progressively/index.html @@ -73,7 +73,7 @@
Learn vim and it will be your last text editor. -There isn’t any better text editor I know. +There isn’t any better text editor I know. Hard to learn, but incredible to use.
I suggest you to learn it in 4 steps:
@@ -85,16 +85,16 @@ Hard to learn, but incredible to use.By the end of this journey, you’ll become a vim superstar.
+By the end of this journey, you’ll become a vim superstar.
But before we start, just a warning. Learning vim will be painful at first. It will take time. It will be a lot like playing a music instrument. -Don’t expect to be more efficient with vim than with another editor in less than 3 days. +Don’t expect to be more efficient with vim than with another editor in less than 3 days. In fact it will certainly take 2 weeks instead of 3 days.
-In a standard editor, typing on the keyboard is enough to write something and see it on the screen.
Not this time.
Vim is in Normal mode.
-Let’s get in Insert mode.
+Let’s get in Insert mode.
Type on the letter i
.
You should feel a bit better. @@ -127,7 +127,7 @@ And now, the list of command you can use in Normal mode to survive:
Recommended:
hjkl
(highly recommended but not mandatory) → basic cursor move (←↓↑→). Hint: j
look like a down arrow.hjkl
(highly recommended but not mandatory) → basic cursor move (←↓↑→). Hint: j
look like a down arrow.:help <command>
→ Show help about <command>
, you can start using :help
without anything else.Ctrl
key is alway
A last word about notations:
Ctrl-λ
, I’ll write <C-λ>
.Ctrl-λ
, I’ll write <C-λ>
.:
will must end by <enter>
. For example, when I write :q
it means :q<enter>
.You know the commands required for survival. -It’s time to learn a few more commands. +It’s time to learn a few more commands. I suggest:
Take the time to integrate all of these command. Once done, you should be able to do every thing you are able to do on other editors. -But until now, it is a bit awkward. But follow me to the next level and you’ll see why.
+But until now, it is a bit awkward. But follow me to the next level and you’ll see why. -Congratulation reaching this far! We can start the interesting stuff. -At level 3, we’ll only talk about command which are compatible with the old vi.
+At level 3, we’ll only talk about command which are compatible with the old vi.Let’s look at how vim could help you to repeat yourself:
+Let’s look at how vim could help you to repeat yourself:
.
→ (dot) will repeat the last command,2dd
→ will delete 2 lines3p
→ will paste the text 3 times100idesu [ESC]
→ will write “desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu “.
→ Just after the last command will write again the 100 “desu “. 3.
→ Will write 3 “desu” (and not 300, how clever).100idesu [ESC]
→ will write “desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu “.
→ Just after the last command will write again the 100 “desu “. 3.
→ Will write 3 “desu” (and not 300, how clever).Knowing how to move efficiently with vim is very important. -Don’t skip this section.
+Don’t skip this section.G
→ Go to line NBy default, word are composed of letter and the underscore character. -Let’s call a WORD a group of letter separated by blank characters. +Let’s call a WORD a group of letter separated by blank characters. If you want to consider WORDS, then just use uppercases:
Now let’s talk about very efficient moves:
+Now let’s talk about very efficient moves:
@@ -306,12 +306,12 @@ Most commands can be used using the following general format:
We also can do things like
+But alsoye
, yank from here to the end of the word. -But alsoy2/foo
yank up to the second occurrence of “foo”.y2/foo
yank up to the second occurrence of “foo”.But what was true for
+is also true fory
(yank), -is also true ford
(delete),v
(visual select),gU
(uppercase),gu
(lowercase), etc…d
(delete),v
(visual select),gU
(uppercase),gu
(lowercase), etc… -4th Level – Vim Superpowers
+4th Level – Vim Superpowers
With all preceding commands you should be comfortable to use vim. But now, here are the killer features. @@ -368,7 +368,7 @@ Typically:
0<C-v><C-d>I-- [ESC]
@@ -378,7 +378,7 @@ Typically:
^
→ go to start of the line- -
<C-v>
→ Start block selection- +
<C-d>
→ move down (could also bejjj
or%
, etc…)<C-d>
→ move down (could also bejjj
or%
, etc…)I-- [ESC]
→ write--
to comment each line0<C-v><C-d>I-- [ESC]
Completion:
-<C-n>
and<C-p>
.In Insert mode, just type the start of a word, then type
<C-p>
, magic… +In Insert mode, just type the start of a word, then type
<C-p>
, magic…Macros :
@@ -429,7 +429,7 @@ Once the selection made, you can:qa
do somethingq
,@a
,@@
@@ -443,7 +443,7 @@ Once the selection made, you can:
- -
<C-v>
- go to desired line (
+jjj
or<C-d>
or/pattern
or%
etc…)- go to desired line (
jjj
or<C-d>
or/pattern
or%
etc…)$
go to the end of lineA
, write text,ESC
.@@ -455,7 +455,7 @@ Once the selection made, you can:
- -
:split
→ create a split (:vsplit
create a vertical split)- +
<C-w><dir>
: where dir is any ofhjkl
or ←↓↑→ to change split.<C-w><dir>
: where dir is any ofhjkl
or ←↓↑→ to change split.<C-w>_
(resp.<C-w>|
) : maximise size of split (resp. vertical split)<C-w>+
(resp.<C-w>-
) : Grow (resp. shrink) splitThat was 90% of commands I use every day. I suggest you to learn no more than one or two new command per day. -After two to three weeks you’ll start to feel the power of vim in your hands.
+After two to three weeks you’ll start to feel the power of vim in your hands.Learning Vim is more a matter of training than plain memorization. Fortunately vim comes with some very good tools and an excellent documentation. @@ -463,7 +463,7 @@ Run vimtutor until you are familiar with most basic commands. Also, you should read carefully this page:
:help usr_02.txt
.Then, you will learn about
+Learn vim like you’d learn piano and all should be fine.!
, folds, registers, the plugins and many other features. -Learn vim like you’d learn piano and all should be fine.alternate reality analyser analytics Apple ASCII Asynchronous awk Basic Bazaar blacklist blog branch branches bzr C C++ Cappuccino Chrome Cocoa Coffeescript colors comments CSS David Lynch DCVS dcvs design diff disqus diverged drm editor email extension file filter Firefox foldr Fonts format fractal framework functional git golfed Google haskell hide higher order functions HTML ideas indecidability intense debate iPhone iTunes Java javascript jQuery languages LaTeX learn Linux local Logo Lost Highway m4 mac Mac macros mandelbrot map markdown mathematics mobileme movie multi-language nanoc negate Objective-C OS X password Perl philosophy popup programming protection regex regexp regular expression remote ruby S/MIME Safari science screensaver script security shell ssh statistics SVG svn synchronisation theory tip tree tutorial Ubuntu User vi vim wav web WebDav webdesign workflow Xcode XML XSLT yesod zsh