From 2899afb3d9d299d4701617e4302e8c7bcbfeaaed Mon Sep 17 00:00:00 2001 From: Yann Esposito Date: Wed, 10 Oct 2012 17:29:21 +0200 Subject: [PATCH 01/28] added a better font for graphviz\n\n\tmust install ttf fonts http://sourceforge.net/projects/cm-unicode/files/ --- lib/graph.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/graph.rb b/lib/graph.rb index 2ee5284e5..b5aa97579 100644 --- a/lib/graph.rb +++ b/lib/graph.rb @@ -12,8 +12,8 @@ class Graph < Nanoc3::Filter fontsize=10; rankdir="LR"; graph [truecolor bgcolor="#FAFAFA00"]; - node [width=0, height=0, fontname="Optima Bold", shape="box", color="#333333", style="filled" fillcolor="#FAFAFA", fontcolor="#333333"] ; - edge [arrowsize=.5, color="#333333"] ; ] + node [width=0, height=0, fontname="CMU Serif Italic", shape="box", color="#333333", style="filled" fillcolor="#FAFAFA", fontcolor="#333333"] ; + edge [fontname="CMU Serif Italic", arrowsize=.5, color="#333333"] ; ] f.write str f.write %[}] end From b5d77050e0ef04b3b96af28e423174ce25795a9b Mon Sep 17 00:00:00 2001 From: "Yann Esposito (Yogsototh)" Date: Wed, 10 Oct 2012 21:12:45 +0200 Subject: [PATCH 02/28] the size is a bug on linux only --- layouts/article.html | 1 - 1 file changed, 1 deletion(-) diff --git a/layouts/article.html b/layouts/article.html index 890f30c6a..5148d9583 100644 --- a/layouts/article.html +++ b/layouts/article.html @@ -28,7 +28,6 @@ - From f691fbe679c0e6ab61a05c4b10aca22974724ca4 Mon Sep 17 00:00:00 2001 From: "Yann Esposito (Yogsototh)" Date: Wed, 10 Oct 2012 21:32:22 +0200 Subject: [PATCH 03/28] updated --- .../en/blog/Category-Theory-Programming.md | 227 +++ .../fr/blog/Category-Theory-Programming.md | 227 +++ img_latest_blog_dir | 2 +- latest.ymd | 2 +- multi/blog/Category-Theory-Programming.md | 229 +++ output/Scratch/assets/css/main.css | 2 +- .../graph/The_destination_tree.png | Bin 24490 -> 30515 bytes .../graph/The_source_tree.png | Bin 19344 -> 23756 bytes .../code/00_Introduction.lhs | 203 +++ .../First_Na__ve_Category_Representation.png | Bin 0 -> 9272 bytes .../graph/Na__ve_Category_Representation.png | Bin 0 -> 11400 bytes .../Na__ve_Category_Representation_Mess.png | Bin 0 -> 12887 bytes .../blog/Haskell-OpenGL-Mandelbrot/index.html | 35 +- output/Scratch/en/blog/feed/feed.xml | 71 +- .../graph/The_destination_tree.png | Bin 24490 -> 30515 bytes .../graph/The_source_tree.png | Bin 19344 -> 23756 bytes .../code/00_Introduction.lhs | 203 +++ .../First_Na__ve_Category_Representation.png | Bin 0 -> 9272 bytes .../graph/Na__ve_Category_Representation.png | Bin 0 -> 11400 bytes .../Na__ve_Category_Representation_Mess.png | Bin 0 -> 12887 bytes .../blog/Haskell-OpenGL-Mandelbrot/index.html | 35 +- output/Scratch/fr/blog/feed/feed.xml | 66 +- output/Scratch/sitemap.xml | 1446 +++++++++-------- output/index.html | 6 +- 24 files changed, 1934 insertions(+), 820 deletions(-) create mode 100644 content/html/en/blog/Category-Theory-Programming.md create mode 100644 content/html/fr/blog/Category-Theory-Programming.md create mode 100644 multi/blog/Category-Theory-Programming.md create mode 100644 output/Scratch/en/blog/Category-Theory-Programming/code/00_Introduction.lhs create mode 100644 output/Scratch/en/blog/Category-Theory-Programming/graph/First_Na__ve_Category_Representation.png create mode 100644 output/Scratch/en/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation.png create mode 100644 output/Scratch/en/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation_Mess.png create mode 100644 output/Scratch/fr/blog/Category-Theory-Programming/code/00_Introduction.lhs create mode 100644 output/Scratch/fr/blog/Category-Theory-Programming/graph/First_Na__ve_Category_Representation.png create mode 100644 output/Scratch/fr/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation.png create mode 100644 output/Scratch/fr/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation_Mess.png diff --git a/content/html/en/blog/Category-Theory-Programming.md b/content/html/en/blog/Category-Theory-Programming.md new file mode 100644 index 000000000..8f68a6d0f --- /dev/null +++ b/content/html/en/blog/Category-Theory-Programming.md @@ -0,0 +1,227 @@ +----- +isHidden: false +menupriority: 1 +kind: article +created_at: 2012-10-01T19:16:43+02:00 +title: Categeory Theory Programming +author_name: Yann Esposito +author_uri: yannesposito.com +tags: + - Haskell + - programming + - functional + - category theory +----- + +begindiv(intro) + +%tldr How to program using category theory. + +>

Table of Content
+> +> * This will be replaced by the ToC +> {:toc} +> + +enddiv + +## Introduction + +%TODO{Do everything after the end} + +Now, it is time to talk about Categories. +How this notion could help you and how it is easy to use with Haskell. + +- What are categories? +- How to use them? + +### Programming Paradigms + +When you program, you resolve problems. +There are a lot of different means to resolve a problem. +Many different "school of thought"[^school] exists. + +[^school]: Écoles de pensées + +**Imperative paradigm**: +In programming, most people use the imperative paradigm. +You have an infinite number of cell and you can write things on them. +Of course, it is more complex with modern architecture, but the paradigm is the same. +Hidden somewhere, there is the model of the Turing machine. + +**Functional paradigm**: +Another paradigm, is the functional paradigm. +This time, you don't write on cells, but instead you have a flow of data. +And you transform the flows in another flows... Mostly it looks like pipes. +I am a bit restrictive here. But generally this is how functional programming is perceived. +The main theory behind this paradigm is the Set theory. +You have a set and you go from one set to another set by using a function. + +**Category paradigm**: +I believe there is another paradigm arising from Category theory. +Category theory feels both more general and powerful to help solve problems. + +First, you must realize there are categories everywhere. +With the category theory you can find relationships between quantum physics, +topology, logic (both predicate and first order), programming. +Most of the time, the object your are programming with will form a category. + +This is the promise from the Category Theory. +Another even better paradigm. +A paradigm with gates between many different domains. + +## Get some intuition + +We write down the definition first. +And will discuss about some categories. + +
+\\( \newcommand{\hom}{\mathrm{hom}} \\) +
+ + > **Definition**: + > + > A category \\(C\\) consist of: + > + > - A collection of _objects_ \\(ob(C)\\) + > - For every pair of objects \\((A,B)\\) a set \\(\hom(A,B)\\) + > of _morphisms_ \\(f:A→B\\) (Another notation for \\(f\in \hom(A,B)\\)) + > - A composition operator \\(∘\\) + > which associate to each couple \\(g:A→B\\), \\(f:B→C\\) another morphism \\(f∘g:A→C\\). + > + > With the following properties + > + > - for each object \\(x\\) there is an identity morphism + > \\(id_x:x→x\\) + > s.t. for any morphism \\(f:A->B\\), + > \\(id_A∘f = f = f∘id_B\\) + > - for all triplet of morphisms \\(h:A->B\\), \\(g:B->C\\) and \\(f:C->D\\) + > \\( (f∘g)∘h = f∘(g∘h) \\) + +### Representation of Category + +Representing Category is not just a game. +It will be _very_ important. +But in the same time, it will help you to gain intuition about categories. + +A naïve representation (which can work in many cases) is to represent +a specific category as a directed graph. +Here is a first example of the representation of a category: + + + +A -> B [label="f"] +B -> C [label="g"] +A -> C [label="h"] + +A -> A [label="idA"] +B -> B [label="idB"] +C -> C [label="idC"] + + + +From this graph we can conclude without any ambiguity that: + +\\[ob(C)=\\{A,B,C\\}\\] +and +\\[\hom(C)=\\{f,g,h,idA,idB,idC\\}\\] + +Instantaneously, we understand that we can get rid of all \\(idX\\) arrows. + +But in reality, we lack an important information. +What is \\(∘\\)? + +Now, we can add informations to our previous representation. +We simply add a relation between 3 arrows that represent the composition. + + + +f[label="", fixedsize="false", width=0,height=0,shape=none]; +A -> f[label="f", arrowhead=None] +f -> B + +g[label="", fixedsize="false", width=0,height=0,shape=none]; +B -> g[label="g", arrowhead=None] +g -> C + +fg [label="", fixedsize="false", width=0,height=0,shape=none]; +AC [label="", fixedsize="false", width=0,height=0,shape=none]; + +f -> fg [color="#b58900",style=dashed,arrowhead=None] +fg -> g [color="#b58900",style=dashed,arrowhead=None] +fg -> AC [label="h=g∘f",colorlabel="#b58900",color="#b58900",style=bold] + +A -> AC [label="h",arrowhead=None] +AC -> C + + + +Now we have a complete representation. +We don't have to represent \\(idX\\), we know there are there. +And we also don't have to represent composition implying \\(idX\\) morphisms. +But, even this little graph look complex. +To show just how complex things can be; +we just double the number morphisms between different objects. + + + +f[label="", fixedsize="false", width=0,height=0,shape=none]; +A -> f[label="f", arrowhead=None] +f -> B + +fp[label="", fixedsize="false", width=0,height=0,shape=none]; +A -> fp[label="f'", arrowhead=None] +fp -> B + +g[label="", fixedsize="false", width=0,height=0,shape=none]; +B -> g[label="g", arrowhead=None] +g -> C + +gp[label="", fixedsize="false", width=0,height=0,shape=none]; +B -> gp[label="g'", arrowhead=None] +gp -> C + +fg[label="", fixedsize="false", width=0,height=0,shape=none]; +fpg[label="", fixedsize="false", width=0,height=0,shape=none]; +fgp[label="", fixedsize="false", width=0,height=0,shape=none]; +fpgp[label="", fixedsize="false", width=0,height=0,shape=none]; +AC[label="", fixedsize="false", width=0,height=0,shape=none]; +ApCp[label="", fixedsize="false", width=0,height=0,shape=none]; + +f -> fg [color="#b58900",style=dashed,arrowhead=None] +fg -> g [color="#b58900",style=dashed,arrowhead=None] +fg -> AC [color="#b58900",style=bold,label="h=g∘f"] + +fp -> fpgp [color="#d33682",style=dashed,arrowhead=None] +fpgp -> gp [color="#d33682",style=dashed,arrowhead=None] +fpgp -> AC [color="#d33682",style=bold,label="h=g'∘f'"] + +fp -> fpg [color="#dc322f",style=dashed,arrowhead=None] +fpg -> g [color="#dc322f",style=dashed,arrowhead=None] +fpg -> ApCp [color="#dc322f",style=bold,label="h'=g∘f'"] + +f -> fgp [color="#268bd2",style=dashed,arrowhead=None] +fgp -> gp [color="#268bd2",style=dashed,arrowhead=None] +fgp -> ApCp [color="#268bd2",style=bold,label="h'=g'∘f"] + +A -> AC [label="h",arrowhead=None] +AC -> C + +A -> ApCp [label="h'",arrowhead=None] +ApCp -> C + + + +In fact we could have made something equivalent and far easier to read. +But the ∘ relation will be more hidden. + + + +A -> B[label="f"] +A -> B[label="f'"] +B -> C[label="g"] +B -> C[label="g'"] +A -> C [label="h=g∘f=g'∘f'"] +A -> C [label="h'=g'∘f=g∘f'"] + + diff --git a/content/html/fr/blog/Category-Theory-Programming.md b/content/html/fr/blog/Category-Theory-Programming.md new file mode 100644 index 000000000..98e32eb96 --- /dev/null +++ b/content/html/fr/blog/Category-Theory-Programming.md @@ -0,0 +1,227 @@ +----- +isHidden: false +menupriority: 1 +kind: article +created_at: 2012-10-01T19:16:43+02:00 +title: Programmation en Théorie des Catégories +author_name: Yann Esposito +author_uri: yannesposito.com +tags: + - Haskell + - programming + - functional + - category theory +----- + +begindiv(intro) + +%tlal Comment programmer en utilisant la théorie des catégories. + +>

Table of Content
+> +> * This will be replaced by the ToC +> {:toc} +> + +enddiv + +## Introduction + +%TODO{Do everything after the end} + +Now, it is time to talk about Categories. +How this notion could help you and how it is easy to use with Haskell. + +- What are categories? +- How to use them? + +### Programming Paradigms + +When you program, you resolve problems. +There are a lot of different means to resolve a problem. +Many different "school of thought"[^school] exists. + +[^school]: Écoles de pensées + +**Imperative paradigm**: +In programming, most people use the imperative paradigm. +You have an infinite number of cell and you can write things on them. +Of course, it is more complex with modern architecture, but the paradigm is the same. +Hidden somewhere, there is the model of the Turing machine. + +**Functional paradigm**: +Another paradigm, is the functional paradigm. +This time, you don't write on cells, but instead you have a flow of data. +And you transform the flows in another flows... Mostly it looks like pipes. +I am a bit restrictive here. But generally this is how functional programming is perceived. +The main theory behind this paradigm is the Set theory. +You have a set and you go from one set to another set by using a function. + +**Category paradigm**: +I believe there is another paradigm arising from Category theory. +Category theory feels both more general and powerful to help solve problems. + +First, you must realize there are categories everywhere. +With the category theory you can find relationships between quantum physics, +topology, logic (both predicate and first order), programming. +Most of the time, the object your are programming with will form a category. + +This is the promise from the Category Theory. +Another even better paradigm. +A paradigm with gates between many different domains. + +## Get some intuition + +We write down the definition first. +And will discuss about some categories. + +
+\\( \newcommand{\hom}{\mathrm{hom}} \\) +
+ + > **Definition**: + > + > A category \\(C\\) consist of: + > + > - A collection of _objects_ \\(ob(C)\\) + > - For every pair of objects \\((A,B)\\) a set \\(\hom(A,B)\\) + > of _morphisms_ \\(f:A→B\\) (Another notation for \\(f\in \hom(A,B)\\)) + > - A composition operator \\(∘\\) + > which associate to each couple \\(g:A→B\\), \\(f:B→C\\) another morphism \\(f∘g:A→C\\). + > + > With the following properties + > + > - for each object \\(x\\) there is an identity morphism + > \\(id_x:x→x\\) + > s.t. for any morphism \\(f:A->B\\), + > \\(id_A∘f = f = f∘id_B\\) + > - for all triplet of morphisms \\(h:A->B\\), \\(g:B->C\\) and \\(f:C->D\\) + > \\( (f∘g)∘h = f∘(g∘h) \\) + +### Representation of Category + +Representing Category is not just a game. +It will be _very_ important. +But in the same time, it will help you to gain intuition about categories. + +A naïve representation (which can work in many cases) is to represent +a specific category as a directed graph. +Here is a first example of the representation of a category: + + + +A -> B [label="f"] +B -> C [label="g"] +A -> C [label="h"] + +A -> A [label="idA"] +B -> B [label="idB"] +C -> C [label="idC"] + + + +From this graph we can conclude without any ambiguity that: + +\\[ob(C)=\\{A,B,C\\}\\] +and +\\[\hom(C)=\\{f,g,h,idA,idB,idC\\}\\] + +Instantaneously, we understand that we can get rid of all \\(idX\\) arrows. + +But in reality, we lack an important information. +What is \\(∘\\)? + +Now, we can add informations to our previous representation. +We simply add a relation between 3 arrows that represent the composition. + + + +f[label="", fixedsize="false", width=0,height=0,shape=none]; +A -> f[label="f", arrowhead=None] +f -> B + +g[label="", fixedsize="false", width=0,height=0,shape=none]; +B -> g[label="g", arrowhead=None] +g -> C + +fg [label="", fixedsize="false", width=0,height=0,shape=none]; +AC [label="", fixedsize="false", width=0,height=0,shape=none]; + +f -> fg [color="#b58900",style=dashed,arrowhead=None] +fg -> g [color="#b58900",style=dashed,arrowhead=None] +fg -> AC [label="h=g∘f",colorlabel="#b58900",color="#b58900",style=bold] + +A -> AC [label="h",arrowhead=None] +AC -> C + + + +Now we have a complete representation. +We don't have to represent \\(idX\\), we know there are there. +And we also don't have to represent composition implying \\(idX\\) morphisms. +But, even this little graph look complex. +To show just how complex things can be; +we just double the number morphisms between different objects. + + + +f[label="", fixedsize="false", width=0,height=0,shape=none]; +A -> f[label="f", arrowhead=None] +f -> B + +fp[label="", fixedsize="false", width=0,height=0,shape=none]; +A -> fp[label="f'", arrowhead=None] +fp -> B + +g[label="", fixedsize="false", width=0,height=0,shape=none]; +B -> g[label="g", arrowhead=None] +g -> C + +gp[label="", fixedsize="false", width=0,height=0,shape=none]; +B -> gp[label="g'", arrowhead=None] +gp -> C + +fg[label="", fixedsize="false", width=0,height=0,shape=none]; +fpg[label="", fixedsize="false", width=0,height=0,shape=none]; +fgp[label="", fixedsize="false", width=0,height=0,shape=none]; +fpgp[label="", fixedsize="false", width=0,height=0,shape=none]; +AC[label="", fixedsize="false", width=0,height=0,shape=none]; +ApCp[label="", fixedsize="false", width=0,height=0,shape=none]; + +f -> fg [color="#b58900",style=dashed,arrowhead=None] +fg -> g [color="#b58900",style=dashed,arrowhead=None] +fg -> AC [color="#b58900",style=bold,label="h=g∘f"] + +fp -> fpgp [color="#d33682",style=dashed,arrowhead=None] +fpgp -> gp [color="#d33682",style=dashed,arrowhead=None] +fpgp -> AC [color="#d33682",style=bold,label="h=g'∘f'"] + +fp -> fpg [color="#dc322f",style=dashed,arrowhead=None] +fpg -> g [color="#dc322f",style=dashed,arrowhead=None] +fpg -> ApCp [color="#dc322f",style=bold,label="h'=g∘f'"] + +f -> fgp [color="#268bd2",style=dashed,arrowhead=None] +fgp -> gp [color="#268bd2",style=dashed,arrowhead=None] +fgp -> ApCp [color="#268bd2",style=bold,label="h'=g'∘f"] + +A -> AC [label="h",arrowhead=None] +AC -> C + +A -> ApCp [label="h'",arrowhead=None] +ApCp -> C + + + +In fact we could have made something equivalent and far easier to read. +But the ∘ relation will be more hidden. + + + +A -> B[label="f"] +A -> B[label="f'"] +B -> C[label="g"] +B -> C[label="g'"] +A -> C [label="h=g∘f=g'∘f'"] +A -> C [label="h'=g'∘f=g∘f'"] + + diff --git a/img_latest_blog_dir b/img_latest_blog_dir index 1c72e24d9..020d1ef78 120000 --- a/img_latest_blog_dir +++ b/img_latest_blog_dir @@ -1 +1 @@ -output/Scratch/img/blog/Haskell-OpenGL-Mandelbrot \ No newline at end of file +./output/Scratch/img/blog/Category-Theory-Programming \ No newline at end of file diff --git a/latest.ymd b/latest.ymd index 1b8b8e4aa..9073bb97c 120000 --- a/latest.ymd +++ b/latest.ymd @@ -1 +1 @@ -multi/blog/Haskell-OpenGL-Mandelbrot.md \ No newline at end of file +multi/blog/Category-Theory-Programming.md \ No newline at end of file diff --git a/multi/blog/Category-Theory-Programming.md b/multi/blog/Category-Theory-Programming.md new file mode 100644 index 000000000..7a9bbd10c --- /dev/null +++ b/multi/blog/Category-Theory-Programming.md @@ -0,0 +1,229 @@ +----- +isHidden: false +menupriority: 1 +kind: article +created_at: 2012-10-01T19:16:43+02:00 +en: title: Categeory Theory Programming +fr: title: Programmation en Théorie des Catégories +author_name: Yann Esposito +author_uri: yannesposito.com +tags: + - Haskell + - programming + - functional + - category theory +----- + +begindiv(intro) + +en: %tldr How to program using category theory. +fr: %tlal Comment programmer en utilisant la théorie des catégories. + +>

