Added stars + updated article
This commit is contained in:
parent
4dfb7fa7bc
commit
0de6c86417
158 changed files with 6730 additions and 416 deletions
|
@ -139,6 +139,7 @@ pre
|
|||
border-radius: 3px
|
||||
padding: 1em
|
||||
line-height: 1.2em
|
||||
font-size: .9em
|
||||
|
||||
p
|
||||
margin-bottom: 1.2em
|
||||
|
@ -788,3 +789,11 @@ ul.bloglist, .archive ul
|
|||
|
||||
.pala
|
||||
font-family: Palatino
|
||||
|
||||
.article .corps
|
||||
p, ul li, ol li
|
||||
a:after
|
||||
content: "☆"
|
||||
vertical-align: super
|
||||
font-size: .5em
|
||||
color: ($mainTextColor/3) + 2*($mainBackgroundColor/3)
|
||||
|
|
|
@ -41,14 +41,17 @@ Safe types are the chains around all strings you'll use.
|
|||
Yesod does its best to handle cross scripting issues. Both between the client and the server and between the server and your DB.
|
||||
Here is an example:
|
||||
|
||||
<code class="html">
|
||||
<a href=@[AnotherPageR]>Go to the other page
|
||||
<code class="html"><a href=@[AnotherPageR]>Go to the other page
|
||||
</code>
|
||||
|
||||
As `AnotherPageR` is of type URL and it could not contains something nefarious.
|
||||
It will be an URL safe. Not something like:
|
||||
|
||||
falselink"><script> bad_code(); </script><a href="pipo
|
||||
<code class="html">
|
||||
falselink"><script> bad_code(); </script><a href="pipo
|
||||
</code>
|
||||
|
||||
Type safety is not magic, but it will help a lot resolving these issues.
|
||||
|
||||
## Widgets
|
||||
|
||||
|
@ -132,7 +135,8 @@ and make the test inside the handler
|
|||
|
||||
From a very subjective point of vue and from what I heard, Haskell is a node.js done as it should be.
|
||||
|
||||
1. _Speed_. This is just astounding.
|
||||
|
||||
1. _Speed_. This is just astounding. Look at [this](http://snapframework.com/blog/2010/11/17/snap-0.3-benchmarks) and then to [this](http://www.yesodweb.com/blog/2011/02/warp-speed-ahead).
|
||||
2. _Haskell_. This is certainly hard to learn but it is just incredibly awesome. If you want to make you a favor. Just learn Haskell. It will be difficult, far more than you can imagine. It is very different from all other languages I used.
|
||||
3. _Good ideas, excellent community_. I follow yesod from some month now and the speed at which the project progress is incredible.
|
||||
|
||||
|
|
|
@ -42,12 +42,15 @@ Les "types saufs" sont le [tonyglandil du web](https://www.youtube.com/watch?v=1
|
|||
|
||||
Yesod fait de son mieux pour typer les objets manipulés et ainsi il fera ce qu'il faut pour ne pas mettre du script dans une URL par exemple.
|
||||
|
||||
<code class="html">
|
||||
<a href=@[AnotherPageR]>Go to the other page
|
||||
<code class="html"><a href=@[AnotherPageR]>Go to the other page
|
||||
</code>
|
||||
|
||||
|
||||
falselink"><script> bad_code(); </script><a href="pipo
|
||||
<code class="html">
|
||||
falselink"><script> bad_code(); </script><a href="pipo
|
||||
</code>
|
||||
|
||||
Les types saufs ne sont pas magiques, mais ils aident beaucoup à résoudre ces problèmes.
|
||||
|
||||
## Les widgets
|
||||
|
||||
|
@ -132,7 +135,8 @@ et faire le test "est-ce que date = 2003 ?" dans le «handler».
|
|||
D'un point de vu très subjectif et de ce que j'ai lu.
|
||||
Haskell est un node.js fait en beaucoup mieux.
|
||||
|
||||
1. _La vitesse_. Simplement incroyable, je ne pense pas qu'il existe quelque chose de plus rapide aujourd'hui.
|
||||
|
||||
1. _La vitesse_. Simplement incroyable, je ne pense pas qu'il existe quelque chose de plus rapide aujourd'hui. Regardez d'abord cet [article](http://snapframework.com/blog/2010/11/17/snap-0.3-benchmarks) puis [celui-ci](http://www.yesodweb.com/blog/2011/02/warp-speed-ahead).
|
||||
2. _Haskell_. C'est certainement le langage de programmation le plus difficile à apprendre que j'ai jamais rencontré. Mais aussi l'un des plus incroyables. Si vous voulez rencontrer tout un tas de notions que vous n'avez jamais croisée avant et faire exploser votre cerveau avec de nouvelles idées, alors apprenez Haskell.
|
||||
3. _Bonnes idées et communauté excellente_. Cela fait quelques mois que je suis la progression de yesod. Et la vitesse à laquelle ça s'est fait est simplement incroyable. De plus les développeur sont intelligents et super sympa.
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
-->
|
||||
<title><%= @item[:title] %></title>
|
||||
</head>
|
||||
<body lang="<%= language %>">
|
||||
<body lang="<%= language %>" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="<%=@config[:webprefix]%>/img/loading.gif" alt="<%= tradOf(:loading) %>"/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -56,8 +56,7 @@ en: Yesod does its best to handle cross scripting issues. Both between the clien
|
|||
en: Here is an example:
|
||||
fr: Yesod fait de son mieux pour typer les objets manipulés et ainsi il fera ce qu'il faut pour ne pas mettre du script dans une URL par exemple.
|
||||
|
||||
<code class="html">
|
||||
<a href=@[AnotherPageR]>Go to the other page
|
||||
<code class="html"><a href=@[AnotherPageR]>Go to the other page
|
||||
</code>
|
||||
|
||||
en: As `AnotherPageR` is of type URL and it could not contains something nefarious.
|
||||
|
@ -188,10 +187,11 @@ en: From a very subjective point of vue and from what I heard, Haskell is a node
|
|||
fr: D'un point de vu très subjectif et de ce que j'ai lu.
|
||||
fr: Haskell est un node.js fait en beaucoup mieux.
|
||||
|
||||
en: 1. _Speed_. This is just astounding. Look at ["this"](http://snapframework.com/blog/2010/11/17/snap-0.3-benchmarks) and then to ["this"](http://www.yesodweb.com/blog/2011/02/warp-speed-ahead).
|
||||
|
||||
en: 1. _Speed_. This is just astounding. Look at [this](http://snapframework.com/blog/2010/11/17/snap-0.3-benchmarks) and then to [this](http://www.yesodweb.com/blog/2011/02/warp-speed-ahead).
|
||||
en: 2. _Haskell_. This is certainly hard to learn but it is just incredibly awesome. If you want to make you a favor. Just learn Haskell. It will be difficult, far more than you can imagine. It is very different from all other languages I used.
|
||||
en: 3. _Good ideas, excellent community_. I follow yesod from some month now and the speed at which the project progress is incredible.
|
||||
fr: 1. _La vitesse_. Simplement incroyable, je ne pense pas qu'il existe quelque chose de plus rapide aujourd'hui. Regardez d'abord cet ["article"](http://snapframework.com/blog/2010/11/17/snap-0.3-benchmarks) puis ["celui-ci"](http://www.yesodweb.com/blog/2011/02/warp-speed-ahead).
|
||||
fr: 1. _La vitesse_. Simplement incroyable, je ne pense pas qu'il existe quelque chose de plus rapide aujourd'hui. Regardez d'abord cet [article](http://snapframework.com/blog/2010/11/17/snap-0.3-benchmarks) puis [celui-ci](http://www.yesodweb.com/blog/2011/02/warp-speed-ahead).
|
||||
fr: 2. _Haskell_. C'est certainement le langage de programmation le plus difficile à apprendre que j'ai jamais rencontré. Mais aussi l'un des plus incroyables. Si vous voulez rencontrer tout un tas de notions que vous n'avez jamais croisée avant et faire exploser votre cerveau avec de nouvelles idées, alors apprenez Haskell.
|
||||
fr: 3. _Bonnes idées et communauté excellente_. Cela fait quelques mois que je suis la progression de yesod. Et la vitesse à laquelle ça s'est fait est simplement incroyable. De plus les développeur sont intelligents et super sympa.
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>Nanoc</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>Better than Grep</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>A try to demystify 'Lost Highway'</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>A try to demystify 'Lost Highway'</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>A try to demystify 'Lost Highway'</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>A try to demystify 'Lost Highway'</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>A try to demystify 'Lost Highway'</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>DRM are EVIL</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Git remote branch creation</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Git for self</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Screensaver compilation option for Snow Leopard<sub>©</sub></title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>ssh to Listen 443 on Snow Leopard</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Why I didn't keep whos.amung.us</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Synchronize Custom WebSite with mobileMe</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Load Disqus Asynchronously</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Disqus versus Intense Debate (Why I switched)</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>jQuery Tag Cloud</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>replace all except some part</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>custom website synchronisation with mobileme (2)</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>How to handle evil IE</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Focus > Minimalism</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>How to preload your site with style</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Menu waiting to hide himself</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>launch daemon from command line</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Untaught Git usage</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Git for n00b</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Git for n00b</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Git for n00b</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Git for n00b</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Git for n00b</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Git for n00b</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>iphone call filter</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Git vs. Bzr</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Change default shell on Mac OS X</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>antialias font in Firefox under Ubuntu</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Pragmatic Regular Expression Exclude</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Pragmatic Regular Expression Exclude (2)</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>split a file by keyword</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>When regexp is not the best solution</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Git Tips</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Encapsulate git</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>I live again!</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>How to repair a cutted XML?</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Trees; Pragmatism and Formalism</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>multi language choices</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Get my blog engine</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Hide Yourself to your Analytics</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Track Events with Google Analytics</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>jQuery popup the easy way</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Cappuccino vs jQuery</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Do not use CSS gradient with Chrome</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Undecidabilities (part 1)</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>New style after holidays</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Now hosted by heroku</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>send mail from command line with attached file</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Use git to calculate trusted mtimes</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>base64 and sha1 on iPhone</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>New Blog Design Constraints</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Secure eMail on Mac in few steps</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>Fun with wav</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>LaTeX like macro for markdown</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>Happy New Year</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>Why I won't use CoffeeScript (sadly)</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>Now hosted on github</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>A more convenient diff</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>ASCII Haskell Mandelbrot</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>Higher order function in zsh</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
@ -292,6 +292,10 @@ function filter {
|
|||
<div id="next_articles">
|
||||
next entries
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/en/blog/Yesod-excellent-ideas/">Yesod excellent ideas <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Learn Vim Progressively</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
@ -528,10 +528,18 @@ $(document).ready(function() {
|
|||
previous entries
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/en/blog/Password-Management/"><span class="nicer">«</span> 40 character's passwords</a>
|
||||
<a href="/Scratch/en/blog/A-more-convenient-diff/"><span class="nicer">«</span> A more convenient diff</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/en/blog/Haskell-Mandelbrot/"><span class="nicer">«</span> ASCII Haskell Mandelbrot</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/en/blog/Password-Management/"><span class="nicer">«</span> 40 character's passwords</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -544,10 +552,14 @@ $(document).ready(function() {
|
|||
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/en/blog/Yesod-excellent-ideas/">Yesod excellent ideas <span class="nicer">»</span></a>
|
||||
<a href="/Scratch/en/blog/Higher-order-function-in-zsh/">Higher order function in zsh <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/en/blog/Yesod-excellent-ideas/">Yesod excellent ideas <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="flush"></div>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>40 character's passwords</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
@ -240,28 +240,40 @@ Further more using shorter password make it even harder for an attaquer to retri
|
|||
<div id="previous_articles">
|
||||
previous entries
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/en/blog/2011-04-20-Now-hosted-on-github/"><span class="nicer">«</span> Now hosted on github</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/"><span class="nicer">«</span> Why I won't use CoffeeScript (sadly)</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/en/blog/2011-01-03-Happy-New-Year/"><span class="nicer">«</span> Happy New Year</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div id="next_articles">
|
||||
next entries
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/en/blog/Haskell-Mandelbrot/">ASCII Haskell Mandelbrot <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/en/blog/A-more-convenient-diff/">A more convenient diff <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/en/blog/Learn-Vim-Progressively/">Learn Vim Progressively <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/en/blog/programming-language-experience/">Programming Language Experience <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/en/blog/Yesod-excellent-ideas/">Yesod excellent ideas <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="flush"></div>
|
||||
</div>
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<link rel="stylesheet" type="text/css" href="/Scratch/css/idc.css" />
|
||||
<link rel="alternate" type="application/rss+xml" title="RSS" href="http://feeds.feedburner.com/yannespositocomen"/>
|
||||
|
||||
<link rel="alternate" lang="fr" xml:lang="fr" title="Yesod excellent ideas" type="text/html" hreflang="fr" href="/Scratch/fr/blog/Yesod-excellent-ideas/" />
|
||||
<link rel="alternate" lang="fr" xml:lang="fr" title="Les idées de yesod" type="text/html" hreflang="fr" href="/Scratch/fr/blog/Yesod-excellent-ideas/" />
|
||||
<link rel="alternate" lang="en" xml:lang="en" title="Yesod excellent ideas" type="text/html" hreflang="en" href="/Scratch/en/blog/Yesod-excellent-ideas/" />
|
||||
<script type="text/javascript" src="/Scratch/js/jquery-1.3.1.min.js"></script>
|
||||
<script type="text/javascript" src="/Scratch/js/jquery.cookie.js"></script>
|
||||
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>Yesod excellent ideas</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
@ -64,7 +64,7 @@
|
|||
|
||||
<p><span class="sc"><abbr title="Too long; didn't read">tl;dr</abbr>: </span></p>
|
||||
|
||||
<p>I follows the yesod web framework for some times now. And I believe it reached the point where you should really consider to use it. But instead of telling you why you should learn Haskell and use yesod, I prefer to talk about new ideas used by yesod I didn’t saw in other frameworks.</p>
|
||||
<p>I follows the <a href="http://www.yesodweb.com">yesod web framework</a> for some times now. And I believe it reached the point where you should really consider to use it. But instead of telling you why you should learn Haskell and use yesod, I prefer to talk about new ideas used by yesod I didn’t saw in other frameworks.</p>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -86,25 +86,30 @@ Newton<span class="Keyword"><</span>script<span class="Keyword">></span><s
|
|||
</pre>
|
||||
|
||||
<p>You must transform each <code><</code> into <code>&lt;</code>.
|
||||
Without this transformation alert will appear each time you try to display this user name.</p>
|
||||
Without this transformation alert will appear each time you try to display this user name.
|
||||
Safe types are the chains around all strings you’ll use.</p>
|
||||
|
||||
<p>yesod does its best to handle cross scripting issues. Both between the client and the server and between the server and your DB.
|
||||
<p>Yesod does its best to handle cross scripting issues. Both between the client and the server and between the server and your DB.
|
||||
Here is an example:</p>
|
||||
|
||||
<pre class="twilight">
|
||||
<span class="MetaTagInline"><span class="MetaTagInline"><</span><span class="MetaTagInline">a</span> <span class="MetaTagInline">href</span>=@[<span class="MetaTagInline">AnotherPageR</span>]<span class="MetaTagInline">></span></span>Go to the other page
|
||||
<pre class="twilight"><span class="MetaTagInline"><span class="MetaTagInline"><</span><span class="MetaTagInline">a</span> <span class="MetaTagInline">href</span>=@[<span class="MetaTagInline">AnotherPageR</span>]<span class="MetaTagInline">></span></span>Go to the other page
|
||||
</pre>
|
||||
|
||||
<p>As <code>AnotherPageR</code> is of type URL and it could not contains something nefarious.
|
||||
It will be an URL safe. Not something like:</p>
|
||||
|
||||
<pre><code>falselink"><script> bad_code(); </script><a href="pipo
|
||||
</code></pre>
|
||||
<pre class="twilight">
|
||||
falselink"><span class="EmbeddedSource"><span class="EmbeddedSource"><</span><span class="MetaTagInline">script</span><span class="EmbeddedSource">></span> bad_code<span class="EmbeddedSource">(</span><span class="EmbeddedSource">)</span><span class="EmbeddedSource">;</span> <span class="EmbeddedSource"></</span><span class="MetaTagInline">script</span><span class="EmbeddedSource">></span></span><span class="MetaTagInline"><span class="MetaTagInline"><</span><span class="MetaTagInline">a</span> <span class="MetaTagInline">href</span>=<span class="String"><span class="String">"</span>pipo</span></span>
|
||||
</pre>
|
||||
|
||||
<p>Type safety is not magic, but it will help a lot resolving these issues.</p>
|
||||
|
||||
<h2 id="widgets">Widgets</h2>
|
||||
|
||||
<p>Yesod widget are different from just JavaScript widget.
|
||||
In yesod widget are <em>more</em> in the server side. Even if you can use yesod widget to manage JavaScript widgets.
|
||||
In yesod widget are a set of small parts of a web application.
|
||||
A bit of CSS, a bit of HTML and a bit of JS for example.
|
||||
If you want to use many widgets in a same page yesod do the work.
|
||||
Some examples of widgets are:</p>
|
||||
|
||||
<ul>
|
||||
|
@ -119,7 +124,7 @@ Some examples of widgets are:</p>
|
|||
<ul>
|
||||
<li>a bit of HTML, </li>
|
||||
<li>a bit of CSS and </li>
|
||||
<li>a bit of Javascript.</li>
|
||||
<li>a bit of javascript.</li>
|
||||
</ul>
|
||||
|
||||
<p>Some in the header, some in the body.</p>
|
||||
|
@ -134,15 +139,18 @@ htmlbody = ...
|
|||
|
||||
<p>The real syntax is:</p>
|
||||
|
||||
<p>toWidgetHeader cassiusFile “button.cassius”
|
||||
toWidgetHeader juliusFile “button.julius”
|
||||
toWidget hamletFile “buttonTemplate.hamlet”</p>
|
||||
<pre class="twilight">
|
||||
toWidgetHeader cassiusFile <span class="String"><span class="String">"</span>button.cassius<span class="String">"</span></span>
|
||||
toWidgetHeader juliusFile <span class="String"><span class="String">"</span>button.julius<span class="String">"</span></span>
|
||||
toWidget hamletFile <span class="String"><span class="String">"</span>buttonTemplate.hamlet<span class="String">"</span></span>
|
||||
</pre>
|
||||
|
||||
<p>Note the awesome Shakespearean inspired name convention. Just for these name you should use yesod.</p>
|
||||
<p>Note the awesome Shakespearean inspired name convention.
|
||||
Another good reason to use yesod.</p>
|
||||
|
||||
<ul>
|
||||
<li>Cassius <em>&</em> Lucius of CSS (a lot similar to SASS and SCSS)</li>
|
||||
<li>Julius for JavaScript</li>
|
||||
<li>Cassius <em>&</em> Lucius of CSS (a lot similar to SASS and SCSS),</li>
|
||||
<li>Julius for JavaScript (not a CoffeeScript is somewhere in the source of yesod),</li>
|
||||
<li>Hamlet for HTML (similar to haml)</li>
|
||||
</ul>
|
||||
|
||||
|
@ -154,11 +162,11 @@ myBigWidget = menuWidget >> contentWidget >> footerWidget
|
|||
|
||||
<p>Furthermore, if you use say 10 widgets each with a bit of CSS, yesod will create a unique and compressed CSS file. Except if you expressed a need to change the header by using different CSS. </p>
|
||||
|
||||
<p>This is just awesome.</p>
|
||||
<p>This is just awesome!</p>
|
||||
|
||||
<h2 id="optimized-routing">Optimized routing</h2>
|
||||
|
||||
<p>In standard routing system you have for each entry a couple: regexp → handler</p>
|
||||
<p>In standard routing system you have for each entry a couple: regexp → handler</p>
|
||||
|
||||
<p>The only way to discover the right rules is to match each regexp to the current URL. Then you can see behaviour such as, if you change the order of the rules you can lose or win time.</p>
|
||||
|
||||
|
@ -180,29 +188,24 @@ Of course two routes must not interfere.</p>
|
|||
|
||||
<p>and make the test inside the handler</p>
|
||||
|
||||
<p>Why you should use yesod. Just saying from a very subjective point of vue, from what I heard, Haskell is a node.js done as it should be.</p>
|
||||
<h2 id="why-yesod">Why yesod?</h2>
|
||||
|
||||
<p>From a very subjective point of vue and from what I heard, Haskell is a node.js done as it should be.</p>
|
||||
|
||||
<ol>
|
||||
<li>Speed. This is just astounding.</li>
|
||||
<li>Haskell. This is certainly hard to learn but it is just incredibly awesome. If you want to make you a favor. Just learn Haskell. It will be difficult, far more than you can imagine. It is very different from all other languages I used.</li>
|
||||
<li>Good ideas, excellent community. I follow yesod from some month now and the speed at which the project progress is incredible.</li>
|
||||
<li><em>Speed</em>. This is just astounding. Look at <a href="http://snapframework.com/blog/2010/11/17/snap-0.3-benchmarks">this</a> and then to <a href="http://www.yesodweb.com/blog/2011/02/warp-speed-ahead">this</a>.</li>
|
||||
<li><em>Haskell</em>. This is certainly hard to learn but it is just incredibly awesome. If you want to make you a favor. Just learn Haskell. It will be difficult, far more than you can imagine. It is very different from all other languages I used.</li>
|
||||
<li><em>Good ideas, excellent community</em>. I follow yesod from some month now and the speed at which the project progress is incredible.</li>
|
||||
</ol>
|
||||
|
||||
<p>If you are a haskeller, I believe you shouldn’t fear the special syntax imposed by the standard yesod way of doing things.
|
||||
Just try it more than the firsts basic tutorials. </p>
|
||||
|
||||
<p>One more thing, if you are a designer, please, help the yesodweb.com website to improve.
|
||||
I am not a designer, but I’m interrested in web design and if I cannot necessarily make stunning design I detect <em>errors</em> in design.
|
||||
I pushed some fixes for their website some time ago but it would be better to provide them new colors, etc…
|
||||
But I also don’t want to hurt any sensibility.
|
||||
The work of Michael Snoyman and Greg Weber is just stunning.</p>
|
||||
|
||||
<p>Until here I believe it goes in the right direction. Even if I believe the real future is by generating HTML pages from the client (using javascript) and server limited to serve JSON (or XML, or any object representation system).</p>
|
||||
<p>Until here I believe it goes in the right direction.
|
||||
Even if I believe the real future is by generating HTML pages from the client (using javascript) and server limited to serve JSON (or XML, or any object representation system).</p>
|
||||
|
||||
<p>I cannot stress too much about how I believe Yesod is good.</p>
|
||||
|
||||
<p>One of the most important point is the responsiveness of the community. It is very active. It is Greg which the first had given a way to <a href="http://www.yesodweb.com/blog/2011/07/haskell-on-heroku">deploy Haskell code to Heroku</a>.</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
@ -253,6 +256,11 @@ The work of Michael Snoyman and Greg Weber is just stunning.</p>
|
|||
<div id="previous_articles">
|
||||
previous entries
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/en/blog/Higher-order-function-in-zsh/"><span class="nicer">«</span> Higher order function in zsh</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/en/blog/programming-language-experience/"><span class="nicer">«</span> Programming Language Experience</a>
|
||||
</div>
|
||||
|
@ -263,11 +271,6 @@ The work of Michael Snoyman and Greg Weber is just stunning.</p>
|
|||
</div>
|
||||
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/en/blog/Password-Management/"><span class="nicer">«</span> 40 character's passwords</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div id="next_articles">
|
||||
next entries
|
||||
|
@ -287,7 +290,7 @@ The work of Michael Snoyman and Greg Weber is just stunning.</p>
|
|||
</div>
|
||||
<div id="lastmod">
|
||||
Created: 10/04/2011
|
||||
Modified: 10/04/2011
|
||||
Modified: 10/18/2011
|
||||
</div>
|
||||
<div>
|
||||
Entirely done with
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>MVC explained</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>Programming Language Experience</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<body lang="en" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
|
@ -519,20 +519,28 @@ But I used all of these languages.</p>
|
|||
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/en/blog/Password-Management/"><span class="nicer">«</span> 40 character's passwords</a>
|
||||
<a href="/Scratch/en/blog/A-more-convenient-diff/"><span class="nicer">«</span> A more convenient diff</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/en/blog/Haskell-Mandelbrot/"><span class="nicer">«</span> ASCII Haskell Mandelbrot</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div id="next_articles">
|
||||
next entries
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/en/blog/Yesod-excellent-ideas/">Yesod excellent ideas <span class="nicer">»</span></a>
|
||||
<a href="/Scratch/en/blog/Higher-order-function-in-zsh/">Higher order function in zsh <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/en/blog/Yesod-excellent-ideas/">Yesod excellent ideas <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -67,7 +67,7 @@
|
|||
</a>
|
||||
</h3>
|
||||
<p>
|
||||
Computer, Philosophy <i>&</i> Life.
|
||||
Computer, Philosophy <em>&</em> Life.
|
||||
</p>
|
||||
</div>
|
||||
<div class="block left">
|
||||
|
@ -79,7 +79,7 @@
|
|||
</h3>
|
||||
<p>
|
||||
Password Manager,
|
||||
Screensavers <i>&</i>
|
||||
Screensavers <em>&</em>
|
||||
Scientific Applications.
|
||||
</p>
|
||||
</div>
|
||||
|
@ -103,7 +103,7 @@
|
|||
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Copyright ©, Yann Esposito</a>
|
||||
</div>
|
||||
<div id="lastmod">
|
||||
Modified: 10/03/2011
|
||||
Modified: 10/19/2011
|
||||
</div>
|
||||
<div>
|
||||
Entirely done with
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>nanoc</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
-->
|
||||
<title>Mieux que grep</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Lost Highway démystifié (un peu)</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Lost Highway démystifié (un peu)</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Lost Highway démystifié (un peu)</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Lost Highway démystifié (un peu)</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Lost Highway démystifié (un peu)</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Les protections anti-copies sont LE MAL</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Création de branches externe avec Git</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Git en solo</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Compilation d'économiseur d'écran sous Snow Leopard<small>©</small></title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>ssh sur le port 443 avec Snow Leopard</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Pourquoi je n'ai pas conservé whos.amung.us</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Héberger son site personnel sur le site mobileMe</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Load Disqus Asynchronously [en]</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Disqus contre Intense Debate (pourquois j'ai changé)</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>jQuery Tag Cloud [en]</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Remplacer tout sauf une partie</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
-->
|
||||
<title>Synchronisation avec mobileme (2)</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<body lang="fr" class="article">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue