Commit a871e03c authored by Dario Pinto's avatar Dario Pinto
Browse files

Add a bunch of FR articles + mappings + fix sabotage

parent b1ccbdb0
...@@ -8,6 +8,8 @@ type article = ...@@ -8,6 +8,8 @@ type article =
; url : string ; url : string
} }
exception ContentDoesntExistSoPleaseRaiseA404
let alt_ergo_footer = let alt_ergo_footer =
{| {|
> ### **About Alt-Ergo** > ### **About Alt-Ergo**
...@@ -296,7 +298,7 @@ let links_to_home_pages = ...@@ -296,7 +298,7 @@ let links_to_home_pages =
</a> </a>
</p> </p>
</div> </div>
<div class="col-4"> <div class="col-4">
<p class="toplinks"> <p class="toplinks">
<a href="/blog/category"> <a href="/blog/category">
Categories Categories
...@@ -394,9 +396,12 @@ let given_category category = ...@@ -394,9 +396,12 @@ let given_category category =
(fun article -> String.equal (normalize_url article.category) category) (fun article -> String.equal (normalize_url article.category) category)
articles_by_date articles_by_date
in in
let category = (List.hd articles_of_category).category in match articles_of_category with
Format.asprintf {|<h1 id="page-title">Articles on %s</h1>%s%a@.|} category | [] -> raise ContentDoesntExistSoPleaseRaiseA404
links_to_home_pages pp_blog_posts articles_of_category | _l ->
let category = (List.hd articles_of_category).category in
Format.asprintf {|<h1 id="page-title">Articles on %s</h1>%s%a@.|} category
links_to_home_pages pp_blog_posts articles_of_category
(** [given_author ocp_author] Displays the list of articles written by a given (** [given_author ocp_author] Displays the list of articles written by a given
[ocp_author] *) [ocp_author] *)
...@@ -410,13 +415,16 @@ let given_author ocp_author = ...@@ -410,13 +415,16 @@ let given_author ocp_author =
article.authors ) article.authors )
articles_by_date articles_by_date
in in
let authors = (List.hd articles_of_author).authors in match articles_of_author with
let author = | [] -> raise ContentDoesntExistSoPleaseRaiseA404
List.find (fun auth -> String.equal (normalize_url auth) ocp_author) authors | _l ->
in let authors = (List.hd articles_of_author).authors in
( Format.asprintf {|<h1 id="page-title">Articles by %s</h1>%s%a@.|} author let author =
links_to_home_pages pp_blog_posts articles_of_author List.find (fun auth -> String.equal (normalize_url auth) ocp_author) authors
, author ) in
( Format.asprintf {|<h1 id="page-title">Articles by %s</h1>%s%a@.|} author
links_to_home_pages pp_blog_posts articles_of_author
, author )
(** [given_tag tag] Displays the list of articles tagged with given [tag] *) (** [given_tag tag] Displays the list of articles tagged with given [tag] *)
let given_tag tag = let given_tag tag =
...@@ -429,13 +437,16 @@ let given_tag tag = ...@@ -429,13 +437,16 @@ let given_tag tag =
article.tags ) article.tags )
articles_by_date articles_by_date
in in
let tag = match articles_with_tag with
List.find | [] -> raise ContentDoesntExistSoPleaseRaiseA404
(fun t -> String.equal (normalize_tag t) tag) | _l ->
(List.hd articles_with_tag).tags let tag =
in List.find
Format.asprintf {|<h1 id="page-title">Articles tagged with %s</h1>%s%a@.|} tag (fun t -> String.equal (normalize_tag t) tag)
links_to_home_pages pp_blog_posts articles_with_tag (List.hd articles_with_tag).tags
in
Format.asprintf {|<h1 id="page-title">Articles tagged with %s</h1>%s%a@.|} tag
links_to_home_pages pp_blog_posts articles_with_tag
(** [category_home] This is the home page for all available categories on the (** [category_home] This is the home page for all available categories on the
Blog, along with number of articles of given category *) Blog, along with number of articles of given category *)
......
title=Introduction aux RPCs dans Tezos : exemple d’un portefeuille (wallet) simple
authors=Fabrice Le Fessant
date=2018-11-20
category=Blockchains
tags=tezos,rpc,fr
Dans cet article technique, nous introduisons brièvement les RPCs dans Tezos à travers un exemple simple montrant comment le client Tezos
interagit avec le noeud lors d’une instruction de transfert. Les RPCs de Tezos sont des requêtes HTTP (GET ou POST) auxquelles les noeuds Tezos
répondent dans un fichier au format JSON. Elles sont la seule façon pour les wallets d’interagir avec [Read more…](/2018/11/15/an-introduction-to-tezos-rpcs-a-basic-wallet/)
title=Tezos et OCamlPro
authors=Fabrice Le Fessant
date=2019-01-31
category=Blockchains
tags=tezos,OCamlPro,fr
Tezos est aujourd’hui un projet open source, un réseau international développé par des équipes sur plus de cinq continents. Dans la genèse du
projet, l’entreprise française OCamlPro, qui développe encore aujourd’hui de nombreux projets liés à Tezos (TZscan, Liquidity, etc.), a
joué un rôle particulièrement important. C’est en effet en son sein que des ingénieurs-chercheurs ont posé les premières pierres du code, en
étroite collaboration avec Arthur Breitman, l’architecte du projet, et DLS pendant plusieurs années. Nous nous réjouissons aujourd’hui de
l’essor qu’a pris le projet.
Arthur et OCamlPro
(publication conjointe)
title=Optimisation du stockage dans Tezos : une branche de test sur Gitlab
authors=Fabrice Le Fessant
date=2019-02-04
category=Blockchains
tags=tezos,optimisation,fr
Ce troisième article consacré à l’amélioration du stockage dans Tezos fait suite à l’annonce de la mise à disposition d’une image docker pour
les beta testeurs souhaitant essayer notre système de stockage et garbage collector.
Voir [Improving Tezos Storage : Gitlab branch for testers](/2019/02/04/improving-tezos-storage-gitlab-branch-for-testers/)
title=Release de Techelson, moteur de tests pour Michelson et Liquidity
authors=Adrien Champion
date=2019-03-05
category=Blockchains
tags=techelson,fr
Nous sommes fiers d’annoncer la première release de Techelson, moteur d’exécution de tests pour Michelson. Les programmeurs Liquidity peuvent également l’utiliser.
Voir [Techelson, a test execution engine for Michelson](/2019/03/05/techelson-a-test-execution-engine-for-michelson/).
title=Résultats de la SMT-Comp 2019 pour Alt-Ergo
authors=Albin Coquereau
date=2019-07-10
category=Formal Methods
tags=alt-ergo,fr
Les résultats de la compétition SMT-COMP 2019 ont été publiés au whorkshop&nbsp; SMT de la [22e conférence SAT](https://smt2019.galois.com/). Nous étions fiers d’y participer pour la deuxième année consécutive, surtout depuis qu’Alt-Ergo [prend en charge](/2019/02/11/whats-new-for-alt-ergo-in-2018-here-is-a-recap/) le standard [SMT-LIB 2](https://smtlib.cs.uiowa.edu/).
> Alt-Ergo est un SAT solveur open-source maintenu et distribué par OCamlPro, et financé entre autres grâce à plusieurs projets de R&D collaborative (BWare, SOPRANO, Vocal, LChip).
> Si vous êtes un utilisateur d’Alt-Ergo, songez à rejoindre le [Club des Utilisateurs d’Alt-Ergo](https://alt-ergo.ocamlpro.com/#club)! L’histoire de ce logiciel remonte à 2006, où il est né de recherches académiques conjointes entre Inria et le CNRS dans le laboratoire du LRI. Il est depuis septembre 2013 maintenu, développé&nbsp; et distribué par OCamlPro (voir l’historique des [versions passées](https://alt-ergo.ocamlpro.com/#releases)).
> *Si vous êtes curieux des activités d’OCamlPro dans le domaine des méthodes formelles, vous pouvez lire le court témoignage d’un [client heureux](http://ocamlpro.com/clients-partners/#mitsubishi-merce).*
Voir [](/2019/07/09/alt-ergo-participation-to-the-smt-comp-2019/)
...@@ -2,7 +2,7 @@ title=Réunion annuelle du Club des utilisateurs d’Alt-Ergo ...@@ -2,7 +2,7 @@ title=Réunion annuelle du Club des utilisateurs d’Alt-Ergo
authors=Aurore Dromby authors=Aurore Dromby
date=2020-03-03 date=2020-03-03
category=Formal Methods category=Formal Methods
tags=alt-ergo tags=alt-ergo,fr
![Alt-Ergo meeting](assets/img/altergo-meeting.jpeg) ![Alt-Ergo meeting](assets/img/altergo-meeting.jpeg)
![Logo Alt-Ergo](../assets/img/logo_altergo.png) ![Logo Alt-Ergo](../assets/img/logo_altergo.png)
...@@ -23,4 +23,4 @@ Nos membres sont particulièrement intéressés par les points suivants : ...@@ -23,4 +23,4 @@ Nos membres sont particulièrement intéressés par les points suivants :
– L’amélioration du support de l’arithmétique non linéaire dans Alt-Ergo – L’amélioration du support de l’arithmétique non linéaire dans Alt-Ergo
Ces fonctionnalités sont maintenant nos principales priorités. Pour suivre nos avancement et les nouveautés, n’hésitez pas à lire nos [articles](category/formal_methods) sur ce blog. Ces fonctionnalités sont maintenant nos principales priorités. Pour suivre nos avancement et les nouveautés, n’hésitez pas à lire nos [articles](category/formal_methods) sur ce blog.
\ No newline at end of file
...@@ -2,7 +2,7 @@ title=Tutoriel Format ...@@ -2,7 +2,7 @@ title=Tutoriel Format
authors=OCamlPro authors=OCamlPro
date=2020-06-01 date=2020-06-01
category=Trainings category=Trainings
tags=tutoriel,format,documentation tags=tutoriel,format,documentation,fr
*Article écrit par Mattias.* *Article écrit par Mattias.*
......
...@@ -2,7 +2,7 @@ title=[Interview] Sylvain Conchon rejoint OCamlPro ...@@ -2,7 +2,7 @@ title=[Interview] Sylvain Conchon rejoint OCamlPro
authors=Aurore Dombry authors=Aurore Dombry
date=2020-06-05 date=2020-06-05
category=OCamlPro category=OCamlPro
tags=formal methods,interview,sylvain,conchon tags=formal methods,interview,sylvain,conchon,fr
![](/blog/assets/img/picture_sylvainconchon.jpg) ![](/blog/assets/img/picture_sylvainconchon.jpg)
......
...@@ -2,7 +2,7 @@ title=Réunion annuelle du Club des utilisateurs d’Alt-Ergo 2021 ...@@ -2,7 +2,7 @@ title=Réunion annuelle du Club des utilisateurs d’Alt-Ergo 2021
authors=OCamlPro authors=OCamlPro
date=2021-04-29 date=2021-04-29
category=Formal Methods category=Formal Methods
tags=alt-ergo tags=alt-ergo,fr
La troisième réunion annuelle du Club des utilisateurs d’Alt-Ergo a eu lieu le 1er avril ! Cette réunion annuelle est l’endroit idéal pour passer en revue les besoins de chaque partenaire concernant Alt-Ergo. Nous avons eu le plaisir de recevoir nos partenaires pour discuter de la feuille de route concernant les développements et les améliorations futures d’Alt-Ergo. La troisième réunion annuelle du Club des utilisateurs d’Alt-Ergo a eu lieu le 1er avril ! Cette réunion annuelle est l’endroit idéal pour passer en revue les besoins de chaque partenaire concernant Alt-Ergo. Nous avons eu le plaisir de recevoir nos partenaires pour discuter de la feuille de route concernant les développements et les améliorations futures d’Alt-Ergo.
......
title=Verification for Dummies: SMT and Induction
authors=Adrien Champion
date=2021-10-14
category=Formal Methods
tags=trainings,smt,formal logic
- Adrien Champion [adrien.champion@ocamlpro.com](mailto:adrien.champion@ocamlpro.com)
- [](http://creativecommons.org/licenses/by-sa/4.0/) This work is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/).
These posts broadly discusses *induction* as a *formal verification* technique, which here really means *formal program verification*. I will use concrete, runnable examples whenever possible. Some of them can run directly in a browser, while others require to run small easy-to-retrieve tools locally. Such is the case for pretty much all examples dealing directly with induction.
The next chapters discuss the following notions:
- formal logics and formal frameworks;
- SMT-solving: modern, *low-level* verification building blocks;
- declarative transition systems;
- transition system unrolling;
- BMC and induction proofs over transition systems;
- candidate strengthening.
The approach presented here is far from being the only one when it comes to program verification. It happens to be relatively simple to
understand, and I believe that familiarity with the notions discussed here makes understanding other approaches significantly easier.
This book thus hopes to serve both as a relatively deep dive into the specific technique of SMT-based induction, as well as an example of the technical challenges inherent to both developing and using automated proof engines.
Some chapters contain a few pieces of Rust code. Usually to provide a runnable version of a system under discussion, or to serve as example of actual code that we want to encode and verify. Some notions of Rust could definitely help in places, but this is not mandatory (probably).
Read more here: [](https://github.com/rust-lang/this-week-in-rust/pull/2479)[https://ocamlpro.github.io/verification_for_dummies/](https://ocamlpro.github.io/verification_for_dummies/)
...@@ -68,31 +68,19 @@ We cater to very specific needs. For example, we can translate a “black box” ...@@ -68,31 +68,19 @@ We cater to very specific needs. For example, we can translate a “black box”
<h3 align="center"><a href="https://alt-ergo.ocamlpro.com/">Alt-Ergo</a></h3> <h3 align="center"><a href="https://alt-ergo.ocamlpro.com/">Alt-Ergo</a></h3>
<p class="p_index_center">An SMT solver for software verification</p> <p class="p_index_center">An SMT solver for software verification</p>
</div> </div>
<<<<<<< HEAD
<div class="col-6 col-lg-3"> <div class="col-6 col-lg-3">
<p><img class="img_products" src="assets/img/logo_dune_gimp.png"/></p> <h3 align="center">
<h3 align="center"><a href="https://dunscan.io/">DunScan</a></h3> <p><img class="img_products" src="assets/img/logo_dune_gimp.png"/></p>
<p class="p_index_center">The Dune network explorer</p> <h3 align="center"><a href="https://dunscan.io/">DunScan</a> &amp; <a href="https://tzscan.io/">TzScan</a></h3></h3>
<p class="p_index_center">Blockchain explorers</p>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-6 col-lg-3"> <div class="col-6 col-lg-3">
<p><img class="img_products" src="assets/img/logo_love_gimp.png"/></p> <h3 align="center">
<h3 align="center"><a href="https://dune.network/docs/dune-node-next/love-doc/reference/love.htmlo/">LOVE</a></h3> <p><img class="img_products" src="assets/img/logo_love_gimp.png"/></p>
<p class="p_index_center">A smart-contract language for the Dune Network blockchain</p> <a href="https://dune.network/docs/dune-node-next/love-doc/reference/love.htmlo/">LOVE & Liquidity</a></h3>
======= <p class="p_index_center">Smart-contract languages for the Dune Network & Tezos blockchains</p>
<div class="col-lg-3">
<h3 align="center"><a href="https://dunscan.io/">DunScan</a> & <a href="https://tzscan.io/">TzScan</a></h3>
<p>Blockchain explorers</p>
</div>
</div>
<div class="row">
<div class="col-lg-3">
<h3 align="center"><a href="https://dune.network/docs/dune-node-next/love-doc/reference/love.htmlo/">LOVE & Liquidity</a></h3>
<p>Smart-contract languages for the Dune Network & Tezos blockchains</p>
>>>>>>> ocp/master
</div> </div>
<div class="col-6 col-lg-3"> <div class="col-6 col-lg-3">
<p><img class="img_products" src="assets/img/logo_tezos.svg" /></p> <p><img class="img_products" src="assets/img/logo_tezos.svg" /></p>
...@@ -104,18 +92,11 @@ We cater to very specific needs. For example, we can translate a “black box” ...@@ -104,18 +92,11 @@ We cater to very specific needs. For example, we can translate a “black box”
<h3 align="center"><a href="https://gitlab.com/o-labs/solidity-parser-ocaml">Solidity parser</a></h3> <h3 align="center"><a href="https://gitlab.com/o-labs/solidity-parser-ocaml">Solidity parser</a></h3>
<p class="p_index_center">A Solidity Parser in OCaml with Menhir</p> <p class="p_index_center">A Solidity Parser in OCaml with Menhir</p>
</div> </div>
<<<<<<< HEAD
<div class="col-6 col-lg-3"> <div class="col-6 col-lg-3">
<p><img class="img_products" src="assets/img/logo_tzscan_gimp.jpg"/></p>
<h3 align="center"><a href="https://tzscan.io/">TZScan</a></h3>
<p class="p_index_center">The Tezos network explorer</p>
=======
<div class="col-lg-3">
<p><img src="assets/img/optal.png"/></p> <p><img src="assets/img/optal.png"/></p>
<h3 align="center"><a href="http://optal.ocamlpro.com/">Optal</a></h3> <h3 align="center"><a href="http://optal.ocamlpro.com/">Optal</a></h3>
<p>A language for linear optimisation</p> <p class="p_index_center">A language for linear optimisation</p>
>>>>>>> ocp/master
</div> </div>
</div> </div>
<br /> <br />
......
...@@ -163,13 +163,17 @@ let () = ...@@ -163,13 +163,17 @@ let () =
let title = title content in let title = title content in
Dream.html (render_unsafe ~title ~content ()) ) Dream.html (render_unsafe ~title ~content ()) )
; Dream.get "/blog/category/:cat" (fun request -> ; Dream.get "/blog/category/:cat" (fun request ->
let content = Blog.given_category (Dream.param "cat" request) in match Blog.given_category (Dream.param "cat" request) with
| exception Blog.ContentDoesntExistSoPleaseRaiseA404 ->
Dream.empty `Not_Found
| content ->
let title = title content in let title = title content in
Dream.html (render_unsafe ~title ~content ()) ) Dream.html (render_unsafe ~title ~content ()) )
; Dream.get "/blog/authors/:author" (fun request -> ; Dream.get "/blog/authors/:author" (fun request ->
let content, authors = match Blog.given_author (Dream.param "author" request) with
Blog.given_author (Dream.param "author" request) | exception Blog.ContentDoesntExistSoPleaseRaiseA404 ->
in Dream.empty `Not_Found
| content, authors ->
let title = title content in let title = title content in
Dream.html (render_unsafe ~title ~content ~authors ()) ) Dream.html (render_unsafe ~title ~content ~authors ()) )
; Dream.get "/blog/:title" (fun request -> ; Dream.get "/blog/:title" (fun request ->
...@@ -183,9 +187,10 @@ let () = ...@@ -183,9 +187,10 @@ let () =
in in
Dream.html (render_unsafe ~title ~content ~authors ~keywords ()) ) Dream.html (render_unsafe ~title ~content ~authors ~keywords ()) )
; Dream.get "/blog/tag/:tag" (fun request -> ; Dream.get "/blog/tag/:tag" (fun request ->
let content= match Blog.given_tag (Dream.param "tag" request) with
Blog.given_tag (Dream.param "tag" request) | exception Blog.ContentDoesntExistSoPleaseRaiseA404 ->
in Dream.empty `Not_Found
| content ->
let title = title content in let title = title content in
Dream.html (render_unsafe ~title ~content ()) ) Dream.html (render_unsafe ~title ~content ()) )
; Dream.get "/blog" (fun _request -> ; Dream.get "/blog" (fun _request ->
...@@ -213,6 +218,11 @@ let () = ...@@ -213,6 +218,11 @@ let () =
let something = Dream.param "something" request in let something = Dream.param "something" request in
let url = Format.sprintf "category/%s/" something in let url = Format.sprintf "category/%s/" something in
redirect_loader "" url request) redirect_loader "" url request)
(* REDIRECTS OLD CATEGORIES FR PAGES WITH TRAILING / *)
; Dream.get "/fr/category/:something/" (fun request ->
let something = Dream.param "something" request in
let url = Format.sprintf "fr/category/%s/" something in
redirect_loader "" url request)
(* REDIRECTS FR STATIC PAGES WITH TRAILING / *) (* REDIRECTS FR STATIC PAGES WITH TRAILING / *)
; Dream.get "/fr/:something/:something_else/" (fun request -> ; Dream.get "/fr/:something/:something_else/" (fun request ->
let something = Dream.param "something" request in let something = Dream.param "something" request in
......
...@@ -79,7 +79,7 @@ let old_to_new = ...@@ -79,7 +79,7 @@ let old_to_new =
; ("/fr/author/vincent/", "?") ; ("/fr/author/vincent/", "?")
; ("/fr/author/alain/", "/blog/authors/alain_mebsout") ; ("/fr/author/alain/", "/blog/authors/alain_mebsout")
] ]
(*CATEGORIES*) (* CATEGORIES EN *)
@ [ ("/category/ocaml-opam-tooling/", "/blog/category/tooling") @ [ ("/category/ocaml-opam-tooling/", "/blog/category/tooling")
; ("/category/alt-ergo/", "/blog/category/formal_methods") ; ("/category/alt-ergo/", "/blog/category/formal_methods")
; ("/category/trainings/", "/blog/category/trainings") ; ("/category/trainings/", "/blog/category/trainings")
...@@ -91,16 +91,29 @@ let old_to_new = ...@@ -91,16 +91,29 @@ let old_to_new =
; ("/category/opam/", "/blog/category/tooling") ; ("/category/opam/", "/blog/category/tooling")
; ("/category/rust/", "/blog/category/rust") ; ("/category/rust/", "/blog/category/rust")
; ("/category/ocaml/", "/blog/category/ocaml") ; ("/category/ocaml/", "/blog/category/ocaml")
]
(* CATEGORIES FR *)
@ [ ("/fr/category/ocaml-opam-tooling-fr/", "/blog/category/tooling")
; ("/fr/category/alt-ergo-fr/", "/blog/category/formal_methods")
; ("/fr/category/formations/", "/blog/category/trainings")
; ("/fr/category/ocamlpro-fr/", "/blog/category/ocamlpro")
; ("/fr/category/blockchains-fr/", "/blog/category/blockchains")
; ("/fr/category/blog-fr/", "")
; ("/fr/category/flambda-fr/", "/blog/category/ocaml")
; ("/fr/category/a-la-une/", "/blog/category/ocamlpro")
; ("/fr/category/opam/", "/blog/category/tooling")
; ("/fr/category/rust/", "/blog/category/rust")
; ("/fr/category/ocaml-fr/", "/blog/category/ocaml")
] ]
(*TAGS*) (*TAGS*)
@ [] @ []
(* BLOG *) (* BLOG *)
@ [ ("/blog/", "/blog") @ [ ( "/blog/", "/blog")
; ("/fr/blog-fr/", "/blog") ; ( "/fr/blog-fr/", "/blog")
; ( "/2011/05/06/ocaml-32bits-longval/" ; ( "/2011/05/06/ocaml-32bits-longval/"
, "/blog/2011_05_06_ocaml_32bits_longval" ) , "/blog/2011_05_06_ocaml_32bits_longval" )
; ("/2011/06/03/ocaml-cheat-sheets/", "/blog/2011_06_03_ocaml_cheat_sheets") ; ( "/2011/06/03/ocaml-cheat-sheets/", "/blog/2011_06_03_ocaml_cheat_sheets")
; ("/2011/06/23/ocaml-and-windows/", "/blog/2011_06_23_ocaml_and_windows") ; ( "/2011/06/23/ocaml-and-windows/", "/blog/2011_06_23_ocaml_and_windows")
; ( "/2011/08/10/packing-and-functors/" ; ( "/2011/08/10/packing-and-functors/"
, "/blog/2011_08_10_packing_and_functors" ) , "/blog/2011_08_10_packing_and_functors" )
; ( "/2012/08/08/profiling-ocaml-amd64-code-under-linux/" ; ( "/2012/08/08/profiling-ocaml-amd64-code-under-linux/"
...@@ -125,7 +138,7 @@ let old_to_new = ...@@ -125,7 +138,7 @@ let old_to_new =
, "/blog/2013_07_01_news_from_may_and_june" ) , "/blog/2013_07_01_news_from_may_and_june" )
; ( "/2013/07/11/better-inlining-progress-report/" ; ( "/2013/07/11/better-inlining-progress-report/"
, "/blog/2013_07_11_better_inlining_progress_report" ) , "/blog/2013_07_11_better_inlining_progress_report" )
; ("/2013/08/05/news-from-july/", "/blog/2013_08_05_news_from_july") ; ( "/2013/08/05/news-from-july/", "/blog/2013_08_05_news_from_july")
; ( "/2013/09/04/ocamlpro-highlights-august-2013/" ; ( "/2013/09/04/ocamlpro-highlights-august-2013/"
, "/blog/2013_09_04_ocamlpro_highlights_august_2013" ) , "/blog/2013_09_04_ocamlpro_highlights_august_2013" )
; ( "/2013/10/02/alt-ergo-ocamlpro-two-months-later/" ; ( "/2013/10/02/alt-ergo-ocamlpro-two-months-later/"
...@@ -156,7 +169,7 @@ let old_to_new = ...@@ -156,7 +169,7 @@ let old_to_new =
, "/blog/2014_07_16_ocamlpro_highlights_may_june_2014" ) , "/blog/2014_07_16_ocamlpro_highlights_may_june_2014" )
; ( "/2015/05/18/reduced-memory-allocations-with-ocp-memprof/" ; ( "/2015/05/18/reduced-memory-allocations-with-ocp-memprof/"
, "/blog/2015_05_18_reduced_memory_allocations_with_ocp_memprof." ) , "/blog/2015_05_18_reduced_memory_allocations_with_ocp_memprof." )
; ("/2016/04/01/asm-ocaml/", "/blog/2016_04_01_asm_ocaml") ; ( "/2016/04/01/asm-ocaml/", "/blog/2016_04_01_asm_ocaml")
; ( "/2016/11/21/release-of-alt-ergo-1-30-with-experimental-support-for-models-generation/" ; ( "/2016/11/21/release-of-alt-ergo-1-30-with-experimental-support-for-models-generation/"
, "/blog/2016_11_21_release_of_alt_ergo_1_30_with_experimental_support_for_models_generation" , "/blog/2016_11_21_release_of_alt_ergo_1_30_with_experimental_support_for_models_generation"
) )
...@@ -171,14 +184,20 @@ let old_to_new = ...@@ -171,14 +184,20 @@ let old_to_new =
, "/blog/2017_05_04_new_opam_features_opam_install_dir" ) , "/blog/2017_05_04_new_opam_features_opam_install_dir" )
; ( "/2017/05/11/new-opam-features-more-expressive-dependencies/" ; ( "/2017/05/11/new-opam-features-more-expressive-dependencies/"
, "/blog/2017_05_11_new_opam_features_more_expressive_dependencies" ) , "/blog/2017_05_11_new_opam_features_more_expressive_dependencies" )
; ("/2018/01/15/2017-at-ocamlpro/", "/blog/2018_01_15_2017_at_ocamlpro") ; ( "/2018/01/15/2017-at-ocamlpro/", "/blog/2018_01_15_2017_at_ocamlpro")
; ("/2018/01/15/2017-at-ocamlpro-2/", "/blog/2018_01_15_2017_at_ocamlpro") ; ( "/2018/01/15/2017-at-ocamlpro-2/", "/blog/2018_01_15_2017_at_ocamlpro")
; ( "/2018/02/14/release-of-a-first-version-of-tzscan-io-a-tezos-block-explorer/" ; ( "/2018/02/14/release-of-a-first-version-of-tzscan-io-a-tezos-block-explorer/"
, "/blog/2018_02_14_release_of_a_first_version_of_tzscan_io_a_tezos_block_explorer" , "/blog/2018_02_14_release_of_a_first_version_of_tzscan_io_a_tezos_block_explorer"
) )
; ("/fr/2018/02/14/une-premiere-version-de-notre-explorateur-de-blocs-tzscan-io/"
, "/blog/2018_02_14_release_of_a_first_version_of_tzscan_io_a_tezos_block_explorer"
)
; ( "/2018/02/08/liquidity-smart-contract-deploy-live-demo-on-tezos-alphanet-jfla2018/" ; ( "/2018/02/08/liquidity-smart-contract-deploy-live-demo-on-tezos-alphanet-jfla2018/"
, "/blog/2018_02_08_liquidity_smart_contract_deploy_live_demo_on_tezos_alphanet_jfla2018" , "/blog/2018_02_08_liquidity_smart_contract_deploy_live_demo_on_tezos_alphanet_jfla2018"
) )
; ("/fr/2018/02/08/notre-demo-live-de-deploiement-dun-smart-contrat-multisignature-ecrit-en-liquidity-sur-lalphanet-de-tezos-jfla2018/"
, "/blog/2018_02_08_liquidity_smart_contract_deploy_live_demo_on_tezos_alphanet_jfla2018"
)
; ( "/2018/02/08/ocamlpros-liquidity-lang-demo-at-jfla2018-a-smart-contract-design-language/" ; ( "/2018/02/08/ocamlpros-liquidity-lang-demo-at-jfla2018-a-smart-contract-design-language/"
, "/blog/2018_02_08_liquidity_smart_contract_deploy_live_demo_on_tezos_alphanet_jfla2018" , "/blog/2018_02_08_liquidity_smart_contract_deploy_live_demo_on_tezos_alphanet_jfla2018"
) )
...@@ -198,6 +217,8 @@ let old_to_new = ...@@ -198,6 +217,8 @@ let old_to_new =
, "/blog/2018_07_20_new_updates_on_tzscan_2" ) , "/blog/2018_07_20_new_updates_on_tzscan_2" )
; ( "/2018/07/20/ocamlpros-tezos-block-explorer-tzscans-last-updates/" ; ( "/2018/07/20/ocamlpros-tezos-block-explorer-tzscans-last-updates/"
, "/blog/2018_07_20_new_updates_on_tzscan_2" ) , "/blog/2018_07_20_new_updates_on_tzscan_2" )
; ( "/fr/2018/07/20/ocamlpro-met-a-jour-son-block-explorer-tzscan-pour-tezos/"
, "/blog/2018_07_20_new_updates_on_tzscan_2" )
; ( "/2018/07/26/opam-2-0-0-rc4-final-is-out/" ; ( "/2018/07/26/opam-2-0-0-rc4-final-is-out/"
, "/blog/2018_07_26_opam_2.0.0_rc4_final_is_out" ) , "/blog/2018_07_26_opam_2.0.0_rc4_final_is_out" )
; ( "/2018/09/19/opam-2-0-0-release-and-repository-upgrade/" ; ( "/2018/09/19/opam-2-0-0-release-and-repository-upgrade/"
...@@ -205,38 +226,53 @@ let old_to_new = ...@@ -205,38 +226,53 @@ let old_to_new =
; ( "/2018/10/17/ocamlpros-tzscan-grant-proposal-accepted-by-the-tezos-foundation-joint-press-release/" ; ( "/2018/10/17/ocamlpros-tzscan-grant-proposal-accepted-by-the-tezos-foundation-joint-press-release/"
, "/blog/2018_10_17_ocamlpros_tzscan_grant_proposal_accepted_by_the_tezos_foundation_joint_press_release" , "/blog/2018_10_17_ocamlpros_tzscan_grant_proposal_accepted_by_the_tezos_foundation_joint_press_release"
) )
; ("/fr/2018/11/01/communique-conjoint-la-fondation-tezos-octroie-une-bourse-tzscan-a-ocamlpro/"
, "/blog/2018_10_17_ocamlpros_tzscan_grant_proposal_accepted_by_the_tezos_foundation_joint_press_release")
; ( "/2018/11/06/liquidity-tutorial-a-game-with-an-oracle-for-random-numbers/" ; ( "/2018/11/06/liquidity-tutorial-a-game-with-an-oracle-for-random-numbers/"
, "/blog/2018_11_06_liquidity_tutorial_a_game_with_an_oracle_for_random_numbers" , "/blog/2018_11_06_liquidity_tutorial_a_game_with_an_oracle_for_random_numbers"
) )
; ( "/fr/2018/11/06/tutoriel-liquidity-creer-un-jeu-de-hasard-avec-un-oracle-generant-des-nombres-aleatoires/"
, "/blog/2018_11_06_liquidity_tutorial_a_game_with_an_oracle_for_random_numbers")
; ( "/2018/11/08/first-open-source-release-of-tzscan/" ; ( "/2018/11/08/first-open-source-release-of-tzscan/"
, "/blog/2018_11_08_first_open_source_release_of_tzscan" ) , "/blog/2018_11_08_first_open_source_release_of_tzscan" )
; ( "/2018/11/15/an-introduction-to-tezos-rpcs-a-basic-wallet/" ; ( "/2018/11/15/an-introduction-to-tezos-rpcs-a-basic-wallet/"
, "/blog/2018_11_15_an-introduction_to_tezos_rpcs_a_basic_wallet" ) , "/blog/2018_11_15_an-introduction_to_tezos_rpcs_a_basic_wallet" )
; ("/fr/2018/11/20/introduction-aux-rpcs-dans-tezos-exemple-dun-portefeuille-wallet-simple/"
, "/blog/2018_11_20_fr_introduction_aux_rpcs_dans_tezos_exemple_dun_portefeuille_wallet_simple")
; ( "/2018/11/21/an-introduction-to-tezos-rpcs-signing-operations/" ; ( "/2018/11/21/an-introduction-to-tezos-rpcs-signing-operations/"
, "/blog/2018_11_21_an_introduction_to_tezos_rpcs_signing_operations" ) , "/blog/2018_11_21_an_introduction_to_tezos_rpcs_signing_operations" )
; ("/2018/12/14/opam-2-0-2-release/", "/blog/2018_12_12_opam_2.0.2_release") ; ( "/2018/12/14/opam-2-0-2-release/", "/blog/2018_12_12_opam_2.0.2_release")
; ( "/2019/01/15/improving-tezos-storage/" ; ( "/2019/01/15/improving-tezos-storage/"
, "/blog/2019_01_15_improving_tezos_storage" ) , "/blog/2019_01_15_improving_tezos_storage" )
; ("/2019/01/29/tezos-and-ocamlpro/", "/blog/2019_01_29_tezos_and_ocamlpro") ; ( "/fr/2019/01/21/performances-de-tezos-ameliorations/"
, "/blog/2019_01_15_improving_tezos_storage")
; ( "/2019/01/29/tezos-and-ocamlpro/", "/blog/2019_01_29_tezos_and_ocamlpro")
; ( "/2019/01/30/improving-tezos-storage-update-and-beta-testing/" ; ( "/2019/01/30/improving-tezos-storage-update-and-beta-testing/"
, "/blog/2019_01_30_improving_tezos_storage_update_and_beta_testing" ) , "/blog/2019_01_30_improving_tezos_storage_update_and_beta_testing" )
; ( "/fr/2019/01/31/tezos-et-ocamlpro/", "2019_01_31_fr_tezos_et_ocamlpro")
; ( "/2019/02/04/improving-tezos-storage-gitlab-branch-for-testers/" ; ( "/2019/02/04/improving-tezos-storage-gitlab-branch-for-testers/"
, "/blog/2019_02_04_improving_tezos_storage_gitlab_branch_for_testers" ) , "/blog/2019_02_04_improving_tezos_storage_gitlab_branch_for_testers" )
; ( "/fr/2019/02/04/optimisation-du-stockage-dans-tezos-une-branche-de-test-sur-gitlab/"
, "/blog/2019_02_04_fr_optimisation_du_stockage_dans_tezos_une_branche_de_test_sur_gitlab")
; ( "/2019/02/11/whats-new-for-alt-ergo-in-2018-here-is-a-recap/" ; ( "/2019/02/11/whats-new-for-alt-ergo-in-2018-here-is-a-recap/"
, "/blog/2019_02_11_whats_new_for_alt_ergo_in_2018_here_is_a_recap" ) , "/blog/2019_02_11_whats_new_for_alt_ergo_in_2018_here_is_a_recap" )
; ( "/2019/03/05/techelson-a-test-execution-engine-for-michelson/" ; ( "/2019/03/05/techelson-a-test-execution-engine-for-michelson/"
, "/blog/2019_03_05_techelson_a_test_execution_engine_for_michelson" ) , "/blog/2019_03_05_techelson_a_test_execution_engine_for_michelson" )
; ( "/fr/2019/03/05/avenement-de-techelson-moteur-de-tests-pour-michelson-liquidity/"
, "/blog/2019_03_05_fr_release_de_techelson_moteur_de_tests_pour_michelson_et_liquidity")
; ( "/2019/03/05/signing-data-for-smart-contracts/" ; ( "/2019/03/05/signing-data-for-smart-contracts/"
, "/blog/2019_03_05_signing_data_for_smart_contracts" ) , "/blog/2019_03_05_signing_data_for_smart_contracts" )
; ( "/2019/03/08/announcing-liquidity-version-1-0/" ; ( "/2019/03/08/announcing-liquidity-version-1-0/"
, "/blog/2019_03_08_announcing_liquidity_version_1_0" ) , "/blog/2019_03_08_announcing_liquidity_version_1_0" )
; ( "/2019/03/09/release-liquidity-v1-smart-contracts-language/" ; ( "/2019/03/09/release-liquidity-v1-smart-contracts-language/"
, "/blog/2019_03_09_release_liquidity_v1_smart_contracts_language" ) , "/blog/2019_03_09_release_liquidity_v1_smart_contracts_language" )
; ("/2019/04/10/opam-2-0-4-release/", "/blog/2019_04_10_opam_2.0.4_release") ; ( "/2019/04/10/opam-2-0-4-release/", "/blog/2019_04_10_opam_2.0.4_release")