diff --git a/_includes/head.html b/_includes/head.html index 24aabf795e5026a9fb25f9f4f7de7365769782d4..7f53b7d3b194e7f0b51e038479937b569737bb4a 100644 --- a/_includes/head.html +++ b/_includes/head.html @@ -22,6 +22,5 @@ ga('create', 'UA-47856851-3', 'auto'); ga('send', 'pageview'); - </script> </head> diff --git a/_includes/header.html b/_includes/header.html index b1326e7f1ebd6d0e1d0015f47aa485e763590af4..448d7b34e55b66b4a13f4d18a65bec6348e8dfa9 100644 --- a/_includes/header.html +++ b/_includes/header.html @@ -2,15 +2,46 @@ <div class="site-masthead"> <div class="container"> <nav class="nav"> - {% assign menu_items = site.pages | where:"menu",true | sort:"menu_order" %} - {% if menu_items.size > 1 %} - {% for item in menu_items %} - {% if item.title %} - <a class="nav-link {% if item.url == page.url %}active{% endif %}" href="{{ item.url | prepend: site.baseurl - }}">{{ item.title }}</a> - {% endif %} + + {% for menu_index in (1..10) %} + {% assign menu_items = site.pages | where:"menu",true | where: "menu_order",menu_index %} + {% if menu_items.size > 0 %} + {% if menu_items.first.parent_menu %} + {% assign check_url = menu_items.first.parent_menu | downcase | prepend: '/' | append: '/' %} + <li class="dropdown"> + <a class="nav-link {% if page.url contains check_url %}active{% endif %} dropbtn" href="#">{{ menu_items.first.parent_menu }}</a> + <div class="dropdown-content"> + {% for item in menu_items %} + <a class="nav-link {% if item.url == page.url %}active{% endif %}" href="{{ item.url | prepend: site.baseurl }}">{{ item.title }}</a> + {% endfor %} + </div> + </li> + {% else %} + {% for item in menu_items %} + <li><a class="nav-link {% if item.url == page.url %}active{% endif %}" href="{{ item.url | prepend: site.baseurl }}">{{ item.title }}</a></li> + {% endfor %} + {% endif %} + {% endif %} {% endfor %} - {% endif %} + <!--{% assign menu_items = site.pages | where:"menu",true | sort:"menu_order" %}--> + <!--{% if menu_items.size > 1 %}--> + <!--{% for item in menu_items %}--> + <!--{% if item.title %}--> + <!--{% if item.parent_menu %}--> + <!--<li class="dropdown">--> + <!--<a class="nav-link dropbtn" href="#">{{ item.parent_menu }}</a>--> + <!--{% assign sub_menu_items = site.pages | where:"menu",true | sort:"menu_order" %}--> + <!--<div class="dropdown-content">--> + <!--<a class="nav-link" href="#">aaaaaaaa</a>--> + <!--<a class="nav-link" href="#">bbbbbbbb</a>--> + <!--</div>--> + <!--</li>--> + <!--{% else %}--> + <!--<li><a class="nav-link {% if item.url contains page.url %}active{% endif %}" href="{{ item.url | prepend: site.baseurl }}">{{ item.title }}</a></li>--> + <!--{% endif %}--> + <!--{% endif %}--> + <!--{% endfor %}--> + <!--{% endif %}--> </nav> </div> </div> diff --git a/_layouts/home.html b/_layouts/home.html index cb7083c882243fadbfff3e8f2d5a0dd2a2c0e2ba..ff29dae31c4b4345109d09935b087c7a9cc04d5e 100644 --- a/_layouts/home.html +++ b/_layouts/home.html @@ -7,10 +7,7 @@ layout: default </div> {% assign research_pages = site.pages | where_exp: 'page', 'page.url contains "/research/"'%} {% for item in research_pages reversed %} - {% if item.url contains "separationlogic" %} - {% else %} <a class="btn btn-primary btn-lg" href="{{ item.url }}">{{ item.title }}</a> - {% endif %} {% endfor %} </div> diff --git a/assets/blog.scss b/assets/blog.scss index 43303fe71383ae9cb5e78a9b6e099dd90ea65c77..27c4a43ab9c063697edfa8fd77577910284164c0 100644 --- a/assets/blog.scss +++ b/assets/blog.scss @@ -72,6 +72,24 @@ h6, .h6 { */ .site-masthead { + li{ + display:inline-block; + } + + .dropdown-content { + display: none; + position: absolute; + background-color: $primary_colour; + min-width: 160px; + background-color: $primary_colour; + -webkit-box-shadow: inset 0 -.1rem .25rem rgba(0,0,0,.2); + box-shadow: inset 0 -.1rem .25rem rgba(0,0,0,.2); + } + + .dropdown:hover .dropdown-content { + display: block; + } + margin-bottom: 3rem; background-color: $primary_colour; -webkit-box-shadow: inset 0 -.1rem .25rem rgba(0,0,0,.2); diff --git a/research/concurrency.md b/research/concurrency.md index f218902e568cb8c2a4f99b500b1e49e799461adb..9a07d43528679e6a7767456f4e9b2524ce768ecb 100644 --- a/research/concurrency.md +++ b/research/concurrency.md @@ -2,7 +2,9 @@ title: Concurrency project_id: concurrency menu: true +parent_menu: Research menu_order: 3 +sub_menu_order: 1 --- We develop formal reasoning techniques for concurrent programs, with a diff --git a/research/javascript.md b/research/javascript.md index 2d9ab8c93b7e9f40632c5cd7857d364736173e27..7f2887a50e55cd08eae75fd88ec959efcdccb7be 100644 --- a/research/javascript.md +++ b/research/javascript.md @@ -2,7 +2,9 @@ title: JavaScript project_id: web menu: true -menu_order: 4 +parent_menu: Research +menu_order: 3 +sub_menu_order: 2 --- We study the mechanised specification of the JavaScript language diff --git a/research/separationlogic.md b/teaching/separationlogic.md similarity index 94% rename from research/separationlogic.md rename to teaching/separationlogic.md index 5fe90f908037e9894d5af75fd14623660d0fc547..8902fa4001ec71a784a19d7f998cb63c470499fa 100644 --- a/research/separationlogic.md +++ b/teaching/separationlogic.md @@ -2,6 +2,7 @@ title: Separation Logic project_id: sl menu: true +parent_menu: Teaching menu_order: 5 --- @@ -42,14 +43,14 @@ Feedback: Monday 21st of November Exam: 11th week -Recommended Reading: Mike Gordon has some excellent notes on [Hoare logic](http://www.cl.cam.ac.uk/~mjcg/Teaching/2011/Hoare/Notes/Notes.pdf), which briefly touches on separation logic in the last chapter. +Recommended Reading: Mike Gordon has some [excellent notes on Hoare logic](http://www.cl.cam.ac.uk/~mjcg/Teaching/2011/Hoare/Notes/Notes.pdf), which briefly touches on separation logic in the last chapter. Two good books on Hoare logic are: Logic in Computer Science: Modelling and Reasoning about Systems, Michael Huth and Mark Ryan, CUP, 2004; and The Formal Semantics of Programming Languages: an Introduction, Glynn Winskel, MIT Press, 1993. Most of the work on separation logic is in research papers. Excellent introductions to separation logic include: O'Hearn, Reynolds and Yang's paper on [Local Reasoning about Programs that Alter Data Structures](http://www0.cs.ucl.ac.uk/staff/p.ohearn/papers/localreasoning.pdf), CSL 2001, and John Reynolds' undergraduate course notes on separation logic and survey paper [Separation Logic: A Logic for Shared Mutable Data Structures](https://www.cs.cmu.edu/~jcr/seplogic.pdf), LICS 2002, both found on Reynolds' homepage. Andrew Appel has published a book on Program Logics for Certified Compilers, CUP 2014 (a copy is available in the [library](http://www.imperial.ac.uk/admin-services/library/)). -Papers describing tool techniques include: [Symbolic Execution with Separation Logic](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.64.2006&rep=rep1&type=pdf), Berdine, Calcagno, O'Hearn, APLAS'05; [A Local Shape Analysis based on Separation Logic](http://www.eecs.qmul.ac.uk/~ddino/papers/localshape.pdf), Distefano, O'Hearn, Yang, TACAS 2006; and Compositional Shape Analysis by Means of Bi-abduction, Calcagno, Distefano, O'Hearn, Yang, JACM 2011. +Papers describing tool techniques include: [Symbolic Execution with Separation Logic](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.64.2006&rep=rep1&type=pdf), Berdine, Calcagno, O'Hearn, APLAS'05; [A Local Shape Analysis based on Separation Logic](http://www.eecs.qmul.ac.uk/~ddino/papers/localshape.pdf), Distefano, O'Hearn, Yang, TACAS 2006; and [Compositional Shape Analysis by Means of Bi-abduction](http://www0.cs.ucl.ac.uk/staff/p.ohearn/papers/jacm-abduction-webversion.pdf), Calcagno, Distefano, O'Hearn, Yang, JACM 2011. The initial paper on concurrent separation logic is [Resources, Concurrency and Local Reasoning](http://www0.cs.ucl.ac.uk/staff/p.ohearn/papers/concurrency.pdf), O'Hearn, TCS, 2007, and is worth a read. The survey paper [Steps in Modular Specifications of Concurrent Modules](https://www.doc.ic.ac.uk/~pg/papers/mfps15.pdf), da Rocha Pinto, Dinsdale-Young, Gardner, MFPS 2015, describes some modern developments in concurrent separation logics.