Table of Content
+> +> * This will be replaced by the ToC +> {:toc} +> + +enddiv + +## Introduction + +%TODO{Do everything after the end} + +Now, it is time to talk about Categories. +How this notion could help you and how it is easy to use with Haskell. + +- What are categories? +- How to use them? + +### Programming Paradigms + +When you program, you resolve problems. +There are a lot of different means to resolve a problem. +Many different "school of thought"[^school] exists. + +[^school]: Écoles de pensées + +**Imperative paradigm**: +In programming, most people use the imperative paradigm. +You have an infinite number of cell and you can write things on them. +Of course, it is more complex with modern architecture, but the paradigm is the same. +Hidden somewhere, there is the model of the Turing machine. + +**Functional paradigm**: +Another paradigm, is the functional paradigm. +This time, you don't write on cells, but instead you have a flow of data. +And you transform the flows in another flows... Mostly it looks like pipes. +I am a bit restrictive here. But generally this is how functional programming is perceived. +The main theory behind this paradigm is the Set theory. +You have a set and you go from one set to another set by using a function. + +**Category paradigm**: +I believe there is another paradigm arising from Category theory. +Category theory feels both more general and powerful to help solve problems. + +First, you must realize there are categories everywhere. +With the category theory you can find relationships between quantum physics, +topology, logic (both predicate and first order), programming. +Most of the time, the object your are programming with will form a category. + +This is the promise from the Category Theory. +Another even better paradigm. +A paradigm with gates between many different domains. + +## Get some intuition + +We write down the definition first. +And will discuss about some categories. + +
+\\( \newcommand{\hom}{\mathrm{hom}} \\) +
+ + > **Definition**: + > + > A category \\(C\\) consist of: + > + > - A collection of _objects_ \\(ob(C)\\) + > - For every pair of objects \\((A,B)\\) a set \\(\hom(A,B)\\) + > of _morphisms_ \\(f:A→B\\) (Another notation for \\(f\in \hom(A,B)\\)) + > - A composition operator \\(∘\\) + > which associate to each couple \\(g:A→B\\), \\(f:B→C\\) another morphism \\(f∘g:A→C\\). + > + > With the following properties + > + > - for each object \\(x\\) there is an identity morphism + > \\(id_x:x→x\\) + > s.t. for any morphism \\(f:A->B\\), + > \\(id_A∘f = f = f∘id_B\\) + > - for all triplet of morphisms \\(h:A->B\\), \\(g:B->C\\) and \\(f:C->D\\) + > \\( (f∘g)∘h = f∘(g∘h) \\) + +### Representation of Category + +Representing Category is not just a game. +It will be _very_ important. +But in the same time, it will help you to gain intuition about categories. + +A naïve representation (which can work in many cases) is to represent +a specific category as a directed graph. +Here is a first example of the representation of a category: + + + +A -> B [label="f"] +B -> C [label="g"] +A -> C [label="h"] + +A -> A [label="idA"] +B -> B [label="idB"] +C -> C [label="idC"] + + + +From this graph we can conclude without any ambiguity that: + +\\[ob(C)=\\{A,B,C\\}\\] +and +\\[\hom(C)=\\{f,g,h,idA,idB,idC\\}\\] + +Instantaneously, we understand that we can get rid of all \\(idX\\) arrows. + +But in reality, we lack an important information. +What is \\(∘\\)? + +Now, we can add informations to our previous representation. +We simply add a relation between 3 arrows that represent the composition. + + + +f[label="", fixedsize="false", width=0,height=0,shape=none]; +A -> f[label="f", arrowhead=None] +f -> B + +g[label="", fixedsize="false", width=0,height=0,shape=none]; +B -> g[label="g", arrowhead=None] +g -> C + +fg [label="", fixedsize="false", width=0,height=0,shape=none]; +AC [label="", fixedsize="false", width=0,height=0,shape=none]; + +f -> fg [color="#b58900",style=dashed,arrowhead=None] +fg -> g [color="#b58900",style=dashed,arrowhead=None] +fg -> AC [label="h=g∘f",colorlabel="#b58900",color="#b58900",style=bold] + +A -> AC [label="h",arrowhead=None] +AC -> C + + + +Now we have a complete representation. +We don't have to represent \\(idX\\), we know there are there. +And we also don't have to represent composition implying \\(idX\\) morphisms. +But, even this little graph look complex. +To show just how complex things can be; +we just double the number morphisms between different objects. + + + +f[label="", fixedsize="false", width=0,height=0,shape=none]; +A -> f[label="f", arrowhead=None] +f -> B + +fp[label="", fixedsize="false", width=0,height=0,shape=none]; +A -> fp[label="f'", arrowhead=None] +fp -> B + +g[label="", fixedsize="false", width=0,height=0,shape=none]; +B -> g[label="g", arrowhead=None] +g -> C + +gp[label="", fixedsize="false", width=0,height=0,shape=none]; +B -> gp[label="g'", arrowhead=None] +gp -> C + +fg[label="", fixedsize="false", width=0,height=0,shape=none]; +fpg[label="", fixedsize="false", width=0,height=0,shape=none]; +fgp[label="", fixedsize="false", width=0,height=0,shape=none]; +fpgp[label="", fixedsize="false", width=0,height=0,shape=none]; +AC[label="", fixedsize="false", width=0,height=0,shape=none]; +ApCp[label="", fixedsize="false", width=0,height=0,shape=none]; + +f -> fg [color="#b58900",style=dashed,arrowhead=None] +fg -> g [color="#b58900",style=dashed,arrowhead=None] +fg -> AC [color="#b58900",style=bold,label="h=g∘f"] + +fp -> fpgp [color="#d33682",style=dashed,arrowhead=None] +fpgp -> gp [color="#d33682",style=dashed,arrowhead=None] +fpgp -> AC [color="#d33682",style=bold,label="h=g'∘f'"] + +fp -> fpg [color="#dc322f",style=dashed,arrowhead=None] +fpg -> g [color="#dc322f",style=dashed,arrowhead=None] +fpg -> ApCp [color="#dc322f",style=bold,label="h'=g∘f'"] + +f -> fgp [color="#268bd2",style=dashed,arrowhead=None] +fgp -> gp [color="#268bd2",style=dashed,arrowhead=None] +fgp -> ApCp [color="#268bd2",style=bold,label="h'=g'∘f"] + +A -> AC [label="h",arrowhead=None] +AC -> C + +A -> ApCp [label="h'",arrowhead=None] +ApCp -> C + + + +In fact we could have made something equivalent and far easier to read. +But the ∘ relation will be more hidden. + + + +A -> B[label="f"] +A -> B[label="f'"] +B -> C[label="g"] +B -> C[label="g'"] +A -> C [label="h=g∘f=g'∘f'"] +A -> C [label="h'=g'∘f=g∘f'"] + + diff --git a/output/Scratch/assets/css/main.css b/output/Scratch/assets/css/main.css index 80def568e..da53503a6 100644 --- a/output/Scratch/assets/css/main.css +++ b/output/Scratch/assets/css/main.css @@ -1 +1 @@ -@font-face{font-family:"cmuntt";src:url("fonts/cmuntt.eot");src:local("☺"),url("fonts/cmuntt.svg") format("svg"),url("fonts/cmuntt.ttf") format("truetype");font-weight:400;font-style:normal}@font-face{font-family:"ComputerModern";src:url("fonts/cmunrb.eot");src:local("☺"),url("fonts/cmunrb.svg") format("svg"),url("fonts/cmunrb.ttf") format("truetype");font-weight:700}@font-face{font-family:"ComputerModern";src:url("fonts/cmunsl.eot");src:local("☺"),url("fonts/cmunsl.svg") format("svg"),url("fonts/cmunsl.ttf") format("truetype");font-style:italic,oblique}@font-face{font-family:"ComputerModern";src:url("fonts/cmunrm.eot");src:local("☺"),url("fonts/cmunrm.svg") format("svg"),url("fonts/cmunrm.ttf") format("truetype");font-weight:400;font-style:normal}i,em{font-style:italic}b,strong,h1,h2,h3,h4,h5,h6{font-weight:700}table.description tr td{border:1px solid #eeeef1}.assombris20{background-color:#eeeef1}body{color:#002b36;background-color:#fafafc}::selection{background:#002b36;color:#93a1a1}::-moz-selection{background:#002b36;color:#93a1a1}pre,code,a.cut{font-family:"cmuntt",Incosolata,Monaco,monospace}pre::selection{background:#fdf6e3;color:#586e75}pre *::selection{background:#fdf6e3;color:#586e75}pre::-moz-selection{background:#fdf6e3;color:#586e75}pre *::-moz-selection{background:#fdf6e3;color:#586e75}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:#002b36}a:hover{color:#cb4b16}hr{color:#eeeef1;border-top:1px solid #eeeef1;border-bottom:none;border-left:none;border-right:none}ul{list-style:none}.corps ul li:before{content:"- "}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:none}body,h1,h2,h3,h4,#entete,.tagname{text-rendering:optimizelegibility;line-height:1.4em}body{font-family:"ComputerModern",Georgia,Palatino,"Century Schoolbook L","Times New Roman",Times,serif}.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:#002b36;color:#839496;box-shadow:0 0 5px #d0d0d2 inset;border-radius:3px;padding:1em;line-height:1.2em;font-size:.9em}p{margin-bottom:1.2em}blockquote{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;font-style:italic;padding:.5em 1em;color:#556}blockquote a:hover{color:#cb4b16}blockquote i,blockquote em{font-weight:400;font-style:normal;color:#002b36}blockquote strong,blockquote b{font-weight:700;color:#002b36}blockquote ul{padding-left:1.5em}abbr,acronym{text-transform:uppercase;font-size:.8em;text-decoration:none;border-bottom-width:0}#titre{letter-spacing:-0.06em;border-bottom:4px double #ccccd0;border-top:4px double #ccccd0}#liens .active,#sousliens{color:#002b36;border:#ccccd0 solid 1px;border-radius:5px;box-shadow:0 0 2px #ccccd0 inset;background-color:#eeeef1}#liens .active a,#sousliens a{color:#667}#liens .active a:hover,#sousliens a:hover{color:#cb4b16}#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:#ffb17c}#liens .active hr,#sousliens hr{color:#667;border-top:1px solid#667}#liens .active strong,#liens .active b,#liens .active i,#liens .active em,#sousliens strong,#sousliens b,#sousliens i,#sousliens em{color:#002b36}#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:#f7f7f9;border:1px solid #e9e9eb;box-shadow:0 0 3px #c7c7c9 inset;border-radius:3px;border-top:none}#lastmod{font-size:.9em}.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:1px solid #fafafc;color:#ccccd0}#clickcomment:hover,#choixlang > a:hover,#choixrss > a:hover,.return > a:hover{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;color:#dc5c27;text-shadow:0 0 2px#faa}#clickcomment:active,#choixlang > a:active,#choixrss > a:active,.return > a:active{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;color:#dc5c27;text-shadow:0 0 2px#faa;background:#f4f4f6}.return > a,#choixrss > a{float:right}#choix .return > a,#choix #choixrss > a{margin-top:0}.small{font-size:.8em}.sc{text-transform:uppercase;font-size:.8em}.impact,.darkimpact{font-size:2em;margin:0 auto 1em auto;line-height:1.3em}h1 > .date{font-size:.6em;color:#002b36}.date{font-size:.8em;color:#fafafc;border:1px solid #002b36;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:#002b36;background-color:#fafafc;float:left;width:1.7em}.date .month{float:right;width:2.3em;background-color:#002b36;color:#fafafc}.date .year{line-height:3ex;clear:both;color:#002b36;border:#ccccd0 solid 1px;border-radius:5px;box-shadow:0 0 2px #ccccd0 inset;background-color:#eeeef1;border-radius:0}.date .year a{color:#667}.date .year a:hover{color:#cb4b16}.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:#ffb17c}.date .year hr{color:#667;border-top:1px solid#667}.date .year strong,.date .year b,.date .year i,.date .year em{color:#002b36}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:#ccccd0}#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:#224d58;margin-top:2em;text-align:center}#bottom a{color:#113c47}#bottom a:hover{color:#cb4b16}#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 #ccccd0;border-bottom:1px solid #ccccd0}#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:#002b36;border:#ccccd0 solid 1px;border-radius:5px;box-shadow:0 0 2px #ccccd0 inset;background-color:#eeeef1}.encadre a,.black a,.red a,.shadow a{color:#667}.encadre a:hover,.black a:hover,.red a:hover,.shadow a:hover{color:#cb4b16}.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:#ffb17c}.encadre hr,.black hr,.red hr,.shadow hr{color:#667;border-top:1px solid#667}.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:#002b36}pre .red{background:none;padding:0;margin:auto;border:none;box-shadow:none}.intro,.resume{font-size:.9em;font-style:italic;padding:.5em 1em;color:#556}.intro a:hover,.resume a:hover{color:#cb4b16}.intro i,.intro em,.resume i,.resume em{font-weight:400;font-style:normal;color:#002b36}.intro strong,.intro b,.resume strong,.resume b{font-weight:700;color:#002b36}#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-size:1.25em;line-height:1.6em;text-align:justify;padding:3em 3em;margin:0;clear:both}.corps img{max-width:80%;border:1px solid #ccccd0;background-color:#fafafc;padding:.5em;box-shadow:0 10px 15px#ccc;border-radius:3px}.corps a:hover img{background-color:#dc3a05}figure{margin:3em 0}figure img{box-shadow:0 10px 15px#ccc inset}figure figcaption{text-align:center;margin:.5em 0}img.clean{border:none;background-color:none;box-shadow:none}#address{clear:both}.definitionCell{width:5em;vertical-align:top;text-align:center;font-weight:700}.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%;min-height:100%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;text-align:center}#blackpage{font-family:Georgia,serif;font-style:italic;color:#666;padding-top:3em;background-color:#eee;z-index:9000;cursor:wait}#blackpage .corps code,#blackpage .corps pre{font-family:monospace}#blackpage img{background:none;border:none;max-width:80%;margin:0 auto}#blackpage a{cursor:pointer}#blackpage .preh1{font-size:1.5em;font-weight:700;margin-bottom:1em}#blackpage .preh2{font-size:1.2em;font-style:italic;margin-bottom:1em}#blackpage .preintro{text-align:left;width:52em;margin:0 auto}#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}.codefile{font-size:.8em;text-align:right;padding-right:1em;margin-right:.1;margin-bottom:-1em}.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}.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:#ccccd0 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;color:#ccc;margin:-10px;padding:1px 0;background:#333}#iemessage strong,#iemessage b,#iemessage i,#iemessage em{color:#ccc}#iemessage a,#iemessage a:visited{color:#eca}.tagname{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:#889;font-size:.8em;font-style:italic}#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:#eeeef1;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:#eeeef1;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:#889}.corps .return a:hover{color:#cb4b16}.footnotes{font-size:.8em}.footnotes ol{color:#839496;font-weight:700}.footnotes ol p{color:#002b36;font-weight:400;font-style:normal}.fontnotes ol{margin-left:0}.typeset img{display:inline;border:none;margin:0;padding:0}strong,b,i,em{font-weight:400;color:#889}strong a,b a,i a,em a{color:#002b36}strong a:hover,b a:hover,i a:hover,em a:hover{color:#cb4b16}.corps p strong,.corps p b,.corps p i,.corps p em{color:#556}a:hover strong,a:hover b,a:hover i,a:hover em{color:#dc5c27}a:hover .nicer{color:#ffb17c}.nicer{color:#ccccd0;font-family:"Lucida Grande",Tahoma}.block{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;width:26.5%;padding:1em;border-radius:2px;text-align:left;line-height:1em;margin-left:1%;margin-right:1%;font-size:.8em;height:9em}.block a{color:#002b36}.block a:hover{color:#cb4b16}.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:#556}.corps p a:hover,.corps ul a:hover{color:#cb4b16}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:#f2f2f4;box-shadow:0 0 6px #ccccd0;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:#889}.article .corps .footnotes a:after,.article .corps sup a:after{content:""}.article .corps sup a{font-weight:700;background:#839496;padding:0 .3em;margin-left:2px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;color:#fafafc}.article .corps sup a:hover{background:#cb4b16}ul#markdown-toc,.intro .toc ul{text-transform:uppercase;font-size:.8em;list-style:none;padding-left:1.5em}ul#markdown-toc a:after,.intro .toc ul a:after{content:""}ul#markdown-toc ul ul,.intro .toc ul ul ul{font-variant:normal;line-height:1em;font-size:1em;margin-bottom:1em}table{border:1px solid #ccccd0}table tr td{padding:2px .5em}table tr:nth-child(odd){background-color:#f2f2f4}table tr:nth-child(even){background-color:#fafafc}p pre code,ul li pre code,ol li pre code{background:none;border:none;padding:0}p code,ul li code,ol li code{background:#f0f0f2;border:solid 1px #ccccd0;padding:2px}ul.sameline{list-style:none}ul.sameline li{float:left;margin-left:.5em}.resumearticle{background-color:#f2f2f4;border-radius:7px;box-shadow:0 0 5px #c7c7b8 inset,0 0 5px white;margin:1em 0;padding:1em}a.cut{font-size:12px;text-align:right;display:block;width:100%;opacity:.5;border:1px solid #fafafc;border-radius:3px}a.cut:hover{opacity:1;background-color:#f2f2f4;border-color:#ccccd0;box-shadow:0 0 3px #ccccd0 inset}a.cut strong{font-weight:700}.codehighlight pre{border-left:4px solid #ccccd0}#social{text-align:left;opacity:.3}#social:hover{opacity:1}.popularblock{width:30.333%;margin:0 1.5%;float:left}.popularblock figure{margin:0}.popularblock figure img{max-width:80%;max-height:6em} \ No newline at end of file +@font-face{font-family:"cmuntt";src:url("fonts/cmuntt.eot");src:local("☺"),url("fonts/cmuntt.svg") format("svg"),url("fonts/cmuntt.ttf") format("truetype");font-weight:400;font-style:normal}@font-face{font-family:"ComputerModern";src:url("fonts/cmunrb.eot");src:local("☺"),url("fonts/cmunrb.svg") format("svg"),url("fonts/cmunrb.ttf") format("truetype");font-weight:700}@font-face{font-family:"ComputerModern";src:url("fonts/cmunsl.eot");src:local("☺"),url("fonts/cmunsl.svg") format("svg"),url("fonts/cmunsl.ttf") format("truetype");font-style:italic,oblique}@font-face{font-family:"ComputerModern";src:url("fonts/cmunrm.eot");src:local("☺"),url("fonts/cmunrm.svg") format("svg"),url("fonts/cmunrm.ttf") format("truetype");font-weight:400;font-style:normal}i,em{font-style:italic}b,strong,h1,h2,h3,h4,h5,h6{font-weight:700}table.description tr td{border:1px solid #eeeef1}.assombris20{background-color:#eeeef1}body{color:#002b36;background-color:#fafafc}::selection{background:#002b36;color:#93a1a1}::-moz-selection{background:#002b36;color:#93a1a1}pre,code,a.cut{font-family:"cmuntt",Incosolata,Monaco,monospace}pre::selection{background:#fdf6e3;color:#586e75}pre *::selection{background:#fdf6e3;color:#586e75}pre::-moz-selection{background:#fdf6e3;color:#586e75}pre *::-moz-selection{background:#fdf6e3;color:#586e75}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:#002b36}a:hover{color:#cb4b16}hr{color:#eeeef1;border-top:1px solid #eeeef1;border-bottom:none;border-left:none;border-right:none}ul{list-style:none}.corps ul li:before{content:"- "}ol,ul{padding-left:0}.toc ol li,.toc ul li{margin:.5em 0}ol li ul,ol li ol,ul li ol,ul li ul{margin:.5em 1.5em;list-style:none}body,h1,h2,h3,h4,#entete,.tagname{text-rendering:optimizelegibility;line-height:1.5em}body{font-family:"ComputerModern",Georgia,Palatino,"Century Schoolbook L","Times New Roman",Times,serif}.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:#002b36;color:#839496;box-shadow:0 0 5px #d0d0d2 inset;border-radius:3px;padding:1em;line-height:1em;font-size:.9em}p{margin-bottom:1.2em}blockquote{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;font-style:italic;padding:.5em 1em;color:#556}blockquote a:hover{color:#cb4b16}blockquote i,blockquote em{font-weight:400;font-style:normal;color:#002b36}blockquote strong,blockquote b{font-weight:700;color:#002b36}blockquote ul{padding-left:1.5em}abbr,acronym{text-transform:uppercase;font-size:.8em;text-decoration:none;border-bottom-width:0}#titre{letter-spacing:-0.06em;border-bottom:4px double #ccccd0;border-top:4px double #ccccd0}#liens .active,#sousliens{color:#002b36;border:#ccccd0 solid 1px;border-radius:5px;box-shadow:0 0 2px #ccccd0 inset;background-color:#eeeef1}#liens .active a,#sousliens a{color:#667}#liens .active a:hover,#sousliens a:hover{color:#cb4b16}#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:#ffb17c}#liens .active hr,#sousliens hr{color:#667;border-top:1px solid#667}#liens .active strong,#liens .active b,#liens .active i,#liens .active em,#sousliens strong,#sousliens b,#sousliens i,#sousliens em{color:#002b36}#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:#f7f7f9;border:1px solid #e9e9eb;box-shadow:0 0 3px #c7c7c9 inset;border-radius:3px;border-top:none}#lastmod{font-size:.9em}.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:1px solid #fafafc;color:#ccccd0}#clickcomment:hover,#choixlang > a:hover,#choixrss > a:hover,.return > a:hover{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;color:#dc5c27;text-shadow:0 0 2px#faa}#clickcomment:active,#choixlang > a:active,#choixrss > a:active,.return > a:active{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;color:#dc5c27;text-shadow:0 0 2px#faa;background:#f4f4f6}.return > a,#choixrss > a{float:right}#choix .return > a,#choix #choixrss > a{margin-top:0}.small{font-size:.8em}.sc{text-transform:uppercase;font-size:.8em}.impact,.darkimpact{font-size:2em;margin:0 auto 1em auto;line-height:1.3em}h1 > .date{font-size:.6em;color:#002b36}.date{font-size:.8em;color:#fafafc;border:1px solid #002b36;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:#002b36;background-color:#fafafc;float:left;width:1.7em}.date .month{float:right;width:2.3em;background-color:#002b36;color:#fafafc}.date .year{line-height:3ex;clear:both;color:#002b36;border:#ccccd0 solid 1px;border-radius:5px;box-shadow:0 0 2px #ccccd0 inset;background-color:#eeeef1;border-radius:0}.date .year a{color:#667}.date .year a:hover{color:#cb4b16}.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:#ffb17c}.date .year hr{color:#667;border-top:1px solid#667}.date .year strong,.date .year b,.date .year i,.date .year em{color:#002b36}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:#ccccd0}#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:#224d58;margin-top:2em;text-align:center}#bottom a{color:#113c47}#bottom a:hover{color:#cb4b16}#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 #ccccd0;border-bottom:1px solid #ccccd0}#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:#002b36;border:#ccccd0 solid 1px;border-radius:5px;box-shadow:0 0 2px #ccccd0 inset;background-color:#eeeef1}.encadre a,.black a,.red a,.shadow a{color:#667}.encadre a:hover,.black a:hover,.red a:hover,.shadow a:hover{color:#cb4b16}.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:#ffb17c}.encadre hr,.black hr,.red hr,.shadow hr{color:#667;border-top:1px solid#667}.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:#002b36}pre .red{background:none;padding:0;margin:auto;border:none;box-shadow:none}.intro,.resume{font-size:.9em;font-style:italic;padding:.5em 1em;color:#556}.intro a:hover,.resume a:hover{color:#cb4b16}.intro i,.intro em,.resume i,.resume em{font-weight:400;font-style:normal;color:#002b36}.intro strong,.intro b,.resume strong,.resume b{font-weight:700;color:#002b36}#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-size:1.25em;line-height:1.5em;text-align:justify;padding:3em 3em;margin:0;clear:both}.corps p,.corps ol,.corps ul,.corps blockquote,.corps pre,.corps code{margin-top:1.5em;margin-bottom:1.5em}.corps pre code{margin:0}.corps p,.corps ol,.corps ul,.corps blockquote{line-height:1.5em}.corps pre,.corps code{line-height:1em}.corps ul li ul,.corps ol li ul,.corps ul li ol,.corps ol li ol{margin-top:0;margin-bottom:0}.corps img{max-width:80%;border:1px solid #ccccd0;background-color:#fafafc;padding:.5em;box-shadow:0 10px 15px#ccc;border-radius:3px}.corps a:hover img{background-color:#dc3a05}figure{margin:3em 0}figure img{box-shadow:0 10px 15px#ccc inset}figure figcaption{text-align:center;margin:.5em 0}img.clean{border:none;background-color:none;box-shadow:none}#address{clear:both}.definitionCell{width:5em;vertical-align:top;text-align:center;font-weight:700}.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%;min-height:100%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;text-align:center}#blackpage{font-family:Georgia,serif;font-style:italic;color:#666;padding-top:3em;background-color:#eee;z-index:9000;cursor:wait}#blackpage .corps code,#blackpage .corps pre{font-family:monospace}#blackpage img{background:none;border:none;max-width:80%;margin:0 auto}#blackpage a{cursor:pointer}#blackpage .preh1{font-size:1.5em;font-weight:700;margin-bottom:1em}#blackpage .preh2{font-size:1.2em;font-style:italic;margin-bottom:1em}#blackpage .preintro{text-align:left;width:52em;margin:0 auto}#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}.codefile{font-size:.8em;text-align:right;padding-right:1em;margin-right:.1;margin-bottom:-1em}.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}.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:#ccccd0 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;color:#ccc;margin:-10px;padding:1px 0;background:#333}#iemessage strong,#iemessage b,#iemessage i,#iemessage em{color:#ccc}#iemessage a,#iemessage a:visited{color:#eca}.tagname{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:#889;font-size:.8em;font-style:italic}#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:#eeeef1;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:#eeeef1;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:#889}.corps .return a:hover{color:#cb4b16}.footnotes{font-size:.8em}.footnotes ol{color:#839496;font-weight:700}.footnotes ol p{color:#002b36;font-weight:400;font-style:normal}.fontnotes ol{margin-left:0}.typeset img{display:inline;border:none;margin:0;padding:0}strong,b,i,em{color:#889}strong a,b a,i a,em a{color:#002b36}strong a:hover,b a:hover,i a:hover,em a:hover{color:#cb4b16}.corps p strong,.corps p b,.corps p i,.corps p em{color:#556}a:hover strong,a:hover b,a:hover i,a:hover em{color:#dc5c27}a:hover .nicer{color:#ffb17c}.nicer{color:#ccccd0;font-family:"Lucida Grande",Tahoma}.block{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;width:26.5%;padding:1em;border-radius:2px;text-align:left;line-height:1em;margin-left:1%;margin-right:1%;font-size:.8em;height:9em}.block a{color:#002b36}.block a:hover{color:#cb4b16}.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:#556}.corps p a:hover,.corps ul a:hover{color:#cb4b16}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:#f2f2f4;box-shadow:0 0 6px #ccccd0;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:#889}.article .corps .footnotes a:after,.article .corps sup a:after{content:""}.article .corps sup a{font-weight:700;background:#839496;padding:0 .3em;margin-left:2px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;color:#fafafc}.article .corps sup a:hover{background:#cb4b16}ul#markdown-toc,.intro .toc ul{text-transform:uppercase;font-size:.8em;list-style:none;padding-left:1.5em}ul#markdown-toc a:after,.intro .toc ul a:after{content:""}ul#markdown-toc ul ul,.intro .toc ul ul ul{font-variant:normal;line-height:1em;font-size:1em;margin-bottom:1em}table{border:1px solid #ccccd0}table tr td{padding:2px .5em}table tr:nth-child(odd){background-color:#f2f2f4}table tr:nth-child(even){background-color:#fafafc}p pre code,ul li pre code,ol li pre code{background:none;border:none;padding:0}p code,ul li code,ol li code{background:#f0f0f2;border:solid 1px #ccccd0;padding:2px}ul.sameline{list-style:none}ul.sameline li{float:left;margin-left:.5em}.resumearticle{background-color:#f2f2f4;border-radius:7px;box-shadow:0 0 5px #c7c7b8 inset,0 0 5px white;margin:1em 0;padding:1em}a.cut{font-size:12px;text-align:right;display:block;width:100%;opacity:.5;border:1px solid #fafafc;border-radius:3px}a.cut:hover{opacity:1;background-color:#f2f2f4;border-color:#ccccd0;box-shadow:0 0 3px #ccccd0 inset}a.cut strong{font-weight:700}.codehighlight pre{border-left:4px solid #ccccd0}#social{text-align:left;opacity:.3}#social:hover{opacity:1}.popularblock{width:30.333%;margin:0 1.5%;float:left}.popularblock figure{margin:0}.popularblock figure img{max-width:80%;max-height:6em} \ No newline at end of file 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 9bcef924eb488af7685c2de50c9112ff1d23f4b4..fce7d867e6f8f0f637d06a8e1bb99d7435a4c107 100644 GIT binary patch literal 30515 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 HnFszqM4>;s literal 24490 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 X?^|CYk4pl+PwX_^Ws+`u`27C>t0#us 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 73a4a5dbb546d5fd7493ec725c6a9a4b9c41e12f..33c0a1fcd7832d8c566ecf088e11c5f32563ee63 100644 GIT binary patch literal 23756 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 literal 19344 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 EFRlA3^#A|> diff --git a/output/Scratch/en/blog/Category-Theory-Programming/code/00_Introduction.lhs b/output/Scratch/en/blog/Category-Theory-Programming/code/00_Introduction.lhs new file mode 100644 index 000000000..a41f8e956 --- /dev/null +++ b/output/Scratch/en/blog/Category-Theory-Programming/code/00_Introduction.lhs @@ -0,0 +1,203 @@ + ## Introduction + +%TODO{Do everything after the end} + +Now, it is time to talk about Categories. +How this notion could help you and how it is easy to use with Haskell. + +- What are categories? +- How to use them? + + ### Programming Paradigms + +When you program, you resolve problems. +There are a lot of different means to resolve a problem. +Many different "school of thought"[^school] exists. + +[^school]: Écoles de pensées + +**Imperative paradigm**: +In programming, most people use the imperative paradigm. +You have an infinite number of cell and you can write things on them. +Of course, it is more complex with modern architecture, but the paradigm is the same. +Hidden somewhere, there is the model of the Turing machine. + +**Functional paradigm**: +Another paradigm, is the functional paradigm. +This time, you don't write on cells, but instead you have a flow of data. +And you transform the flows in another flows... Mostly it looks like pipes. +I am a bit restrictive here. But generally this is how functional programming is perceived. +The main theory behind this paradigm is the Set theory. +You have a set and you go from one set to another set by using a function. + +**Category paradigm**: +I believe there is another paradigm arising from Category theory. +Category theory feels both more general and powerful to help solve problems. + +First, you must realize there are categories everywhere. +With the category theory you can find relationships between quantum physics, +topology, logic (both predicate and first order), programming. +Most of the time, the object your are programming with will form a category. + +This is the promise from the Category Theory. +Another even better paradigm. +A paradigm with gates between many different domains. + + ## Get some intuition + +We write down the definition first. +And will discuss about some categories. + +

+\\( \newcommand{\hom}{\mathrm{hom}} \\) +
+ + > **Definition**: + > + > A category \\(C\\) consist of: + > + > - A collection of _objects_ \\(ob(C)\\) + > - For every pair of objects \\((A,B)\\) a set \\(\hom(A,B)\\) + > of _morphisms_ \\(f:A→B\\) (Another notation for \\(f\in \hom(A,B)\\)) + > - A composition operator \\(∘\\) + > which associate to each couple \\(g:A→B\\), \\(f:B→C\\) another morphism \\(f∘g:A→C\\). + > + > With the following properties + > + > - for each object \\(x\\) there is an identity morphism + > \\(id_x:x→x\\) + > s.t. for any morphism \\(f:A->B\\), + > \\(id_A∘f = f = f∘id_B\\) + > - for all triplet of morphisms \\(h:A->B\\), \\(g:B->C\\) and \\(f:C->D\\) + > \\( (f∘g)∘h = f∘(g∘h) \\) + + ### Representation of Category + +Representing Category is not just a game. +It will be _very_ important. +But in the same time, it will help you to gain intuition about categories. + +A naïve representation (which can work in many cases) is to represent +a specific category as a directed graph. +Here is a first example of the representation of a category: + + + +A -> B [label="f"] +B -> C [label="g"] +A -> C [label="h"] + +A -> A [label="idA"] +B -> B [label="idB"] +C -> C [label="idC"] + + + +From this graph we can conclude without any ambiguity that: + +\\[ob(C)=\\{A,B,C\\}\\] +and +\\[\hom(C)=\\{f,g,h,idA,idB,idC\\}\\] + +Instantaneously, we understand that we can get rid of all \\(idX\\) arrows. + +But in reality, we lack an important information. +What is \\(∘\\)? + +Now, we can add informations to our previous representation. +We simply add a relation between 3 arrows that represent the composition. + + + +f[label="", fixedsize="false", width=0,height=0,shape=none]; +A -> f[label="f", arrowhead=None] +f -> B + +g[label="", fixedsize="false", width=0,height=0,shape=none]; +B -> g[label="g", arrowhead=None] +g -> C + + +fg [label="", fixedsize="false", width=0,height=0,shape=none]; +AC [label="", fixedsize="false", width=0,height=0,shape=none]; + +f -> fg [color="#b58900",style=dashed,arrowhead=None] +fg -> g [color="#b58900",style=dashed,arrowhead=None] +fg -> AC [label="h=g∘f",colorlabel="#b58900",color="#b58900",style=bold] + +A -> AC [label="h",arrowhead=None] +AC -> C + + + + +Now we have a complete representation. +We don't have to represent \\(idX\\), we know there are there. +And we also don't have to represent composition implying \\(idX\\) morphisms. +But, even this little graph look complex. +To show just how complex things can be; +we just double the number morphisms between different objects. + + + +f[label="", fixedsize="false", width=0,height=0,shape=none]; +A -> f[label="f", arrowhead=None] +f -> B + +fp[label="", fixedsize="false", width=0,height=0,shape=none]; +A -> fp[label="f'", arrowhead=None] +fp -> B + +g[label="", fixedsize="false", width=0,height=0,shape=none]; +B -> g[label="g", arrowhead=None] +g -> C + +gp[label="", fixedsize="false", width=0,height=0,shape=none]; +B -> gp[label="g'", arrowhead=None] +gp -> C + +fg[label="", fixedsize="false", width=0,height=0,shape=none]; +fpg[label="", fixedsize="false", width=0,height=0,shape=none]; +fgp[label="", fixedsize="false", width=0,height=0,shape=none]; +fpgp[label="", fixedsize="false", width=0,height=0,shape=none]; +AC[label="", fixedsize="false", width=0,height=0,shape=none]; +ApCp[label="", fixedsize="false", width=0,height=0,shape=none]; + +f -> fg [color="#b58900",style=dashed,arrowhead=None] +fg -> g [color="#b58900",style=dashed,arrowhead=None] +fg -> AC [color="#b58900",style=bold,label="h=g∘f"] + +fp -> fpgp [color="#d33682",style=dashed,arrowhead=None] +fpgp -> gp [color="#d33682",style=dashed,arrowhead=None] +fpgp -> AC [color="#d33682",style=bold,label="h=g'∘f'"] + +fp -> fpg [color="#dc322f",style=dashed,arrowhead=None] +fpg -> g [color="#dc322f",style=dashed,arrowhead=None] +fpg -> ApCp [color="#dc322f",style=bold,label="h'=g∘f'"] + +f -> fgp [color="#268bd2",style=dashed,arrowhead=None] +fgp -> gp [color="#268bd2",style=dashed,arrowhead=None] +fgp -> ApCp [color="#268bd2",style=bold,label="h'=g'∘f"] + +A -> AC [label="h",arrowhead=None] +AC -> C + +A -> ApCp [label="h'",arrowhead=None] +ApCp -> C + + + + +In fact we could have made something equivalent and far easier to read. +But the ∘ relation will be more hidden. + + + +A -> B[label="f"] +A -> B[label="f'"] +B -> C[label="g"] +B -> C[label="g'"] +A -> C [label="h=g∘f=g'∘f'"] +A -> C [label="h'=g'∘f=g∘f'"] + + diff --git a/output/Scratch/en/blog/Category-Theory-Programming/graph/First_Na__ve_Category_Representation.png b/output/Scratch/en/blog/Category-Theory-Programming/graph/First_Na__ve_Category_Representation.png new file mode 100644 index 0000000000000000000000000000000000000000..a2fd3531bdf17dce4b44813d48919217996b8e2b GIT binary patch literal 9272 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 a;Qs;6ibd;$vPvfa0000~PC?-{TDRC_y=(BvJ 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 S5C&lwL&;04NYzQ0h5a89N;J~| literal 0 HcmV?d00001 diff --git a/output/Scratch/en/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation_Mess.png b/output/Scratch/en/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation_Mess.png new file mode 100644 index 0000000000000000000000000000000000000000..6d06918c1e19980d6023bebd2e9347454a1efb82 GIT binary patch literal 12887 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 B=H~za literal 0 HcmV?d00001 diff --git a/output/Scratch/en/blog/Haskell-OpenGL-Mandelbrot/index.html b/output/Scratch/en/blog/Haskell-OpenGL-Mandelbrot/index.html index 037ec6492..87bcabe9b 100644 --- a/output/Scratch/en/blog/Haskell-OpenGL-Mandelbrot/index.html +++ b/output/Scratch/en/blog/Haskell-OpenGL-Mandelbrot/index.html @@ -3,25 +3,18 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - - - - - - + - - - + - - + + @@ -35,7 +30,7 @@ @@ -179,4 +174,10 @@ + + + + + + diff --git a/layouts/default.html b/layouts/default.html index 3e5ffc259..0d7692d20 100644 --- a/layouts/default.html +++ b/layouts/default.html @@ -11,9 +11,6 @@ <%= meta_alternate %> - - - @@ -22,7 +19,7 @@ @@ -82,4 +79,7 @@ + + + From 821f016345bde0c5f8fb1fe0faceb5b7aa0e160b Mon Sep 17 00:00:00 2001 From: "Yann Esposito (Yogsototh)" Date: Wed, 2 Jan 2013 16:46:44 +0100 Subject: [PATCH 23/28] compiled --- README.md | 2 +- Rules | 1 + lib/ultraviolet.rb | 6 +- output/Scratch/assets/css/cmufontface.css | 1 + output/Scratch/assets/css/main2.css | 1 + .../blog/Haskell-OpenGL-Mandelbrot/index.html | 64 +- output/Scratch/en/blog/feed/feed.xml | 233 +-- .../blog/Haskell-OpenGL-Mandelbrot/index.html | 66 +- output/Scratch/fr/blog/feed/feed.xml | 397 +++-- output/Scratch/sitemap.xml | 1462 +++++++++-------- output/index.html | 4 +- 11 files changed, 1164 insertions(+), 1073 deletions(-) create mode 100644 output/Scratch/assets/css/cmufontface.css create mode 100644 output/Scratch/assets/css/main2.css diff --git a/README.md b/README.md index 56691d160..5f561116a 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ What you'll need to use it: - [nanoc](nanoc.stoneship.org) → `gem install nanoc` - [zsh](zsh.org) → Installed by default on most good system -- A bunch of gems: `gem install ultraviolet krambook sass rainpress` +- A bunch of gems: `gem install kramdown builder sass rainpress` Optionally diff --git a/Rules b/Rules index 7d0e49448..3778cec1a 100644 --- a/Rules +++ b/Rules @@ -51,6 +51,7 @@ compile '/html/*' do elsif ext == 'haml' || ext.nil? filter :haml elsif ext == 'md' || ext == 'markdown' + filter :code filter :graph filter :description filter :falacy diff --git a/lib/ultraviolet.rb b/lib/ultraviolet.rb index 2ee4ce2da..fd7b0e307 100644 --- a/lib/ultraviolet.rb +++ b/lib/ultraviolet.rb @@ -1,7 +1,7 @@ class UltraVioletFilter < Nanoc3::Filter - identifier :ultraviolet + identifier :code - def protect(str) + def protect(str) str.gsub(%r{<([^>]*)>}) do "<#{$1}>" end @@ -33,4 +33,4 @@ class UltraVioletFilter < Nanoc3::Filter FileUtils.mkdir_p code_path File.open(%{#{code_path}/#{@filename}}, 'w'){|f|f.write(@code)} end -end +end diff --git a/output/Scratch/assets/css/cmufontface.css b/output/Scratch/assets/css/cmufontface.css new file mode 100644 index 000000000..a0af38613 --- /dev/null +++ b/output/Scratch/assets/css/cmufontface.css @@ -0,0 +1 @@ +@font-face{font-family:"cmuntt";src:url("fonts/cmuntt.eot");src:local("☺"),url("fonts/cmuntt.svg") format("svg"),url("fonts/cmuntt.ttf") format("truetype");font-weight:400;font-style:normal}@font-face{font-family:"ComputerModern";src:url("fonts/cmunrb.eot");src:local("☺"),url("fonts/cmunrb.svg") format("svg"),url("fonts/cmunrb.ttf") format("truetype");font-weight:700}@font-face{font-family:"ComputerModern";src:url("fonts/cmunsl.eot");src:local("☺"),url("fonts/cmunsl.svg") format("svg"),url("fonts/cmunsl.ttf") format("truetype");font-style:italic,oblique}@font-face{font-family:"ComputerModern";src:url("fonts/cmunrm.eot");src:local("☺"),url("fonts/cmunrm.svg") format("svg"),url("fonts/cmunrm.ttf") format("truetype");font-weight:400;font-style:normal} \ No newline at end of file diff --git a/output/Scratch/assets/css/main2.css b/output/Scratch/assets/css/main2.css new file mode 100644 index 000000000..5a12875e6 --- /dev/null +++ b/output/Scratch/assets/css/main2.css @@ -0,0 +1 @@ +@import url(/Scratch/assets/css/cmufontface.css);body{font-family:"Futura",serif;font-size:20px;color:#fdf6e3;background:#073642}a,a:link,a:visited,a:active,a:hover{color:#002b36;text-decoration:none;outline:none}a:hover{color:#cb4b16}hr{color:#eee8d5;border-top:1px solid #eee8d5;border-bottom:none;border-left:none;border-right:none}ul{list-style:none;padding-left:0;margin-left:1.5ex;text-indent:-1.5ex}ol{padding-left:0}ul li:before{content:"- "}ol li ul,ol li ol,ul li ol,ul li ul{margin:.5em 1.5em;list-style:none}li p,ol p{display:inline;padding:0}table tr:nth-child(odd){background-color:#fdf6e3}table{border-top:solid 2px #eee8d5;border-bottom:solid 2px #eee8d5}body{text-rendering:optimizelegibility;line-height:1.5em}h1,h2,h3,h4,h5,h6{color:#002b36;line-height:1.1em;padding-left:30px}.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) ". "}p,ul,ol,h1,h2,h3,h4{margin-bottom:30px;padding:0 30px;text-align:justify}pre{line-height:1.1em;margin-bottom:30px;padding:30px;overflow:auto;background:#fdf6e3;font-size:18px}abbr,acronym{text-transform:uppercase;font-size:.8em;text-decoration:none;border-bottom-width:0}.small{font-size:.8em}.sc{text-transform:uppercase;font-size:.8em}.clear,.flush{clear:both}.impact,.darkimpact{font-size:2em;margin:0 auto 1em auto;line-height:1.3em}figure{margin:3em 0}figure img{box-shadow:0 10px 15px#ccc inset}figure figcaption{text-align:center;margin:.5em 0}figure.left,figure.right{max-width:30%}#afterheader{color:#586e75;background-color:#fffff8}.intro,.resume,blockquote{font-style:italic;padding:.5em 1em}.intro a:hover,.resume a:hover,blockquote a:hover{color:#cb4b16}.intro i,.intro em,.resume i,.resume em,blockquote i,blockquote em{font-style:normal}.intro strong,.intro b,.resume strong,.resume b,blockquote strong,blockquote b{font-weight:400}.intro,.resume{font-size:.9em}blockquote{border:solid 1px #eee8d5;background-color:#fdf6e3}blockquote pre,blockquote pre code{background-color:#eee8d5}blockquote pre{border:solid 1px rgba(0,0,0,0.1)}blockquote ul{padding-left:1.5em}section.slide{border-color:#eee8d5;border:solid 1px;margin-bottom:1em;padding:.5em;font-family:sans-serif;font-size:.8em}.base03{color:#002b36}.base02{color:#073642}.base01{color:#586e75}.base00{color:#657b83}.base0{color:#839496}.base1{color:#93a1a1}.base2{color:#eee8d5}.base3{color:#fdf6e3}.yellow{color:#b58900}.orange{color:#cb4b16}.red{color:#dc322f}.magenta{color:#d33682}.violet{color:#6c71c4}.blue{color:#268bd2}.cyan{color:#2aa198}.green{color:#859900}#blackpage{font-family:sans-serif;font-style:italic;padding-top:8em;z-index:9000;cursor:wait}#blackpage img{background:none;border:none;max-width:80%;margin:0 auto}#blackpage a{cursor:pointer}.cut{font-size:.8em;text-align:right;display:inline-block;width:100%;opacity:.3}.cut:hover{opacity:1}#afterheader{width:35em;margin:0 auto}#afterheader img{width:100%}#afterheader img.left,#afterheader img.right{width:30%} \ No newline at end of file diff --git a/output/Scratch/en/blog/Haskell-OpenGL-Mandelbrot/index.html b/output/Scratch/en/blog/Haskell-OpenGL-Mandelbrot/index.html index f8432e3ec..56b075181 100644 --- a/output/Scratch/en/blog/Haskell-OpenGL-Mandelbrot/index.html +++ b/output/Scratch/en/blog/Haskell-OpenGL-Mandelbrot/index.html @@ -48,7 +48,7 @@
-

