├── .gitignore
├── LICENSE
├── Makefile
├── README.md
├── coq_blog.rb
├── index.html.erb
├── posts
├── 2013-05-02 Cybele.md
├── 2014-11-24 Use OPAM for Coq.md
├── 2014-11-25 Make a Coq package.md
├── 2014-12-03 Why and how to write code compatible with many Coq versions.md
├── 2014-12-04 Pluto: a first concurrent web server in Gallina.md
├── 2014-12-18 Checking concurrent programs with symbolic simulations.md
├── 2015-01-16 A blog engine written and proven in Coq.md
├── 2015-02-17 A bench system for the Coq packages.md
├── 2015-02-20 Tutorial: a Hello World in Coq.md
├── 2015-03-04 Write a script in Coq.md
├── 2015-03-05 Formally verify a script in Coq.md
├── 2015-03-14 Concurrency with promises in Coq.md
├── 2015-03-16 Implementation of promises for Coq.md
├── 2015-07-21 Launch of the Coq.io website.md
├── 2015-07-23 Handle errors in Coq.md
├── 2015-07-25 Simple unit testing in Coq.md
├── 2018-07-24 Approximating GADTs in Flow.md
├── 2019-07-25 Continuous testing for Coq projects.md
├── 2019-09-03 Connecting the opam bench to Gitter.md
├── 2019-09-04 Fixing flaky makefiles in opam Coq packages.md
├── 2019-09-13 Multiple error messages in coq-of-ocaml.md
├── 2019-09-28 Importing mutually recursive types from OCaml to Coq.md
├── 2019-11-04 First-class modules in coq-of-ocaml.md
├── 2020-01-15 Formalization of the Tezos protocol's interface in Coq.md
├── 2020-02-17 Latest updates of coq-of-ocaml for the Tezos protocol.md
├── 2020-06-19 GADTs with type erasure in coq-of-ocaml.md
├── 2020-10-20 Improvements of coq-of-ocaml for functors and signatures.md
├── 2021-02-08 Removing existential types from modules in coq-of-ocaml.md
└── 2021-02-22 Beginning of verification for the parsing of smart-contracts.md
├── rss.xml.erb
├── static
├── artifacts
│ └── tezos-interface-in-coq
│ │ ├── coqdoc.css
│ │ └── v1_mli.html
├── favicon.png
└── images
│ ├── coq-of-ocaml-multiple-errors
│ └── report.png
│ ├── cybele_comparison.svg
│ ├── cybele_compilation.svg
│ ├── opam-bench-gitter
│ └── report.png
│ ├── pluto_runtime.svg
│ └── travis-ci
│ ├── build-report.png
│ ├── error-logs.png
│ └── pull-request.png
├── templates
├── footer.html.erb
├── header.html.erb
└── post.html.erb
└── wip.html.erb
/.gitignore:
--------------------------------------------------------------------------------
1 | static/style.min.css
2 | blog/
3 |
4 | *.gem
5 | *.rbc
6 | /.config
7 | /coverage/
8 | /InstalledFiles
9 | /pkg/
10 | /spec/reports/
11 | /test/tmp/
12 | /test/version_tmp/
13 | /tmp/
14 |
15 | ## Specific to RubyMotion:
16 | .dat*
17 | .repl_history
18 | build/
19 |
20 | ## Documentation cache and generated files:
21 | /.yardoc/
22 | /_yardoc/
23 | /doc/
24 | /rdoc/
25 |
26 | ## Environment normalisation:
27 | /.bundle/
28 | /lib/bundler/man/
29 |
30 | # for a library or gem, you might want to ignore these files since the code is
31 | # intended to run in multiple environments; otherwise, check them in:
32 | # Gemfile.lock
33 | # .ruby-version
34 | # .ruby-gemset
35 |
36 | # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
37 | .rvmrc
38 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 Guillaume Claret
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | all: clean
2 | mkdir blog
3 | ln -rs static blog/static
4 | ruby coq_blog.rb
5 |
6 | watch:
7 | while inotifywait posts/*; do make; done
8 |
9 | clean:
10 | rm -Rf blog/
11 |
12 | serve:
13 | @echo Starting on http://localhost:8000/
14 | ruby -run -e httpd blog/ -p 8000
15 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Coq Blog
2 | A blog about Coq. Hosted on [coq-blog.clarus.me](http://coq-blog.clarus.me/).
3 |
4 | ## Use or fork to make your own blog
5 | Install the Markdown parser (you first need Ruby):
6 |
7 | gem install redcarpet
8 |
9 | Add my coq-ish theme:
10 |
11 | curl -L https://github.com/clarus/coq-red-css/releases/download/coq-blog.1.0.2/style.min.css >static/style.min.css
12 |
13 | If you want other themes, add a [Bootstrap](http://getbootstrap.com/) based CSS in `static/style.min.css`. A nice list is available on [Bootswatch](http://bootswatch.com/).
14 |
15 | Compile:
16 |
17 | make
18 |
19 | Compile each time a post is updated:
20 |
21 | make watch
22 |
23 | Preview the results on [localhost:8000](http://localhost:8000/):
24 |
25 | make serve
26 |
27 | ## WIP posts
28 | WIP posts are posts with no links from the index so that you can share them for review first. In order to mark a post as Work In Progress, add `wip` in its title. It will not appear in the list of posts, but still be generated. To get the list of WIP posts, go to `http://my-url/wip.html`.
29 |
30 | ## License
31 | Published under MIT License. This holds both for the posts and the blog engine.
32 |
--------------------------------------------------------------------------------
/coq_blog.rb:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | require 'erb'
3 | require 'redcarpet'
4 | include ERB::Util
5 |
6 | class Blog
7 | attr_reader :title, :url, :disqus, :posts
8 |
9 | def initialize(title, url, disqus)
10 | @title, @url, @disqus = title, url, disqus
11 | @posts = Dir.glob("posts/*.md").map {|file_name| Post.new(file_name)}
12 | .sort_by {|post| post.date}.reverse
13 | end
14 |
15 | def public_posts
16 | @posts.select {|post| not post.wip?}
17 | end
18 |
19 | def wip_posts
20 | @posts.select {|post| post.wip?}
21 | end
22 | end
23 |
24 | class MarkdownRender < Redcarpet::Render::HTML
25 | include Redcarpet::Render::SmartyPants
26 |
27 | def image(link, title, alt_text)
28 | "
I am Guillaume Claret, a former PhD student in computer science for the πr² team in Paris. Here I post some articles about things I am doing in Coq.
11 |