The B in Benoît B. Mandelbrot stand for Benoît B. Mandelbrot

+ The B in Benoît B. Mandelbrot stand for Benoît B. Mandelbrot
@@ -67,7 +67,7 @@ Imperative language could also benefit from this functional organization.

  • Introduction
  • First version
  • @@ -138,7 +138,7 @@ and something nice to see in 3D.

    And you can see the intermediate steps to reach this goal:

    -

    The parts of the article

    +The parts of the article

    From the 2nd section to the 4th it will be dirtier and dirtier. We start cleaning the code at the 5th section.

    @@ -152,7 +152,7 @@ We start cleaning the code at the 5th section.

    The first being mostly some boilerplate2. And the second part more focused on OpenGL and content.

    -

    Let’s play the song of our people

    +

    Let’s play the song of our people

    @@ -381,20 +381,20 @@ f c z n = if (magnitude z > 2 )

    Well, if you download this file (look at the bottom of this section), compile it and run it this is the result:

    -

    The mandelbrot set version 1

    +The mandelbrot set version 1

    A first very interesting property of this program is that the computation for all the points is done only once. It is a bit long before the first image appears, but if you resize the window, it updates instantaneously. This property is a direct consequence of purity. If you look closely, you see that allPoints is a pure list. Therefore, calling allPoints will always render the same result and Haskell is clever enough to use this property. -While Haskell doesn’t garbage collect allPoints the result is reused for free. +While Haskell doesn’t garbage collect allPoints the result is reused for free. We did not specified this value should be saved for later use. It is saved for us.

    See what occurs if we make the window bigger:

    -

    The mandelbrot too wide, black lines and columns

    +The mandelbrot too wide, black lines and columns

    We see some black lines because we have drawn less point than there is on the surface. We can repair this by drawing little squares instead of just points. @@ -565,7 +565,7 @@ maxZeroIndex func minval maxval n =

    No rocket science here. See the result now:

    -

    The edges of the mandelbrot set

    +The edges of the mandelbrot set
    @@ -626,7 +626,7 @@ instead of using a 3D projection of quaternions. I am pretty sure this construction is not useful for numbers. But it will be enough for us to create something that look nice.

    -

    This section is quite long, but don’t be afraid, +

    This section is quite long, but don’t be afraid, most of the code is some OpenGL boilerplate. If you just want to skim this section, here is a high level representation:

    @@ -642,7 +642,7 @@ here is a high level representation:

    Drawing:

      -
    • set doubleBuffer, handle depth, window size…
    • +
    • set doubleBuffer, handle depth, window size…
    • Use state to apply some transformations
    @@ -898,7 +898,7 @@ Mainly there are two parts: apply some transformations, draw the object.

    The 3D Mandelbrot

    -

    We have finished with the OpenGL section, let’s talk about how we +

    We have finished with the OpenGL section, let’s talk about how we generate the 3D points and colors. First, we will set the number of details to 200 pixels in the three dimensions.

    @@ -938,7 +938,7 @@ Each three successive point representing the coordinate of each vertex of a tria

    In fact, we will provide six ordered points. These points will be used to draw two triangles.

    -

    Explain triangles

    +Explain triangles

    The next function is a bit long. Here is an approximative English version:

    @@ -1012,7 +1012,7 @@ depthPoints = do

    If you prefer the first version, then just imagine how hard it will be to change the enumeration of the point from (x,y) to (x,z) for example.

    -

    Also, we didn’t searched for negative values. +

    Also, we didn’t searched for negative values. This modified Mandelbrot is no more symmetric relatively to the plan y=0. But it is symmetric relatively to the plan z=0. Then I mirror these values.

    @@ -1110,7 +1110,7 @@ and change the type signature of f from Complex to Here is the result:

    -

    A 3D mandelbrot like

    +A 3D mandelbrot like

    Download the source code of this section → 03_Mandelbulb/Mandelbulb.lhs

    @@ -1237,7 +1237,7 @@ ymandel x y z = mandel (2*x/width) (2*y/height) (2*z/deep) 64
    -

    This code is cleaner but many things doesn’t feel right. +

    This code is cleaner but many things doesn’t feel right. First, all the user interaction code is outside our main file. I feel it is okay to hide the detail for the rendering. But I would have preferred to control the user actions.

    @@ -1271,12 +1271,12 @@ We will have two choices:

  • Our main problem come from user interaction. -If you ask “the Internet”, +If you ask “the Internet”, about how to deal with user interaction with a functional paradigm, the main answer is to use functional reactive programming (FRP). -I won’t use FRP in this article. -Instead, I’ll use a simpler while less effective way to deal with user interaction. -But The method I’ll use will be as pure and functional as possible.

    +I won’t use FRP in this article. +Instead, I’ll use a simpler while less effective way to deal with user interaction. +But The method I’ll use will be as pure and functional as possible.

  • @@ -1298,7 +1298,7 @@ First, what the main loop should look like if we could make our own:

  • a function taking two parameters: time and world state and render a new world without user interaction.
-

Here is a real working code, I’ve hidden most display functions. +

Here is a real working code, I’ve hidden most display functions. The YGL, is a kind of framework to display 3D functions. But it can easily be extended to many kind of representation.

@@ -1518,7 +1518,7 @@ idleAction tnew world = world {

Now the function which will generate points in 3D. The first parameter (res) is the resolution of the vertex generation. More precisely, res is distance between two points on one direction. -We need it to “close” our shape.

+We need it to “close” our shape.

The type Function3D is Point -> Point -> Maybe Point. Because we consider partial functions @@ -1587,7 +1587,7 @@ ymandel x y z = fromIntegral (mandel x y z 64) / 64

-

I won’t explain how the magic occurs here. +

I won’t explain how the magic occurs here. If you are interested, just read the file YGL.hs. It is commented a lot.

@@ -1607,8 +1607,8 @@ It is commented a lot.

Our code architecture feel very clean. All the meaningful code is in our main file and all display details are externalized. -If you read the code of YGL.hs, you’ll see I didn’t made everything perfect. -For example, I didn’t finished the code of the lights. +If you read the code of YGL.hs, you’ll see I didn’t made everything perfect. +For example, I didn’t finished the code of the lights. But I believe it is a good first step and it will be easy to go further. Unfortunately the program of the preceding session is extremely slow. We compute the Mandelbulb for each frame now.

@@ -1892,20 +1892,20 @@ ymandel x y z = fromIntegral (mandel x y z 64) / 64

As we can use imperative style in a functional language, know you can use functional style in imperative languages. This article exposed a way to organize some code in a functional way. -I’d like to stress the usage of Haskell made it very simple to achieve this.

+I’d like to stress the usage of Haskell made it very simple to achieve this.

Once you are used to pure functional style, it is hard not to see all advantages it offers.

The code in the two last sections is completely pure and functional. -Furthermore I don’t use GLfloat, Color3 or any other OpenGL type. +Furthermore I don’t use GLfloat, Color3 or any other OpenGL type. If I want to use another library in the future, I would be able to keep all the pure code and simply update the YGL module.

-

The YGL module can be seen as a “wrapper” around 3D display and user interaction. +

The YGL module can be seen as a “wrapper” around 3D display and user interaction. It is a clean separator between the imperative paradigm and functional paradigm.

-

If you want to go further, it shouldn’t be hard to add parallelism. +

If you want to go further, it shouldn’t be hard to add parallelism. This should be easy mainly because most of the visible code is pure. Such an optimization would have been harder by using directly the OpenGL library.

@@ -1915,7 +1915,7 @@ O(n².log(n)) to O(n³).


  1. -

    Unfortunately, I couldn’t make this program to work on my Mac. More precisely, I couldn’t make the DevIL library work on Mac to output the image. Yes I have done a brew install libdevil. But even a minimal program who simply write some jpg didn’t worked. I tried both with Haskell and C.

    +

    Unfortunately, I couldn’t make this program to work on my Mac. More precisely, I couldn’t make the DevIL library work on Mac to output the image. Yes I have done a brew install libdevil. But even a minimal program who simply write some jpg didn’t worked. I tried both with Haskell and C.

  2. Generally in Haskell you need to declare a lot of import lines. @@ -2010,10 +2010,14 @@ O(n².log(n)) to O(n³).

    next entries + +
diff --git a/output/Scratch/en/blog/feed/feed.xml b/output/Scratch/en/blog/feed/feed.xml index da75efe87..badc3c75e 100644 --- a/output/Scratch/en/blog/feed/feed.xml +++ b/output/Scratch/en/blog/feed/feed.xml @@ -35,6 +35,46 @@ just continue to read as a standard web page. \(\newcommand{\F}{\mathbf{F}}\) \(\newcommand{\E}{\mathbf{E}}\) \(\newcommand{\C}{\mathc...</div></img> + + + tag:yannesposito.com,2012-10-01:/Scratch/en/blog/Category-Theory-Programming/ + Category Theory Programming + 2012-10-01T17:16:43Z + 2012-10-01T17:16:43Z + + Yann Esposito + yannesposito.com + + + +<div class="intro"> + + +<p><span class="sc"><abbr title="Too long; didn't read">tl;dr</abbr>: </span> How to program using category theory.</p> + +<blockquote> + <center><hr style="width:30%;float:left;border-color:#CCCCD0;margin-top:1em" /><span class="sc"><b>Table of Content</b></span><hr style="width:30%;float:right;border-color:#CCCCD0;margin-top:1em" /></center> + +<ul id="markdown-toc"> + <li><a href="#introduction">Introduction</a> <ul> + <li><a href="#programming-paradigms">Programming Paradigms</a></li> + </ul> + </li> + <li><a href="#get-some-intuition">Get some intuition</a> <ul> + <li><a href="#representation-of-category">Representation of Category</a></li> + </ul> + </li> +</ul> + +</blockquote> + + +</div> + + +<h2 id="introduction">Introduction</h2> + +<p>%TODO{Do every...</p></blockquote></div> tag:yannesposito.com,2012-06-15:/Scratch/en/blog/Haskell-OpenGL-Mandelbrot/ @@ -46,7 +86,7 @@ just continue to read as a standard web page. yannesposito.com - <p><img alt="The B in Benoît B. Mandelbrot stand for Benoît B. Mandelbrot" src="/Scratch/img/blog/Haskell-OpenGL-Mandelbrot/BenoitBMandelbrot.jpg" /></p> + <img alt="The B in Benoît B. Mandelbrot stand for Benoît B. Mandelbrot" src="/Scratch/img/blog/Haskell-OpenGL-Mandelbrot/BenoitBMandelbrot.jpg" /> <div class="intro"> @@ -60,7 +100,7 @@ The display details will be put in an external module playing the role of a wrap Imperative language could also benefit from this functional organization.</p> <blockquote> - <center><hr style="width:30%;float:left;border-color:#CCCCD0;margin-top:1em" /><span class="sc"><b>Table of Content</b></span></hr></center></blockquote></div></p> + <center><hr style="width:30%;float:left;border-color:#CCCCD0;margin-top:1em" /><span class="sc"><b>Table of Content</b></span></hr></center></blockquote></div></img> tag:yannesposito.com,2012-02-08:/Scratch/en/blog/Haskell-the-Hard-Way/ @@ -72,7 +112,7 @@ Imperative language could also benefit from this functional organization.</p& yannesposito.com - <p><img alt="Magritte pleasure principle" src="/Scratch/img/blog/Haskell-the-Hard-Way/magritte_pleasure_principle.jpg" /></p> + <img alt="Magritte pleasure principle" src="/Scratch/img/blog/Haskell-the-Hard-Way/magritte_pleasure_principle.jpg" /> <div class="intro"> @@ -86,7 +126,7 @@ Imperative language could also benefit from this functional organization.</p& <center><hr style="width:30%;float:left;border-color:#CCCCD0;margin-top:1em" /><span class="sc"><b>Table of Content</b></span><hr style="width:30%;float:right;border-color:#CCCCD0;margin-top:1em" /></center> -</hr></center></blockquote></div></p> +</hr></center></blockquote></div></img> tag:yannesposito.com,2012-02-02:/Scratch/en/blog/Typography-and-the-Web/ @@ -98,13 +138,13 @@ Imperative language could also benefit from this functional organization.</p& yannesposito.com - <p><img alt="Screenshot of first in small caps with and without ligatures." src="/Scratch/img/blog/Typography-and-the-Web/first_sc_screenshot.png" /></p> + <img alt="Screenshot of first in small caps with and without ligatures." src="/Scratch/img/blog/Typography-and-the-Web/first_sc_screenshot.png" /> <div class="intro"> -<p><span class="sc"><abbr title="Too long; didn't read">tl;dr</abbr>: </span> Web typography sucks and we&rsquo;ll have to wait forever before it will be fixed.</p> +<p><span class="sc"><abbr title="Too long; didn't read">tl;dr</abbr>: </span> Web typography sucks and we&#8217;ll have to wait forever before it will be fixed.</p> </div> @@ -119,7 +159,7 @@ We can all create better web typography ourselves, today.»</p> <p>As somebody who tried to make my website using some nice typography features and in particular <em>ligatures</em>, I believe this is wrong.</p> -<p>I already made an automa...</p></p> +<p>I already made an automatic sys...</p></img> tag:yannesposito.com,2012-01-15:/Scratch/en/blog/Yesod-tutorial-for-newbies/ @@ -131,7 +171,7 @@ We can all create better web typography ourselves, today.»</p> yannesposito.com - <p><img alt="Neo Flying at warp speed" src="/Scratch/img/blog/Yesod-tutorial-for-newbies/flying_neo.jpg" /></p> + <img alt="Neo Flying at warp speed" src="/Scratch/img/blog/Yesod-tutorial-for-newbies/flying_neo.jpg" /> <div class="intro"> @@ -141,7 +181,7 @@ We can all create better web typography ourselves, today.»</p> <p><span class="sc"><abbr title="Too long; didn't read">tl;dr</abbr>: </span> A simple yesod tutorial. Yesod is a Haskell web framework. -You shouldn&rsquo;t need to know Haskell. </p> +You shouldn&#8217;t need to know Haskell. </p> <blockquote> <center><span class="sc"><b>Table of content</b></span></center> @@ -154,7 +194,7 @@ You shouldn&rsquo;t need to know Haskell. </p> <li><a href="#some-last-minute-words">Some last minute words</a></li> </ul> </li> - ...</ul></blockquote></div></p> + <li></li></ul></blockquote></div></img> tag:yannesposito.com,2011-10-20:/Scratch/en/blog/SVG-and-m4-fractals/ @@ -166,7 +206,7 @@ You shouldn&rsquo;t need to know Haskell. </p> yannesposito.com - <p><img alt="Yesod logo made in SVG and m4" src="/Scratch/img/blog/SVG-and-m4-fractals/main.png" /></p> + <img alt="Yesod logo made in SVG and m4" src="/Scratch/img/blog/SVG-and-m4-fractals/main.png" /> <div class="intro"> @@ -183,7 +223,7 @@ Some people where so enthusiastic about <span class="sc">xml</span> The idea was: the future is <span class="sc">xml</span>. Then some believed it would be a good idea to invent many <span class="sc">xml</span> compatible format and even programming languages with <span class="sc">xml</span> syntax.</p> -</p> +<p>Happy...</p></img> tag:yannesposito.com,2011-10-04:/Scratch/en/blog/Yesod-excellent-ideas/ @@ -195,7 +235,7 @@ Then some believed it would be a good idea to invent many <span class="sc"> yannesposito.com - <p><img alt="Title image" src="/Scratch/img/blog/Yesod-excellent-ideas/main.png" /></p> + <img alt="Title image" src="/Scratch/img/blog/Yesod-excellent-ideas/main.png" /> <div class="intro"> @@ -204,7 +244,7 @@ Then some believed it would be a good idea to invent many <span class="sc"> <p><span class="sc"><abbr title="Too long; didn't read">tl;dr</abbr>: </span></p> <p><a href="http://www.yesodweb.com">Yesod</a> is a web framework which recently reached the maturity for which you should consider to use it. -Before telling you why you should learn Haskell and use yesod, I will talk about ideas yesod introduced and I didn&rsquo;t saw in other frameworks before.</p> +Before telling you why you should learn Haskell and use yesod, I will talk about ideas yesod introduced and I didn&#8217;t saw in other frameworks before.</p> </div> @@ -212,11 +252,11 @@ Before telling you why you should learn Haskell and use yesod, I will talk about <h2 id="type-safety">Type safety</h2> -<p>Let&rsquo;s start by an obligatory link from <a href="http://xkcd.com">xkcd</a>:</p> +<p>Let&#8217;s start by an obligatory link from <a href="http://xkcd.com">xkcd</a>:</p> -<p><img src="http://imgs.xkcd.com/comics/exploits_of_a_mom.png" alt="SQL injection by a mom" /></p> +<img src="http://imgs.xkcd.com/comics/exploits_of_a_mom.png" alt="SQL injection by a mom" /> -<p>When you create a web application, a lot of time is spent...</p></p></p> +<p>When you create a web application, a lot of time is spent dealing with ...</p></img></img> tag:yannesposito.com,2011-09-28:/Scratch/en/blog/Higher-order-function-in-zsh/ @@ -228,7 +268,7 @@ Before telling you why you should learn Haskell and use yesod, I will talk about yannesposito.com - <p><img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.jpg" /></p> + <img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.jpg" /> <div class="intro"> @@ -263,7 +303,7 @@ $ mapa '$1*2' {1..3} 4 6 -$ mapl 'echo result $1' $(m...</code></pre></div></p> +$ mapl 'echo result $1' $(mapa '$1...</code></pre></div></img> tag:yannesposito.com,2011-09-28:/Scratch/en/blog/programming-language-experience/ @@ -275,7 +315,7 @@ $ mapl 'echo result $1' $(m...</code></pre></div></p>yannesposito.com - <p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/dragon.jpg" /></p> + <img alt="Title image" src="/Scratch/img/blog/programming-language-experience/dragon.jpg" /> <div class="intro"> @@ -287,7 +327,7 @@ $ mapl 'echo result $1' $(m...</code></pre></div></p> +It is not even good to learn programming...</p></img></img> tag:yannesposito.com,2011-08-25:/Scratch/en/blog/Learn-Vim-Progressively/ @@ -308,7 +348,7 @@ It is not even good to lea...</p></p></p> yannesposito.com - <p><img alt="Über leet use vim!" src="/Scratch/img/blog/Learn-Vim-Progressively/uber_leet_use_vim.jpg" /></p> + <img alt="Über leet use vim!" src="/Scratch/img/blog/Learn-Vim-Progressively/uber_leet_use_vim.jpg" /> <div class="intro"> @@ -327,10 +367,10 @@ It is not even good to lea...</p></p></p> </blockquote> <p>Learn <a href="http://www.vim.org">vim</a> and it will be your last text editor. -There isn&rsquo;t any better text editor that I know of. +There isn&#8217;t any better text editor that I know of. It is hard to learn, but incredible to use.</p> -<p>I suggest you teach yo...</p></p> +<p>I suggest you teach yourself ...</p></img> tag:yannesposito.com,2011-08-17:/Scratch/en/blog/A-more-convenient-diff/ @@ -397,7 +437,7 @@ main = putStrLn $ im ...</code></pre> yannesposito.com - <p><img alt="Title image" src="/Scratch/img/blog/Password-Management/main.png" /></p> + <img alt="Title image" src="/Scratch/img/blog/Password-Management/main.png" /> <div class="intro"> @@ -413,12 +453,12 @@ I use a different password on all website.</p> <p>Disclamer, this is an unashamed attempt to make you download my iPhone app&nbsp;;-). -You&rsquo;re always here? -Even if you won&rsquo;t download my app, you should read more. -My method doesn&rsquo;t necessitate my app. +You&#8217;re always here? +Even if you won&#8217;t download my app, you should read more. +My method doesn&#8217;t necessitate my app. It is both safe and easy to use everyday.</p> -<p>If you just want to <em>use</em> the tools without searching to understand why it is safe, just jump at the </p></p></div></p> +<p>If you just want to <em>use</em> the tools without searching to understand why it is safe, just jump at the </p></p></div></img> tag:yannesposito.com,2011-04-20:/Scratch/en/blog/2011-04-20-Now-hosted-on-github/ @@ -430,10 +470,10 @@ It is both safe and easy to use everyday.</p> yannesposito.com - <p><img alt="Title image" src="/Scratch/img/blog/2011-04-20-Now-hosted-on-github/main.png" /></p> + <img alt="Title image" src="/Scratch/img/blog/2011-04-20-Now-hosted-on-github/main.png" /> <p>I am now hosted on github.</p> -</p> +</img> tag:yannesposito.com,2011-01-03:/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/ @@ -445,7 +485,7 @@ It is both safe and easy to use everyday.</p> yannesposito.com - <p><img alt="Title image" src="/Scratch/img/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/main.png" /></p> + <img alt="Title image" src="/Scratch/img/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/main.png" /> <div class="encadre"> @@ -453,7 +493,7 @@ It is both safe and easy to use everyday.</p> <p><em>Update</em>: I might change my mind now. Why? I just discovered a <a href="https://github.com/rstacruz/js2coffee">js2coffee converter</a>. Furthermore Denis Knauf told me about a <code>CoffeeScript.eval</code> function. -And as Denis said: &ldquo;it is time to use Coffeescript as a javascript with Ruby-like syntax not a Ruby-like programming language&rdquo;.</p> +And as Denis said: &#8220;it is time to use Coffeescript as a javascript with Ruby-like syntax not a Ruby-like programming language&#8221;.</p> </div> @@ -469,7 +509,7 @@ And as Denis said: &ldquo;it is time to use Coffeescript as a javascript wit </div> -<p>Recently I read </p></p> +<p>Recently I read </p></img> tag:yannesposito.com,2011-01-01:/Scratch/en/blog/2011-01-03-Happy-New-Year/ @@ -532,7 +572,7 @@ When we are used to <span style="text-transform: uppercase">L<sup style <p><span class="sc"><abbr title="Too long; didn't read">tl;dr</abbr>: </span> Played to process a <code>wav</code> file. <code>C</code> was easier and cleaner than Ruby.</p> -<p>edit: I wanted this program to work only on one specific machine (a x86 on a 32 bit Ubuntu). Therefore I didn&rsquo;t had any portability consideration. This is only a <em>hack</em>.</p> +<p>edit: I wanted this program to work only on one specific machine (a x86 on a 32 bit Ubuntu). Therefore I didn&#8217;t had any portability consideration. This is only a <em>hack</em>.</p> </div> @@ -541,7 +581,7 @@ When we are used to <span style="text-transform: uppercase">L<sup style <p>I had to compute the sum of the absolute values of data of a <code>.wav</code> file. For efficiency (and fun) reasons, I had chosen <code>C</code> language.</p> -<p>I didn&rsquo;t programmed in <code>C</code> for a long time. +<p>I didn&#8217;t programmed in <code>C</code> 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. @@ -557,7 +597,7 @@ This is even more impressive know...</p> yannesposito.com - <p><img alt="Title image" src="/Scratch/img/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/main.png" class="clean " /></p> + <img alt="Title image" src="/Scratch/img/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/main.png" class="clean " /> <div class="intro"> @@ -578,12 +618,12 @@ This is even more impressive know...</p> </div> -<p>I&rsquo;ve (re)discovered how to become S/MIME compliant. +<p>I&#8217;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&rsquo;m able to sign and encrypt my emails.</p> +Now I&#8217;m able to sign and encrypt my emails.</p> -</p> +<h2 id="why-is-it-important">Why ...</h2></img> tag:yannesposito.com,2010-10-06:/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/ @@ -605,7 +645,7 @@ But the major problem came from, <code>font-shadow</code> and gradie Then my new design obey to the following rules:</p> <ul> - <li>no CSS element begining by &lsquo;-moz&rsquo; or &lsquo;-webkit&rsquo;, etc&hellip;,</li> + <li>no CSS element begining by &#8216;-moz&#8217; or &#8216;-webkit&#8217;, etc&#8230;,</li> <li>no text shadow,</li> <li>clean (I mean delete) most javascript.</li> </ul> @@ -626,7 +666,7 @@ Then my new design obey to the following rules:</p> <p>You can remark at the bottom of each page I provide a last modification date. This label was first calculated using the <code>mtime</code> of the file on the file system. But many times I modify this date just to force some recompilation. -Therefore the date wasn&rsquo;t a date of <em>real</em> modification.</p> +Therefore the date wasn&#8217;t a date of <em>real</em> modification.</p> <p>I use <a href="http://git-scm.org">git</a> to version my website. And fortunately I can know the last date of <em>real</em> change of a file. @@ -678,8 +718,8 @@ NSString *hex_hash = [self hex_sha1:@"some NSString to be sha1'ed"]; <p>I had to send a mail using only command line. -I was surprised it isn&rsquo;t straightforward at all. -I didn&rsquo;t had <code>pine</code> nor <code>mutt</code> or anything like that. +I was surprised it isn&#8217;t straightforward at all. +I didn&#8217;t had <code>pine</code> nor <code>mutt</code> or anything like that. Just <code>mail</code> and <code>mailx</code>.</p> <p>What Internet say (via google) is</p> @@ -689,7 +729,7 @@ Just <code>mail</code> and <code>mailx</code>.</p> <p>I tried it. And it works almost each times. -But for my file, it didn&rsquo;t worked. +But for my file, it didn&#8217;t worked. I compressed it to <code>.gz</code>, <code>.bz2</code> and <code>.zip</code>. Using <code>.bz2</code> format it worked nicely, but not with other formats. Instead of having an attached file I saw this in my email.</p> @@ -737,8 +777,42 @@ require 'rack-rewr...</code></pre> yannesposito.com - - + <p>&lt;% # toremove_ %&gt;</p> + + +<div class="intro"> + + +<p><span class="sc"><abbr title="Too long; didn't read">tl;dr</abbr>: </span> I pretend to create a world to give examples of different meanings behind the word <em>undecidability</em>:</p> + +<ul> + <li>Undecidability due to measure errors, </li> + <li>Big errors resulting from small initial measure error,</li> + <li>Fractal undecidability&nbsp;;</li> + <li>Logic Undecidability.</li> +</ul> + + +</div> + + + +</div> + +<div class="corps"> + + +<h1 class="first" id="the-undecidabilities">The Undecidabilities</h1> + + +<div class="intro"> + + +<p>If a demiurge made our world, he certainly had a great sense of humor. +After this read, you should be convinced. +I&#8217;ll pretend to be him. +I&#8217;ll create a simplified world. +A world that obey to simple ma...</p></div> tag:yannesposito.com,2010-07-31:/Scratch/en/blog/2010-07-31-New-style-after-holidays/ @@ -769,7 +843,7 @@ I was inspired by Readability and iBooks<small>&copy;</small> (t <p>Some <a href="http://reddit.com">Reddit</a> users reported my website was really long to load and to scroll. -They thinks it was because of the &lsquo;1px shadow&rsquo; I apply on all the text. +They thinks it was because of the &#8216;1px shadow&#8217; I apply on all the text. I was a bit surprised, because I make some test into a really <em>slow</em> virtual machine. And all have always worked fine. In fact, what slow down so much are by order of importance:</p> <ol> @@ -803,7 +877,7 @@ I was a bit surprised, because I make some test into a really <em>slow< <li>Tried to make <a href="http://yannesposito.com/Softwares/YPassword.html">YPassword</a> in jQuery and with Cappuccino.</li> <li>Cappuccino nice in desktop browser but 1.4MB, not compatible with iPhone.</li> <li>jQuery not as nice as the Cappuccino version but 106KB. iPhone compatible.</li> - <li>I&rsquo;ll give a try to Dashcode 3.</li> + <li>I&#8217;ll give a try to Dashcode 3.</li> </ul> @@ -929,7 +1003,7 @@ You can get it on <a href="http://github.com/yogsototh/nanoc3_blog">github <li><a href="http://intensedebate.org">intenseDebate</a> comments integration (asynchronous)&nbsp;;</li> <li>Portable with and without javascript, XHTML Strict 1.0 / CSS3,</li> <li>Write in markdown format (no HTML editing needed),</li> - <li>Typographic ameliorations (no &lsquo;:&rsquo; ...</li></ul> + <li>Typographic ameliorations (no &#8216;:&#8217; ...</li></ul> tag:yannesposito.com,2010-06-14:/Scratch/en/blog/2010-06-14-multi-language-choices/ @@ -960,12 +1034,12 @@ here is an example of english text. <p>This way of handling translations force you to write completely an article in one language, copy it, and translate it.</p> -<p>However, most of time, there are common parts like images, source code, etc&hellip; +<p>However, most of time, there are common parts like images, source code, etc&#8230; 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.</p> <p>This is why I preferred to handle it differently. I use <em>tags</em> on a single file. -Finally my files...</p> +Finally my files ...</p> tag:yannesposito.com,2010-05-24:/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/ @@ -990,7 +1064,7 @@ Finally my files...</p> <li>Used a pen and a sheet of paper</li> <li>Made some math.</li> <li>Crushed the problem in 10 minutes</li> - <li>Conclusion: The pragmatism shouldn&rsquo;t mean &ldquo;never use theory&rdquo;.</li> + <li>Conclusion: The pragmatism shouldn&#8217;t mean &#8220;never use theory&#8221;.</li> </ul> @@ -1052,14 +1126,14 @@ I entered in the...</p> <p>The more you wait to do something, the more difficult it is to start doing it.</p> </blockquote> -<p>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&rsquo;ve always said (until now), I&rsquo;ll do this later. What changed my mind is the haunt of this simple remark about how to be productive in programming. +<p>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&#8217;ve always said (until now), I&#8217;ll do this later. What changed my mind is the haunt of this simple remark about how to be productive in programming. &gt; Stop write <code>TODO</code> in your code and make it now!<br /> -&gt; You&rsquo;ll be surprised by the results.</p> +&gt; You&#8217;ll be surprised by the results.</p> <p>In short: &gt; <strong>Just do it!</strong> ou <strong>Juste fait le</strong> comme auraient dit les nuls.</p> -<p>Finally I&rsquo;ll certainly write blog post more often for a ...</p></p> +<p>Finally I&#8217;ll certainly write blog post more often for a ...</p></p> tag:yannesposito.com,2010-03-23:/Scratch/en/blog/2010-03-23-Encapsulate-git/ @@ -1125,7 +1199,7 @@ clientB: project adapted for client B</p> <p><code>git clone</code> can only fetch the master branch.</p> -<p>If you don&rsquo;t have much branches, you can simply use clone your project and then use the following command:</p> +<p>If you don&#8217;t have much branches, you can simply use clone your project and then use the following command:</p> <div> @@ -1173,47 +1247,4 @@ ext=File.extname(str) - - tag:yannesposito.com,2010-02-18:/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/ - split a file by keyword - 2010-02-18T13:29:14Z - 2010-02-18T13:29:14Z - - Yann Esposito - yannesposito.com - - - <p>Strangely enough, I didn&rsquo;t find any built-in tool to split a file by keyword. I made one myself in <code>awk</code>. 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 <code>UTC</code>.</p> - -<div> - -<pre><code class="perl">#!/usr/bin/env awk -BEGIN{i=0;} -/UTC/ { - i+=1; - FIC=sprintf("fic.%03d",i); -} -{print $0&gt;&gt;FIC} -</code></pre> - -</div> - -<p>In my real world example, I wanted one file per day, each line containing UTC being in the following format:</p> - -<pre class="twilight"> -Mon Dec 7 10:32:30 UTC 2009 -</pre> - -<p>I then finished with the following code:</p> - -<div> - -<pre><code class="perl">#!/usr/bin/env awk -BEGIN{i=0;} -/UTC/ { - date=$1$2$3; - if ( date != olddate ) { - ...</code></pre></div> - diff --git a/output/Scratch/fr/blog/Haskell-OpenGL-Mandelbrot/index.html b/output/Scratch/fr/blog/Haskell-OpenGL-Mandelbrot/index.html index d9f3c6abb..928f87c90 100644 --- a/output/Scratch/fr/blog/Haskell-OpenGL-Mandelbrot/index.html +++ b/output/Scratch/fr/blog/Haskell-OpenGL-Mandelbrot/index.html @@ -48,13 +48,13 @@
-

The B in Benoît B. Mandelbrot stand for Benoît B. Mandelbrot

+ The B in Benoît B. Mandelbrot stand for Benoît B. Mandelbrot
-

tlàl : Un exemple progressif d’utilisation d’Haskell. +

tlàl : Un exemple progressif d’utilisation d’Haskell. Vous pourrez voir un ensemble de Mandelbrot étendu à la troisième dimension. De plus le code sera très propre. Les détails de rendu sont séparés dans un module externe. @@ -67,7 +67,7 @@ Vous pouvez vous inspirer de ce code utilisant le paradigme fonctional dans tous

  • Introduction
  • First version
  • @@ -138,7 +138,7 @@ and something nice to see in 3D.

    And you can see the intermediate steps to reach this goal:

    -

    The parts of the article

    +The parts of the article

    From the 2nd section to the 4th it will be dirtier and dirtier. We start cleaning the code at the 5th section.

    @@ -152,7 +152,7 @@ We start cleaning the code at the 5th section.

    The first being mostly some boilerplate2. And the second part more focused on OpenGL and content.

    -

    Let’s play the song of our people

    +

    Let’s play the song of our people

    @@ -381,20 +381,20 @@ f c z n = if (magnitude z > 2 )

    Well, if you download this file (look at the bottom of this section), compile it and run it this is the result:

    -

    The mandelbrot set version 1

    +The mandelbrot set version 1

    A first very interesting property of this program is that the computation for all the points is done only once. It is a bit long before the first image appears, but if you resize the window, it updates instantaneously. This property is a direct consequence of purity. If you look closely, you see that allPoints is a pure list. Therefore, calling allPoints will always render the same result and Haskell is clever enough to use this property. -While Haskell doesn’t garbage collect allPoints the result is reused for free. +While Haskell doesn’t garbage collect allPoints the result is reused for free. We did not specified this value should be saved for later use. It is saved for us.

    See what occurs if we make the window bigger:

    -

    The mandelbrot too wide, black lines and columns

    +The mandelbrot too wide, black lines and columns

    We see some black lines because we have drawn less point than there is on the surface. We can repair this by drawing little squares instead of just points. @@ -565,7 +565,7 @@ maxZeroIndex func minval maxval n =

    No rocket science here. See the result now:

    -

    The edges of the mandelbrot set

    +The edges of the mandelbrot set
    @@ -626,7 +626,7 @@ instead of using a 3D projection of quaternions. I am pretty sure this construction is not useful for numbers. But it will be enough for us to create something that look nice.

    -

    This section is quite long, but don’t be afraid, +

    This section is quite long, but don’t be afraid, most of the code is some OpenGL boilerplate. If you just want to skim this section, here is a high level representation:

    @@ -642,7 +642,7 @@ here is a high level representation:

    Drawing:

      -
    • set doubleBuffer, handle depth, window size…
    • +
    • set doubleBuffer, handle depth, window size…
    • Use state to apply some transformations
    @@ -898,7 +898,7 @@ Mainly there are two parts: apply some transformations, draw the object.

    The 3D Mandelbrot

    -

    We have finished with the OpenGL section, let’s talk about how we +

    We have finished with the OpenGL section, let’s talk about how we generate the 3D points and colors. First, we will set the number of details to 200 pixels in the three dimensions.

    @@ -938,7 +938,7 @@ Each three successive point representing the coordinate of each vertex of a tria

    In fact, we will provide six ordered points. These points will be used to draw two triangles.

    -

    Explain triangles

    +Explain triangles

    The next function is a bit long. Here is an approximative English version:

    @@ -1012,7 +1012,7 @@ depthPoints = do

    If you prefer the first version, then just imagine how hard it will be to change the enumeration of the point from (x,y) to (x,z) for example.

    -

    Also, we didn’t searched for negative values. +

    Also, we didn’t searched for negative values. This modified Mandelbrot is no more symmetric relatively to the plan y=0. But it is symmetric relatively to the plan z=0. Then I mirror these values.

    @@ -1110,7 +1110,7 @@ and change the type signature of f from Complex to Here is the result:

    -

    A 3D mandelbrot like

    +A 3D mandelbrot like

    Download the source code of this section → 03_Mandelbulb/Mandelbulb.lhs

    @@ -1237,7 +1237,7 @@ ymandel x y z = mandel (2*x/width) (2*y/height) (2*z/deep) 64
    -

    This code is cleaner but many things doesn’t feel right. +

    This code is cleaner but many things doesn’t feel right. First, all the user interaction code is outside our main file. I feel it is okay to hide the detail for the rendering. But I would have preferred to control the user actions.

    @@ -1271,12 +1271,12 @@ We will have two choices:

  • Our main problem come from user interaction. -If you ask “the Internet”, +If you ask “the Internet”, about how to deal with user interaction with a functional paradigm, the main answer is to use functional reactive programming (FRP). -I won’t use FRP in this article. -Instead, I’ll use a simpler while less effective way to deal with user interaction. -But The method I’ll use will be as pure and functional as possible.

    +I won’t use FRP in this article. +Instead, I’ll use a simpler while less effective way to deal with user interaction. +But The method I’ll use will be as pure and functional as possible.

  • @@ -1298,7 +1298,7 @@ First, what the main loop should look like if we could make our own:

  • a function taking two parameters: time and world state and render a new world without user interaction.
-

Here is a real working code, I’ve hidden most display functions. +

Here is a real working code, I’ve hidden most display functions. The YGL, is a kind of framework to display 3D functions. But it can easily be extended to many kind of representation.

@@ -1518,7 +1518,7 @@ idleAction tnew world = world {

Now the function which will generate points in 3D. The first parameter (res) is the resolution of the vertex generation. More precisely, res is distance between two points on one direction. -We need it to “close” our shape.

+We need it to “close” our shape.

The type Function3D is Point -> Point -> Maybe Point. Because we consider partial functions @@ -1587,7 +1587,7 @@ ymandel x y z = fromIntegral (mandel x y z 64) / 64

-

I won’t explain how the magic occurs here. +

I won’t explain how the magic occurs here. If you are interested, just read the file YGL.hs. It is commented a lot.

@@ -1607,8 +1607,8 @@ It is commented a lot.

Our code architecture feel very clean. All the meaningful code is in our main file and all display details are externalized. -If you read the code of YGL.hs, you’ll see I didn’t made everything perfect. -For example, I didn’t finished the code of the lights. +If you read the code of YGL.hs, you’ll see I didn’t made everything perfect. +For example, I didn’t finished the code of the lights. But I believe it is a good first step and it will be easy to go further. Unfortunately the program of the preceding session is extremely slow. We compute the Mandelbulb for each frame now.

@@ -1892,20 +1892,20 @@ ymandel x y z = fromIntegral (mandel x y z 64) / 64

As we can use imperative style in a functional language, know you can use functional style in imperative languages. This article exposed a way to organize some code in a functional way. -I’d like to stress the usage of Haskell made it very simple to achieve this.

+I’d like to stress the usage of Haskell made it very simple to achieve this.

Once you are used to pure functional style, it is hard not to see all advantages it offers.

The code in the two last sections is completely pure and functional. -Furthermore I don’t use GLfloat, Color3 or any other OpenGL type. +Furthermore I don’t use GLfloat, Color3 or any other OpenGL type. If I want to use another library in the future, I would be able to keep all the pure code and simply update the YGL module.

-

The YGL module can be seen as a “wrapper” around 3D display and user interaction. +

The YGL module can be seen as a “wrapper” around 3D display and user interaction. It is a clean separator between the imperative paradigm and functional paradigm.

-

If you want to go further, it shouldn’t be hard to add parallelism. +

If you want to go further, it shouldn’t be hard to add parallelism. This should be easy mainly because most of the visible code is pure. Such an optimization would have been harder by using directly the OpenGL library.

@@ -1915,7 +1915,7 @@ O(n².log(n)) to O(n³).


  1. -

    Unfortunately, I couldn’t make this program to work on my Mac. More precisely, I couldn’t make the DevIL library work on Mac to output the image. Yes I have done a brew install libdevil. But even a minimal program who simply write some jpg didn’t worked. I tried both with Haskell and C.

    +

    Unfortunately, I couldn’t make this program to work on my Mac. More precisely, I couldn’t make the DevIL library work on Mac to output the image. Yes I have done a brew install libdevil. But even a minimal program who simply write some jpg didn’t worked. I tried both with Haskell and C.

  2. Generally in Haskell you need to declare a lot of import lines. @@ -2010,10 +2010,14 @@ O(n².log(n)) to O(n³).

    articles suivants + +
diff --git a/output/Scratch/fr/blog/feed/feed.xml b/output/Scratch/fr/blog/feed/feed.xml index c3088ce01..40e8c0502 100644 --- a/output/Scratch/fr/blog/feed/feed.xml +++ b/output/Scratch/fr/blog/feed/feed.xml @@ -35,6 +35,44 @@ just continue to read as a standard web page. \(\newcommand{\F}{\mathbf{F}}\) \(\newcommand{\E}{\mathbf{E}}\) \(\newcommand{\C}{\mathc...</div></img> + + + tag:yannesposito.com,2012-10-01:/Scratch/fr/blog/Category-Theory-Programming/ + Programmation en Théorie des Catégories + 2012-10-01T17:16:43Z + 2012-10-01T17:16:43Z + + Yann Esposito + yannesposito.com + + + +<div class="intro"> + + +<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Comment programmer en utilisant la théorie des catégories.</p> + +<blockquote> + <center><hr style="width:30%;float:left;border-color:#CCCCD0;margin-top:1em" /><span class="sc"><b>Table of Content</b></span><hr style="width:30%;float:right;border-color:#CCCCD0;margin-top:1em" /></center> + +<ul id="markdown-toc"> + <li><a href="#introduction">Introduction</a> <ul> + <li><a href="#programming-paradigms">Programming Paradigms</a></li> + </ul> + </li> + <li><a href="#get-some-intuition">Get some intuition</a> <ul> + <li><a href="#representation-of-category">Representation of Category</a></li> + </ul> + </li> +</ul> + +</blockquote> + + +</div> + + +<h2 id="introduction">Introductio...</h2></blockquote></div> tag:yannesposito.com,2012-06-15:/Scratch/fr/blog/Haskell-OpenGL-Mandelbrot/ @@ -46,13 +84,13 @@ just continue to read as a standard web page. yannesposito.com - <p><img alt="The B in Benoît B. Mandelbrot stand for Benoît B. Mandelbrot" src="/Scratch/img/blog/Haskell-OpenGL-Mandelbrot/BenoitBMandelbrot.jpg" /></p> + <img alt="The B in Benoît B. Mandelbrot stand for Benoît B. Mandelbrot" src="/Scratch/img/blog/Haskell-OpenGL-Mandelbrot/BenoitBMandelbrot.jpg" /> <div class="intro"> -<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Un exemple progressif d&rsquo;utilisation d&rsquo;Haskell. +<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Un exemple progressif d&#8217;utilisation d&#8217;Haskell. Vous pourrez voir un ensemble de Mandelbrot étendu à la troisième dimension. De plus le code sera très propre. Les détails de rendu sont séparés dans un module externe. @@ -60,7 +98,7 @@ Le code descriptif intéressant est concentré dans un environnement pur Vous pouvez vous inspirer de ce code utilisant le paradigme fonctional dans tous les languages.</p> <blockquote> - <center><hr style="width:30%;float:left;border-color:#CCCCD0;margin-top:1em" /><span class="sc"></span></hr></center></blockquote></div></p> + <center><hr style="width:30%;float:left;border-color:#CCCCD0;margin-top:1em" /><span class="sc"><b>Table...</b></span></hr></center></blockquote></div></img> tag:yannesposito.com,2012-02-08:/Scratch/fr/blog/Haskell-the-Hard-Way/ @@ -72,7 +110,7 @@ Vous pouvez vous inspirer de ce code utilisant le paradigme fonctional dans tous yannesposito.com - <p><img alt="Magritte pleasure principle" src="/Scratch/img/blog/Haskell-the-Hard-Way/magritte_pleasure_principle.jpg" /></p> + <img alt="Magritte pleasure principle" src="/Scratch/img/blog/Haskell-the-Hard-Way/magritte_pleasure_principle.jpg" /> <div class="intro"> @@ -83,7 +121,7 @@ Vous pouvez vous inspirer de ce code utilisant le paradigme fonctional dans tous <p>Merci à <a href="https://plus.google.com/u/0/113751420744109290534">Oleg Taykalo</a> vous pouvez trouver une traduction Russe ici: <a href="http://habrahabr.ru/post/152889/">Partie 1</a> <em class="pala">&amp;</em> <a href="http://habrahabr.ru/post/153383/">Partie 2</a>&nbsp;; </p> <blockquote> - <center><hr style="width:30%;float:left;border-color:#CCCCD0;margin-top:1em" /><span class="sc"><b>Table of Content</b></span></hr></center></blockquote></div></p> + <center><hr style="width:30%;float:left;border-color:#CCCCD0;margin-top:1em" /><span class="sc"><b>Table of Content</b></span><hr style="width:30%;float:right;border-color:#CCCCD0;margin-top:1em" /></hr></hr></center></blockquote></div></img> tag:yannesposito.com,2012-02-02:/Scratch/fr/blog/Typography-and-the-Web/ @@ -95,30 +133,30 @@ Vous pouvez vous inspirer de ce code utilisant le paradigme fonctional dans tous yannesposito.com - <p><img alt="Screenshot of first in small caps with and without ligatures." src="/Scratch/img/blog/Typography-and-the-Web/first_sc_screenshot.png" /></p> + <img alt="Screenshot of first in small caps with and without ligatures." src="/Scratch/img/blog/Typography-and-the-Web/first_sc_screenshot.png" /> <div class="intro"> -<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> La typography sur le web est pourrie et nous ne somme pas près de voir ce problème réparé.</p> +<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> La typography sur le web est pourrie et nous ne somme pas près de voir ce problème réparé.</p> </div> -<p>Je suis tombé sur ce site: <a href="http://opentypography.org/">open typography</a>. Leur message principal est&nbsp;:</p> +<p>Je suis tombé sur ce site: <a href="http://opentypography.org/">open typography</a>. Leur message principal est&nbsp;:</p> <blockquote> - <p>«There is no reason to wait for browser development to catch up. -We can all create better web typography ourselves, today.»</p> + <p>«There is no reason to wait for browser development to catch up. +We can all create better web typography ourselves, today.»</p> </blockquote> -<p>ou en français&nbsp;:</p> +<p>ou en français&nbsp;:</p> <blockquote> - <p>«Nous ne somme pas obligé d&rsquo;attendre le développement des navigateurs. -Nous pouv...</p></blockquote></p> + <p>«Nous ne somme pas obligé d&#8217;attendre le développement des navigateurs. +Nous pouvons crÃ...</p></blockquote></img> tag:yannesposito.com,2012-01-15:/Scratch/fr/blog/Yesod-tutorial-for-newbies/ @@ -130,7 +168,7 @@ Nous pouv...</p></blockquote></p> yannesposito.com - <p><img alt="Neo Flying at warp speed" src="/Scratch/img/blog/Yesod-tutorial-for-newbies/flying_neo.jpg" /></p> + <img alt="Neo Flying at warp speed" src="/Scratch/img/blog/Yesod-tutorial-for-newbies/flying_neo.jpg" /> <div class="intro"> @@ -141,7 +179,7 @@ Nous pouv...</p></blockquote></p> <p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Un tutoriel pour yesod, un framework web Haskell. Vous ne devriez pas avoir besoin de savoir programmer en Haskell. Par contre je suis désolé pour les francophones, -mais je n&rsquo;ai pas eu le courage de traduire cet article en Français.</p> +mais je n&#8217;ai pas eu le courage de traduire cet article en Français.</p> <blockquote> <center><span class="sc"><b>Table of content</b></span></center> @@ -149,7 +187,7 @@ mais je n&rsquo;ai pas eu le courage de traduire cet article en Françai <ul id="markdown-toc"> <li><a href="#before-the-real-start">Before the real start</a> <ul> <li><a href="#install">Install</a></li> - <li><a href="#initialize">In...</a></li></ul></li></ul></blockquote></div></p> + <li><a href="#initialize">Initializ...</a></li></ul></li></ul></blockquote></div></img> tag:yannesposito.com,2011-10-20:/Scratch/fr/blog/SVG-and-m4-fractals/ @@ -161,23 +199,23 @@ mais je n&rsquo;ai pas eu le courage de traduire cet article en Françai yannesposito.com - <p><img alt="Yesod logo made in SVG and m4" src="/Scratch/img/blog/SVG-and-m4-fractals/main.png" /></p> + <img alt="Yesod logo made in SVG and m4" src="/Scratch/img/blog/SVG-and-m4-fractals/main.png" /> <div class="intro"> -<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Utiliser m4 pour accroître le pouvoir d&rsquo;<span class="sc">xslt</span> et d&rsquo;<span class="sc">svg</span>. Example cool, les fractales.</p> +<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Utiliser m4 pour accroître le pouvoir d&#8217;<span class="sc">xslt</span> et d&#8217;<span class="sc">svg</span>. Example cool, les fractales.</p> </div> -<p>Lorsqu&rsquo;<span class="sc">xml</span> fût inventé beaucoup pensaient que c&rsquo;était l&rsquo;avenir. +<p>Lorsqu&#8217;<span class="sc">xml</span> fût inventé beaucoup pensaient que c&#8217;était l&#8217;avenir. Passer de fichiers plat à des fichiers structurés standardisés fût un grand progrès dans beaucoup de domaines. Cerain se mirent à voir du <span class="sc">xml</span> de partout. À tel point que les les format compatibles <span class="sc">xml</span> naquirent de toute part. -Non seulement comme format de fichie...</p></p> +Non seulement comme format de fichier, mais...</p></img> tag:yannesposito.com,2011-10-04:/Scratch/fr/blog/Yesod-excellent-ideas/ @@ -189,7 +227,7 @@ Non seulement comme format de fichie...</p></p> yannesposito.com - <p><img alt="Title image" src="/Scratch/img/blog/Yesod-excellent-ideas/main.png" /></p> + <img alt="Title image" src="/Scratch/img/blog/Yesod-excellent-ideas/main.png" /> <div class="intro"> @@ -198,8 +236,8 @@ Non seulement comme format de fichie...</p></p> <p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span></p> <p>Cela fait un moment que je suis la progression du <a href="http://www.yesodweb.com">framework yesod</a>. -À mon humble avis on peut commencer à l&rsquo;utiliser pour des applications sérieuses (comprendre en prod). -Avant de vous dire pourquoi vous devriez aussi le considérer, je préfère vous parler de bonnes idées (parmi d&rsquo;autres) introduites par yesod que je n&rsquo;avais jamais vu ailleurs.</p> +À mon humble avis on peut commencer à l&#8217;utiliser pour des applications sérieuses (comprendre en prod). +Avant de vous dire pourquoi vous devriez aussi le considérer, je préfère vous parler de bonnes idées (parmi d&#8217;autres) introduites par yesod que je n&#8217;avais jamais vu ailleurs.</p> </div> @@ -207,9 +245,9 @@ Avant de vous dire pourquoi vous devriez aussi le considérer, je préf& <h2 id="types-saufs">Types saufs</h2> -<p>Commençons par une BD d&rsquo;<a href="http://xkcd.com">xkcd</a>&nbsp;:</p> +<p>Commençons par une BD d&#8217;<a href="http://xkcd.com">xkcd</a>&nbsp;:</p> -<p></p></p> +</img> tag:yannesposito.com,2011-09-28:/Scratch/fr/blog/Higher-order-function-in-zsh/ @@ -221,7 +259,7 @@ Avant de vous dire pourquoi vous devriez aussi le considérer, je préf& yannesposito.com - <p><img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.jpg" /></p> + <img alt="Title image" src="/Scratch/img/blog/Higher-order-function-in-zsh/main.jpg" /> <div class="intro"> @@ -252,7 +290,7 @@ X filter Y X fold Y X map Y -$ mapa '$1*2...</code></pre></div></p> +$ mapa '$1*2' {1..3...</code></pre></div></img> tag:yannesposito.com,2011-09-28:/Scratch/fr/blog/programming-language-experience/ @@ -264,26 +302,28 @@ $ mapa '$1*2...</code></pre></div></p> yannesposito.com - <p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/dragon.jpg" /></p> + <img alt="Title image" src="/Scratch/img/blog/programming-language-experience/dragon.jpg" /> <div class="intro"> -<span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Mon avis succinct et hautement subjectif concernant les différents languages de programmation que j&rsquo;ai utilisé. +<span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Mon avis succinct et hautement subjectif concernant les différents languages de programmation que j&#8217;ai utilisé. </div> <h3 id="basic"><code>BASIC</code></h3> -<p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/basic.gif" class=" left" /></p> +<img alt="Title image" src="/Scratch/img/blog/programming-language-experience/basic.gif" class=" left" /> <p>Ah&nbsp;! Le language de mes premiers programmes&nbsp;! Je devais avoir 10-11 ans. Sous <code>MO5</code>, <code>Amstrad CPC 6128</code> et même <code>Atari STe</code>. Le langage des <code>GOTO</code>s. -Je suis empleint de nostalgie rien que d&rsquo;y penser. -C&rsquo;est à peu prêt le seul intérêt de ce ...</p></p></p> +Je suis empleint de nostalgie rien que d&#8217;y penser. +C&#8217;est à peu prêt le seul intérêt de ce langage.</p> + +...</img></img> tag:yannesposito.com,2011-08-25:/Scratch/fr/blog/Learn-Vim-Progressively/ @@ -295,7 +335,7 @@ C&rsquo;est à peu prêt le seul intérêt de ce ...</p&g yannesposito.com - <p><img alt="Über leet use vim!" src="/Scratch/img/blog/Learn-Vim-Progressively/uber_leet_use_vim.jpg" /></p> + <img alt="Über leet use vim!" src="/Scratch/img/blog/Learn-Vim-Progressively/uber_leet_use_vim.jpg" /> <div class="intro"> @@ -307,7 +347,7 @@ C&rsquo;est à peu prêt le seul intérêt de ce ...</p&g </div> -<p><a href="http://www.vim.org">Vim</a> ou l&rsquo;éditeur qui vallait 3 milliards&nbsp;:</p> +<p><a href="http://www.vim.org">Vim</a> ou l&#8217;éditeur qui vallait 3 milliards&nbsp;:</p> <blockquote> <p>Meilleur, plus fort, plus rapide.</p> @@ -315,7 +355,7 @@ C&rsquo;est à peu prêt le seul intérêt de ce ...</p&g <p>Apprenez <a href="http://www.vim.org">vim</a> et ce sera votre dernier éditeur. Aucun éditeur que je connaisse ne le surpasse. -Sa prise en mais est difficile, mais p...</p></p> +Sa prise en mais est difficile, mais payante....</p></img> tag:yannesposito.com,2011-08-17:/Scratch/fr/blog/A-more-convenient-diff/ @@ -327,11 +367,11 @@ Sa prise en mais est difficile, mais p...</p></p> yannesposito.com - <p><code>diff</code> est un utilitaire très pratique, mais il n&rsquo;est pas facile à lire pour nous, les Hommes.</p> + <p><code>diff</code> est un utilitaire très pratique, mais il n&#8217;est pas facile à lire pour nous, les Hommes.</p> -<p>C&rsquo;est pourquoi, lorsque vous utilisez <code>git</code>, il vous montre un formatage plus agréable avec des couleurs.</p> +<p>C&#8217;est pourquoi, lorsque vous utilisez <code>git</code>, il vous montre un formatage plus agréable avec des couleurs.</p> -<p>Voici le script que j&rsquo;utilise lorsque je veux avoir un <code>diff</code> à la git.</p> +<p>Voici le script que j&#8217;utilise lorsque je veux avoir un <code>diff</code> à la git.</p> <div class="codefile"><a href="/Scratch/fr/blog/A-more-convenient-diff/code/ydiff">&#x27A5; ydiff</a></div> @@ -359,7 +399,7 @@ function colorize_diff { yannesposito.com - <p>Voici le code &ldquo;obfusqué&rdquo;&nbsp;:</p> + <p>Voici le code &#8220;obfusqué&#8221;&nbsp;:</p> <div class="codefile"><a href="/Scratch/fr/blog/Haskell-Mandelbrot/code/animandel.hs">&#x27A5; animandel.hs</a></div> @@ -382,25 +422,25 @@ main ...</code></pre> yannesposito.com - <p><img alt="Title image" src="/Scratch/img/blog/Password-Management/main.png" /></p> + <img alt="Title image" src="/Scratch/img/blog/Password-Management/main.png" /> <div class="intro"> -<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Une méthode de gestion des mots de passes que j&rsquo;utilise avec succès depuis quelques années.<br /> +<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Une méthode de gestion des mots de passes que j&#8217;utilise avec succès depuis quelques années.<br /> <strong><code>sha1( mot_de_passe + nom_de_domaine )</code></strong><br /> -Je ne mémorise qu&rsquo;un seul mot de passe de très bonne qualité. -J&rsquo;utilise des mots de passe différents sur tous les sites.</p> +Je ne mémorise qu&#8217;un seul mot de passe de très bonne qualité. +J&#8217;utilise des mots de passe différents sur tous les sites.</p> </div> -<p>Avant de commencer, je tiens à préciser qu&rsquo;il s&rsquo;agit d&rsquo;une tentative de vous vendre mon appli iPhone&nbsp;;-).</p> +<p>Avant de commencer, je tiens à préciser qu&#8217;il s&#8217;agit d&#8217;une tentative de vous vendre mon appli iPhone&nbsp;;-).</p> <p>Vous êtes toujours là&nbsp;? -Bon, d&rsquo;accord, même si vous ne téléchargez pas mon application vous pouvez quand même utili...</p></p></div></p> +Bon, d&#8217;accord, même si vous ne téléchargez pas mon application vous pouvez quand même utiliser ma ...</p></p></div></img> tag:yannesposito.com,2011-04-20:/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/ @@ -412,10 +452,10 @@ Bon, d&rsquo;accord, même si vous ne téléchargez pas mon appl yannesposito.com - <p><img alt="Title image" src="/Scratch/img/blog/2011-04-20-Now-hosted-on-github/main.png" /></p> + <img alt="Title image" src="/Scratch/img/blog/2011-04-20-Now-hosted-on-github/main.png" /> -<p>J&rsquo;héberge mon site sur github à partir d&rsquo;aujourd&rsquo;hui.</p> -</p> +<p>J&#8217;héberge mon site sur github à partir d&#8217;aujourd&#8217;hui.</p> +</img> tag:yannesposito.com,2011-01-03:/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/ @@ -427,15 +467,15 @@ Bon, d&rsquo;accord, même si vous ne téléchargez pas mon appl yannesposito.com - <p><img alt="Title image" src="/Scratch/img/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/main.png" /></p> + <img alt="Title image" src="/Scratch/img/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/main.png" /> <div class="encadre"> -<p><em>Mise à jour&nbsp;:</em> Je pense que je vais finallement changer d&rsquo;avis. +<p><em>Mise à jour&nbsp;:</em> Je pense que je vais finallement changer d&#8217;avis. Pourquoi&nbsp;? -Tout d&rsquo;abord, je viens de découvrir un convertisseur javascript vers coffeescript, ensuite Denis Knauf m&rsquo;a laissé un commentaire et m&rsquo;a appris l&rsquo;existence d&rsquo;une fonction <code>CoffeeScript.eval</code>. De plus, il faut voir CoffeeScript comme javascript avec une syntaxe similaire à Ruby et pas comme un langage similaire à Ruby.</p> +Tout d&#8217;abord, je viens de découvrir un convertisseur javascript vers coffeescript, ensuite Denis Knauf m&#8217;a laissé un commentaire et m&#8217;a appris l&#8217;existence d&#8217;une fonction <code>CoffeeScript.eval</code>. De plus, il faut voir CoffeeScript comme javascript avec une syntaxe similaire à Ruby et pas comme un langage similaire à Ruby.</p> </div> @@ -445,7 +485,7 @@ Tout d&rsquo;abord, je viens de découvrir un convertisseur javascript v <div class="intro"> -<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Qu&rsquo;est-ce qui n&rsquo;allait pas avec Coffeescript? La meta-programm...</p></div></p> +<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Qu&#8217;est-ce qui n&#8217;allait pas avec Coffeescript? La meta-programmation, ...</p></div></img> tag:yannesposito.com,2011-01-01:/Scratch/fr/blog/2011-01-03-Happy-New-Year/ @@ -459,15 +499,15 @@ Tout d&rsquo;abord, je viens de découvrir un convertisseur javascript v <p>Bonne et heureuse année&nbsp;!</p> -<p>J&rsquo;étais très occupé ces derniers mois. +<p>J&#8217;étais très occupé ces derniers mois. Maintenant il me semble que je vais pouvoir faire revivre ce blog.</p> -<p>J&rsquo;ai fait un outil qui permet d&rsquo;écrire des livre en utilisant une syntaxe proche de markdown. -C&rsquo;est un markdown avec des macros (essentiel pour les textes longs). +<p>J&#8217;ai fait un outil qui permet d&#8217;écrire des livre en utilisant une syntaxe proche de markdown. +C&#8217;est un markdown avec des macros (essentiel pour les textes longs). De plus le système gère la génération de pages HTML ainsi que du PDF engendré avec du XeLaTeX. -Je n&rsquo;en ai pas encore terminé avec ça. Mais si je tarde trop, je communiquerai lorsque j&rsquo;aurai fini le minimum.</p> +Je n&#8217;en ai pas encore terminé avec ça. Mais si je tarde trop, je communiquerai lorsque j&#8217;aurai fini le minimum.</p> -<p>J&rsquo;ai écrit un framework MVC pour application javascript simple mais néanmoins très rapide.</p> +<p>J&#8217;ai écrit un framework MVC pour application javascript simple mais néanmoins très rapide.</p> <p>Meilleurs vœux à tous&nbsp;!</p> @@ -486,14 +526,14 @@ Je n&rsquo;en ai pas encore terminé avec ça. Mais si je tarde trop <div class="intro"> -<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> J&rsquo;ai fait un système simple de macros pour mon blog. Par exemple, il me suffit d&rsquo;écrire %<span></span>latex et ça affiche <span style="text-transform: uppercase">L<sup style="vertical-align: 0.15em; margin-left: -0.36em; margin-right: -0.15em; font-size: .85em">a</sup>T<sub style="vertical-align: -0.5ex; margin-left: -0.1667em; margin-right: -0.125em; font-size: 1em">e</sub>X</span>.</p> +<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> J&#8217;ai fait un système simple de macros pour mon blog. Par exemple, il me suffit d&#8217;écrire %<span></span>latex et ça affiche <span style="text-transform: uppercase">L<sup style="vertical-align: 0.15em; margin-left: -0.36em; margin-right: -0.15em; font-size: .85em">a</sup>T<sub style="vertical-align: -0.5ex; margin-left: -0.1667em; margin-right: -0.125em; font-size: 1em">e</sub>X</span>.</p> </div> -<p>J&rsquo;ai ajouter un système de macro pour mon système de blog. -Lorsqu&rsquo;on est habitué à <span style="text-transform: uppercase">L<sup style="vertical-align: 0.15em; margin-left: -0.36em; margin-right: -0.15em; font-size: .85em">a</sup>T</span></p> +<p>J&#8217;ai ajouter un système de macro pour mon système de blog. +Lorsqu&#8217;on est habitué à <span style="text-transform: uppercase">L<sup style="vertical-align: 0.15em; margin-left: -0.36em; margin-right: -0.15em; font-size: .85em">a</sup>T</span></p> tag:yannesposito.com,2010-10-14:/Scratch/fr/blog/2010-10-14-Fun-with-wav/ @@ -517,10 +557,10 @@ Lorsqu&rsquo;on est habitué à <span style="text-transform: uppe </div> -<p>J&rsquo;ai eu besoin de calculer la somme des valeurs absolue des données d&rsquo;un fichier <code>wav</code>. -Pour des raison d&rsquo;efficacité (et aussi de fun), j&rsquo;ai fait le programme en <code>C</code>.</p> +<p>J&#8217;ai eu besoin de calculer la somme des valeurs absolue des données d&#8217;un fichier <code>wav</code>. +Pour des raison d&#8217;efficacité (et aussi de fun), j&#8217;ai fait le programme en <code>C</code>.</p> -<p>Celà faisait longtemps que je n&rsquo;avais pas programmé en <code>C</code>. +<p>Celà faisait longtemps que je n&#8217;avais pas programmé en <code>C</code>. De mémoire il était peu aisé de manipuler des ...</p> @@ -533,7 +573,7 @@ De mémoire il était peu aisé de manipuler des ...</p>yannesposito.com - <p><img alt="Title image" src="/Scratch/img/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/main.png" class="clean " /></p> + <img alt="Title image" src="/Scratch/img/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/main.png" class="clean " /> <div class="intro"> @@ -545,16 +585,16 @@ De mémoire il était peu aisé de manipuler des ...</p> +<p>J&#8217;ai (re)découvert comment adoptez la norme S/MIME. +J&#8217;ai été surpris de voir à quel point ce fut aisé. +Il y a seulement quelques années c&#8217;é...</p></img> tag:yannesposito.com,2010-10-06:/Scratch/fr/blog/2010-10-06-New-Blog-Design-Constraints/ @@ -566,15 +606,15 @@ Il y a seulement quelques années c&r...</p></p> yannesposito.com - <p>Vous avez pu constater que j&rsquo;ai modifié le design de mon blog. -Maintenant il doit être beaucoup plus léger qu&rsquo;avant. -Je n&rsquo;utilise plus de CSS3 et beaucoup moins de javascript. + <p>Vous avez pu constater que j&#8217;ai modifié le design de mon blog. +Maintenant il doit être beaucoup plus léger qu&#8217;avant. +Je n&#8217;utilise plus de CSS3 et beaucoup moins de javascript. Bien entendu, même avant, mes pages étaient parfaitement lisibles sans javascript. -Mais, je me suis aperçu que les systèmes de CSS3 sont loin d&rsquo;être au point. -J&rsquo;utilisait des gradient en CSS3, ainsi que des ombres sous le texte. Ça avait un rendu très sympa. Sauf&hellip; -Ce n&rsquo;était pas compatible ie6, sous Chrome le rendu était d&rsquo;une lenteur incroyable. -J&rsquo;ai donc décidé de faire un site à minima. -Je voulais qu&rsquo;il soit joli <em>et</em> le plus simple possible pour assurer sa compatibilité. +Mais, je me suis aperçu que les systèmes de CSS3 sont loin d&#8217;être au point. +J&#8217;utilisait des gradient en CSS3, ainsi que des ombres sous le texte. Ça avait un rendu très sympa. Sauf&#8230; +Ce n&#8217;était pas compatible ie6, sous Chrome le rendu était d&#8217;une lenteur incroyable. +J&#8217;ai donc décidé de faire un site à minima. +Je voulais qu&#8217;il soit joli <em>et</em> le plus simple possible pour assurer sa compatibilité. Les règles que je me suis fixées sont donc:</p> @@ -589,14 +629,14 @@ Les règles que je me suis fixées sont donc:</p> yannesposito.com - <p>Vous pouvez remarquer qu&rsquo;à la fin de chaque page je donne une date de dernière modification. + <p>Vous pouvez remarquer qu&#8217;à la fin de chaque page je donne une date de dernière modification. Précédemment cette date était calculée en utilisant la date du fichier. -Mais il arrive fréquemment que je fasse un <code>touch</code> d&rsquo;un fichier pour engendrer tout le site de nouveau. -Donc la date n&rsquo;est pas nécessairement la <em>vraie</em> de modification du contenue.</p> +Mais il arrive fréquemment que je fasse un <code>touch</code> d&#8217;un fichier pour engendrer tout le site de nouveau. +Donc la date n&#8217;est pas nécessairement la <em>vraie</em> de modification du contenue.</p> -<p>J&rsquo;utilise <a href="http://git-scm.org">git</a> pour <em>versionner</em> mon site web. -Et cet outil me permet de récupérer la dernière date de <em>vraie</em> modification d&rsquo;un fichier. -Voici comment je m&rsquo;y prend avec <a href="http://nanoc.stoneship.org">nanoc</a>&nbsp;:</p> +<p>J&#8217;utilise <a href="http://git-scm.org">git</a> pour <em>versionner</em> mon site web. +Et cet outil me permet de récupérer la dernière date de <em>vraie</em> modification d&#8217;un fichier. +Voici comment je m&#8217;y prend avec <a href="http://nanoc.stoneship.org">nanoc</a>&nbsp;:</p> <div class="codefile"></div> @@ -610,10 +650,10 @@ Voici comment je m&rsquo;y prend avec <a href="http://nanoc.stoneship.org yannesposito.com - <p>Allons directement à l&rsquo;essentiel&nbsp;: -voici deux fonctions à intégrer à votre application iPhone pour afficher l&rsquo;encodage en base64 ou en hexadecimal du hash sha1 d&rsquo;un string en Objective-C pour iPhone.</p> + <p>Allons directement à l&#8217;essentiel&nbsp;: +voici deux fonctions à intégrer à votre application iPhone pour afficher l&#8217;encodage en base64 ou en hexadecimal du hash sha1 d&#8217;un string en Objective-C pour iPhone.</p> -<p>Pour l&rsquo;usage c&rsquo;est très simple, copiez le code dans la classe de votre choix. +<p>Pour l&#8217;usage c&#8217;est très simple, copiez le code dans la classe de votre choix. Puis&nbsp;:</p> <pre><code class="objective-c">#import &lt;CommonCrypto/CommonDigest.h&gt; @@ -623,8 +663,8 @@ NSString *b64_hash = [self b64_sha1:@"some NSString to be sha1'ed"]; NSString *hex_hash = [self hex_sha1:@"some NSString to be sha1'ed"]; </code></pre> -<p>L&rsquo;algorithme pour l&rsquo;encodage en <code>base64</code> doit être programmé sur iPhone. -Il n&rsquo;y a pas de librairie officielle qui s&rsquo;occupe de ça.</p> +<p>L&#8217;algorithme pour l&#8217;encodage en <code>base64</code> doit être programmé sur iPhone. +Il n&#8217;y a pas de librairie officielle qui s&#8217;occupe de ça.</p> <div class="codefile"></div> @@ -638,19 +678,19 @@ Il n&rsquo;y a pas de librairie officielle qui s&rsquo;occupe de ça yannesposito.com - <p>J&rsquo;ai dû envoyer un mail en ligne de commande récemment. -Quelle ne fût pas ma surprise lorsque je constatais que ce n&rsquo;était vraiment pas évident. -Je n&rsquo;avais ni <code>pine</code> ni <code>mutt</code>. Seulement <code>mail</code> et <code>mailx</code>.</p> + <p>J&#8217;ai dû envoyer un mail en ligne de commande récemment. +Quelle ne fût pas ma surprise lorsque je constatais que ce n&#8217;était vraiment pas évident. +Je n&#8217;avais ni <code>pine</code> ni <code>mutt</code>. Seulement <code>mail</code> et <code>mailx</code>.</p> -<p>Ce qu&rsquo;on trouve sur internet pour envoyer un mail avec fichier attaché c&rsquo;est ça&nbsp;:</p> +<p>Ce qu&#8217;on trouve sur internet pour envoyer un mail avec fichier attaché c&#8217;est ça&nbsp;:</p> <pre><code class="zsh">uuencode fic.jpg fic.jpg | mail -s 'Subject' </code></pre> -<p>Bon, alors, bête et discipliné j&rsquo;ai essayé. +<p>Bon, alors, bête et discipliné j&#8217;ai essayé. Et bien, ça marche <em>presque</em> tout le temps. -Pour mon fichier ça n&rsquo;a pas marché du tout. -Je l&rsquo;ai compressé au format <code>.gz</code>, <code>.bz2</code> et <code>.zip</code>. +Pour mon fichier ça n&#8217;a pas marché du tout. +Je l&#8217;ai compressé au format <code>.gz</code>, <code>.bz2</code> et <code>.zip</code>. Avec le format <code>.bz2</code> le mail reçu avait bien un fichie...</p> @@ -665,14 +705,14 @@ Avec le format <code>.bz2</code> le mail reçu avait bien un fic <h1 class="first" id="maintenant-sur-herokuhttpherokucom">Maintenant sur <a href="http://heroku.com">Heroku</a></h1> -<p>J&rsquo;ai changé mon hébergeur. Mobileme n&rsquo;est absolument pas adapté à la diffusion de mon blog. C&rsquo;est pourquoi je suis passé à <a href="http://heroku.com">Heroku</a>.</p> +<p>J&#8217;ai changé mon hébergeur. Mobileme n&#8217;est absolument pas adapté à la diffusion de mon blog. C&#8217;est pourquoi je suis passé à <a href="http://heroku.com">Heroku</a>.</p> <p>Mais comme vous devez le savoir mon blog est un site complètement statique. -J&rsquo;utilise <a href="http://nanoc.stoneship.org/">nanoc</a> pour l&rsquo;engendrer. -Avoir un site statique amène beaucoup d&rsquo;avantages par rapport à un site dynamique. Surtout en terme de sécurité. +J&#8217;utilise <a href="http://nanoc.stoneship.org/">nanoc</a> pour l&#8217;engendrer. +Avoir un site statique amène beaucoup d&#8217;avantages par rapport à un site dynamique. Surtout en terme de sécurité. Voici comment configurer un site statique sur heroku.</p> -<p>La racine de mes fichiers est &lsquo;/output&rsquo;. Vous devez simplement créer deux fichiers. Un fichier <code>config.ru</code></p> +<p>La racine de mes fichiers est &#8216;/output&#8217;. Vous devez simplement créer deux fichiers. Un fichier <code>config.ru</code></p> tag:yannesposito.com,2010-08-11:/Scratch/fr/blog/2010-07-09-Indecidabilities/ @@ -684,8 +724,39 @@ Voici comment configurer un site statique sur heroku.</p> yannesposito.com - - + <p>&lt;% # toremove_ %&gt;</p> + + +<div class="intro"> + + +<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Je crée un mode mathématique simple pour parler de différents types d&#8217;<em>indécidabilités</em>&nbsp;:</p> + +<ul> + <li>indécidabilité due aux erreurs d&#8217;observation&nbsp;;</li> + <li>grandes erreurs résultant de petites erreurs de mesure&nbsp;;</li> + <li>indécidabilité fractales&nbsp;;</li> + <li>indécidabilité logique.</li> +</ul> + + +</div> + + + +</div> + +<div class="corps"> + + +<h1 class="first" id="les-indcidabilits">Les indécidabilités</h1> + + +<div class="intro"> + + +<p>Si le monde a été fabriqué par un démiurge, on peut dire que celui-ci devait avoir le sens de l&#8217;humour. +Et le récit que je vais faire va vous en fournir la p...</p></div> tag:yannesposito.com,2010-07-31:/Scratch/fr/blog/2010-07-31-New-style-after-holidays/ @@ -697,11 +768,11 @@ Voici comment configurer un site statique sur heroku.</p> yannesposito.com - <p>Avant les vacances beaucoup d&rsquo;utilisateurs se sont plaints de la lenteur de rendu de mon site. -Il s&rsquo;agit notamment de problèmes avec Chrome en particulier. + <p>Avant les vacances beaucoup d&#8217;utilisateurs se sont plaints de la lenteur de rendu de mon site. +Il s&#8217;agit notamment de problèmes avec Chrome en particulier. Mais pour éviter tout problème. -J&rsquo;ai complètement modifié le style de mon site web. -Il est inspiré du style de l&rsquo;application iBooks<small>&copy;</small> sur iPhone<small>&copy;</small>.</p> +J&#8217;ai complètement modifié le style de mon site web. +Il est inspiré du style de l&#8217;application iBooks<small>&copy;</small> sur iPhone<small>&copy;</small>.</p> <p>Dites moi ce que vous pensez de ce nouveau design.</p> @@ -716,10 +787,10 @@ Il est inspiré du style de l&rsquo;application iBooks<small>& yannesposito.com - <p>Beaucoup d&rsquo;utilisateurs de <a href="http://reddit.com">Reddit</a> m&rsquo;ont rapporté que mon site était très long à charger et à <em>scroller</em>. -Ils pensaient qu&rsquo;il s&rsquo;agissait d&rsquo;un problème dû aux ombres que j&rsquo;applique sur le texte. -J&rsquo;étais un peu surpris puisque je fais mes tests sur une machine vraiment très lente et je n&rsquo;avais jamais détecté ces problèmes. -En réalité, ce qui ralenti le rendu de ce site est par ordre d&rsquo;importance&nbsp;:</p> + <p>Beaucoup d&#8217;utilisateurs de <a href="http://reddit.com">Reddit</a> m&#8217;ont rapporté que mon site était très long à charger et à <em>scroller</em>. +Ils pensaient qu&#8217;il s&#8217;agissait d&#8217;un problème dû aux ombres que j&#8217;applique sur le texte. +J&#8217;étais un peu surpris puisque je fais mes tests sur une machine vraiment très lente et je n&#8217;avais jamais détecté ces problèmes. +En réalité, ce qui ralenti le rendu de ce site est par ordre d&#8217;importance&nbsp;:</p> <ol> <li>Les dégradés sur Chrome (pas dans Safari sur Mac)</li> @@ -728,7 +799,7 @@ En réalité, ce qui ralenti le rendu de ce site est par ordre d&rsq <h2 id="les-dgrads">les dégradés</h2> -<p>Sur Safari il n&rsquo;y a absolument aucun problème avec les dégradés. Par contre sur Chrome sous Linux le si...</p> +<p>Sur Safari il n&#8217;y a absolument aucun problème avec les dégradés. Par contre sur Chrome sous Linux le si...</p> tag:yannesposito.com,2010-07-05:/Scratch/fr/blog/2010-07-05-Cappuccino-and-Web-applications/ @@ -747,10 +818,10 @@ En réalité, ce qui ralenti le rendu de ce site est par ordre d&rsq <p><abbr title="Trop long à lire">tlàl</abbr>:</p> <ul> - <li>J&rsquo;ai essayé de faire une version de <a href="http://yannesposito.com/Softwares/YPassword.html">YPassword</a> en jQuery et avec Cappuccino.</li> - <li>Cappuccino est très bien sur les navigateurs non mobile mais l&rsquo;application pèse 1.4Mo et n&rsquo;est pas compatible avec l&rsquo;iPhone.</li> - <li>la version jQuery n&rsquo;est pas aussi jolie que la version réalisée avec Cappuccino mais elle pèse seulement 106Ko et est compatible avec l&rsquo;iPhone.</li> - <li>J&rsquo;essayerai Dashcode 3</li> + <li>J&#8217;ai essayé de faire une version de <a href="http://yannesposito.com/Softwares/YPassword.html">YPassword</a> en jQuery et avec Cappuccino.</li> + <li>Cappuccino est très bien sur les navigateurs non mobile mais l&#8217;application pèse 1.4Mo et n&#8217;est pas compatible avec l&#8217;iPhone.</li> + <li>la version jQuery n&#8217;est pas aussi jolie que la version réalisée avec Cappuccino mais elle pèse seulement 106Ko et est compatible avec l&#8217;iPhone.</li> + <li>J&#8217;essayerai Dashcode 3</li> </ul> @@ -808,12 +879,12 @@ function initCode() { <p>Voici un moyen très simple de ne plus être comptabilisé dans les visites de son propre site. -Tout d&rsquo;abord, vous devriez jeter un coup d&rsquo;œil sur comment <a href="/Scratch/fr/blog/2010-06-17-track-events-with-google-analytics">je gère les systèmes de récupération de statistiques</a>. +Tout d&#8217;abord, vous devriez jeter un coup d&#8217;œil sur comment <a href="/Scratch/fr/blog/2010-06-17-track-events-with-google-analytics">je gère les systèmes de récupération de statistiques</a>. Je centralise tout dans un seul fichier javascript ce qui facilite le travail.</p> -<p>Cette méthode nécessite l&rsquo;utilisation de <code>jquery-cookie</code>.</p> +<p>Cette méthode nécessite l&#8217;utilisation de <code>jquery-cookie</code>.</p> -<p>Avant de comptabiliser les visites, je vérifie que la clé <code>admin</code> n&rsquo;est pas utilisée dans mes cookies.</p> +<p>Avant de comptabiliser les visites, je vérifie que la clé <code>admin</code> n&#8217;est pas utilisée dans mes cookies.</p> <pre><code class="javascript"> var admin = $.cookie('admin'); if (! admin) { @@ -833,7 +904,7 @@ Je centralise tout dans un seul fichier javascript ce qui facilite le travail.&l <p>Voici comment analyser tous les clics que font vos utilisateurs sur votre blog en incluant google analytics de façon asynchrone.</p> -<p>Dans le html, il faut utiliser <a href="http://jquery.com">jQuery</a> et un fichier que j&rsquo;ai appelé <code>yga.js</code>&nbsp;:</p> +<p>Dans le html, il faut utiliser <a href="http://jquery.com">jQuery</a> et un fichier que j&#8217;ai appelé <code>yga.js</code>&nbsp;:</p> <pre><code class="html"> &lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="yga.js"&gt;&lt;/script&gt; @@ -857,7 +928,7 @@ Je centralise tout dans un seul fichier javascript ce qui facilite le travail.&l yannesposito.com - <p>J&rsquo;ai publié une version <em>light</em> de mon système de blog hier soir. Par <em>light</em> il faut comprendre avec un CSS plus épuré et plus portable (sans les bords ronds). + <p>J&#8217;ai publié une version <em>light</em> de mon système de blog hier soir. Par <em>light</em> il faut comprendre avec un CSS plus épuré et plus portable (sans les bords ronds). Vous pouvez le récupérer sur <a href="http://github.com/yogsototh/nanoc3_blog">github.com</a>.</p> <p>Que pouvez-vous attendre de ce système de blog&nbsp;?</p> @@ -879,8 +950,8 @@ Vous pouvez le récupérer sur <a href="http://github.com/yogsototh/n yannesposito.com - <p>Je traduis la plupart de mes articles pour qu&rsquo;ils soient disponibles en français et en anglais. -La façon que l&rsquo;on m&rsquo;a conseillé était d&rsquo;avoir un fichier par langue. En général ça donne ça.</p> + <p>Je traduis la plupart de mes articles pour qu&#8217;ils soient disponibles en français et en anglais. +La façon que l&#8217;on m&#8217;a conseillé était d&#8217;avoir un fichier par langue. En général ça donne ça.</p> <pre class="twilight"> Bonjour, @@ -897,11 +968,11 @@ here is an example of english text. </pre> <p>Cette façon de traduire vous impose une certaine façon de traduire. -D&rsquo;abord écrire entièrement le texte dans une langue, +D&#8217;abord écrire entièrement le texte dans une langue, puis copier le fichier et enfin retraduire dans une nouvelle langue.</p> -<p>Le problème, c&rsquo;est que très souvent, les articles ont des parties communes non négligeables. Par exemple, les images, les codes sources, etc&hellip; -Lorsque je m&...</p> +<p>Le problème, c&#8217;est que très souvent, les articles ont des parties communes non négligeables. Par exemple, les images, les codes sources, etc&#8230; +Lorsque je m&#...</p> tag:yannesposito.com,2010-05-24:/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/ @@ -920,13 +991,13 @@ Lorsque je m&...</p> <p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span>&nbsp;:</p> <ul> - <li>J&rsquo;ai essayé de programmer un simple filtre&nbsp;;</li> - <li>J&rsquo;ai été bloqué pendant deux jours&nbsp;;</li> - <li>J&rsquo;ai arrêté de penser comme un robot&nbsp;;</li> - <li>J&rsquo;ai utilisé un papier et un stylo&nbsp;;</li> - <li>J&rsquo;ai fait un peu de maths&nbsp;;</li> - <li>J&rsquo;ai résolu le problème en 10 minutes&nbsp;;</li> - <li>Conclusion: Pragmatisme n&rsquo;est pas&nbsp;: &laquo;n&rsquo;utilisez jamais la théorie&raquo;. + <li>J&#8217;ai essayé de programmer un simple filtre&nbsp;;</li> + <li>J&#8217;ai été bloqué pendant deux jours&nbsp;;</li> + <li>J&#8217;ai arrêté de penser comme un robot&nbsp;;</li> + <li>J&#8217;ai utilisé un papier et un stylo&nbsp;;</li> + <li>J&#8217;ai fait un peu de maths&nbsp;;</li> + <li>J&#8217;ai résolu le problème en 10 minutes&nbsp;;</li> + <li>Conclusion: Pragmatisme n&#8217;est pas&nbsp;: &laquo;n&#8217;utilisez jamais la théorie&raquo;. </div> @@ -944,7 +1015,7 @@ Lorsque je m&...</p> yannesposito.com - <p>Sur ma page d&rsquo;accueil vous pouvez voir la liste des mes derniers articles avec le début de ceux-ci. Pour arriver à faire ça, j&rsquo;ai besoin de couper le code XHTML de mes pages en plein milieu. Il m&rsquo;a donc fallu trouver un moyen de les réparer.</p> + <p>Sur ma page d&#8217;accueil vous pouvez voir la liste des mes derniers articles avec le début de ceux-ci. Pour arriver à faire ça, j&#8217;ai besoin de couper le code XHTML de mes pages en plein milieu. Il m&#8217;a donc fallu trouver un moyen de les réparer.</p> <p>Prenons un exemple&nbsp;:</p> @@ -958,7 +1029,7 @@ Lorsque je m&...</p> &lt;/div&gt; </code></pre> -<p>Après avoir coupé, j&rsquo;obtiens&nbsp;:</p> +<p>Après avoir coupé, j&#8217;obtiens&nbsp;:</p> <pre><code class="html">&lt;div class="corps"&gt; &lt;div class="intro"&gt; @@ -978,12 +1049,12 @@ Lorsque je m&...</p> <p>Bonjour à tous&nbsp;!</p> <blockquote cite="http://www.madore.org/~david/weblog/2010-05.html#d.2010-05-12.1752"> - <p>&hellip;plus on retarde quelque chose, plus il devient difficile de s&rsquo;y mettre&hellip;</p> + <p>&#8230;plus on retarde quelque chose, plus il devient difficile de s&#8217;y mettre&#8230;</p> </blockquote> -<p>Je devais écrire d&rsquo;autres articles pour ce blog. J&rsquo;ai noté plein d&rsquo;idées dans mes <em>todolist</em>. Mais j&rsquo;avais pas mal d&rsquo;autres choses à faire. Et jusqu&rsquo;ici, j&rsquo;ai toujours dit &laquo;je le ferai plus tard&raquo;. Ce qui m&rsquo;a fait agir, c&rsquo;est la petite réflexion que j&rsquo;avais lu une fois. -&gt; Arrétez d&rsquo;écrire des <code>TODO</code> dans votre code est faites le maintenant&nbsp;!<br /> -&gt; Vous serez surpris de l&rsquo;efficacité de cette mesure.</p> +<p>Je devais écrire d&#8217;autres articles pour ce blog. J&#8217;ai noté plein d&#8217;idées dans mes <em>todolist</em>. Mais j&#8217;avais pas mal d&#8217;autres choses à faire. Et jusqu&#8217;ici, j&#8217;ai toujours dit &laquo;je le ferai plus tard&raquo;. Ce qui m&#8217;a fait agir, c&#8217;est la petite réflexion que j&#8217;avais lu une fois. +&gt; Arrétez d&#8217;écrire des <code>TODO</code> dans votre code est faites le maintenant&nbsp;!<br /> +&gt; Vous serez surpris de l&#8217;efficacité de cette mesure.</p> <p>En résumé&nbsp;: &gt; </p></p> @@ -1000,16 +1071,16 @@ Lorsque je m&...</p> <p><span class="intro"> Voici une solution pour conserver des branches divergentes avec <code>git</code>. -Parce qu&rsquo;il est facile de <em>merger</em> par erreur, je propose un script qui encapsule le comportement de <code>git</code> pour interdire certains <em>merges</em> dangereux. Mais qui permet aussi de faire des merges en cascades de la racines vers les autres branches. +Parce qu&#8217;il est facile de <em>merger</em> par erreur, je propose un script qui encapsule le comportement de <code>git</code> pour interdire certains <em>merges</em> dangereux. Mais qui permet aussi de faire des merges en cascades de la racines vers les autres branches. </span></p> <h2 id="se-prmunir-contre-les-erreurs">Se prémunir contre les erreurs</h2> -<p>Je travaille sur un projet dans lequel certaines de mes branches <code>git</code> doivent rester divergentes. Et les divergences devraient aller en s&rsquo;accentuant.</p> +<p>Je travaille sur un projet dans lequel certaines de mes branches <code>git</code> doivent rester divergentes. Et les divergences devraient aller en s&#8217;accentuant.</p> -<p>J&rsquo;utilise aussi certaines branches qui contiennent la partie commune de ces projets.</p> +<p>J&#8217;utilise aussi certaines branches qui contiennent la partie commune de ces projets.</p> -<p>Disons que j&rsquo;ai les branches&nbsp;:</p> +<p>Disons que j&#8217;ai les branches&nbsp;:</p> ... @@ -1047,7 +1118,7 @@ Parce qu&rsquo;il est facile de <em>merger</em> par erreur, je p <p><code>git clone</code> peut seulement récuper la branche <code>master</code>.</p> -<p>Si vous n&rsquo;avez pas beaucoup de branches, vous pouvez simplement les clone le project et ensuite pour chacune d&rsquo;entre elle lancer la commande suivante&nbsp;:</p> +<p>Si vous n&#8217;avez pas beaucoup de branches, vous pouvez simplement les clone le project et ensuite pour chacune d&#8217;entre elle lancer la commande suivante&nbsp;:</p> <div> @@ -1063,10 +1134,10 @@ Parce qu&rsquo;il est facile de <em>merger</em> par erreur, je p yannesposito.com - <p>Les expressions régulières sont très utiles. Cependant, elles ne sont pas toujours la meilleure manière d&rsquo;aborder certain problème autour des chaines de caractères. + <p>Les expressions régulières sont très utiles. Cependant, elles ne sont pas toujours la meilleure manière d&#8217;aborder certain problème autour des chaines de caractères. Et surtout quand les transformations que vous voulez accomplir sont simples.</p> -<p>Je voulais savoir comment récupérer le plus vite possible l&rsquo;extension d&rsquo;un nom de fichier. Il y a trois manière naturelle d&rsquo;accomplir celà&nbsp;:</p> +<p>Je voulais savoir comment récupérer le plus vite possible l&#8217;extension d&#8217;un nom de fichier. Il y a trois manière naturelle d&#8217;accomplir celà&nbsp;:</p> <div> @@ -1083,44 +1154,6 @@ ext=File.extname(str) </div> -<p>A première vue, je pensais que l&rsquo;expression régulière serait plus rapide que le <code>split</code> parce qu&rsquo;il pouvait y avoir plusieurs de <code>.</code> dans un nom de fichie...</p> - - - tag:yannesposito.com,2010-02-18:/Scratch/fr/blog/2010-02-18-split-a-file-by-keyword/ - découper un fichier par mots clés - 2010-02-18T13:29:14Z - 2010-02-18T13:29:14Z - - Yann Esposito - yannesposito.com - - - <p>Assez bizarrement, je n&rsquo;ai trouvé aucun outil UNIX pour découper un fichier par mot clé. -Alors j&rsquo;en ai fait un en <code>awk</code>. Je le met ici principalement pour moi, mais ça peut toujours servir à quelqu&rsquo;un d&rsquo;autre. -Le code suivant découpe un fichier pour chacune de ses ligne contenant le mot <code>UTC</code>.</p> - -<div> - -<pre><code class="perl">#!/usr/bin/env awk -BEGIN{i=0;} -/UTC/ { - i+=1; - FIC=sprintf("fic.%03d",i); -} -{print $0&gt;&gt;FIC} -</code></pre> - -</div> - -<p>En réalité, j&rsquo;avais besoin de cet outils pour avoir un fichier par jour. Chaque ligne contenant UTC ayant le format suivant&nbsp;:</p> - -<pre class="twilight"> -Mon Dec 7 10:32:30 UTC 2009 -</pre> - -<p>J&rsquo;en suis finallement arrivé au code suivant&nbsp;:</p> - -<div> -...</div> +<p>A première vue, je pensais que l&#8217;expression régulière serait plus rapide que le <code>split</code> parce qu&#8217;il pouvait y avoir plusieurs de <code>.</code> dans un nom de fichie...</p> diff --git a/output/Scratch/sitemap.xml b/output/Scratch/sitemap.xml index 0e8599d6e..ae4b70ac2 100644 --- a/output/Scratch/sitemap.xml +++ b/output/Scratch/sitemap.xml @@ -1,775 +1,791 @@ - http://yannesposito.com/Scratch/fr/blog/2010-07-09-Indecidabilities/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2009-09-replace-all-except-some-part/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-10-06-New-Blog-Design-Constraints/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2009-12-14-Git-vs--Bzr/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-06-17-track-events-with-google-analytics/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/11_Load_Disqus_Asynchronously/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/Category-Theory-Presentation/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-03-23-Encapsulate-git/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/rss/ - 2012-12-19 - - - http://yannesposito.com/Scratch/assets/css/main.css - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/about/contact/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/softwares/yaquabubbles/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/conf-et-install/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/Higher-order-function-in-zsh/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/04_drm/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/03_losthighway/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/Higher-order-function-in-zsh/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-08-23-Now-heberged-on-heroku/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-10-30-How-to-handle-evil-IE/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/07_Screensaver_compilation_option_for_Snow_Leopard/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/02_ackgrep/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/softwares/ypassword/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/validation/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_4/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/softwares/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/mvc/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/Learn-Vim-Progressively/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-10-26-LaTeX-like-macro-and-markdown/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-08-31-send-mail-from-command-line-with-attached-file/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-02-23-When-regexp-is-not-the-best-solution/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/ - 2012-12-19 - - - http://yannesposito.com/Scratch/assets/css/cmu.css - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard-Way/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-06-19-jQuery-popup-the-easy-way/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_1/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_2/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/softwares/ypassword/iphoneweb/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/Yesod-excellent-ideas/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2011-01-03-Happy-New-Year/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-06-14-multi-language-choices/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-02-18-split-a-file-by-keyword/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/about/old/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/ - 2012-12-19 - - - http://yannesposito.com/Scratch/sitemap.xml - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/Yesod-tutorial-for-newbies/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2009-12-06-iphone-call-filter/ - 2012-12-19 + http://yannesposito.com/Scratch/en/blog/01_nanoc/ + 2012-12-31 http://yannesposito.com/Scratch/en/blog/Password-Management/ - 2012-12-19 + 2012-12-31 - http://yannesposito.com/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/Haskell-Mandelbrot/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/02_ackgrep/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-06-17-track-events-with-google-analytics/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-09-replace-all-except-some-part/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/mvc/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-09-02-base64-and-sha1-on-iPhone/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/about/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/09_Why_I_didn-t_keep_whosamung-us/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/latest/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/rss/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/A-more-convenient-diff/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/softwares/ypassword/web/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/feed/feed.xml - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/programming-language-experience/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-10-14-Fun-with-wav/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/05_git_create_remote_branch/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/06_How_I_use_git/ - 2012-12-19 - - - http://yannesposito.com/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/SVG-and-m4-fractals/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2011-01-03-Happy-New-Year/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/ - 2012-12-19 + http://yannesposito.com/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/ + 2012-12-31 http://yannesposito.com/Scratch/fr/about/technical_details/ - 2012-12-19 + 2012-12-31 - http://yannesposito.com/Scratch/en/blog/2010-07-31-New-style-after-holidays/ - 2012-12-19 + http://yannesposito.com/Scratch/fr/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/ + 2012-12-31 - http://yannesposito.com/Scratch/fr/blog/2010-02-16-All-but-something-regexp--2-/ - 2012-12-19 + http://yannesposito.com/Scratch/fr/rss/ + 2012-12-31 - http://yannesposito.com/Scratch/fr/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/ - 2012-12-19 + http://yannesposito.com/Scratch/fr/blog/04_drm/ + 2012-12-31 - http://yannesposito.com/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-06-17-hide-yourself-to-analytics/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-06-15-Get-my-blog-engine/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-05-17-at-least-this-blog-revive/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-03-23-Encapsulate-git/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-10-untaught-git-usage/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/conf-et-install/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/Yesod-excellent-ideas/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/softwares/ypassword/iphoneweb/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/Haskell-OpenGL-Mandelbrot/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/latest/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-06-14-multi-language-choices/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-07-05-Cappuccino-and-Web-applications/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-12-06-iphone-call-filter/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2009-09-jQuery-Tag-Cloud/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_2/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_3/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/10_Synchronize_Custom_WebSite_with_mobileMe/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/softwares/ypassword/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-07-07-CSS-rendering-problems-by-navigator/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-06-19-jQuery-popup-the-easy-way/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/commandes-avancees/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/SVG-and-m4-fractals/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-02-15-All-but-something-regexp/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-06-17-hide-yourself-to-analytics/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/01_nanoc/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/softwares/ypassword/web/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/Haskell-the-Hard-Way/ - 2012-12-19 + http://yannesposito.com/Scratch/fr/blog/05_git_create_remote_branch/ + 2012-12-31 http://yannesposito.com/Scratch/fr/blog/2010-05-19-How-to-cut-HTML-and-repair-it/ - 2012-12-19 + 2012-12-31 - http://yannesposito.com/Scratch/assets/css/dynamic.css - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/05_git_create_remote_branch/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/about/technical_details/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/feed/feed.xml - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/Typography-and-the-Web/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/Category-Theory-Presentation/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-10-Focus-vs-Minimalism/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/about/contact/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/03_losthighway/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2009-10-Focus-vs-Minimalism/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-10-14-Fun-with-wav/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-10-How-to-preload-your-site-with-style/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/comprendre/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-06-15-Get-my-blog-engine/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/06_How_I_use_git/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-12-14-Git-vs--Bzr/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-10-launch-daemon-from-command-line/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/01_nanoc/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2009-10-How-to-preload-your-site-with-style/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/ - 2012-12-19 + http://yannesposito.com/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/ + 2012-12-31 http://yannesposito.com/Scratch/en/blog/2010-03-22-Git-Tips/ - 2012-12-19 + 2012-12-31 - http://yannesposito.com/Scratch/en/blog/2010-07-09-Indecidabilities/ - 2012-12-19 + http://yannesposito.com/Scratch/fr/blog/2010-06-17-track-events-with-google-analytics/ + 2012-12-31 - http://yannesposito.com/Scratch/fr/validation/ - 2012-12-19 + http://yannesposito.com/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/ + 2012-12-31 - http://yannesposito.com/Scratch/fr/blog/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-07-31-New-style-after-holidays/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-02-23-When-regexp-is-not-the-best-solution/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-09-jQuery-Tag-Cloud/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/11_Load_Disqus_Asynchronously/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/comprendre/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/about/old/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-02-15-All-but-something-regexp/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/commandes-avancees/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2011-04-20-Now-hosted-on-github/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/softwares/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/softwares/yclock/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/Haskell-Mandelbrot/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2009-10-30-How-to-handle-evil-IE/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_3/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_4/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2009-10-launch-daemon-from-command-line/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/ - 2012-12-19 + http://yannesposito.com/Scratch/fr/blog/2010-09-02-base64-and-sha1-on-iPhone/ + 2012-12-31 http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/ - 2012-12-19 + 2012-12-31 - http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_1/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2009-10-untaught-git-usage/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/Haskell-OpenGL-Mandelbrot/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/09_Why_I_didn-t_keep_whosamung-us/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/programming-language-experience/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/softwares/yclock/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/A-more-convenient-diff/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/Typography-and-the-Web/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/04_drm/ - 2012-12-19 - - - http://yannesposito.com/Scratch/fr/blog/Password-Management/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/softwares/yaquabubbles/ - 2012-12-19 - - - http://yannesposito.com/Scratch/en/blog/Yesod-tutorial-for-newbies/ - 2012-12-19 + http://yannesposito.com/Scratch/en/blog/Category-Theory-Presentation/ + 2013-01-02 http://yannesposito.com/Scratch/fr/blog/2010-03-22-Git-Tips/ - 2012-12-19 + 2012-12-31 - http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/ - 2012-12-19 + http://yannesposito.com/Scratch/fr/blog/2010-08-23-Now-heberged-on-heroku/ + 2012-12-31 - http://yannesposito.com/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/ - 2012-12-19 + http://yannesposito.com/Scratch/en/softwares/ + 2012-12-31 - http://yannesposito.com/Scratch/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/ - 2012-12-19 + http://yannesposito.com/Scratch/en/blog/2009-09-jQuery-Tag-Cloud/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-07-31-New-style-after-holidays/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-07-09-Indecidabilities/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-12-14-Git-vs--Bzr/ + 2012-12-31 + + + http://yannesposito.com/Scratch/assets/css/dynamic.css + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_2/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-02-23-When-regexp-is-not-the-best-solution/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/about/contact/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/rss/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/softwares/ypassword/iphoneweb/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/latest/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/Typography-and-the-Web/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/02_ackgrep/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2009-10-How-to-preload-your-site-with-style/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_3/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-07-05-Cappuccino-and-Web-applications/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/Password-Management/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-10-14-Fun-with-wav/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/validation/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-03-23-Encapsulate-git/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-12-06-iphone-call-filter/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/Yesod-excellent-ideas/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard-Way/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-10-Focus-vs-Minimalism/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/Haskell-OpenGL-Mandelbrot/ + 2012-12-31 + + + http://yannesposito.com/ + 2013-01-02 + + + http://yannesposito.com/Scratch/en/blog/2010-02-23-When-regexp-is-not-the-best-solution/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/Yesod-tutorial-for-newbies/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2009-12-06-iphone-call-filter/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-02-15-All-but-something-regexp/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-06-17-hide-yourself-to-analytics/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/feed/feed.xml + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/Higher-order-function-in-zsh/ + 2013-01-02 + + + http://yannesposito.com/Scratch/en/blog/03_losthighway/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2009-12-14-Git-vs--Bzr/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-05-17-at-least-this-blog-revive/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2011-01-03-Happy-New-Year/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/07_Screensaver_compilation_option_for_Snow_Leopard/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/softwares/ypassword/web/ + 2012-12-31 + + + http://yannesposito.com/Scratch/assets/css/main2.css + 2013-01-02 + + + http://yannesposito.com/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/05_git_create_remote_branch/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/conf-et-install/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/03_losthighway/ + 2012-12-31 + + + http://yannesposito.com/Scratch/assets/css/cmu.css + 2013-01-02 + + + http://yannesposito.com/Scratch/en/blog/2010-06-14-multi-language-choices/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-10-30-How-to-handle-evil-IE/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/softwares/ypassword/web/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/softwares/yaquabubbles/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/02_ackgrep/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-10-26-LaTeX-like-macro-and-markdown/ + 2012-12-31 http://yannesposito.com/Scratch/fr/about/ - 2012-12-19 + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2009-10-Focus-vs-Minimalism/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-02-18-split-a-file-by-keyword/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-08-31-send-mail-from-command-line-with-attached-file/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/09_Why_I_didn-t_keep_whosamung-us/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-07-31-New-style-after-holidays/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/Yesod-tutorial-for-newbies/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/softwares/yclock/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-06-17-track-events-with-google-analytics/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_3/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-10-How-to-preload-your-site-with-style/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/softwares/ypassword/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/06_How_I_use_git/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/Learn-Vim-Progressively/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/Category-Theory-Programming/ + 2013-01-02 + + + http://yannesposito.com/Scratch/fr/blog/2010-10-06-New-Blog-Design-Constraints/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-02-15-All-but-something-regexp/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/conf-et-install/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_4/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2011-01-03-Happy-New-Year/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/about/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-03-23-Encapsulate-git/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-06-19-jQuery-popup-the-easy-way/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_1/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-10-untaught-git-usage/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/feed/feed.xml + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/about/old/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/programming-language-experience/ + 2013-01-02 + + + http://yannesposito.com/Scratch/fr/blog/11_Load_Disqus_Asynchronously/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/Higher-order-function-in-zsh/ + 2013-01-02 + + + http://yannesposito.com/Scratch/sitemap.xml + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2009-10-untaught-git-usage/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/01_nanoc/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-10-launch-daemon-from-command-line/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/softwares/ypassword/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/10_Synchronize_Custom_WebSite_with_mobileMe/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-06-15-Get-my-blog-engine/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/Category-Theory-Programming/ + 2013-01-02 + + + http://yannesposito.com/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2009-10-launch-daemon-from-command-line/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/softwares/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/about/old/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-09-jQuery-Tag-Cloud/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-06-17-hide-yourself-to-analytics/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2009-09-replace-all-except-some-part/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/Haskell-Mandelbrot/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/Category-Theory-Presentation/ + 2013-01-02 + + + http://yannesposito.com/Scratch/en/blog/2009-10-30-How-to-handle-evil-IE/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/Haskell-OpenGL-Mandelbrot/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2011-04-20-Now-hosted-on-github/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/A-more-convenient-diff/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/A-more-convenient-diff/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-06-15-Get-my-blog-engine/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/about/contact/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/softwares/yaquabubbles/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/validation/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_4/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/mvc/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/softwares/yclock/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/SVG-and-m4-fractals/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/softwares/ypassword/iphoneweb/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-10-14-Fun-with-wav/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_1/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/about/technical_details/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/Haskell-the-Hard-Way/ + 2013-01-02 + + + http://yannesposito.com/Scratch/fr/blog/2010-06-14-multi-language-choices/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-02-16-All-but-something-regexp--2-/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/04_drm/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-09-replace-all-except-some-part/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-07-09-Indecidabilities/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_2/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/SVG-and-m4-fractals/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/mvc/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/programming-language-experience/ + 2013-01-02 + + + http://yannesposito.com/Scratch/fr/blog/Yesod-excellent-ideas/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/comprendre/ + 2012-12-31 + + + http://yannesposito.com/Scratch/assets/css/cmufontface.css + 2013-01-02 + + + http://yannesposito.com/Scratch/assets/css/main.css + 2013-01-02 + + + http://yannesposito.com/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/Haskell-Mandelbrot/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/latest/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/comprendre/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/Typography-and-the-Web/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/09_Why_I_didn-t_keep_whosamung-us/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2010-06-19-jQuery-popup-the-easy-way/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/11_Load_Disqus_Asynchronously/ + 2012-12-31 + + + http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/commandes-avancees/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2010-07-07-CSS-rendering-problems-by-navigator/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/06_How_I_use_git/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/ + 2012-12-31 + + + http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/commandes-avancees/ + 2012-12-31 diff --git a/output/index.html b/output/index.html index cdd8c75d0..bbc314a68 100644 --- a/output/index.html +++ b/output/index.html @@ -72,7 +72,7 @@

Contact »

Resume »

-
+
- Modified: 12/19/2012 + Modified: 01/02/2013
Entirely done with From 41378f7b203f81a69f84e546e70ba7cc2f67dad0 Mon Sep 17 00:00:00 2001 From: "Yann Esposito (Yogsototh)" Date: Wed, 2 Jan 2013 16:54:28 +0100 Subject: [PATCH 24/28] added info to install gems for serving --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5f561116a..0ae48f640 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ What you'll need to use it: - [nanoc](nanoc.stoneship.org) → `gem install nanoc` - [zsh](zsh.org) → Installed by default on most good system - A bunch of gems: `gem install kramdown builder sass rainpress` +- Optionally if you want to serve locally: `gem install unicorn rack rack-contrib rack-rewrite mime-types` Optionally From 6c07b9f17968239a536b45322f3cadc55c7d9723 Mon Sep 17 00:00:00 2001 From: "Yann Esposito (Yogsototh)" Date: Wed, 2 Jan 2013 16:55:47 +0100 Subject: [PATCH 25/28] now use second style by default --- tasks/new_blog_entry | 1 + 1 file changed, 1 insertion(+) diff --git a/tasks/new_blog_entry b/tasks/new_blog_entry index f5e4fb066..197a93efb 100755 --- a/tasks/new_blog_entry +++ b/tasks/new_blog_entry @@ -56,6 +56,7 @@ en: title: $title fr: title: $title author_name: Yann Esposito author_uri: yannesposito.com +layout: article2 # tags: ----- <%= blogimage("main.png","Title image") %> From e41c0c2316640763363cb570be0d52eab0d242aa Mon Sep 17 00:00:00 2001 From: "Yann Esposito (Yogsototh)" Date: Thu, 3 Jan 2013 12:26:54 +0100 Subject: [PATCH 26/28] updating new look and feel --- content/css/cmufontface.sass | 3 + content/css/main2.sass | 303 +++++++++-------------------------- tasks/csswatch | 18 +++ 3 files changed, 94 insertions(+), 230 deletions(-) create mode 100755 tasks/csswatch diff --git a/content/css/cmufontface.sass b/content/css/cmufontface.sass index e7ff54934..c521b7389 100644 --- a/content/css/cmufontface.sass +++ b/content/css/cmufontface.sass @@ -1,3 +1,6 @@ +----- + +----- @font-face font-family: 'cmuntt' src: url('fonts/cmuntt.eot') diff --git a/content/css/main2.sass b/content/css/main2.sass index 334cb2265..552047414 100644 --- a/content/css/main2.sass +++ b/content/css/main2.sass @@ -19,244 +19,87 @@ $blue : #268bd2 $cyan : #2aa198 $green : #859900 -/* $backtext: #FAFAFC */ -$backtext: $base3 + #151515 -$fronttext: $base02 -$hightext: $base03 -$borderColor: $base2 -$altback: $base3 +$unit: 16px +$lineheight: $unit * 1.5 -@import url(/Scratch/assets/css/cmufontface.css) - -/* General */ -body - font-family: 'Futura', serif - font-size: 20px - color: $base3 - background: $base02 - -a, a:link, a:visited, a:active, a:hover - color: $hightext - text-decoration: none - outline: none - -a:hover - color: $orange - -hr - color: $borderColor - border: - top: 1px solid $borderColor - bottom: none - left: none - right: none - -ul - list-style: none - padding-left: 0 - margin-left: 1.5ex - text-indent: -1.5ex -ol - padding-left: 0 - -ul li:before - content: "- " - -ol li ul, ol li ol, ul li ol, ul li ul - margin: .5em 1.5em - list-style: none - -/* fix for possible markdown issues */ -li p, ol p - display: inline +html padding: 0 - -table tr - &:nth-child(odd) - background-color: $altback -table - border: - top: solid 2px $borderColor - bottom: solid 2px $borderColor - body - text-rendering: optimizelegibility - line-height: 1.5em - -h1, h2, h3, h4, h5, h6 - color: $hightext - line-height: 1.1em - padding-left: 30px - -/* Header Numbering */ -.article #afterheader - counter-reset: niv02 - h2 - counter-increment: niv02 - counter-reset: niv03 - marker-offset: 3em - &:before - content: counter(niv02) ". " - h3 - counter-increment: niv03 - counter-reset: niv04 - &:before - content: counter(niv02) "." counter(niv03) ". " - h4 - counter-increment: niv04 - &:before - content: counter(niv02) "." counter(niv03) "." counter(niv04) ". " - -p, ul, ol, h1, h2, h3, h4 - margin-bottom: 30px - padding: 0 30px - text-align: justify - -pre - line-height: 1.1em - margin-bottom: 30px - padding: 30px - overflow: auto - background: $base3 - font-size: 18px - -=sc - text-transform: uppercase - font-size: 0.8em - -abbr, acronym - +sc - text: - decoration: none - border: - bottom: - width: 0 - -// -- TYPOGRAPHY -- -.small - font-size: 0.8em - -.sc - +sc - -.clear,.flush - clear: both - -.impact, .darkimpact - font-size: 2em - margin: 0 auto 1em auto - line-height: 1.3em - -figure - margin: 3em 0 - img - box-shadow: 0 10px 15px #CCC inset - figcaption - text-align: center - margin: .5em 0 -figure.left, figure.right - max-width: 30% - -/* Specific */ -#afterheader + padding: 0 + margin: 0 +body + font-family: Helvetica, sans-serif !important + font-size: $unit + line-height: $lineheight + background: $magenta color: $base01 - background-color: $backtext -.intro, .resume, blockquote - font-style: italic - padding: 0.5em 1em - a:hover - color: $orange - i, em - font-style: normal - strong, b - font-weight: normal - -.intro, .resume - font-size: 0.9em - -blockquote - border: solid 1px $borderColor - background-color: $altback - pre, pre code - background-color: $base2 - pre - border: solid 1px rgba(0,0,0,0.1) - ul - padding-left: 1.5em - -section.slide - border-color: $borderColor - border: solid 1px - margin-bottom: 1em - padding: .5em - font-family: sans-serif - font-size: .8em - -.base03 - color: $base03 -.base02 +a + text-decoration: none color: $base02 -.base01 - color: $base01 -.base00 +a:visited color: $base00 -.base0 - color: $base0 -.base1 - color: $base1 -.base2 - color: $base2 -.base3 - color: $base3 -.yellow - color: $yellow -.orange - color: $orange -.red - color: $red -.magenta - color: $magenta -.violet - color: $violet -.blue - color: $blue -.cyan - color: $cyan -.green - color: $green -/* Black page */ -#blackpage - font-family: sans-serif - font-style: italic - padding-top: 8em - z-index: 9000 - cursor: wait - img - background: none - border: none - max-width: 80% - margin: 0 auto - a - cursor: pointer - -.cut - font-size: .8em - text-align: right - display: inline-block - width: 100% - opacity: 0.3 - -.cut:hover - opacity: 1 - - -/* Layout */ -#afterheader - width: 35em +#content + width: 40em margin: 0 auto + padding: 0 + background: #FFF + color: #444 + h1,h2,h3,h4,h5,h6 + color: #222 + padding: 0 $unit + margin: (2*$unit) 0 + figure + margin: 0 + padding: 0 + figcaption + padding: 0 $unit + margin: (2*$unit) 0 + p + padding: 0 (2*$unit) + margin: $unit 0 img width: 100% - img.left, img.right - width: 30% + pre + font-family: monaco, monospace + overflow: auto + padding: 16px + line-height: 18px + ul + list-style: none + ul li:before + content: "- " + ul + padding-left: 0 + margin-left: 33px + text-indent: -10px + ol + padding-left: 0 + margin-left: 32px + .toc + 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: none + li p + display: inline + margin: 0 + padding: 0 + +#choix + font-size: 12px + padding: 0 16px + .return + float: right +.cut + font-size: 12px + opacity: .5 +.cut:hover + opacity: 1 +hr + color: $base2 + border-color: $base2 + padding: 0 32px + margin: 0 32px diff --git a/tasks/csswatch b/tasks/csswatch new file mode 100755 index 000000000..c97496e73 --- /dev/null +++ b/tasks/csswatch @@ -0,0 +1,18 @@ +#!/usr/bin/env zsh + +# watch and update the css + +typeset -A hmap + +while true; do + for src in content/css/*.sass; do + val=$(md5sum $src|awk '{print $1}') + if [[ $hmap[$src] != "$val" ]]; then + print "$src changed. Updating..." + hmap[${src}]=$val + dst="output/Scratch/assets/css/${${src:t}:r}.css" + tail -n +4 $src | sass > $dst + fi + done + sleep 1 +done From 9cabc407041e0253176af08e92d808fef61bbed2 Mon Sep 17 00:00:00 2001 From: "Yann Esposito (Yogsototh)" Date: Thu, 3 Jan 2013 13:07:00 +0100 Subject: [PATCH 27/28] another step --- content/css/main2.sass | 57 ++++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/content/css/main2.sass b/content/css/main2.sass index 552047414..6ebdeb967 100644 --- a/content/css/main2.sass +++ b/content/css/main2.sass @@ -21,6 +21,7 @@ $green : #859900 $unit: 16px $lineheight: $unit * 1.5 +$hmargin: 4*$unit html padding: 0 @@ -31,7 +32,7 @@ body font-family: Helvetica, sans-serif !important font-size: $unit line-height: $lineheight - background: $magenta + background: $base2 color: $base01 a @@ -41,47 +42,53 @@ a:visited color: $base00 #content - width: 40em + width: 37*$unit + 2*$hmargin margin: 0 auto padding: 0 - background: #FFF - color: #444 + background: $base3 + #111111 + color: $base01 h1,h2,h3,h4,h5,h6 - color: #222 - padding: 0 $unit - margin: (2*$unit) 0 + color: $base02 + padding: 0 $hmargin + margin: $unit 0 figure margin: 0 padding: 0 figcaption - padding: 0 $unit - margin: (2*$unit) 0 + padding: 0 $hmargin + margin: $unit 0 p - padding: 0 (2*$unit) + padding: 0 $hmargin margin: $unit 0 img width: 100% pre + background: $base3 font-family: monaco, monospace overflow: auto - padding: 16px - line-height: 18px + padding: $unit + line-height: $unit + 2px + border-top: solid 1px $base2 + border-bottom: solid 1px $base2 + pre code + background: $base3 ul list-style: none ul li:before content: "- " ul padding-left: 0 - margin-left: 33px - text-indent: -10px + margin-left: $hmargin + // width of '-' + text-indent: -($unit/2) ol padding-left: 0 - margin-left: 32px + margin-left: $hmargin .toc ol li, ul li - margin: .5em 0 + margin: ($unit/2) 0 ol li ul, ol li ol, ul li ol, ul li ul - margin: .5em 1.5em + margin: ($unit/2) (3*$unit/2) list-style: none li p display: inline @@ -89,17 +96,23 @@ a:visited padding: 0 #choix - font-size: 12px - padding: 0 16px + font-size: (3*$unit / 4) + padding: 0 $unit .return float: right .cut - font-size: 12px + font-size: (3*$unit / 4) opacity: .5 .cut:hover opacity: 1 hr color: $base2 border-color: $base2 - padding: 0 32px - margin: 0 32px + margin: 0 ($unit / 4) +p code, li code + padding: 1px 2px + background: $base3 + border: solid 1px $base2 + +#social + margin: $unit $hmargin From 43b6bbe934bb6a3e45ef8d464e432a825e265119 Mon Sep 17 00:00:00 2001 From: "Yann Esposito (Yogsototh)" Date: Thu, 3 Jan 2013 16:21:21 +0100 Subject: [PATCH 28/28] removed a trash article --- Rules | 1 + content/css/main2.sass | 130 +++++++++- .../en/blog/Category-Theory-Programming.md | 227 ----------------- .../fr/blog/Category-Theory-Programming.md | 227 ----------------- multi/blog/Category-Theory-Programming.md | 229 ------------------ .../code/00_Introduction.lhs | 203 ---------------- .../First_Na__ve_Category_Representation.png | Bin 9272 -> 0 bytes .../First_Na_ve_Category_Representation.png | Bin 8250 -> 0 bytes .../graph/Na__ve_Category_Representation.png | Bin 11400 -> 0 bytes .../Na__ve_Category_Representation_Mess.png | Bin 12887 -> 0 bytes .../graph/Na_ve_Category_Representation.png | Bin 10186 -> 0 bytes .../Na_ve_Category_Representation_Mess.png | Bin 46898 -> 0 bytes .../code/00_Introduction.lhs | 203 ---------------- .../First_Na__ve_Category_Representation.png | Bin 9272 -> 0 bytes .../First_Na_ve_Category_Representation.png | Bin 8250 -> 0 bytes .../graph/Na__ve_Category_Representation.png | Bin 11400 -> 0 bytes .../Na__ve_Category_Representation_Mess.png | Bin 12887 -> 0 bytes .../graph/Na_ve_Category_Representation.png | Bin 10186 -> 0 bytes .../Na_ve_Category_Representation_Mess.png | Bin 46898 -> 0 bytes 19 files changed, 128 insertions(+), 1092 deletions(-) delete mode 100644 content/html/en/blog/Category-Theory-Programming.md delete mode 100644 content/html/fr/blog/Category-Theory-Programming.md delete mode 100644 multi/blog/Category-Theory-Programming.md delete mode 100644 output/Scratch/en/blog/Category-Theory-Programming/code/00_Introduction.lhs delete mode 100644 output/Scratch/en/blog/Category-Theory-Programming/graph/First_Na__ve_Category_Representation.png delete mode 100644 output/Scratch/en/blog/Category-Theory-Programming/graph/First_Na_ve_Category_Representation.png delete mode 100644 output/Scratch/en/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation.png delete mode 100644 output/Scratch/en/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation_Mess.png delete mode 100644 output/Scratch/en/blog/Category-Theory-Programming/graph/Na_ve_Category_Representation.png delete mode 100644 output/Scratch/en/blog/Category-Theory-Programming/graph/Na_ve_Category_Representation_Mess.png delete mode 100644 output/Scratch/fr/blog/Category-Theory-Programming/code/00_Introduction.lhs delete mode 100644 output/Scratch/fr/blog/Category-Theory-Programming/graph/First_Na__ve_Category_Representation.png delete mode 100644 output/Scratch/fr/blog/Category-Theory-Programming/graph/First_Na_ve_Category_Representation.png delete mode 100644 output/Scratch/fr/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation.png delete mode 100644 output/Scratch/fr/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation_Mess.png delete mode 100644 output/Scratch/fr/blog/Category-Theory-Programming/graph/Na_ve_Category_Representation.png delete mode 100644 output/Scratch/fr/blog/Category-Theory-Programming/graph/Na_ve_Category_Representation_Mess.png diff --git a/Rules b/Rules index 3778cec1a..8566eb092 100644 --- a/Rules +++ b/Rules @@ -56,6 +56,7 @@ compile '/html/*' do filter :description filter :falacy filter :blogimage + filter :erb # I should try to remove all erb code inside markdown filter :kramdown filter :fix_img else diff --git a/content/css/main2.sass b/content/css/main2.sass index 6ebdeb967..f1007dc7d 100644 --- a/content/css/main2.sass +++ b/content/css/main2.sass @@ -41,6 +41,20 @@ a a:visited color: $base00 + +#blackpage, #nojsredirect + top: 0 + left: 0 + width: 100% + min-height: 100% + margin-left: 0 + margin-right: 0 + margin-top: 0 + margin-bottom: 0 + position: absolute + text-align: center + background: $base3 + #content width: 37*$unit + 2*$hmargin margin: 0 auto @@ -78,12 +92,12 @@ a:visited content: "- " ul padding-left: 0 - margin-left: $hmargin + margin: $unit $hmargin // width of '-' text-indent: -($unit/2) ol padding-left: 0 - margin-left: $hmargin + margin: $unit $hmargin .toc ol li, ul li margin: ($unit/2) 0 @@ -95,6 +109,12 @@ a:visited margin: 0 padding: 0 +#entete > #choix > #choixrss + margin: 0 + padding: 0 +#entete > #choix > #choixlang + float: left + #choix font-size: (3*$unit / 4) padding: 0 $unit @@ -113,6 +133,110 @@ p code, li code padding: 1px 2px background: $base3 border: solid 1px $base2 +blockquote + border: solid 1px $base2 + background: $base3 + code + background: $base2 + border: solid 1px rgba(0,0,0,0.1) -#social +// Specific elements +#social,#choixrss,#comment margin: $unit $hmargin +#social + float: left + opacity: 0.3 + &:hover + opacity: 1 +#choixrss + float: right + opacity: 0.3 + &:hover + opacity: 1 +#comment + img + width: auto + max-width: 100% +.intro + font-size: 14px + line-height: 21px + color: $base02 +.left + float: left +.right + float: right +.flush + clear: both + +#bottom + padding: $unit 0 + background: $base2 + text-align: center + font-size: 14px + line-height: 21px +#entete + padding: $unit 0 + background: $base2 + text-align: center + ul + text-indent: 0 + ul li:before + content: "" + ul li + display: inline-block + span.active + color: $yellow + ul li > * + padding: 2px $unit + border: solid +#previous_articles + float: left + text-align: left +#next_articles + float: right + text-align: right +.corps + padding-bottom: 2*$unit + +#tagcloud + margin: $unit $hmargin + font-size: 14px + line-height: 21px +#sousliens.archive > ul + display: none +#sousliens.archive > h4:hover + cursor: pointer +#hiddenDivs > div + display: none +.list + margin: $unit $hmargin +#content img#mainlogo + width: auto + margin: 0 auto + display: block + max-width: 100% +.date, .day, .month, .year + display: inline-block + padding-left: 10px + text-align: right +.day + width: 10px +.month + width: 20px +.year + width: 30px +.date + margin-right: 10px + +.popularblock + display: block + float: left + margin: 1.5% + width: 30% + figure + width: 100% + height: 120px + overflow: hidden + figcaption + display: none + diff --git a/content/html/en/blog/Category-Theory-Programming.md b/content/html/en/blog/Category-Theory-Programming.md deleted file mode 100644 index 2f91185e3..000000000 --- a/content/html/en/blog/Category-Theory-Programming.md +++ /dev/null @@ -1,227 +0,0 @@ ------ -isHidden: false -menupriority: 1 -kind: article -created_at: 2012-10-01T19:16:43+02:00 -title: Category Theory Programming -author_name: Yann Esposito -author_uri: yannesposito.com -tags: - - Haskell - - programming - - functional - - category theory ------ - -begindiv(intro) - -%tldr How to program using category theory. - ->

Table of Content
-> -> * This will be replaced by the ToC -> {:toc} -> - -enddiv - -## Introduction - -%TODO{Do everything after the end} - -Now, it is time to talk about Categories. -How this notion could help you and how it is easy to use with Haskell. - -- What are categories? -- How to use them? - -### Programming Paradigms - -When you program, you resolve problems. -There are a lot of different means to resolve a problem. -Many different "school of thought"[^school] exists. - -[^school]: Écoles de pensées - -**Imperative paradigm**: -In programming, most people use the imperative paradigm. -You have an infinite number of cell and you can write things on them. -Of course, it is more complex with modern architecture, but the paradigm is the same. -Hidden somewhere, there is the model of the Turing machine. - -**Functional paradigm**: -Another paradigm, is the functional paradigm. -This time, you don't write on cells, but instead you have a flow of data. -And you transform the flows in another flows... Mostly it looks like pipes. -I am a bit restrictive here. But generally this is how functional programming is perceived. -The main theory behind this paradigm is the Set theory. -You have a set and you go from one set to another set by using a function. - -**Category paradigm**: -I believe there is another paradigm arising from Category theory. -Category theory feels both more general and powerful to help solve problems. - -First, you must realize there are categories everywhere. -With the category theory you can find relationships between quantum physics, -topology, logic (both predicate and first order), programming. -Most of the time, the object your are programming with will form a category. - -This is the promise from the Category Theory. -Another even better paradigm. -A paradigm with gates between many different domains. - -## Get some intuition - -We write down the definition first. -And will discuss about some categories. - -
-\\( \newcommand{\hom}{\mathrm{hom}} \\) -
- - > **Definition**: - > - > A category \\(C\\) consist of: - > - > - A collection of _objects_ \\(ob(C)\\) - > - For every pair of objects \\((A,B)\\) a set \\(\hom(A,B)\\) - > of _morphisms_ \\(f:A→B\\) (Another notation for \\(f\in \hom(A,B)\\)) - > - A composition operator \\(∘\\) - > which associate to each couple \\(g:A→B\\), \\(f:B→C\\) another morphism \\(f∘g:A→C\\). - > - > With the following properties - > - > - for each object \\(x\\) there is an identity morphism - > \\(id_x:x→x\\) - > s.t. for any morphism \\(f:A->B\\), - > \\(id_A∘f = f = f∘id_B\\) - > - for all triplet of morphisms \\(h:A->B\\), \\(g:B->C\\) and \\(f:C->D\\) - > \\( (f∘g)∘h = f∘(g∘h) \\) - -### Representation of Category - -Representing Category is not just a game. -It will be _very_ important. -But in the same time, it will help you to gain intuition about categories. - -A naïve representation (which can work in many cases) is to represent -a specific category as a directed graph. -Here is a first example of the representation of a category: - - - -A -> B [label="f"] -B -> C [label="g"] -A -> C [label="h"] - -A -> A [label="idA"] -B -> B [label="idB"] -C -> C [label="idC"] - - - -From this graph we can conclude without any ambiguity that: - -\\[ob(C)=\\{A,B,C\\}\\] -and -\\[\hom(C)=\\{f,g,h,idA,idB,idC\\}\\] - -Instantaneously, we understand that we can get rid of all \\(idX\\) arrows. - -But in reality, we lack an important information. -What is \\(∘\\)? - -Now, we can add informations to our previous representation. -We simply add a relation between 3 arrows that represent the composition. - - - -f[label="", fixedsize="false", width=0,height=0,shape=none]; -A -> f[label="f", arrowhead=None] -f -> B - -g[label="", fixedsize="false", width=0,height=0,shape=none]; -B -> g[label="g", arrowhead=None] -g -> C - -fg [label="", fixedsize="false", width=0,height=0,shape=none]; -AC [label="", fixedsize="false", width=0,height=0,shape=none]; - -f -> fg [color="#b58900",style=dashed,arrowhead=None] -fg -> g [color="#b58900",style=dashed,arrowhead=None] -fg -> AC [label="h=g∘f",fontcolor="#b58900",color="#b58900",style=bold] - -A -> AC [label="h",arrowhead=None] -AC -> C - - - -Now we have a complete representation. -We don't have to represent \\(idX\\), we know there are there. -And we also don't have to represent composition implying \\(idX\\) morphisms. -But, even this little graph look complex. -To show just how complex things can be; -we just double the number morphisms between different objects. - - - -f[label="", fixedsize="false", width=0,height=0,shape=none]; -A -> f[label="f", arrowhead=None] -f -> B - -fp[label="", fixedsize="false", width=0,height=0,shape=none]; -A -> fp[label="f'", arrowhead=None] -fp -> B - -g[label="", fixedsize="false", width=0,height=0,shape=none]; -B -> g[label="g", arrowhead=None] -g -> C - -gp[label="", fixedsize="false", width=0,height=0,shape=none]; -B -> gp[label="g'", arrowhead=None] -gp -> C - -fg[label="", fixedsize="false", width=0,height=0,shape=none]; -fpg[label="", fixedsize="false", width=0,height=0,shape=none]; -fgp[label="", fixedsize="false", width=0,height=0,shape=none]; -fpgp[label="", fixedsize="false", width=0,height=0,shape=none]; -AC[label="", fixedsize="false", width=0,height=0,shape=none]; -ApCp[label="", fixedsize="false", width=0,height=0,shape=none]; - -f -> fg [color="#b58900",style=dashed,arrowhead=None] -fg -> g [color="#b58900",style=dashed,arrowhead=None] -fg -> AC [color="#b58900",style=bold,fontcolor="#b58900",label="h=g∘f"] - -fp -> fpgp [color="#d33682",style=dashed,arrowhead=None] -fpgp -> gp [color="#d33682",style=dashed,arrowhead=None] -fpgp -> AC [color="#d33682",style=bold,fontcolor="#d33682",label="h=g'∘f'"] - -fp -> fpg [color="#dc322f",style=dashed,arrowhead=None] -fpg -> g [color="#dc322f",style=dashed,arrowhead=None] -fpg -> ApCp [color="#dc322f",style=bold,fontcolor="#dc322f",label="h'=g∘f'"] - -f -> fgp [color="#268bd2",style=dashed,arrowhead=None] -fgp -> gp [color="#268bd2",style=dashed,arrowhead=None] -fgp -> ApCp [color="#268bd2",style=bold,fontcolor="#268bd2",label="h'=g'∘f"] - -A -> AC [label="h",arrowhead=None] -AC -> C - -A -> ApCp [label="h'",arrowhead=None] -ApCp -> C - - - -In fact we could have made something equivalent and far easier to read. -But the ∘ relation will be more hidden. - - - -A -> B[label="f"] -A -> B[label="f'"] -B -> C[label="g"] -B -> C[label="g'"] -A -> C [label="h\n=g∘f\n=g'∘f'"] -A -> C [label="h'\n=g'∘f\n=g∘f'"] - - diff --git a/content/html/fr/blog/Category-Theory-Programming.md b/content/html/fr/blog/Category-Theory-Programming.md deleted file mode 100644 index 7e78a005c..000000000 --- a/content/html/fr/blog/Category-Theory-Programming.md +++ /dev/null @@ -1,227 +0,0 @@ ------ -isHidden: false -menupriority: 1 -kind: article -created_at: 2012-10-01T19:16:43+02:00 -title: Programmation en Théorie des Catégories -author_name: Yann Esposito -author_uri: yannesposito.com -tags: - - Haskell - - programming - - functional - - category theory ------ - -begindiv(intro) - -%tlal Comment programmer en utilisant la théorie des catégories. - ->

Table of Content
-> -> * This will be replaced by the ToC -> {:toc} -> - -enddiv - -## Introduction - -%TODO{Do everything after the end} - -Now, it is time to talk about Categories. -How this notion could help you and how it is easy to use with Haskell. - -- What are categories? -- How to use them? - -### Programming Paradigms - -When you program, you resolve problems. -There are a lot of different means to resolve a problem. -Many different "school of thought"[^school] exists. - -[^school]: Écoles de pensées - -**Imperative paradigm**: -In programming, most people use the imperative paradigm. -You have an infinite number of cell and you can write things on them. -Of course, it is more complex with modern architecture, but the paradigm is the same. -Hidden somewhere, there is the model of the Turing machine. - -**Functional paradigm**: -Another paradigm, is the functional paradigm. -This time, you don't write on cells, but instead you have a flow of data. -And you transform the flows in another flows... Mostly it looks like pipes. -I am a bit restrictive here. But generally this is how functional programming is perceived. -The main theory behind this paradigm is the Set theory. -You have a set and you go from one set to another set by using a function. - -**Category paradigm**: -I believe there is another paradigm arising from Category theory. -Category theory feels both more general and powerful to help solve problems. - -First, you must realize there are categories everywhere. -With the category theory you can find relationships between quantum physics, -topology, logic (both predicate and first order), programming. -Most of the time, the object your are programming with will form a category. - -This is the promise from the Category Theory. -Another even better paradigm. -A paradigm with gates between many different domains. - -## Get some intuition - -We write down the definition first. -And will discuss about some categories. - -
-\\( \newcommand{\hom}{\mathrm{hom}} \\) -
- - > **Definition**: - > - > A category \\(C\\) consist of: - > - > - A collection of _objects_ \\(ob(C)\\) - > - For every pair of objects \\((A,B)\\) a set \\(\hom(A,B)\\) - > of _morphisms_ \\(f:A→B\\) (Another notation for \\(f\in \hom(A,B)\\)) - > - A composition operator \\(∘\\) - > which associate to each couple \\(g:A→B\\), \\(f:B→C\\) another morphism \\(f∘g:A→C\\). - > - > With the following properties - > - > - for each object \\(x\\) there is an identity morphism - > \\(id_x:x→x\\) - > s.t. for any morphism \\(f:A->B\\), - > \\(id_A∘f = f = f∘id_B\\) - > - for all triplet of morphisms \\(h:A->B\\), \\(g:B->C\\) and \\(f:C->D\\) - > \\( (f∘g)∘h = f∘(g∘h) \\) - -### Representation of Category - -Representing Category is not just a game. -It will be _very_ important. -But in the same time, it will help you to gain intuition about categories. - -A naïve representation (which can work in many cases) is to represent -a specific category as a directed graph. -Here is a first example of the representation of a category: - - - -A -> B [label="f"] -B -> C [label="g"] -A -> C [label="h"] - -A -> A [label="idA"] -B -> B [label="idB"] -C -> C [label="idC"] - - - -From this graph we can conclude without any ambiguity that: - -\\[ob(C)=\\{A,B,C\\}\\] -and -\\[\hom(C)=\\{f,g,h,idA,idB,idC\\}\\] - -Instantaneously, we understand that we can get rid of all \\(idX\\) arrows. - -But in reality, we lack an important information. -What is \\(∘\\)? - -Now, we can add informations to our previous representation. -We simply add a relation between 3 arrows that represent the composition. - - - -f[label="", fixedsize="false", width=0,height=0,shape=none]; -A -> f[label="f", arrowhead=None] -f -> B - -g[label="", fixedsize="false", width=0,height=0,shape=none]; -B -> g[label="g", arrowhead=None] -g -> C - -fg [label="", fixedsize="false", width=0,height=0,shape=none]; -AC [label="", fixedsize="false", width=0,height=0,shape=none]; - -f -> fg [color="#b58900",style=dashed,arrowhead=None] -fg -> g [color="#b58900",style=dashed,arrowhead=None] -fg -> AC [label="h=g∘f",fontcolor="#b58900",color="#b58900",style=bold] - -A -> AC [label="h",arrowhead=None] -AC -> C - - - -Now we have a complete representation. -We don't have to represent \\(idX\\), we know there are there. -And we also don't have to represent composition implying \\(idX\\) morphisms. -But, even this little graph look complex. -To show just how complex things can be; -we just double the number morphisms between different objects. - - - -f[label="", fixedsize="false", width=0,height=0,shape=none]; -A -> f[label="f", arrowhead=None] -f -> B - -fp[label="", fixedsize="false", width=0,height=0,shape=none]; -A -> fp[label="f'", arrowhead=None] -fp -> B - -g[label="", fixedsize="false", width=0,height=0,shape=none]; -B -> g[label="g", arrowhead=None] -g -> C - -gp[label="", fixedsize="false", width=0,height=0,shape=none]; -B -> gp[label="g'", arrowhead=None] -gp -> C - -fg[label="", fixedsize="false", width=0,height=0,shape=none]; -fpg[label="", fixedsize="false", width=0,height=0,shape=none]; -fgp[label="", fixedsize="false", width=0,height=0,shape=none]; -fpgp[label="", fixedsize="false", width=0,height=0,shape=none]; -AC[label="", fixedsize="false", width=0,height=0,shape=none]; -ApCp[label="", fixedsize="false", width=0,height=0,shape=none]; - -f -> fg [color="#b58900",style=dashed,arrowhead=None] -fg -> g [color="#b58900",style=dashed,arrowhead=None] -fg -> AC [color="#b58900",style=bold,fontcolor="#b58900",label="h=g∘f"] - -fp -> fpgp [color="#d33682",style=dashed,arrowhead=None] -fpgp -> gp [color="#d33682",style=dashed,arrowhead=None] -fpgp -> AC [color="#d33682",style=bold,fontcolor="#d33682",label="h=g'∘f'"] - -fp -> fpg [color="#dc322f",style=dashed,arrowhead=None] -fpg -> g [color="#dc322f",style=dashed,arrowhead=None] -fpg -> ApCp [color="#dc322f",style=bold,fontcolor="#dc322f",label="h'=g∘f'"] - -f -> fgp [color="#268bd2",style=dashed,arrowhead=None] -fgp -> gp [color="#268bd2",style=dashed,arrowhead=None] -fgp -> ApCp [color="#268bd2",style=bold,fontcolor="#268bd2",label="h'=g'∘f"] - -A -> AC [label="h",arrowhead=None] -AC -> C - -A -> ApCp [label="h'",arrowhead=None] -ApCp -> C - - - -In fact we could have made something equivalent and far easier to read. -But the ∘ relation will be more hidden. - - - -A -> B[label="f"] -A -> B[label="f'"] -B -> C[label="g"] -B -> C[label="g'"] -A -> C [label="h\n=g∘f\n=g'∘f'"] -A -> C [label="h'\n=g'∘f\n=g∘f'"] - - diff --git a/multi/blog/Category-Theory-Programming.md b/multi/blog/Category-Theory-Programming.md deleted file mode 100644 index e4d6a8e7f..000000000 --- a/multi/blog/Category-Theory-Programming.md +++ /dev/null @@ -1,229 +0,0 @@ ------ -isHidden: false -menupriority: 1 -kind: article -created_at: 2012-10-01T19:16:43+02:00 -en: title: Category Theory Programming -fr: title: Programmation en Théorie des Catégories -author_name: Yann Esposito -author_uri: yannesposito.com -tags: - - Haskell - - programming - - functional - - category theory ------ - -begindiv(intro) - -en: %tldr How to program using category theory. -fr: %tlal Comment programmer en utilisant la théorie des catégories. - ->

Table of Content
-> -> * This will be replaced by the ToC -> {:toc} -> - -enddiv - -## Introduction - -%TODO{Do everything after the end} - -Now, it is time to talk about Categories. -How this notion could help you and how it is easy to use with Haskell. - -- What are categories? -- How to use them? - -### Programming Paradigms - -When you program, you resolve problems. -There are a lot of different means to resolve a problem. -Many different "school of thought"[^school] exists. - -[^school]: Écoles de pensées - -**Imperative paradigm**: -In programming, most people use the imperative paradigm. -You have an infinite number of cell and you can write things on them. -Of course, it is more complex with modern architecture, but the paradigm is the same. -Hidden somewhere, there is the model of the Turing machine. - -**Functional paradigm**: -Another paradigm, is the functional paradigm. -This time, you don't write on cells, but instead you have a flow of data. -And you transform the flows in another flows... Mostly it looks like pipes. -I am a bit restrictive here. But generally this is how functional programming is perceived. -The main theory behind this paradigm is the Set theory. -You have a set and you go from one set to another set by using a function. - -**Category paradigm**: -I believe there is another paradigm arising from Category theory. -Category theory feels both more general and powerful to help solve problems. - -First, you must realize there are categories everywhere. -With the category theory you can find relationships between quantum physics, -topology, logic (both predicate and first order), programming. -Most of the time, the object your are programming with will form a category. - -This is the promise from the Category Theory. -Another even better paradigm. -A paradigm with gates between many different domains. - -## Get some intuition - -We write down the definition first. -And will discuss about some categories. - -
-\\( \newcommand{\hom}{\mathrm{hom}} \\) -
- - > **Definition**: - > - > A category \\(C\\) consist of: - > - > - A collection of _objects_ \\(ob(C)\\) - > - For every pair of objects \\((A,B)\\) a set \\(\hom(A,B)\\) - > of _morphisms_ \\(f:A→B\\) (Another notation for \\(f\in \hom(A,B)\\)) - > - A composition operator \\(∘\\) - > which associate to each couple \\(g:A→B\\), \\(f:B→C\\) another morphism \\(f∘g:A→C\\). - > - > With the following properties - > - > - for each object \\(x\\) there is an identity morphism - > \\(id_x:x→x\\) - > s.t. for any morphism \\(f:A->B\\), - > \\(id_A∘f = f = f∘id_B\\) - > - for all triplet of morphisms \\(h:A->B\\), \\(g:B->C\\) and \\(f:C->D\\) - > \\( (f∘g)∘h = f∘(g∘h) \\) - -### Representation of Category - -Representing Category is not just a game. -It will be _very_ important. -But in the same time, it will help you to gain intuition about categories. - -A naïve representation (which can work in many cases) is to represent -a specific category as a directed graph. -Here is a first example of the representation of a category: - - - -A -> B [label="f"] -B -> C [label="g"] -A -> C [label="h"] - -A -> A [label="idA"] -B -> B [label="idB"] -C -> C [label="idC"] - - - -From this graph we can conclude without any ambiguity that: - -\\[ob(C)=\\{A,B,C\\}\\] -and -\\[\hom(C)=\\{f,g,h,idA,idB,idC\\}\\] - -Instantaneously, we understand that we can get rid of all \\(idX\\) arrows. - -But in reality, we lack an important information. -What is \\(∘\\)? - -Now, we can add informations to our previous representation. -We simply add a relation between 3 arrows that represent the composition. - - - -f[label="", fixedsize="false", width=0,height=0,shape=none]; -A -> f[label="f", arrowhead=None] -f -> B - -g[label="", fixedsize="false", width=0,height=0,shape=none]; -B -> g[label="g", arrowhead=None] -g -> C - -fg [label="", fixedsize="false", width=0,height=0,shape=none]; -AC [label="", fixedsize="false", width=0,height=0,shape=none]; - -f -> fg [color="#b58900",style=dashed,arrowhead=None] -fg -> g [color="#b58900",style=dashed,arrowhead=None] -fg -> AC [label="h=g∘f",fontcolor="#b58900",color="#b58900",style=bold] - -A -> AC [label="h",arrowhead=None] -AC -> C - - - -Now we have a complete representation. -We don't have to represent \\(idX\\), we know there are there. -And we also don't have to represent composition implying \\(idX\\) morphisms. -But, even this little graph look complex. -To show just how complex things can be; -we just double the number morphisms between different objects. - - - -f[label="", fixedsize="false", width=0,height=0,shape=none]; -A -> f[label="f", arrowhead=None] -f -> B - -fp[label="", fixedsize="false", width=0,height=0,shape=none]; -A -> fp[label="f'", arrowhead=None] -fp -> B - -g[label="", fixedsize="false", width=0,height=0,shape=none]; -B -> g[label="g", arrowhead=None] -g -> C - -gp[label="", fixedsize="false", width=0,height=0,shape=none]; -B -> gp[label="g'", arrowhead=None] -gp -> C - -fg[label="", fixedsize="false", width=0,height=0,shape=none]; -fpg[label="", fixedsize="false", width=0,height=0,shape=none]; -fgp[label="", fixedsize="false", width=0,height=0,shape=none]; -fpgp[label="", fixedsize="false", width=0,height=0,shape=none]; -AC[label="", fixedsize="false", width=0,height=0,shape=none]; -ApCp[label="", fixedsize="false", width=0,height=0,shape=none]; - -f -> fg [color="#b58900",style=dashed,arrowhead=None] -fg -> g [color="#b58900",style=dashed,arrowhead=None] -fg -> AC [color="#b58900",style=bold,fontcolor="#b58900",label="h=g∘f"] - -fp -> fpgp [color="#d33682",style=dashed,arrowhead=None] -fpgp -> gp [color="#d33682",style=dashed,arrowhead=None] -fpgp -> AC [color="#d33682",style=bold,fontcolor="#d33682",label="h=g'∘f'"] - -fp -> fpg [color="#dc322f",style=dashed,arrowhead=None] -fpg -> g [color="#dc322f",style=dashed,arrowhead=None] -fpg -> ApCp [color="#dc322f",style=bold,fontcolor="#dc322f",label="h'=g∘f'"] - -f -> fgp [color="#268bd2",style=dashed,arrowhead=None] -fgp -> gp [color="#268bd2",style=dashed,arrowhead=None] -fgp -> ApCp [color="#268bd2",style=bold,fontcolor="#268bd2",label="h'=g'∘f"] - -A -> AC [label="h",arrowhead=None] -AC -> C - -A -> ApCp [label="h'",arrowhead=None] -ApCp -> C - - - -In fact we could have made something equivalent and far easier to read. -But the ∘ relation will be more hidden. - - - -A -> B[label="f"] -A -> B[label="f'"] -B -> C[label="g"] -B -> C[label="g'"] -A -> C [label="h\n=g∘f\n=g'∘f'"] -A -> C [label="h'\n=g'∘f\n=g∘f'"] - - diff --git a/output/Scratch/en/blog/Category-Theory-Programming/code/00_Introduction.lhs b/output/Scratch/en/blog/Category-Theory-Programming/code/00_Introduction.lhs deleted file mode 100644 index 6ba05bc9e..000000000 --- a/output/Scratch/en/blog/Category-Theory-Programming/code/00_Introduction.lhs +++ /dev/null @@ -1,203 +0,0 @@ - ## Introduction - -%TODO{Do everything after the end} - -Now, it is time to talk about Categories. -How this notion could help you and how it is easy to use with Haskell. - -- What are categories? -- How to use them? - - ### Programming Paradigms - -When you program, you resolve problems. -There are a lot of different means to resolve a problem. -Many different "school of thought"[^school] exists. - -[^school]: Écoles de pensées - -**Imperative paradigm**: -In programming, most people use the imperative paradigm. -You have an infinite number of cell and you can write things on them. -Of course, it is more complex with modern architecture, but the paradigm is the same. -Hidden somewhere, there is the model of the Turing machine. - -**Functional paradigm**: -Another paradigm, is the functional paradigm. -This time, you don't write on cells, but instead you have a flow of data. -And you transform the flows in another flows... Mostly it looks like pipes. -I am a bit restrictive here. But generally this is how functional programming is perceived. -The main theory behind this paradigm is the Set theory. -You have a set and you go from one set to another set by using a function. - -**Category paradigm**: -I believe there is another paradigm arising from Category theory. -Category theory feels both more general and powerful to help solve problems. - -First, you must realize there are categories everywhere. -With the category theory you can find relationships between quantum physics, -topology, logic (both predicate and first order), programming. -Most of the time, the object your are programming with will form a category. - -This is the promise from the Category Theory. -Another even better paradigm. -A paradigm with gates between many different domains. - - ## Get some intuition - -We write down the definition first. -And will discuss about some categories. - -
-\\( \newcommand{\hom}{\mathrm{hom}} \\) -
- - > **Definition**: - > - > A category \\(C\\) consist of: - > - > - A collection of _objects_ \\(ob(C)\\) - > - For every pair of objects \\((A,B)\\) a set \\(\hom(A,B)\\) - > of _morphisms_ \\(f:A→B\\) (Another notation for \\(f\in \hom(A,B)\\)) - > - A composition operator \\(∘\\) - > which associate to each couple \\(g:A→B\\), \\(f:B→C\\) another morphism \\(f∘g:A→C\\). - > - > With the following properties - > - > - for each object \\(x\\) there is an identity morphism - > \\(id_x:x→x\\) - > s.t. for any morphism \\(f:A->B\\), - > \\(id_A∘f = f = f∘id_B\\) - > - for all triplet of morphisms \\(h:A->B\\), \\(g:B->C\\) and \\(f:C->D\\) - > \\( (f∘g)∘h = f∘(g∘h) \\) - - ### Representation of Category - -Representing Category is not just a game. -It will be _very_ important. -But in the same time, it will help you to gain intuition about categories. - -A naïve representation (which can work in many cases) is to represent -a specific category as a directed graph. -Here is a first example of the representation of a category: - - - -A -> B [label="f"] -B -> C [label="g"] -A -> C [label="h"] - -A -> A [label="idA"] -B -> B [label="idB"] -C -> C [label="idC"] - - - -From this graph we can conclude without any ambiguity that: - -\\[ob(C)=\\{A,B,C\\}\\] -and -\\[\hom(C)=\\{f,g,h,idA,idB,idC\\}\\] - -Instantaneously, we understand that we can get rid of all \\(idX\\) arrows. - -But in reality, we lack an important information. -What is \\(∘\\)? - -Now, we can add informations to our previous representation. -We simply add a relation between 3 arrows that represent the composition. - - - -f[label="", fixedsize="false", width=0,height=0,shape=none]; -A -> f[label="f", arrowhead=None] -f -> B - -g[label="", fixedsize="false", width=0,height=0,shape=none]; -B -> g[label="g", arrowhead=None] -g -> C - - -fg [label="", fixedsize="false", width=0,height=0,shape=none]; -AC [label="", fixedsize="false", width=0,height=0,shape=none]; - -f -> fg [color="#b58900",style=dashed,arrowhead=None] -fg -> g [color="#b58900",style=dashed,arrowhead=None] -fg -> AC [label="h=g∘f",fontcolor="#b58900",color="#b58900",style=bold] - -A -> AC [label="h",arrowhead=None] -AC -> C - - - - -Now we have a complete representation. -We don't have to represent \\(idX\\), we know there are there. -And we also don't have to represent composition implying \\(idX\\) morphisms. -But, even this little graph look complex. -To show just how complex things can be; -we just double the number morphisms between different objects. - - - -f[label="", fixedsize="false", width=0,height=0,shape=none]; -A -> f[label="f", arrowhead=None] -f -> B - -fp[label="", fixedsize="false", width=0,height=0,shape=none]; -A -> fp[label="f'", arrowhead=None] -fp -> B - -g[label="", fixedsize="false", width=0,height=0,shape=none]; -B -> g[label="g", arrowhead=None] -g -> C - -gp[label="", fixedsize="false", width=0,height=0,shape=none]; -B -> gp[label="g'", arrowhead=None] -gp -> C - -fg[label="", fixedsize="false", width=0,height=0,shape=none]; -fpg[label="", fixedsize="false", width=0,height=0,shape=none]; -fgp[label="", fixedsize="false", width=0,height=0,shape=none]; -fpgp[label="", fixedsize="false", width=0,height=0,shape=none]; -AC[label="", fixedsize="false", width=0,height=0,shape=none]; -ApCp[label="", fixedsize="false", width=0,height=0,shape=none]; - -f -> fg [color="#b58900",style=dashed,arrowhead=None] -fg -> g [color="#b58900",style=dashed,arrowhead=None] -fg -> AC [color="#b58900",style=bold,fontcolor="#b58900",label="h=g∘f"] - -fp -> fpgp [color="#d33682",style=dashed,arrowhead=None] -fpgp -> gp [color="#d33682",style=dashed,arrowhead=None] -fpgp -> AC [color="#d33682",style=bold,fontcolor="#d33682",label="h=g'∘f'"] - -fp -> fpg [color="#dc322f",style=dashed,arrowhead=None] -fpg -> g [color="#dc322f",style=dashed,arrowhead=None] -fpg -> ApCp [color="#dc322f",style=bold,fontcolor="#dc322f",label="h'=g∘f'"] - -f -> fgp [color="#268bd2",style=dashed,arrowhead=None] -fgp -> gp [color="#268bd2",style=dashed,arrowhead=None] -fgp -> ApCp [color="#268bd2",style=bold,fontcolor="#268bd2",label="h'=g'∘f"] - -A -> AC [label="h",arrowhead=None] -AC -> C - -A -> ApCp [label="h'",arrowhead=None] -ApCp -> C - - - - -In fact we could have made something equivalent and far easier to read. -But the ∘ relation will be more hidden. - - - -A -> B[label="f"] -A -> B[label="f'"] -B -> C[label="g"] -B -> C[label="g'"] -A -> C [label="h\n=g∘f\n=g'∘f'"] -A -> C [label="h'\n=g'∘f\n=g∘f'"] - - diff --git a/output/Scratch/en/blog/Category-Theory-Programming/graph/First_Na__ve_Category_Representation.png b/output/Scratch/en/blog/Category-Theory-Programming/graph/First_Na__ve_Category_Representation.png deleted file mode 100644 index a2fd3531bdf17dce4b44813d48919217996b8e2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9272 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 E0T}jbmH+?% diff --git a/output/Scratch/en/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation.png b/output/Scratch/en/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation.png deleted file mode 100644 index 05a743ad69d1623190e303e5a3f313911146ede4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11400 zcmbtaWm_Cgv&Mo3C%8*+cXxMp32wpNHMm=F3Blc2JV01jBzSOlx5eS?llLc_FLO=r zPE}XmQ!-tB$Ec~uq9PL_LqS2I%F9V~PC?-{TDRC_y=(BvJ z032!XNOf9rc(MzUPZ1Iw!zG?Hj=25@adDhC%B+*dt~Xa>Z($vE*9_^aWo@Zpch4R# zePcX~sp?kp7STB_b*SL zchwA_JvRc>*bvGhL^_zOC^3zf{M3S!f1}tC@*=qU`_O*_*H|%yyn?KP%s~vki|(5s zbt9vIOzb%Y6%`YJ?Q}_}${%S@HMn0fAy@%?)AImD%m${D?3R|6W)2RHSVhhs$-t>8 z)qU~i^s=cKiJRq8N(^9WIdnqrFE`fPLot3EvNx2r zE0~gE&zn^6tvsa=17pQ3G1bD7nAVqb{#gb26G_Be%|Y_t0;F)EX&!*vwYBsxkTC}P ze-r%w1S8;~Wj?e^97mS%)Y24S{=p2q3h=yJ-A0C%>tUw7#pl57oK(IRW!t-NcJ(ar zExE&~%2mr|(N6Zp(wxy25)vfO9;7ciq-9F&m9Uz^7@4opeIJhjsT{q*G~Ii+ZZ3Hic3R3HmI&9xle34>NQR zl$BdkQ=^dScYnTyx=@qN^EC&19xX;C&lH8>I8N!R>QZ9Hko=|9#5YF^Zj7P`&J+!8 z&4mHRH1ICNZlkwHd4FBt{BPr6dV2cz-w8ziHY0{ljw%&!*$1BHcqwl~4u)y5Vl)uU z8O2KoR3wWkDuB@+Sm8|B<4FV;xNQIQebzK3s!Xm94GI9>FWl6S1Ed$5W_e9pgj<1y_WwhOo(%2Puzlc`bIQV+B0cBoX*8hpC6 zKgL+kRp0jpuv==fI_f>fx?L*I_doB(o5S8ga~u|1e?Ln$Dk=5d+vn z^c%LOhUV=JrqgRG+1pngLEgzD3AAJ2)i9nvecK%Kr=*5S(f5}fbTW|u20@i@CDkZ1 zRjRc}546;XJyQwZDfk)2(f6EJko1F2Lymg8^e4uT=FgIe8E@r86@B!L-RdtNri&1@ z;vhMs6~ivnma@U;%6!Ei-i@*Rcd2|@yvM|9@cZj$Uf%ZAUJS<$k>^uRUtx^Lzg;4v zpO2pJFS15^9k*>v9cFYfHWG#lfAva4o5}_A?>eW6%+fQNcDQWuT=>B#YmRu0C4Ow_ z&eVkKhGdg_8Ohm1aWR=PiCB2WmA4Q9zn1tpUij+e)78$|xmv@;mmRWqHfDpC=!!|b zgAZH}t%eFKq+GUY$B-y6l)OG8-}5@PMYu9mc+$JtiMr)YF;Qy&V-9BiJ@Xz00H^B| zAxV>egv4_cv{o&L4;&=^zDkh>J#1|<#)+Zsj3kLFae`JgmMH@tM#PS{`-55FSg#RE z`7?V1Rx{Ac3sH`4*dByvX>DS<3TAe=ixJ_%Apo%*9yP{_aU)*BH-%F+ubO8;LUX5) zdUAMK6we%QhD;oA^>lZF(r}BH!kg8tn$7PHt@8%`O#Z44XCDfYXBL~4#0fRSaOpDX zRVAVH+Wc`&@3Hp+WB&fZGMGC%*t*4uJ>vb-QK#OcdyJ@Yi|w?^GZaJ^MhueSppsjn zDKVVj9x52uxG9|#3_Ui8qiCG5MM{I&d!K{T0}z9e9yyb<1EMfc`sA*;>0o*>AV5dP z?$g7l%Y@YB*H*BtGjAg=Z~iHkTx&Sr8$9D4GT*w0x;#K!DlaV^_YkEnsp;gopoXM{ zd=G9dJn4RP7^kG%(NkRZa~2Yc=K|o44_;67{JXFvYh2h%RwJzYJm4PI8peuofcDSu zf@T64TsOeOMWzApHyC-W9#%y}WXu`W!K}Gro0VB-#Qm&AN zl3NWXNP$DU0MI$Szf%5*#Xkk3f2AgKkMuE0OOX8>9xBFG_RjEC4iRpgxepXvtzZwDKW6%$nQ-h zalO^_d2mY_x|o=CrCzu#`vj>IY-w6$#DJu}xEvQi>aVpOpX=Sf)`{y(N8S)v2Inhv zs-3{!ij7d1xw?{+r!(N>A|mp$5xS$@YspR)B_1%5r`G9RPI1ux%|2Tm@qS%i81&@+3l?Vwif&-!;e$u& z6P}6Bm$a9c0DU=0YXc?k6P^T-EygLqi|!PRKvvpA#o*hhctnyTIODuhSd_ z-jt+m0;iH-iI{bH-AZc!-N52UR^~GVXv7ySkt&sNVy36%s6WP>p(S@I3+G8eL5XvY z(GBRrCZE@lLO(gP7R})R&6w-K zfkWFrMBABH%KvN#{(K^AiNMC}UnyhR4PpeK?ihSd34)r+?W;UUz^>19&QISA+$rgV zriAK5FFNc?Cb(^WPle`tgeI*THirvkF$P$&Yk2V)8+uDzJ0uG}=m`qS%&FRP&&Pc( zW({_sO^W2j0jcaO`rgGd)^#Y13iAo&``vc?-hd?!gMZzWF$>g19ok%(753kWPF4z3 zo5*6Sp_p7m5K?V|yYXQ=K_|~^w~eC4I|{cU-=#y&+f9s~@ls?0_{iWN`+kpB2o}KB zS73F+vc{%qr=q(Ahy@~$_){*F!ZzSsB2)dO1ckA7n&h?@pW&=>TLo2ruETvfZ}Y8JZj zWTurE24t~c@$C&)$&dW=Sr~2%f(U|k9n9qdwYlRFfsUC3om7C zJeArA(U1rX5u+Xp5sR8bZ%WcExN^t|ij1F`1$^haEaLmjn=%JJOf(IOXp-TF$%LF!gu2YQl-80%_ z=JSfCuYU3lh^#OIWC1=`37yM5Yvhf;;46tN$BiXM=(^1Y!cfVCvagS){7-}$o`KM= zrtA*!#TXA)@2x)4f>Jk1`lZDYYcw~DvEuq#~dUC9BNJ;RlNAd??y1?;~CCbcbD7+kaKhD%Icx0?J< zwY%-LOoxBr<1^#4aRZgXXEE*S`^FUhtIP)}3j>;;#8J!)|EmexozVdC-#7E9Z>!dc zZExirLrM|Gs*&Sy6;~)(!)Bi?L@EzBZdmd6m&pPc_Z*Vj$uM3!D8j6(yHN2nZB?BzgGTCjHBFs)vtq?ylzXaXRu1nzc>BjYhuO&6nuEl zPBp_gJkkm8zdfjRWZZZerOs7NHL_m+>D`5<<1Q!X&G|`!NXQkwi`oBCt}Er%hj)n; z$UpMs5I+cud!w&cDFF^|&@(JKzb_r>91Zd z7T#x(pQ?I4sNsRxsahr-avFJ9KlrPUtjU^}b$7Ras2q*tXZ4_2OOT8G}iY_k@ zG3>0UtW4BSSeEQ5fhB8Htkx6gD3UDVFf)+{a&mt?CD(@4`Osvl^d;qsM~X+ul!=h5 zlO@9m0>yKE2N&4>KC)_Cyr+{qK>wtXJ89W8oTwb#3 zz{(8!{ae6bE5+pG%y3V4h&xti+H-fD9=Ozbc;ihS7!;E%T&s3sn@{lGUR4&U z*C5)wF9hNnZ``+@@H0t?D2lv{qr}I)?GBms9H~)6JAA><+f1gwAeIBJtP7>!JOR(+ zNWHt61b6Q*U$*FgLB%Ugg&|gb{F9Sw2S?P8^cKd;YtUw84DYAUQro9E1YPw5l7jB4!>V}D&~cO4gcPp7Kb)d78@34*v@eh* zKf3{g_%dIUURbY_DfC_vb}nxfRpprq(nJc5;8}V{Z`+p|2>O1)1=sXjiav9yx%M-K+_c5 zpLb=I;z+^H{@ZLbHE!JHbw?wN&+$&A)2j#Oq=wU25)?ltBL1*xZd|UX zX0{AQXjHPvi^T_c6%34BtX8Q1plCX~ErPqaWyC28I)*18S5s$bGY`uExWW#`7?q(1 z9t1|at6349$IaGQ-e_sWJPIgO*)@N{FazWUS|*S{ww5bOHcTo=*(TDKx9{3|&o-%e z*8^WXu(QJv&~xBX3DbE-Wxs@nOC5PBV<}v6i-U@-8tGWXTIpAP9I`dLlKjT_E+oDh zIg@U}9=UL(z1;-UEV5tRcWc5Qv%ScLQ(=az3jWZO1lYtrIQ!P6VFd7E<7YcK^=ONf&kI4mR){%eNuWE? z#fpO|IDN+6vD~J-)5EIb6QF`yvT8hT?n&FbB%JQ(hqlDY85teu1F!m`hPHgFr6N3# zSh9w(u!CgR9|u}`Jx_Ev10G!5!Amwo*|XoCPLC^Agx(%@KC`k;t(&g!{8za1U=uZY zJ z16Ew^#Y+2B_bYhCYY}u*4r({pDE>0|ZQr}^IsYObdY@qc0a2?Z&Ucl3dhlnnxXgk5 zoIEdYnPu*oaqtd9bRzt+y%6~&WV=rI7`zX4~1T`5sfco+Rdhg&5rtoRfT1r{yKM0Ux3} zM~PDIoOiKjXeFwGE7YhcBXNo23^Hh-5GvPCb1vTl{vy}!lk%A zdTJT#qROIjO2!E5SnnAt`K#M`Fd3Z(bpv~|@u56)k z+*u-U%&5<9?lElcM9R&(u-@X_w_U`QB;Vy168KS`H=(bea{0fe%9|HLUOjF%o|Ya5 z$C#K-cqiegWC<3e&IL565?Kj@v`NGKEl3Qq$3FCN^!&)i-Ip%!`lDm=Fj)oW7ThbS zejA?NoAE(G>15%02G2+>j5Wy=h3Dr*AksqSI4Ry0#B;VH zi6!1c>%RMEGi>G;cmup5+goRryHfprdVus}DmHE=!+t0c0b~u>dB>}T;LuiD zO6h54GS8Y|VU(`O+Fv(D5=k6LeKtegWY5-nR=Tf#6YXajI?-pDuAtKR@VXgsJsL5S zm~f=OL>tY?rF8?u0jx6kKS19)3y>}DGOG4PQk@0Pl7(ijCj*7<=f@O2gpU_FWn)zH zd)A}1FeJu236oXSP17M{idh;{e@$!CHd`^wC}ec>zo_P54$qTGAhc4I{L}7inpRNY zq*G^PHx#KM)2=`kNGD-yj}-Y?y(T;^UFPPV;#yqEI+Z9i;M)scjGP)TaPv#SRs4Kg z$KSlAXQ!+HYHx)O3~4YWECvM_u%CnMcW51!OvB|FZV%055B=ex1MWLm#7&O;leaZf!}Bm?}BY4B;|$atA@?)dS1 zwX%Uh4gs5)7%+Nmwg5{=uHzjM-DP_6i@V55k}p)OR86z^0_h%2aQm^-$_P*+>ycST z$L8(Z#--^Cx~}$HvC_`qzh;**Ievxif>eu%n?gvuVtpb9VQL-qJit3EkTV#>FSWb`e_axV!G*p0Bc} z!5jX9$y`!%p>DiXohExksgpO$bu0vx{=EXiC4j;=u*#}wpLC44Q5;vpE8-(_0gGZx zRtjt2B@y|(NV0$bnwh#VJ)v%xw<$Es_7!!cW1ojjq>wpu=o3W;J*O*{o*?BPOpb*Duc&W%>-M+r;TAw5Vk<-16otE zQ?A+InbswZ=T~smA>|CKPusM3jhgGoLy8+ukje9}peg@lH*+R5RHY|RX8cjS2~Lco zZ9w?jrM&yWdr zgW@r=bPH$++WgmNL(FnXQgek%7X*ibKJxylrJQ4?euuC3QN6p^*zf_^J|*#Sv@1pCl(TfL+?D5$X?sas z_#544e4Q7H)Ez5y2+~@@)VsgW`ueC!LraT754Q1D0%^OIk}N#8VsyXmiw7&QNCgLD zas;N|F$=F>G`tpq&Rqj9`hG{BVw%&@7@oskd0>WJ$QTHi2#T?2Qp>nOLI?}lmlS`d zJ=kOQd76rq>M2G*cuhRDE2HgAu3M3ZAtHI>=F@S~lXbh(ng-;sU@rfCWq$Jyo@3@U zSwLD$_veeXu69z;P2_4(+>^XNJ*4#y|LtW|LgLbAsHI<_BaZ0!z2XMr8iscPMGxlZ z8X`vKhEp0x2G?Gs81#2#EXnqR{73B3;NhwSSE0EXl9t|eu-ADh~m&+JvOA1 zyTty-`6?tDAG4j$$s(85(HJrbuuh3tF3HKh-j?)kfuKz05p2tr+;41Dn+0jcHA|J- zJe?MWoiLyv^7q5_U8HH`{B{ca!G~SU*#a(6f~-4e^oYt)`F*OVGfAgWaki+AdKJob z$}>fB=FHMn#yh!-7S8a8VzkGOC!)$Qzu_>lgk6gHZ)O*d_C(QY(Czmivj%**v}@5x z$#W~=`IttqI8KiwDOS#A=jdLBFPR%WM_g{{Ey&kX&R@u!jyHa1vZPKQ_)`ysOxwHW z9Gwg%xks;YM;cei!s?Wnr-$6zSNTFR?`!)h#|Res7Bm~2E=WQsMx;#j9kzNXKr3S; zDbNu$sDo8ubj=;#H?mYZ4B076L@e-m?US*}3;jyLn{VMAg8S5S4I6THvLC|JT;v?W zbO2gY-i;rcF9M#7ulvHL40$mU>Bn`60_jOf%Uk=_;u6`92;FfXL;p(71e?~v7?7L6 z32YpVm0wz>e8R4oOCVCxHJN+f%=G1VMX5xb$r5q&MZ8V*_5lWQX7+egkEcXZS&|a%ZHhe{GZf80TD5f6TXbpaf@W5S~i4kNk4@ ze2IPtw?+FrH^)&;{vrfscA?3Q?1|F(O7UDn^)Y+3>l&JD{sgT4@0-Rz;`c6Ado6u@=x_URrHs>m*U;KzEs)xJ_~M99*pm=CG#D08y>8#OB-t62lpzT zf3lu^nadZ#z%`J!7RNe)FSYz$57@v82nN)*VX-F-$dpEr5e)xTigUi zPVhHnD2^|vb%3@6if0An8O%AsN?VVcy8>S6UEZ7WnVB6;A= zN;*>Z9|kS9#iZvvdP0DSXZ;=FXPYw-&6`$0wy3ylnZCtwi{sqLJPVG%!=Am5R(}XH{VbU7 zLeI~$R9+UnQVOU`3vzRx8~utR_f6Eo5M;?n*{@U1Vtj6*w^XTv*&gv13HhT$=RTXG za!ZLBvA17vA4uFDbfk`F`)uSzeh3!G^v@^M*`x0z;=pmk0eRv%!}(YGlX=EQEt(v! zWm#tT2$_LtJMrlvGn7oeC}6oZ(Qg)O>KTpT%*k^`X~rsDZAt#l$Z%9ZCL+|GRnkoD zTj>zsvXp}Q^5JF7YYZ%rma1i`p$DKG&M;5qkHRsMIbkE@3-=I+66|gS;;X`9pd@%j@1N=F(%?$1qTPpGj8B3k}%YD{*ON*z10j&G;S$p3^ z@ChM!^s#3oke>7FWQo7HwZj~S1RSLClYz1y-7gzISR)N!Bp!RXj^2_X8cqOP z@h!VcF&-Uu=C7nJ%xgyo2p$-+Q{qKpbvP@!>PWnw;JR>hs-+jUV`wz|+O@YDx6{aSB%;a_H&G zXGqK~<`i=_1Lav^j@2oQe$(V#dtIup>U_>BMCVINWiZ{6vqkQ>kM=1 zWH=?swUUKkK0^3-WTB1(9lrP`k$>vib5Dq41Z`>5H^a`#-_ji7l zW#T1RUFBIv1Tu9^Z7ZWXrWx^lamyb9@9&0F_OzxyaZ z!K1t>F*=}YYoXE7>G4CU>`bJ9C>50j!7L2Umh@~Q!kC@%aqj*0-XQw{{_Ftlz{o9u zFMYlHkWZ*9moG)i!zh}V4kd*#S^5*#5I)R#HlAwPb17<7+(xIYiq$sD$ACcuGez7_ zkE};qKuUmOpn*xxxfiodUo?CaIfggf#UPc;K{S2W5+F5Q^lQdRc;=@?t#0!EcM04s z+Yff_#h_;Hh&7pr8$ncg>0QG`zw3x1+GG=%PFBxS9@`<8Xri$DJ* zuc)pOV&mA|BUImrv=5>yw|~PG%A97t-HV$Hmzr{GorL>oSC6_-^&d`^eZ={7zfSYI zU7$BZOBq09b;Jlt&B)hLvnF16K#mTuf)GY@svRgRsO6&d!*r9r6K)jGy!R%EcHMh4 z1p;$*c5-e*qRB(9G!Rmqt)7r7e)82veGoxLlLtr3KfZAJdn(MqnJy`~+P^Mn;yq zk?aocS91C1l%`}Rx4p>z3=Y6DCOgmfkhUoeNN)RVr4uzuAScS+-yvh-*g zZ`?srl#6f+R8#FiBJe(0U=DnLd+ju1HfH$wEAT|#W;>QnWp{hyO_=g^hcgB5NCQ*C zbkL(i{l>pM5Y;tWObRh*B8PiFT~md971$boY0D_QvN0vK{j2nL?vD7~JO6j!`meO>j&8NCsm8lv%P&I4J0HD>@ zFhQ=48Y}jIi6}S#@_^;t2x#_&WY`JU5fa^M&h2?GzPApA^HzzALvf5048=|{6AA*# z7-A-XDxqZW$W0j?mA|wKR5CV&)s>vxWZMwO^&&Pnxjht>T?kj*NhpGK<>Yv-ve{|9 z+qb||V|1nnQ3^e@0s93~NFA?lZcuwWTR%S>4*XyqVSw32pX9Jso_^P>Ik(1=9P;|e z&r21^bak~GH=h#gsbU!we!4Q=s|-xSxW{t@{Rv1>7DD7z_Q=Lx<`ExrIo%n`raw~HZMkAVLUmrpJE3D$`T9Jq& zO#Q#&Pd}|zR3vM#{D;yuLSDY5k6xQ?&y#G2?cO&A<25STx8}NaMO%5Cu^<{`x;95% zunCTC$dd^22W8d0?TBkyNcW4ve4+69rbcAcJKl4@?jU5$`3$ye|M?EWC=gC|Lq=a1 zzrDRxf}gPzPrW18FeC>#8cckiq?}S|{)*kE%k)S}sY+wa4ur~s1(JF-wB#vn3!k5n zQR7mW0#{T}QY2UXXJ%%+?hmIe>RBp`Fg4b6;3T5N^bp_Hyf?UCpYPjSYjo=i9^P`y z5DVU>Z>~IS;n;B`aVe#fGe{)yhr6%w8xrq-<54-;ft(hVB zIm0ey@$E^aZSe4qj!tSDN~Ik-9o=BG^H>2%TBt788Q;^3hbO~J_ZK4~Hb!urLV9`s z5qH4;_gYNUWR`dn%^G;r=an;Ju|Mscx5IqS0xp^ggqENivq)*zg^Z79%Ab#(fC*TO7kJDt-@`1j zBvnR}b&+xHI3hAAaXBolMjUA^YRlz5ro`OkQL}$FT(<)&7UZ+q9p5?B>i$`@wpq>! z+QBl9+5HNI#+=CuXDDPBGrba2T_nt&pQP4Z;j{*jZkp(&+LaGVsrjZ^%)F)rhXXB5 zZVM-&aOtpE#|=qToUjOJOyz&C_dwxIn-oJZ@B((ULHt^tl9+06IH6UT6>F=|LB}}l za{3Kj=D^8Gv?}yo^FToDf1Jw@N;P2^3aW?pbw3arLTm9!u|_r1n4!RC<&4S%L>yXL z3=5$6+d{Xm`_1jF>a&nSw~b6Z{+4^8HN$_C7a>OAg%&YCTvnC0GXC#} zx&Mfs%ar9K|A?NOE)cE)Nl>VkFvJiwIQ#$jV_#Edcm5gX!Uv;piPk4pRq&56+A1xE z)Y}F;a{Z^6j~JT9C(4vuTlF6d%aoALhvDum-#YgA+J|%VG4F7RxW5sGH&DaKFG&Dwv(V&pJT>y`zn*KIX!OWtQy`45sdGSjSXiNMv2VbHn^#hqC zpt|axv2-xnv_$!e>hga{72U7pEmyY@DK;gJGy!qDHf<6 S5C&lwL&;04NYzQ0h5a89N;J~| diff --git a/output/Scratch/en/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation_Mess.png b/output/Scratch/en/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation_Mess.png deleted file mode 100644 index 6d06918c1e19980d6023bebd2e9347454a1efb82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12887 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 B=H~za diff --git a/output/Scratch/en/blog/Category-Theory-Programming/graph/Na_ve_Category_Representation.png b/output/Scratch/en/blog/Category-Theory-Programming/graph/Na_ve_Category_Representation.png deleted file mode 100644 index e8a54997f55b4120565eb15a1bb4a8d3d07e9c8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10186 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 ZCTHpE!bwm0faW}qhN=#<_OVUG{{vHH?EnA( diff --git a/output/Scratch/en/blog/Category-Theory-Programming/graph/Na_ve_Category_Representation_Mess.png b/output/Scratch/en/blog/Category-Theory-Programming/graph/Na_ve_Category_Representation_Mess.png deleted file mode 100644 index 78a5a27f541aa5f06c7e5bb3387737e3d4646d33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46898 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

Sop%32r01N&6&u&k+g5IaihB1s{WG*oEdZ507 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 -\\( \newcommand{\hom}{\mathrm{hom}} \\) -

- - > **Definition**: - > - > A category \\(C\\) consist of: - > - > - A collection of _objects_ \\(ob(C)\\) - > - For every pair of objects \\((A,B)\\) a set \\(\hom(A,B)\\) - > of _morphisms_ \\(f:A→B\\) (Another notation for \\(f\in \hom(A,B)\\)) - > - A composition operator \\(∘\\) - > which associate to each couple \\(g:A→B\\), \\(f:B→C\\) another morphism \\(f∘g:A→C\\). - > - > With the following properties - > - > - for each object \\(x\\) there is an identity morphism - > \\(id_x:x→x\\) - > s.t. for any morphism \\(f:A->B\\), - > \\(id_A∘f = f = f∘id_B\\) - > - for all triplet of morphisms \\(h:A->B\\), \\(g:B->C\\) and \\(f:C->D\\) - > \\( (f∘g)∘h = f∘(g∘h) \\) - - ### Representation of Category - -Representing Category is not just a game. -It will be _very_ important. -But in the same time, it will help you to gain intuition about categories. - -A naïve representation (which can work in many cases) is to represent -a specific category as a directed graph. -Here is a first example of the representation of a category: - - - -A -> B [label="f"] -B -> C [label="g"] -A -> C [label="h"] - -A -> A [label="idA"] -B -> B [label="idB"] -C -> C [label="idC"] - - - -From this graph we can conclude without any ambiguity that: - -\\[ob(C)=\\{A,B,C\\}\\] -and -\\[\hom(C)=\\{f,g,h,idA,idB,idC\\}\\] - -Instantaneously, we understand that we can get rid of all \\(idX\\) arrows. - -But in reality, we lack an important information. -What is \\(∘\\)? - -Now, we can add informations to our previous representation. -We simply add a relation between 3 arrows that represent the composition. - - - -f[label="", fixedsize="false", width=0,height=0,shape=none]; -A -> f[label="f", arrowhead=None] -f -> B - -g[label="", fixedsize="false", width=0,height=0,shape=none]; -B -> g[label="g", arrowhead=None] -g -> C - - -fg [label="", fixedsize="false", width=0,height=0,shape=none]; -AC [label="", fixedsize="false", width=0,height=0,shape=none]; - -f -> fg [color="#b58900",style=dashed,arrowhead=None] -fg -> g [color="#b58900",style=dashed,arrowhead=None] -fg -> AC [label="h=g∘f",fontcolor="#b58900",color="#b58900",style=bold] - -A -> AC [label="h",arrowhead=None] -AC -> C - - - - -Now we have a complete representation. -We don't have to represent \\(idX\\), we know there are there. -And we also don't have to represent composition implying \\(idX\\) morphisms. -But, even this little graph look complex. -To show just how complex things can be; -we just double the number morphisms between different objects. - - - -f[label="", fixedsize="false", width=0,height=0,shape=none]; -A -> f[label="f", arrowhead=None] -f -> B - -fp[label="", fixedsize="false", width=0,height=0,shape=none]; -A -> fp[label="f'", arrowhead=None] -fp -> B - -g[label="", fixedsize="false", width=0,height=0,shape=none]; -B -> g[label="g", arrowhead=None] -g -> C - -gp[label="", fixedsize="false", width=0,height=0,shape=none]; -B -> gp[label="g'", arrowhead=None] -gp -> C - -fg[label="", fixedsize="false", width=0,height=0,shape=none]; -fpg[label="", fixedsize="false", width=0,height=0,shape=none]; -fgp[label="", fixedsize="false", width=0,height=0,shape=none]; -fpgp[label="", fixedsize="false", width=0,height=0,shape=none]; -AC[label="", fixedsize="false", width=0,height=0,shape=none]; -ApCp[label="", fixedsize="false", width=0,height=0,shape=none]; - -f -> fg [color="#b58900",style=dashed,arrowhead=None] -fg -> g [color="#b58900",style=dashed,arrowhead=None] -fg -> AC [color="#b58900",style=bold,fontcolor="#b58900",label="h=g∘f"] - -fp -> fpgp [color="#d33682",style=dashed,arrowhead=None] -fpgp -> gp [color="#d33682",style=dashed,arrowhead=None] -fpgp -> AC [color="#d33682",style=bold,fontcolor="#d33682",label="h=g'∘f'"] - -fp -> fpg [color="#dc322f",style=dashed,arrowhead=None] -fpg -> g [color="#dc322f",style=dashed,arrowhead=None] -fpg -> ApCp [color="#dc322f",style=bold,fontcolor="#dc322f",label="h'=g∘f'"] - -f -> fgp [color="#268bd2",style=dashed,arrowhead=None] -fgp -> gp [color="#268bd2",style=dashed,arrowhead=None] -fgp -> ApCp [color="#268bd2",style=bold,fontcolor="#268bd2",label="h'=g'∘f"] - -A -> AC [label="h",arrowhead=None] -AC -> C - -A -> ApCp [label="h'",arrowhead=None] -ApCp -> C - - - - -In fact we could have made something equivalent and far easier to read. -But the ∘ relation will be more hidden. - - - -A -> B[label="f"] -A -> B[label="f'"] -B -> C[label="g"] -B -> C[label="g'"] -A -> C [label="h\n=g∘f\n=g'∘f'"] -A -> C [label="h'\n=g'∘f\n=g∘f'"] - - diff --git a/output/Scratch/fr/blog/Category-Theory-Programming/graph/First_Na__ve_Category_Representation.png b/output/Scratch/fr/blog/Category-Theory-Programming/graph/First_Na__ve_Category_Representation.png deleted file mode 100644 index a2fd3531bdf17dce4b44813d48919217996b8e2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9272 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 E0T}jbmH+?% diff --git a/output/Scratch/fr/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation.png b/output/Scratch/fr/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation.png deleted file mode 100644 index 05a743ad69d1623190e303e5a3f313911146ede4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11400 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 S5C&lwL&;04NYzQ0h5a89N;J~| diff --git a/output/Scratch/fr/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation_Mess.png b/output/Scratch/fr/blog/Category-Theory-Programming/graph/Na__ve_Category_Representation_Mess.png deleted file mode 100644 index 6d06918c1e19980d6023bebd2e9347454a1efb82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12887 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 B=H~za diff --git a/output/Scratch/fr/blog/Category-Theory-Programming/graph/Na_ve_Category_Representation.png b/output/Scratch/fr/blog/Category-Theory-Programming/graph/Na_ve_Category_Representation.png deleted file mode 100644 index e8a54997f55b4120565eb15a1bb4a8d3d07e9c8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10186 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 ZCTHpE!bwm0faW}qhN=#<_OVUG{{vHH?EnA( diff --git a/output/Scratch/fr/blog/Category-Theory-Programming/graph/Na_ve_Category_Representation_Mess.png b/output/Scratch/fr/blog/Category-Theory-Programming/graph/Na_ve_Category_Representation_Mess.png deleted file mode 100644 index 78a5a27f541aa5f06c7e5bb3387737e3d4646d33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46898 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

Sop%32r01N&6&u&k+g5IaihB1s{WG*oEdZ507 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