bsc-projects-18.html
changeset 559 d0438f49c683
parent 558 444b9eea50b5
child 560 677b703c48fe
equal deleted inserted replaced
558:444b9eea50b5 559:d0438f49c683
     1 <?XML version="1.0" encoding="utf-8"?>
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <!DOCTYPE html>
     2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     3 <hEAd>
     3 <HEAD>
     4 <TitLe>2018/19 BSc Projects</TitlE>
     4 <TITLE>2018/19 BSc Projects</TITLE>
     5 <BASE HrEf=https://nms.kcl.ac.uk/christian.urban/>
     5 <BASE HREF="https://nms.kcl.ac.uk/christian.urban/">
     6 <sCriPT></sCriPt>
     6 <script type="text/javascript" src="striper.js"></script>
     7 <lINK rel=stylesheet HrEf=nominal.css>
     7 <link rel="stylesheet" href="nominal.css">
     8 <ScrIpT>
     8 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML">
     9 </SCRIpT>
     9 </script>
    10 </hEAd>
    10 </HEAD>
    11 <boDy TEXT="#000000" 
    11 <BODY TEXT="#000000" 
    12       BGCOLOR="#4169E1" 
    12       BGCOLOR="#4169E1" 
    13       LINK="#0000EF" 
    13       LINK="#0000EF" 
    14       VLINK="#51188E" 
    14       VLINK="#51188E" 
    15       ALINK="#FF0000"
    15       ALINK="#FF0000"
    16       ONLOAD="striper('ul','striped','li','first,second')">
    16       ONLOAD="striper('ul','striped','li','first,second')">
    17 
    17 
    18 
    18 
    19 
    19 
    20 <TabLE WIDTH="100%" 
    20 <TABLE WIDTH="100%" 
    21        BGCOLOR="#4169E1" 
    21        BGCOLOR="#4169E1" 
    22        BORDER="0"   
    22        BORDER="0"   
    23        FRAME="border"  
    23        FRAME="border"  
    24        CELLPADDING="10"     
    24        CELLPADDING="10"     
    25        CELLSPACING="2"
    25        CELLSPACING="2"
    26        RULES="all">
    26        RULES="all">
    27 
    27 
    28 <Tr>
    28 <TR>
    29 <TD BGCOLOR="#FFFFFF" 
    29 <TD BGCOLOR="#FFFFFF" 
    30     WIDTH="75%" 
    30     WIDTH="75%" 
    31     VALIGN="TOP">
    31     VALIGN="TOP">
    32 
    32 
    33 <h2>2018/19 BSc Projects</h2>
    33 <H2>2018/19 BSc Projects</H2>
    34 <H4>Supervisor: Christian Urban</H4> 
    34 <H4>Supervisor: Christian Urban</H4> 
    35 <H4>Email: christian dot urban at kcl dot ac dot uk,  Office: Bush House N7.07</h4>
    35 <H4>Email: christian dot urban at kcl dot ac dot uk,  Office: Bush House N7.07</H4>
    36 <h4>If you are interested in a project, please send me an email and we can discuss details. Please include
    36 <H4>If you are interested in a project, please send me an email and we can discuss details. Please include
    37 a short description about your programming skills and Computer Science background in your first email. 
    37 a short description about your programming skills and Computer Science background in your first email. 
    38 Thanks.</h4> 
    38 Thanks.</H4> 
    39 
    39 
    40 <h4>Note that besides being a lecturer at the theoretical end of Computer Science, I am also a passionate
    40 <H4>Note that besides being a lecturer at the theoretical end of Computer Science, I am also a passionate
    41     <A Href="http://en.wikipedia.org/wiki/Hacker_(programmer_subculture)">hacker</a> &hellip;
    41     <A HREF="http://en.wikipedia.org/wiki/Hacker_(programmer_subculture)">hacker</A> &hellip;
    42     defined as &ldquo;a person who enjoys exploring the details of programmable systems and 
    42     defined as &ldquo;a person who enjoys exploring the details of programmable systems and 
    43     stretching their capabilities, as opposed to most users, who prefer to learn only the minimum 
    43     stretching their capabilities, as opposed to most users, who prefer to learn only the minimum 
    44     necessary.&rdquo; I am always happy to supervise like-minded students.
    44     necessary.&rdquo; I am always happy to supervise like-minded students.
    45 </h4>
    45 </H4>
    46 
    46 
    47 <H4>In 2013/14, I was nominated by the students
    47 <H4>In 2013/14, I was nominated by the students
    48     for the best BSc project supervisor and best MSc project supervisor awards in the NMS
    48     for the best BSc project supervisor and best MSc project supervisor awards in the NMS
    49     faculty. Somehow I won both. In 2014/15 I was nominated again for the best MSc
    49     faculty. Somehow I won both. In 2014/15 I was nominated again for the best MSc
    50     project supervisor, but did not win it. ;o)
    50     project supervisor, but did not win it. ;o)
    51 </H4>  
    51 </H4>  
    52 
    52 
    53 <Ul ClAsS="striped">
    53 <ul class="striped">
    54 <Li> <h4>[CU1] Regular Expressions, Lexing and Derivatives</h4>
    54 <li> <H4>[CU1] Regular Expressions, Lexing and Derivatives</H4>
    55 
    55 
    56   <P>
    56   <p>
    57   <B>Description:</b>  
    57   <B>Description:</b>  
    58   <A HrEF=http://en.wikipedia.org/wiki/Regular_expression>Regular expressions</A> 
    58   <A HREF="http://en.wikipedia.org/wiki/Regular_expression">Regular expressions</A> 
    59   are extremely useful for many text-processing tasks, such as finding patterns in hostile 
    59   are extremely useful for many text-processing tasks, such as finding patterns in hostile 
    60   <A hrEF="https://www.snort.org">network traffic</A>,
    60   <A HREF="https://www.snort.org">network traffic</A>,
    61   lexing programs, syntax highlighting and so on. Given that regular expressions were
    61   lexing programs, syntax highlighting and so on. Given that regular expressions were
    62   introduced in 1950 by <a HREF=http://en.wikipedia.org/wiki/Stephen_Cole_Kleene>Stephen Kleene</A>,
    62   introduced in 1950 by <A HREF="http://en.wikipedia.org/wiki/Stephen_Cole_Kleene">Stephen Kleene</A>,
    63   you might think regular expressions have since been studied and implemented to death. But you would definitely be
    63   you might think regular expressions have since been studied and implemented to death. But you would definitely be
    64   mistaken: in fact they are still an active research area. On the top of my head, I can give
    64   mistaken: in fact they are still an active research area. On the top of my head, I can give
    65   you at least ten research papers that appeared in the last few years.
    65   you at least ten research papers that appeared in the last few years.
    66   For example
    66   For example
    67   <a HRef=http://www.home.hs-karlsruhe.de/~suma0002/publications/regex-parsing-derivatives.pdf>this paper</a> 
    67   <A HREF="http://www.home.hs-karlsruhe.de/~suma0002/publications/regex-parsing-derivatives.pdf">this paper</A> 
    68   about regular expression matching and derivatives was presented in 2014 at the international 
    68   about regular expression matching and derivatives was presented in 2014 at the international 
    69   FLOPS conference. Another <A hREf=https://nms.kcl.ac.uk/christian.urban/Publications/posix.pdf>paper</a> by my PhD student and me was presented in 2016
    69   FLOPS conference. Another <A HREF="https://nms.kcl.ac.uk/christian.urban/Publications/posix.pdf">paper</A> by my PhD student and me was presented in 2016
    70   at the international ITP conference.
    70   at the international ITP conference.
    71   The task in this project is to implement these results and use them for lexing.
    71   The task in this project is to implement these results and use them for lexing.</p>
    72 
    72 
    73   <P>The background for this project is that some regular expressions are 
    73   <p>The background for this project is that some regular expressions are 
    74   &ldquo;<A hreF=http://en.wikipedia.org/wiki/ReDoS#Examples>evil</A>&rdquo;
    74   &ldquo;<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>&rdquo;
    75   and can &ldquo;stab you in the back&rdquo; according to
    75   and can &ldquo;stab you in the back&rdquo; according to
    76   this <a hREf=http://peterscott.github.io/2013/01/17/regular-expressions-will-stab-you-in-the-back/>blog post</a>.
    76   this <A HREF="http://peterscott.github.io/2013/01/17/regular-expressions-will-stab-you-in-the-back/">blog post</A>.
    77   For example, if you use in <a HREf=http://www.python.org>Python</A> or 
    77   For example, if you use in <A HREF="http://www.python.org">Python</A> or 
    78   in <A hREF="http://www.ruby-lang.org/en/">Ruby</a> (or also in a number of other mainstream programming languages) the 
    78   in <A HREF="http://www.ruby-lang.org/en/">Ruby</A> (or also in a number of other mainstream programming languages) the 
    79   innocently looking regular expression <cOdE>a?{28}a{28}</CODe> and match it, say, against the string 
    79   innocently looking regular expression <code>a?{28}a{28}</code> and match it, say, against the string 
    80   <CodE>aaaaaaaaaaaaaaaaaaaaaaaaaaaa</CoDe> (that is 28 <cODe>a</CODE>s), you will soon notice that your CPU usage goes to 100%. In fact,
    80   <code>aaaaaaaaaaaaaaaaaaaaaaaaaaaa</code> (that is 28 <code>a</code>s), you will soon notice that your CPU usage goes to 100%. In fact,
    81   Python and Ruby need approximately 30 seconds of hard work for matching this string. You can try it for yourself:
    81   Python and Ruby need approximately 30 seconds of hard work for matching this string. You can try it for yourself:
    82   <A HRef=http://talisker.inf.kcl.ac.uk/cgi-bin/repos.cgi/afl-material/raw-file/tip/progs/catastrophic.py>catastrophic.py</a> (Python version) and 
    82   <A HREF="http://talisker.inf.kcl.ac.uk/cgi-bin/repos.cgi/afl-material/raw-file/tip/progs/catastrophic.py">catastrophic.py</A> (Python version) and 
    83   <A HreF="http://talisker.inf.kcl.ac.uk/cgi-bin/repos.cgi/afl-material/raw-file/tip/progs/catastrophic.rb">catastrophic.rb</a> 
    83   <A HREF="http://talisker.inf.kcl.ac.uk/cgi-bin/repos.cgi/afl-material/raw-file/tip/progs/catastrophic.rb">catastrophic.rb</A> 
    84   (Ruby version). Here is a similar problem with the regular expression <coDe>(a*)*b</coDe> in Java: 
    84   (Ruby version). Here is a similar problem with the regular expression <code>(a*)*b</code> in Java: 
    85   <a hReF=http://talisker.inf.kcl.ac.uk/cgi-bin/repos.cgi/afl-material/raw-file/tip/progs/catastrophic.java>catastrophic.java</A> 
    85   <A HREF="http://talisker.inf.kcl.ac.uk/cgi-bin/repos.cgi/afl-material/raw-file/tip/progs/catastrophic.java">catastrophic.java</A> 
    86    
    86   </p> 
    87 
    87 
    88   <p>
    88   <p>
    89   You can imagine an attacker
    89   You can imagine an attacker
    90   mounting a nice <A HREf="http://en.wikipedia.org/wiki/Denial-of-service_attack">DoS attack</a> against 
    90   mounting a nice <A HREF="http://en.wikipedia.org/wiki/Denial-of-service_attack">DoS attack</A> against 
    91   your program if it contains such an &ldquo;evil&rdquo; regular expression. But it can also happen by accident:
    91   your program if it contains such an &ldquo;evil&rdquo; regular expression. But it can also happen by accident:
    92   on 20 July 2016 the website <a HreF="http://stackstatus.net/post/147710624694/outage-postmortem-july-20-2016">Stack Exchange</A>
    92   on 20 July 2016 the website <A HREF="http://stackstatus.net/post/147710624694/outage-postmortem-july-20-2016">Stack Exchange</A>
    93   was knocked offline because of an evil regular expression. One of their engineers talks about this in this
    93   was knocked offline because of an evil regular expression. One of their engineers talks about this in this
    94   <a HRef=https://vimeo.com/112065252>video</A>. A similar problem needed to be fixed in the
    94   <A HREF="https://vimeo.com/112065252">video</A>. A similar problem needed to be fixed in the
    95   <A hrEF=http://davidvgalbraith.com/how-i-fixed-atom/>Atom</a> editor.
    95   <A HREF="http://davidvgalbraith.com/how-i-fixed-atom/">Atom</A> editor.
    96   A few implementations of regular expression matchers are almost immune from such problems.
    96   A few implementations of regular expression matchers are almost immune from such problems.
    97   For example, <a HRef="http://www.scala-lang.org/">Scala</a> can deal with strings of up to 4,300 <CoDe>a</Code>s in less than a second. But if you scale
    97   For example, <A HREF="http://www.scala-lang.org/">Scala</A> can deal with strings of up to 4,300 <code>a</code>s in less than a second. But if you scale
    98   the regular expression and string further to, say, 4,600 <CODE>a</CODe>s, then you get a <cOde>StackOverflowError</CoDe> 
    98   the regular expression and string further to, say, 4,600 <code>a</code>s, then you get a <code>StackOverflowError</code> 
    99   potentially crashing your program. Moreover (beside the "minor" problem of being painfully slow) according to this
    99   potentially crashing your program. Moreover (beside the "minor" problem of being painfully slow) according to this
   100   <A hReF="http://www.haskell.org/haskellwiki/Regex_Posix">report</A>
   100   <A HREF="http://www.haskell.org/haskellwiki/Regex_Posix">report</A>
   101   nearly all regular expression matchers using the POSIX rules are actually buggy.
   101   nearly all regular expression matchers using the POSIX rules are actually buggy.
   102   </p>
   102   </p>
   103 
   103 
   104   <P>
   104   <p>
   105   On a rainy afternoon, I implemented 
   105   On a rainy afternoon, I implemented 
   106   <a hReF=http://talisker.inf.kcl.ac.uk/cgi-bin/repos.cgi/afl-material/raw-file/tip/progs/re3.scala>this</A> 
   106   <A HREF="http://talisker.inf.kcl.ac.uk/cgi-bin/repos.cgi/afl-material/raw-file/tip/progs/re3.scala">this</A> 
   107   regular expression matcher in Scala. It is not as fast as the official one in Scala, but
   107   regular expression matcher in Scala. It is not as fast as the official one in Scala, but
   108   it can match up to 11,000 <COdE>a</COdE>s in less than 5 seconds  without raising any exception
   108   it can match up to 11,000 <code>a</code>s in less than 5 seconds  without raising any exception
   109   (remember Python and Ruby both need nearly 30 seconds to process 28(!) <code>a</cOdE>s, and Scala's
   109   (remember Python and Ruby both need nearly 30 seconds to process 28(!) <code>a</code>s, and Scala's
   110   official matcher maxes out at 4,600 <COdE>a</Code>s). My matcher is approximately
   110   official matcher maxes out at 4,600 <code>a</code>s). My matcher is approximately
   111   85 lines of code and based on the concept of 
   111   85 lines of code and based on the concept of 
   112   <A hReF=http://lambda-the-ultimate.org/node/2293>derivatives of regular expressions</A>.
   112   <A HREF="http://lambda-the-ultimate.org/node/2293">derivatives of regular expressions</A>.
   113   These derivatives were introduced in 1964 by <A Href="http://en.wikipedia.org/wiki/Janusz_Brzozowski_(computer_scientist)">
   113   These derivatives were introduced in 1964 by <A HREF="http://en.wikipedia.org/wiki/Janusz_Brzozowski_(computer_scientist)">
   114   Janusz Brzozowski</a>, but according to this
   114   Janusz Brzozowski</A>, but according to this
   115   <a HRef=https://www.cs.kent.ac.uk/people/staff/sao/documents/jfp09.pdf>paper</a> had been lost in the &ldquo;sands of time&rdquo;.
   115   <A HREF="https://www.cs.kent.ac.uk/people/staff/sao/documents/jfp09.pdf">paper</A> had been lost in the &ldquo;sands of time&rdquo;.
   116   The advantage of derivatives is that they side-step completely the usual 
   116   The advantage of derivatives is that they side-step completely the usual 
   117   <a Href=http://hackingoff.com/compilers/regular-expression-to-nfa-dfa>translations</a> of regular expressions
   117   <A HREF="http://hackingoff.com/compilers/regular-expression-to-nfa-dfa">translations</A> of regular expressions
   118   into NFAs or DFAs, which can introduce the exponential behaviour exhibited by the regular
   118   into NFAs or DFAs, which can introduce the exponential behaviour exhibited by the regular
   119   expression matchers in Python, Java and Ruby.
   119   expression matchers in Python, Java and Ruby.
   120   </p>
   120   </p>
   121 
   121 
   122   <P>
   122   <p>
   123   Now the authors from the 
   123   Now the authors from the 
   124   <a hREf=http://www.home.hs-karlsruhe.de/~suma0002/publications/regex-parsing-derivatives.pdf>FLOPS'14-paper</a> mentioned 
   124   <A HREF="http://www.home.hs-karlsruhe.de/~suma0002/publications/regex-parsing-derivatives.pdf">FLOPS'14-paper</A> mentioned 
   125   above claim they are even faster than me and can deal with even more features of regular expressions
   125   above claim they are even faster than me and can deal with even more features of regular expressions
   126   (for example subexpression matching, which my rainy-afternoon matcher cannot). I am sure they thought
   126   (for example subexpression matching, which my rainy-afternoon matcher cannot). I am sure they thought
   127   about the problem much longer than a single afternoon. The task 
   127   about the problem much longer than a single afternoon. The task 
   128   in this project is to find out how good they actually are by implementing the results from their paper. 
   128   in this project is to find out how good they actually are by implementing the results from their paper. 
   129   Their approach to regular expression matching is also based on the concept of derivatives.
   129   Their approach to regular expression matching is also based on the concept of derivatives.
   130   I used derivatives very successfully once for something completely different in a
   130   I used derivatives very successfully once for something completely different in a
   131   <a HREf=https://nms.kcl.ac.uk/christian.urban/Publications/rexp.pdf>paper</A> 
   131   <A HREF="https://nms.kcl.ac.uk/christian.urban/Publications/rexp.pdf">paper</A> 
   132   about the <A HReF=http://en.wikipedia.org/wiki/Myhill–Nerode_theorem>Myhill-Nerode theorem</a>.
   132   about the <A HREF="http://en.wikipedia.org/wiki/Myhill–Nerode_theorem">Myhill-Nerode theorem</A>.
   133   So I know they are worth their money. Still, it would be interesting to actually compare their results
   133   So I know they are worth their money. Still, it would be interesting to actually compare their results
   134   with my simple rainy-afternoon matcher and potentially &ldquo;blow away&rdquo; the regular expression matchers 
   134   with my simple rainy-afternoon matcher and potentially &ldquo;blow away&rdquo; the regular expression matchers 
   135   in Python, Ruby and Java (and possibly in Scala too). The application would be to implement a fast lexer for
   135   in Python, Ruby and Java (and possibly in Scala too). The application would be to implement a fast lexer for
   136   programming languages, or improve the network traffic analysers in the tools <a HRef=https://www.snort.org>Snort</a> and
   136   programming languages, or improve the network traffic analysers in the tools <A HREF="https://www.snort.org">Snort</A> and
   137   <a hREF="https://www.bro.org">Bro</a>.
   137   <A HREF="https://www.bro.org">Bro</A>.
   138   
   138   </p>
   139 
   139 
   140   <P>
   140   <p>
   141   <B>Literature:</B> 
   141   <B>Literature:</B> 
   142   The place to start with this project is obviously this
   142   The place to start with this project is obviously this
   143   <a href=http://www.home.hs-karlsruhe.de/~suma0002/publications/regex-parsing-derivatives.pdf>paper</a>
   143   <A HREF="http://www.home.hs-karlsruhe.de/~suma0002/publications/regex-parsing-derivatives.pdf">paper</A>
   144   and this <a HRef="https://nms.kcl.ac.uk/christian.urban/Publications/posix.pdf">one</a>.
   144   and this <A HREF="https://nms.kcl.ac.uk/christian.urban/Publications/posix.pdf">one</A>.
   145   Traditional methods for regular expression matching are explained
   145   Traditional methods for regular expression matching are explained
   146   in the Wikipedia articles 
   146   in the Wikipedia articles 
   147   <A HREF=http://en.wikipedia.org/wiki/DFA_minimization>here</a> and 
   147   <A HREF="http://en.wikipedia.org/wiki/DFA_minimization">here</A> and 
   148   <a HrEF="http://en.wikipedia.org/wiki/Powerset_construction">here</a>.
   148   <A HREF="http://en.wikipedia.org/wiki/Powerset_construction">here</A>.
   149   The authoritative <a HrEf="http://infolab.stanford.edu/~ullman/ialc.html">book</a>
   149   The authoritative <A HREF="http://infolab.stanford.edu/~ullman/ialc.html">book</A>
   150   on automata and regular expressions is by John Hopcroft and Jeffrey Ullmann (available in the library). 
   150   on automata and regular expressions is by John Hopcroft and Jeffrey Ullmann (available in the library). 
   151   There is also an online course about this topic by Ullman at 
   151   There is also an online course about this topic by Ullman at 
   152   <A HreF=https://www.coursera.org/course/automata>Coursera</A>, though IMHO not 
   152   <A HREF="https://www.coursera.org/course/automata">Coursera</A>, though IMHO not 
   153   done with love. 
   153   done with love. 
   154   There are millions of other pointers about regular expression
   154   There are millions of other pointers about regular expression
   155   matching on the Web. I found the chapter on Lexing in this
   155   matching on the Web. I found the chapter on Lexing in this
   156   <a hreF="http://www.diku.dk/~torbenm/Basics/">online book</A> very helpful. Finally, it will
   156   <A HREF="http://www.diku.dk/~torbenm/Basics/">online book</A> very helpful. Finally, it will
   157   be of great help for this project to take part in my Compiler and Formal Language module (6CCS3CFL).
   157   be of great help for this project to take part in my Compiler and Formal Language module (6CCS3CFL).
   158   Test cases for &ldquo;<a hReF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</a>&rdquo;
   158   Test cases for &ldquo;<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>&rdquo;
   159   regular expressions can be obtained from <a HRef=http://www.haskell.org/haskellwiki/Regex_Posix>here</A>.
   159   regular expressions can be obtained from <A HREF="http://www.haskell.org/haskellwiki/Regex_Posix">here</A>.
   160   
   160   </p>
   161 
   161 
   162   <P>
   162   <p>
   163   <B>Skills:</B> 
   163   <B>Skills:</B> 
   164   This is a project for a student with an interest in theory and with
   164   This is a project for a student with an interest in theory and with
   165   good programming skills. The project can be easily implemented
   165   good programming skills. The project can be easily implemented
   166   in functional languages like
   166   in functional languages like
   167   <a hrEf=http://www.scala-lang.org/>Scala</a>,
   167   <A HREF="http://www.scala-lang.org/">Scala</A>,
   168   <A hRef=http://fsharp.org>F#</A>, 
   168   <A HREF="http://fsharp.org">F#</A>, 
   169   <A hREF=http://en.wikipedia.org/wiki/Standard_ML>ML</a>,  
   169   <A HREF="http://en.wikipedia.org/wiki/Standard_ML">ML</A>,  
   170   <A hREF="http://haskell.org/haskellwiki/Haskell">Haskell</a>, etc. Python and other non-functional languages
   170   <A HREF="http://haskell.org/haskellwiki/Haskell">Haskell</A>, etc. Python and other non-functional languages
   171   can be also used, but seem much less convenient. If you do attend my Compilers and Formal Languages
   171   can be also used, but seem much less convenient. If you do attend my Compilers and Formal Languages
   172   module, that would obviously give you a head-start with this project.
   172   module, that would obviously give you a head-start with this project.
   173   
   173   </p>
   174 
   174 
   175 <Li> <H4>[CU5] Grammars and Derivative-Based Parsing Algorithms</h4>
   175 <li> <H4>[CU5] Grammars and Derivative-Based Parsing Algorithms</H4>
   176 
   176 
   177 <p>
   177 <p>
   178 Parsing is an old nut. Generations of software developers need to do parsing of data or text.
   178 Parsing is an old nut. Generations of software developers need to do parsing of data or text.
   179 There are zillions of links, tools, papers and textbooks about parsing. One particular
   179 There are zillions of links, tools, papers and textbooks about parsing. One particular
   180 <a hRef=https://dickgrune.com/Books/PTAPG_1st_Edition/BookBody.pdf>book</A> contains something
   180 <A HREF="https://dickgrune.com/Books/PTAPG_1st_Edition/BookBody.pdf">book</A> contains something
   181 like 700 different algorithm, nicely analysed and described. Surely, parsing must be a solved problem. Or is it? 
   181 like 700 different algorithm, nicely analysed and described. Surely, parsing must be a solved problem. Or is it? 
   182 Laurie Tratt has a blog <a hrEf=https://tratt.net/laurie/blog/entries/parsing_the_solved_problem_that_isnt.html>post</A>
   182 Laurie Tratt has a blog <A HREF="https://tratt.net/laurie/blog/entries/parsing_the_solved_problem_that_isnt.html">post</A>
   183 about <i>Parsing: The Solved Problem That Isn't</i>. IMHO parsing is still a wide open field and not solved at all.
   183 about <i>Parsing: The Solved Problem That Isn't</i>. IMHO parsing is still a wide open field and not solved at all.
   184 PEG parsing, error reporting, error correction, runtime to name just a few are aspects that seem to cause headaches
   184 PEG parsing, error reporting, error correction, runtime to name just a few are aspects that seem to cause headaches
   185 to developers, and to researchers.   
   185 to developers, and to researchers.</p>   
   186 
   186 
   187 <p>
   187 <p>
   188 A recent <A HREf="https://www.cl.cam.ac.uk/~jdy22/papers/a-typed-algebraic-approach-to-parsing.pdf">paper</A> 
   188 A recent <A HREF="https://www.cl.cam.ac.uk/~jdy22/papers/a-typed-algebraic-approach-to-parsing.pdf">paper</A> 
   189 (not even published yet) follows an idea for regular expressions: it adapts the notion of 
   189 (not even published yet) follows an idea for regular expressions: it adapts the notion of 
   190 derivatives of regular expressions to grammars. The idea is to implement in a functional programming language
   190 derivatives of regular expressions to grammars. The idea is to implement in a functional programming language
   191 the parsing algorithm proposed in this paper and to try it out with some sample data.
   191 the parsing algorithm proposed in this paper and to try it out with some sample data.
   192 
       
   193 
       
   194 <p>
       
   195 <b>Literature:</b> <a href=https://www.cl.cam.ac.uk/~jdy22/papers/a-typed-algebraic-approach-to-parsing.pdf>paper</a>  
       
   196 </p>
   192 </p>
   197 
   193 
   198 <P>
   194 <p>
   199 <B>Skills:</b> See [CU1].
   195 <B>Literature:</B> <A HREF="https://www.cl.cam.ac.uk/~jdy22/papers/a-typed-algebraic-approach-to-parsing.pdf">paper</A>  
   200 
   196 </p>
   201 
   197 
   202 <LI> <h4>[CU6] Webassembly Interpreter / Compiler</H4>
   198 <p>
   203 
   199 <B>Skills:</B> See [CU1].
   204 <P>
   200 </p>
       
   201 
       
   202 <li> <H4>[CU6] Webassembly Interpreter / Compiler</H4>
       
   203 
       
   204 <p>
   205 Webassembly is a recently agreed standard for speeding up web applications in browsers. In this 
   205 Webassembly is a recently agreed standard for speeding up web applications in browsers. In this 
   206 project the aim is to implement an interpreter or compiler for webassembly. There are already
   206 project the aim is to implement an interpreter or compiler for webassembly. There are already
   207 <a hrEf="https://github.com/WebAssembly/spec/tree/master/interpreter">reference interpreters</a>,
   207 <A HREF="https://github.com/WebAssembly/spec/tree/master/interpreter">reference interpreters</A>,
   208 but people take different views, for example implement a 
   208 but people take different views, for example implement a 
   209 <a HRef="https://groups.google.com/forum/#!topic/comp.lang.forth/CvNrP_AOmmw">Forth</A> language on top of webassembly. 
   209 <A HREF="https://groups.google.com/forum/#!topic/comp.lang.forth/CvNrP_AOmmw">Forth</A> language on top of webassembly. 
   210 What is good about webassembly is that is a rather simple format, which can be generated quite
   210 What is good about webassembly is that is a rather simple format, which can be generated quite
   211 easily, unlike Java class files, which need some head-standing when you generate them. 
   211 easily, unlike Java class files, which need some head-standing when you generate them. 
   212 
       
   213 
       
   214 <P>
       
   215 A <a hrEF=https://github.com/WebAssembly/spec/tree/master/interpreter>reference interpreter</a> for webassembly.  
       
   216 </p>
   212 </p>
   217 
   213 
   218 <Li> <H4>[CU2] A Compiler for a small Programming Language</H4>
   214 <p>
   219 
   215 A <A HREF="https://github.com/WebAssembly/spec/tree/master/interpreter">reference interpreter</A> for webassembly.  
   220   <p>
   216 </p>
   221   <B>Description:</B> 
   217 
       
   218 <li> <H4>[CU2] A Compiler for a small Programming Language</H4>
       
   219 
       
   220   <p>
       
   221   <b>Description:</b> 
   222   Compilers translate high-level programs that humans can read and write into
   222   Compilers translate high-level programs that humans can read and write into
   223   efficient machine code that can be run on a CPU or virtual machine.
   223   efficient machine code that can be run on a CPU or virtual machine.
   224   A compiler for a simple functional language generating X86 code is described
   224   A compiler for a simple functional language generating X86 code is described
   225   <A HReF="https://libraries.io/github/chameco/Shade">here</a>.
   225   <A HREF="https://libraries.io/github/chameco/Shade">here</A>.
   226   I recently implemented a very simple compiler for an even simpler functional
   226   I recently implemented a very simple compiler for an even simpler functional
   227   programming language following this 
   227   programming language following this 
   228   <A HREF="https://www.cs.princeton.edu/~dpw/papers/tal-toplas.pdf">paper</A> 
   228   <A HREF="https://www.cs.princeton.edu/~dpw/papers/tal-toplas.pdf">paper</A> 
   229   (also described <A Href="https://www.cs.princeton.edu/~dpw/papers/tal-tr.pdf">here</a>).
   229   (also described <A HREF="https://www.cs.princeton.edu/~dpw/papers/tal-tr.pdf">here</A>).
   230   My code, written in <A hrEf=http://www.scala-lang.org/>Scala</A>, of this compiler is 
   230   My code, written in <A HREF="http://www.scala-lang.org/">Scala</A>, of this compiler is 
   231   <A hREf="https://nms.kcl.ac.uk/christian.urban/compiler.scala">here</a>.
   231   <A HREF="https://nms.kcl.ac.uk/christian.urban/compiler.scala">here</A>.
   232   The compiler can deal with simple programs involving natural numbers, such
   232   The compiler can deal with simple programs involving natural numbers, such
   233   as Fibonacci numbers or factorial (but it can be easily extended - that is not the point).
   233   as Fibonacci numbers or factorial (but it can be easily extended - that is not the point).
   234   </p>
   234   </p>
   235 
   235 
   236   <p>
   236   <p>
   244   requires to dig into the literature about real CPUs and generating 
   244   requires to dig into the literature about real CPUs and generating 
   245   real machine code. 
   245   real machine code. 
   246   </p>
   246   </p>
   247   <p>
   247   <p>
   248   An alternative is to not generate machine code, but build a compiler that compiles to
   248   An alternative is to not generate machine code, but build a compiler that compiles to
   249   <a hrEf=http://www.w3schools.com/js/>JavaScript</A>. This is the language that is supported by most
   249   <A HREF="http://www.w3schools.com/js/">JavaScript</A>. This is the language that is supported by most
   250   browsers and therefore is a favourite
   250   browsers and therefore is a favourite
   251   vehicle for Web-programming. Some call it <b>the</b> scripting language of the Web.
   251   vehicle for Web-programming. Some call it <B>the</B> scripting language of the Web.
   252   Unfortunately, JavaScript is also probably one of the worst
   252   Unfortunately, JavaScript is also probably one of the worst
   253   languages to program in (being designed and released in a hurry). <B>But</b> it can be used as a convenient target
   253   languages to program in (being designed and released in a hurry). <B>But</B> it can be used as a convenient target
   254   for translating programs from other languages. In particular there are two
   254   for translating programs from other languages. In particular there are two
   255   very optimised subsets of JavaScript that can be used for this purpose:
   255   very optimised subsets of JavaScript that can be used for this purpose:
   256   one is <A href="http://asmjs.org">asm.js</a> and the other is
   256   one is <A HREF="http://asmjs.org">asm.js</A> and the other is
   257   <a hrEF="https://github.com/kripken/emscripten/wiki">emscripten</A>. Since
   257   <A HREF="https://github.com/kripken/emscripten/wiki">emscripten</A>. Since
   258   last year there is even the official <A hrEf=http://webassembly.org>Webassembly</a>
   258   last year there is even the official <A HREF="http://webassembly.org">Webassembly</A>
   259   There is a <A HREF=http://kripken.github.io/emscripten-site/docs/getting_started/Tutorial.html>tutorial</A> for emscripten
   259   There is a <A HREF="http://kripken.github.io/emscripten-site/docs/getting_started/Tutorial.html">tutorial</A> for emscripten
   260   and an impressive <a HrEf=https://youtu.be/c2uNDlP4RiE>demo</a> which runs the
   260   and an impressive <A HREF="https://youtu.be/c2uNDlP4RiE">demo</A> which runs the
   261   <A hreF=http://en.wikipedia.org/wiki/Unreal_Engine>Unreal Engine 3</A>
   261   <A HREF="http://en.wikipedia.org/wiki/Unreal_Engine">Unreal Engine 3</A>
   262   in a browser with spectacular speed. This was achieved by compiling the
   262   in a browser with spectacular speed. This was achieved by compiling the
   263   C-code of the Unreal Engine to the LLVM intermediate language and then translating the LLVM
   263   C-code of the Unreal Engine to the LLVM intermediate language and then translating the LLVM
   264   code to JavaScript.
   264   code to JavaScript.
   265   
   265   </p>
   266 
   266 
   267   <P>
   267   <p>
   268   <B>Literature:</B>
   268   <B>Literature:</B>
   269   There is a lot of literature about compilers 
   269   There is a lot of literature about compilers 
   270   (for example <A HrEF="http://www.cs.princeton.edu/~appel/papers/cwc.html">this book</a> -
   270   (for example <A HREF="http://www.cs.princeton.edu/~appel/papers/cwc.html">this book</A> -
   271   I can lend you my copy for the duration of the project, or this
   271   I can lend you my copy for the duration of the project, or this
   272   <A Href=http://www.diku.dk/~torbenm/Basics/>online book</a>). A very good overview article
   272   <A HREF="http://www.diku.dk/~torbenm/Basics/">online book</A>). A very good overview article
   273   about implementing compilers by 
   273   about implementing compilers by 
   274   <a HREf=http://tratt.net/laurie/>Laurie Tratt</A> is 
   274   <A HREF="http://tratt.net/laurie/">Laurie Tratt</A> is 
   275   <A hREF="http://tratt.net/laurie/tech_articles/articles/how_difficult_is_it_to_write_a_compiler">here</A>.
   275   <A HREF="http://tratt.net/laurie/tech_articles/articles/how_difficult_is_it_to_write_a_compiler">here</A>.
   276   An online book about the Art of Assembly Language is
   276   An online book about the Art of Assembly Language is
   277   <A hREF="http://flint.cs.yale.edu/cs422/doc/art-of-asm/pdf/">here</A>.
   277   <A HREF="http://flint.cs.yale.edu/cs422/doc/art-of-asm/pdf/">here</A>.
   278   An introduction into x86 machine code is <A hReF="http://ianseyler.github.com/easy_x86-64/">here</a>.
   278   An introduction into x86 machine code is <A HREF="http://ianseyler.github.com/easy_x86-64/">here</A>.
   279   Intel's official manual for the x86 instruction is 
   279   Intel's official manual for the x86 instruction is 
   280   <a hreF="http://download.intel.com/design/intarch/manuals/24319101.pdf">here</A>. 
   280   <A HREF="http://download.intel.com/design/intarch/manuals/24319101.pdf">here</A>. 
   281   Two assemblers for the JVM are described <A hREf=http://jasmin.sourceforge.net>here</a>
   281   Two assemblers for the JVM are described <A HREF="http://jasmin.sourceforge.net">here</A>
   282   and <A hrEF="https://github.com/Storyyeller/Krakatau">here</a>.
   282   and <A HREF="https://github.com/Storyyeller/Krakatau">here</A>.
   283   An interesting twist of this project is to not generate code for a CPU, but
   283   An interesting twist of this project is to not generate code for a CPU, but
   284   for the intermediate language of the <A hRef=http://llvm.org>LLVM</a> compiler
   284   for the intermediate language of the <A HREF="http://llvm.org">LLVM</A> compiler
   285   (also described <A HrEf="http://llvm.org/docs/LangRef.html">here</a>). If you want to see
   285   (also described <A HREF="http://llvm.org/docs/LangRef.html">here</A>). If you want to see
   286   what machine code looks like you can compile your C-program using gcc -S.
   286   what machine code looks like you can compile your C-program using gcc -S.
   287   
   287   </p>
   288   <p>
   288   <p>
   289   If JavaScript is chosen as a target instead, then there are plenty of <A HRef="http://www.w3schools.com/js/">tutorials</a> on the Web.
   289   If JavaScript is chosen as a target instead, then there are plenty of <A HREF="http://www.w3schools.com/js/">tutorials</A> on the Web.
   290   <A hREf=http://jsbooks.revolunet.com>Here</a> is a list of free books on JavaScript.
   290   <A HREF="http://jsbooks.revolunet.com">Here</A> is a list of free books on JavaScript.
   291   A project from which you can draw inspiration is this
   291   A project from which you can draw inspiration is this
   292   <A hREf="http://jlongster.com/Outlet--My-Lisp-to-Javascript-Experiment">Lisp-to-JavaScript</A>
   292   <A HREF="http://jlongster.com/Outlet--My-Lisp-to-Javascript-Experiment">Lisp-to-JavaScript</A>
   293   translator. <A HrEf=https://bitbucket.org/ktg/parenjs/overview>Here</A> is another such project.
   293   translator. <A HREF="https://bitbucket.org/ktg/parenjs/overview">Here</A> is another such project.
   294   And <A Href=https://github.com/viclib/liscript>another</A> in less than 100 lines of code.
   294   And <A HREF="https://github.com/viclib/liscript">another</A> in less than 100 lines of code.
   295   <A hreF="http://en.wikipedia.org/wiki/CoffeeScript">Coffeescript</a> is a similar project
   295   <A HREF="http://en.wikipedia.org/wiki/CoffeeScript">Coffeescript</A> is a similar project
   296   except that it is already quite <a hREF="http://coffeescript.org">mature</a>. And finally not to
   296   except that it is already quite <A HREF="http://coffeescript.org">mature</A>. And finally not to
   297   forget <A hrEf=http://www.typescriptlang.org>TypeScript</A> developed by Microsoft. The main
   297   forget <A HREF="http://www.typescriptlang.org">TypeScript</A> developed by Microsoft. The main
   298   difference between these projects and this one is that they translate into relatively high-level
   298   difference between these projects and this one is that they translate into relatively high-level
   299   JavaScript code; none of them use the much lower levels <A HREf="http://asmjs.org">asm.js</a> and 
   299   JavaScript code; none of them use the much lower levels <A HREF="http://asmjs.org">asm.js</A> and 
   300   <A HREF=https://github.com/kripken/emscripten/wiki>emscripten</A>.
   300   <A HREF="https://github.com/kripken/emscripten/wiki">emscripten</A>.
   301   
   301   </p>
   302   <P>
   302   <p>
   303   <B>Skills:</B> 
   303   <B>Skills:</B> 
   304   This is a project for a student with a deep interest in programming languages and
   304   This is a project for a student with a deep interest in programming languages and
   305   compilers. Since my compiler is implemented in <a HrEf=http://www.scala-lang.org/>Scala</A>,
   305   compilers. Since my compiler is implemented in <A HREF="http://www.scala-lang.org/">Scala</A>,
   306   it would make sense to continue this project in this language. I can be
   306   it would make sense to continue this project in this language. I can be
   307   of help with questions and books about <A HREf="http://www.scala-lang.org/">Scala</A>.
   307   of help with questions and books about <A HREF="http://www.scala-lang.org/">Scala</A>.
   308   But if Scala is a problem, my code can also be translated quickly into any other functional
   308   But if Scala is a problem, my code can also be translated quickly into any other functional
   309   language. Again,  it will be of great help for this project to take part in
   309   language. Again,  it will be of great help for this project to take part in
   310   my Compiler and Formal Language module (6CCS3CFL).
   310   my Compiler and Formal Language module (6CCS3CFL).
   311   </p>
   311   </p>
   312 
   312 
   313   <P>
   313   <p>
   314   <b>PS:</B> Compiler projects consistently received high marks in the past.
   314   <B>PS:</B> Compiler projects consistently received high marks in the past.
   315   I have supervised eight so far and most of them received a mark above 70% - one even was awarded a prize.
   315   I have supervised eight so far and most of them received a mark above 70% - one even was awarded a prize.
   316   </p>
   316   </p>
   317 
   317 
   318 <LI> <H4>[CU3] Slide-Making in the Web-Age</h4>
   318 <li> <H4>[CU3] Slide-Making in the Web-Age</H4>
   319 
   319 
   320   <P>
   320   <p>
   321   The standard technology for writing scientific papers in Computer Science  is to use
   321   The standard technology for writing scientific papers in Computer Science  is to use
   322   <A hREF=http://en.wikipedia.org/wiki/LaTeX>LaTeX</A>, a document preparation
   322   <A HREF="http://en.wikipedia.org/wiki/LaTeX">LaTeX</A>, a document preparation
   323   system originally implemented by <A hrEF="http://en.wikipedia.org/wiki/Donald_Knuth">Donald Knuth</A>
   323   system originally implemented by <A HREF="http://en.wikipedia.org/wiki/Donald_Knuth">Donald Knuth</A>
   324   and <A HREF="http://en.wikipedia.org/wiki/Leslie_Lamport">Leslie Lamport</a>.
   324   and <A HREF="http://en.wikipedia.org/wiki/Leslie_Lamport">Leslie Lamport</A>.
   325   LaTeX produces very pleasantly looking documents, can deal nicely with mathematical
   325   LaTeX produces very pleasantly looking documents, can deal nicely with mathematical
   326   formulas and is very flexible. If you are interested, <A hReF="http://openwetware.org/wiki/Word_vs._LaTeX">here</A>
   326   formulas and is very flexible. If you are interested, <A HREF="http://openwetware.org/wiki/Word_vs._LaTeX">here</A>
   327   is a side-by-side comparison between Word and LaTeX (which LaTeX &ldquo;wins&rdquo; with 18 out of 21 points).
   327   is a side-by-side comparison between Word and LaTeX (which LaTeX &ldquo;wins&rdquo; with 18 out of 21 points).
   328   Computer scientists not only use LaTeX for documents,
   328   Computer scientists not only use LaTeX for documents,
   329   but also for slides (really, nobody who wants to be cool uses Keynote or Powerpoint).
   329   but also for slides (really, nobody who wants to be cool uses Keynote or Powerpoint).
   330   </P>
   330   </p>
   331 
   331 
   332   <P>
   332   <p>
   333   Although used widely, LaTeX seems nowadays a bit dated for producing
   333   Although used widely, LaTeX seems nowadays a bit dated for producing
   334   slides. Unlike documents, which are typically &ldquo;static&rdquo; and published in a book or journal,
   334   slides. Unlike documents, which are typically &ldquo;static&rdquo; and published in a book or journal,
   335   slides often contain changing contents that might first only be partially visible and
   335   slides often contain changing contents that might first only be partially visible and
   336   only later be revealed as the &ldquo;story&rdquo; of a talk or lecture demands.
   336   only later be revealed as the &ldquo;story&rdquo; of a talk or lecture demands.
   337   Also slides often contain animated algorithms where each state in the
   337   Also slides often contain animated algorithms where each state in the
   338   calculation is best explained by highlighting the changing data.
   338   calculation is best explained by highlighting the changing data.
   339   </p>
   339   </p>
   340 
   340 
   341   <P>
   341   <p>
   342   It seems HTML and JavaScript are much better suited for generating
   342   It seems HTML and JavaScript are much better suited for generating
   343   such animated slides. This <a HRef=http://www.impressivewebs.com/html-slidedeck-toolkits/>page</A>
   343   such animated slides. This <A HREF="http://www.impressivewebs.com/html-slidedeck-toolkits/">page</A>
   344   links to slide-generating programs using this combination of technologies. 
   344   links to slide-generating programs using this combination of technologies. 
   345   However, the problem with all of these project is that they depend heavily on the users being
   345   However, the problem with all of these project is that they depend heavily on the users being
   346   able to write JavaScript, CCS or HTML...not something one would like to depend on given that
   346   able to write JavaScript, CCS or HTML...not something one would like to depend on given that
   347   &ldquo;normal&rdquo; users likely only have a LaTeX background. The aim of this project is to invent a
   347   &ldquo;normal&rdquo; users likely only have a LaTeX background. The aim of this project is to invent a
   348   very simple language that is inspired by LaTeX and then generate from code written in this language
   348   very simple language that is inspired by LaTeX and then generate from code written in this language
   349   slides that can be displayed in a web-browser. An example would be the
   349   slides that can be displayed in a web-browser. An example would be the
   350   <A hREF="https://www.madoko.net">Madoko</A> project.
   350   <A HREF="https://www.madoko.net">Madoko</A> project.
   351   
   351   </p>
   352 
   352 
   353  <P>
   353  <p>
   354  This sounds complicated, but there is already some help available:
   354  This sounds complicated, but there is already some help available:
   355  <a hrEF="http://www.mathjax.org">Mathjax</A> is a JavaScript library that can
   355  <A HREF="http://www.mathjax.org">Mathjax</A> is a JavaScript library that can
   356  be used to display mathematical text, for example
   356  be used to display mathematical text, for example</p>
   357 
   357 
   358  <BLoCKquote>
   358  <blockquote>
   359  <p>When \(a \ne 0\), there are two solutions to \(ax^2 + bx + c = 0\) and they are
   359  <p>When \(a \ne 0\), there are two solutions to \(ax^2 + bx + c = 0\) and they are
   360  \(x = {-b \pm \sqrt{b^2-4ac} \over 2a}\).</p>
   360  \(x = {-b \pm \sqrt{b^2-4ac} \over 2a}\).</p>
   361  </bLOcKQUOTE>
   361  </blockquote>
   362 
   362 
   363  <P> 
   363  <p> 
   364  by writing code in the familiar LaTeX-way. This can be reused.
   364  by writing code in the familiar LaTeX-way. This can be reused.
   365  Another such library is <a href="http://khan.github.io/KaTeX/">KaTeX</A>.
   365  Another such library is <A HREF="http://khan.github.io/KaTeX/">KaTeX</A>.
   366  There are also plenty of JavaScript
   366  There are also plenty of JavaScript
   367  libraries for graphical animations (for example
   367  libraries for graphical animations (for example
   368  <A hREf="http://raphaeljs.com">Raphael</A>,
   368  <A HREF="http://raphaeljs.com">Raphael</A>,
   369  <A hReF=http://svgjs.com>SVG.JS</A>,
   369  <A HREF="http://svgjs.com">SVG.JS</A>,
   370  <a HrEf="http://bonsaijs.org">Bonsaijs</A>,
   370  <A HREF="http://bonsaijs.org">Bonsaijs</A>,
   371  <a hrEf="http://jsxgraph.uni-bayreuth.de/wp/">JSXGraph</A>). The inspiration for how the user should be able to write
   371  <A HREF="http://jsxgraph.uni-bayreuth.de/wp/">JSXGraph</A>). The inspiration for how the user should be able to write
   372  slides could come from the LaTeX packages <a hREf=http://en.wikipedia.org/wiki/Beamer_(LaTeX)>Beamer</a>
   372  slides could come from the LaTeX packages <A HREF="http://en.wikipedia.org/wiki/Beamer_(LaTeX)">Beamer</A>
   373  and <a hReF="http://en.wikipedia.org/wiki/PGF/TikZ">PGF/TikZ</A>. A slide-making project from which
   373  and <A HREF="http://en.wikipedia.org/wiki/PGF/TikZ">PGF/TikZ</A>. A slide-making project from which
   374  inspiration can be drawn is <A hRef="http://maciejczyzewski.me/hyhyhy/">hyhyhy</a>.
   374  inspiration can be drawn is <A HREF="http://maciejczyzewski.me/hyhyhy/">hyhyhy</A>.
   375  
   375  </p>
   376 
   376 
   377   <P>
   377   <p>
   378   <B>Skills:</b> 
   378   <B>Skills:</B> 
   379   This is a project that requires good knowledge of JavaScript. You need to be able to
   379   This is a project that requires good knowledge of JavaScript. You need to be able to
   380   parse a language and translate it to a suitable part of JavaScript using
   380   parse a language and translate it to a suitable part of JavaScript using
   381   appropriate libraries. Tutorials for JavaScript are <a HRef=http://www.w3schools.com/js/>here</a>.
   381   appropriate libraries. Tutorials for JavaScript are <A HREF="http://www.w3schools.com/js/">here</A>.
   382   A parser generator for JavaScript is <A hrEf="http://pegjs.majda.cz">here</a>. There are probably also
   382   A parser generator for JavaScript is <A HREF="http://pegjs.majda.cz">here</A>. There are probably also
   383   others. If you want to avoid JavaScript there are a number of alternatives: for example the
   383   others. If you want to avoid JavaScript there are a number of alternatives: for example the
   384   <A hREf="http://elm-lang.org">Elm</A>
   384   <A HREF="http://elm-lang.org">Elm</A>
   385   language has been especially designed for implementing interactive animations, which would be
   385   language has been especially designed for implementing interactive animations, which would be
   386   very convenient for this project. A nice slide making project done by a previous student is 
   386   very convenient for this project. A nice slide making project done by a previous student is 
   387   <a hReF="http://www.markslides.org">MarkSlides</A> by Oleksandr Cherednychenko. 
   387   <A HREF="http://www.markslides.org">MarkSlides</A> by Oleksandr Cherednychenko. 
   388   </p>
   388   </p>
   389 
   389 
   390 <lI> <H4>[CU4] Raspberry Pi's and Arduinos</h4>
   390 <li> <H4>[CU4] Raspberry Pi's and Arduinos</H4>
   391 
   391 
   392   <p>
   392   <p>
   393   <b>Description:</b>
   393   <B>Description:</B>
   394   This project is for true hackers! <A HReF="http://en.wikipedia.org/wiki/Raspberry_Pi">Raspberry Pi's</a>
   394   This project is for true hackers! <A HREF="http://en.wikipedia.org/wiki/Raspberry_Pi">Raspberry Pi's</A>
   395   are small Linux computers the size of a credit-card and only cost &pound;26, the
   395   are small Linux computers the size of a credit-card and only cost &pound;26, the
   396   simplest version even costs only &pound;5 (see pictures on the left below). They were introduced
   396   simplest version even costs only &pound;5 (see pictures on the left below). They were introduced
   397   in 2012 and people went crazy...well some of them. There is a
   397   in 2012 and people went crazy...well some of them. There is a
   398   <a HRef="https://plus.google.com/communities/113390432655174294208?hl=en">Google+</a>
   398   <A HREF="https://plus.google.com/communities/113390432655174294208?hl=en">Google+</A>
   399   community about Raspberry Pi's that has more
   399   community about Raspberry Pi's that has more
   400   than 300k of followers. A similar number follow the corresponding <a hrEf=https://www.facebook.com/raspberrypi/>group</a>
   400   than 300k of followers. A similar number follow the corresponding <A HREF="https://www.facebook.com/raspberrypi/">group</A>
   401   on Facebook. It is hard to keep up with what people do with these small computers. The possibilities
   401   on Facebook. It is hard to keep up with what people do with these small computers. The possibilities
   402   seem to be limitless. The main resource for Raspberry Pi's is <a HRef="http://www.raspberrypi.org">here</A>.
   402   seem to be limitless. The main resource for Raspberry Pi's is <A HREF="http://www.raspberrypi.org">here</A>.
   403   There are <a hreF=https://www.raspberrypi.org/magpi/>magazines</a> dedicated to them and tons of
   403   There are <A HREF="https://www.raspberrypi.org/magpi/">magazines</A> dedicated to them and tons of
   404   <A href="http://www.raspberrypi.org/phpBB3/viewforum.php?f=39">books</A> (not to mention
   404   <A HREF="http://www.raspberrypi.org/phpBB3/viewforum.php?f=39">books</A> (not to mention
   405   floods of <A hrEF=https://www.google.co.uk/search?q=raspberry+pi>online</A> material,
   405   floods of <A HREF="https://www.google.co.uk/search?q=raspberry+pi">online</A> material,
   406   such as the <A hrEF="https://www.raspberrypi.org/magpi-issues/Projects_Book_v1.pdf">RPi projects book</a>).
   406   such as the <A HREF="https://www.raspberrypi.org/magpi-issues/Projects_Book_v1.pdf">RPi projects book</A>).
   407   Google just released a
   407   Google just released a
   408   <a HreF="http://googlecreativelab.github.io/coder/">framework</a>
   408   <A HREF="http://googlecreativelab.github.io/coder/">framework</A>
   409   for web-programming on Raspberry Pi's turning them into webservers.
   409   for web-programming on Raspberry Pi's turning them into webservers.
   410   In my home one Raspberry Pi has the very important task of automatically filtering out
   410   In my home one Raspberry Pi has the very important task of automatically filtering out
   411   nearly all advertisments using the 
   411   nearly all advertisments using the 
   412   <A hrEF="https://github.com/pi-hole/pi-hole">Pi-Hole</A> software
   412   <A HREF="https://github.com/pi-hole/pi-hole">Pi-Hole</A> software
   413   (you cannot imagine what difference this does to your web experience).
   413   (you cannot imagine what difference this does to your web experience).
   414   
   414   </p>
   415 
   415 
   416   <P>
   416   <p>
   417   <a hREf=http://en.wikipedia.org/wiki/Arduino>Arduinos</A> are slightly older (from 2005) but still very cool (see picture on the right below). They
   417   <A HREF="http://en.wikipedia.org/wiki/Arduino">Arduinos</A> are slightly older (from 2005) but still very cool (see picture on the right below). They
   418   are small single-board micro-controllers that can talk to various external gadgets (sensors, motors, etc). Since Arduinos
   418   are small single-board micro-controllers that can talk to various external gadgets (sensors, motors, etc). Since Arduinos
   419   are open-software and open-hardware there are many clones and add-on boards. Like for the Raspberry Pi, there
   419   are open-software and open-hardware there are many clones and add-on boards. Like for the Raspberry Pi, there
   420   is a lot of material <a hrEf="https://www.google.co.uk/search?q=arduino">available</a> about Arduinos.
   420   is a lot of material <A HREF="https://www.google.co.uk/search?q=arduino">available</A> about Arduinos.
   421   The main reference is <A HrEf="http://www.arduino.cc">here</A>. Like the Raspberry Pi's, the good thing about
   421   The main reference is <A HREF="http://www.arduino.cc">here</A>. Like the Raspberry Pi's, the good thing about
   422   Arduinos is that they can be powered with simple AA-batteries.
   422   Arduinos is that they can be powered with simple AA-batteries.
   423   
   423   </p>
   424 
   424 
   425   <p>
   425   <p>
   426   I have several Raspberry Pi's including wifi-connectors and two <A href="http://www.raspberrypi.org/camera">cameras</a>.
   426   I have several Raspberry Pi's including wifi-connectors and two <A HREF="http://www.raspberrypi.org/camera">cameras</A>.
   427   I also have two <A HRef=http://www.freaklabs.org/index.php/Blog/Store/Introducing-the-Freakduino-Chibi-An-Arduino-based-Board-For-Wireless-Sensor-Networking.html>Freakduino Boards</a> that are Arduinos extended with wireless communication. I can lend them to responsible
   427   I also have two <A HREF="http://www.freaklabs.org/index.php/Blog/Store/Introducing-the-Freakduino-Chibi-An-Arduino-based-Board-For-Wireless-Sensor-Networking.html">Freakduino Boards</A> that are Arduinos extended with wireless communication. I can lend them to responsible
   428   students for one or two projects. However, the aim is to first come up with an idea for a project. Popular projects are
   428   students for one or two projects. However, the aim is to first come up with an idea for a project. Popular projects are
   429   automated temperature sensors, network servers, robots, web-cams (<a href=http://www.secretbatcave.co.uk/electronics/shard-rain-cam/>here</a>
   429   automated temperature sensors, network servers, robots, web-cams (<A HREF="http://www.secretbatcave.co.uk/electronics/shard-rain-cam/">here</A>
   430   is a <A hREf=http://www.raspberrypi.org/archives/3547>web-cam</A> directed at the Shard that can
   430   is a <A HREF="http://www.raspberrypi.org/archives/3547">web-cam</A> directed at the Shard that can
   431   <a HrEF=http://www.secretbatcave.co.uk/software/shard-rain-cam-quantifying-cloudy/>tell</A>
   431   <A HREF="http://www.secretbatcave.co.uk/software/shard-rain-cam-quantifying-cloudy/">tell</A>
   432   you whether it is raining or cloudy). There are plenty more ideas listed
   432   you whether it is raining or cloudy). There are plenty more ideas listed
   433   <A hRef="http://www.raspberrypi.org/phpBB3/viewforum.php?f=15">here</a> for Raspberry Pi's and
   433   <A HREF="http://www.raspberrypi.org/phpBB3/viewforum.php?f=15">here</A> for Raspberry Pi's and
   434   <A hReF="http://playground.arduino.cc/projects/ideas">here</a> for Arduinos.
   434   <A HREF="http://playground.arduino.cc/projects/ideas">here</A> for Arduinos.
   435   
   435   </p>
   436 
   436 
   437   <p>
   437   <p>
   438   There are essentially two kinds of projects: One is purely software-based. Software projects for Raspberry Pi's are often
   438   There are essentially two kinds of projects: One is purely software-based. Software projects for Raspberry Pi's are often
   439   written in <A hrEf="http://www.python.org">Python</a>, but since these are Linux-capable computers any other
   439   written in <A HREF="http://www.python.org">Python</A>, but since these are Linux-capable computers any other
   440   language would do as well. You can also write your own operating system as done
   440   language would do as well. You can also write your own operating system as done
   441   <a HReF=http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/>here</a>. For example the students
   441   <A HREF="http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/">here</A>. For example the students
   442   <A HReF=http://www.recantha.co.uk/blog/?p=4918>here</A> developed their own bare-metal OS and then implemented
   442   <A HREF="http://www.recantha.co.uk/blog/?p=4918">here</A> developed their own bare-metal OS and then implemented
   443   a chess-program on top of it (have a look at their very impressive
   443   a chess-program on top of it (have a look at their very impressive
   444   <A HREF="http://www.youtube.com/watch?v=-03bouPsfEQ&amp;feature=player_embedded">youtube</a> video).
   444   <A HREF="http://www.youtube.com/watch?v=-03bouPsfEQ&amp;feature=player_embedded">youtube</A> video).
   445   The other kind of project is a combination of hardware and software; usually attaching some sensors
   445   The other kind of project is a combination of hardware and software; usually attaching some sensors
   446   or motors to the Raspberry Pi or Arduino. This might require some soldering or what is called
   446   or motors to the Raspberry Pi or Arduino. This might require some soldering or what is called
   447   a <a hrEf=http://en.wikipedia.org/wiki/Breadboard>bread-board</a>. But be careful before choosing a project
   447   a <A HREF="http://en.wikipedia.org/wiki/Breadboard">bread-board</A>. But be careful before choosing a project
   448   involving new hardware: these devices
   448   involving new hardware: these devices
   449   can be destroyed (if &ldquo;Vin connected to GND&rdquo; or &ldquo;drawing more than 30mA from a GPIO&rdquo;
   449   can be destroyed (if &ldquo;Vin connected to GND&rdquo; or &ldquo;drawing more than 30mA from a GPIO&rdquo;
   450   does not make sense to you, you should probably stay away from such a project). 
   450   does not make sense to you, you should probably stay away from such a project). 
   451   </P>
   451   </p>
   452 
   452 
   453   <CeNtEr>
   453   <center>
   454     <img style="-webkit-user-select: none; cursor: -webkit-zoom-in;"
   454     <img style="-webkit-user-select: none; cursor: -webkit-zoom-in;"
   455          src="http://upload.wikimedia.org/wikipedia/commons/3/3d/RaspberryPi.jpg"
   455          src="http://upload.wikimedia.org/wikipedia/commons/3/3d/RaspberryPi.jpg"
   456          alt="Raspberry Pi"
   456          alt="Raspberry Pi"
   457          width="313" height="209">
   457          width="313" height="209">
   458 
   458 
   459     <IMG style="-webkit-user-select: none; cursor: -webkit-zoom-in;"
   459     <img style="-webkit-user-select: none; cursor: -webkit-zoom-in;"
   460          src="https://upload.wikimedia.org/wikipedia/commons/7/7e/Raspberry-Pi-Zero-FL.jpg"
   460          src="https://upload.wikimedia.org/wikipedia/commons/7/7e/Raspberry-Pi-Zero-FL.jpg"
   461          alt="Raspberry Pi Zero"
   461          alt="Raspberry Pi Zero"
   462          width="313" height="209">  
   462          width="313" height="209">  
   463 
   463 
   464     <Img style="-webkit-user-select: none; cursor: -webkit-zoom-in;"
   464     <img style="-webkit-user-select: none; cursor: -webkit-zoom-in;"
   465          src="http://upload.wikimedia.org/wikipedia/commons/3/38/Arduino_Uno_-_R3.jpg"
   465          src="http://upload.wikimedia.org/wikipedia/commons/3/38/Arduino_Uno_-_R3.jpg"
   466          alt="Arduino"
   466          alt="Arduino"
   467          width="240" height="209">
   467          width="240" height="209">
   468   </cENtEr>
   468   </center>
   469   
   469   
   470 
   470 
   471   <p>
   471   <p>
   472   <b>Skills:</B> 
   472   <B>Skills:</B> 
   473   Well, you must be a hacker; happy to make things. Your desk might look like the photo below on the left.
   473   Well, you must be a hacker; happy to make things. Your desk might look like the photo below on the left.
   474   The photo below on the middle shows an earlier student project which connects wirelessly a wearable Arduino (packaged
   474   The photo below on the middle shows an earlier student project which connects wirelessly a wearable Arduino (packaged
   475   in a "self-3d-printed" watch) to a Raspberry Pi seen in the background. The Arduino in the foreground takes
   475   in a "self-3d-printed" watch) to a Raspberry Pi seen in the background. The Arduino in the foreground takes
   476   measurements of 
   476   measurements of 
   477   heart rate and body temperature; the Raspberry Pi collects this data and makes it accessible via a simple
   477   heart rate and body temperature; the Raspberry Pi collects this data and makes it accessible via a simple
   478   web-service. The picture on the right is another project that implements an airmouse using an Arduino.
   478   web-service. The picture on the right is another project that implements an airmouse using an Arduino.
   479 
   479 
   480   <CentEr>
   480   <center>
   481     <iMG style="-webkit-user-select: none; cursor: -webkit-zoom-in;"
   481     <img style="-webkit-user-select: none; cursor: -webkit-zoom-in;"
   482          src="https://nms.kcl.ac.uk/christian.urban/rpi-photo.jpg"
   482          src="https://nms.kcl.ac.uk/christian.urban/rpi-photo.jpg"
   483          alt="Raspberry Pi"
   483          alt="Raspberry Pi"
   484          width="209" height="313">
   484          width="209" height="313">
   485 
   485 
   486     <Img style="-webkit-user-select: none; cursor: -webkit-zoom-in;"
   486     <img style="-webkit-user-select: none; cursor: -webkit-zoom-in;"
   487          src="https://nms.kcl.ac.uk/christian.urban/rpi-watch.jpg"
   487          src="https://nms.kcl.ac.uk/christian.urban/rpi-watch.jpg"
   488          alt="Raspberry Pi"
   488          alt="Raspberry Pi"
   489          width="450" height="254">
   489          width="450" height="254">
   490 
   490 
   491     <iMG style="-webkit-user-select: none; cursor: -webkit-zoom-in;"
   491     <img style="-webkit-user-select: none; cursor: -webkit-zoom-in;"
   492          src="https://nms.kcl.ac.uk/christian.urban/rpi-airmouse.jpg"
   492          src="https://nms.kcl.ac.uk/christian.urban/rpi-airmouse.jpg"
   493          alt="Raspberry Pi"
   493          alt="Raspberry Pi"
   494          width="250" height="254">  
   494          width="250" height="254">  
   495   </CENTeR><p>
   495   </center><p>
   496 
   496 
   497 
   497 
   498     A really cool project using a toy helicopter and two Raspberry Pi's was done by Nikolaos Kyknas. He transformed
   498     A really cool project using a toy helicopter and two Raspberry Pi's was done by Nikolaos Kyknas. He transformed
   499     an off-the-shelf toy helicopter into an autonomous flying machine. He attached a Raspberry Pi Zero and an ultrasound
   499     an off-the-shelf toy helicopter into an autonomous flying machine. He attached a Raspberry Pi Zero and an ultrasound
   500     sensor to the helicopter for measuring the distance from ground. Another Raspberry Pi is attached to the &ldquo;ground control
   500     sensor to the helicopter for measuring the distance from ground. Another Raspberry Pi is attached to the &ldquo;ground control
   503     First you need to get the balance of the helicopter plus Raspberry Pi plus its power source just right,
   503     First you need to get the balance of the helicopter plus Raspberry Pi plus its power source just right,
   504     otherwise the helicopter will simply take off in random directions. Also the flight instructions need to be just right,
   504     otherwise the helicopter will simply take off in random directions. Also the flight instructions need to be just right,
   505     otherwise the helicopter would at best &ldquo;oscillate&rdquo; around the set altitude, but never be steady. To solve this problem, 
   505     otherwise the helicopter would at best &ldquo;oscillate&rdquo; around the set altitude, but never be steady. To solve this problem, 
   506     Nikolaos used exactly the same algorithm that keeps cars at a steady pace when in cruise control. 
   506     Nikolaos used exactly the same algorithm that keeps cars at a steady pace when in cruise control. 
   507 
   507 
   508     <ceNTER>
   508     <center>
   509       <ViDeO wiDth="320" heigHt="576" controls>
   509       <video width="320" height="576" controls>
   510         <SOurcE SRc=https://nms.kcl.ac.uk/christian.urban/h1.mp4 tYpe="video/mp4">
   510         <source src="https://nms.kcl.ac.uk/christian.urban/h1.mp4" type="video/mp4">
   511           Your browser does not support the video tag.
   511           Your browser does not support the video tag.
   512       </VIDEO>
   512       </video>
   513       <VIDeO WIdth="320" HEIgHT=576 controls>
   513       <video width="320" height="576" controls>
   514         <sourcE sRc="https://nms.kcl.ac.uk/christian.urban/h3.mp4">
   514         <source src="https://nms.kcl.ac.uk/christian.urban/h3.mp4">
   515           Your browser does not support the video tag.
   515           Your browser does not support the video tag.
   516       </VIdEo>
   516       </video>
   517     </CEnTER>  
   517     </center>  
   518 
   518 
   519 <Li> <H4>[CU7] An Infrastructure for Displaying and Animating Code in a Web-Browser</H4>
   519 <li> <H4>[CU7] An Infrastructure for Displaying and Animating Code in a Web-Browser</H4>
   520   
   520   
   521 <P>
   521 <p>
   522   <B>Description:</b>
   522   <B>Description:</B>
   523   The project aim is to implement an infrastructure for displaying and
   523   The project aim is to implement an infrastructure for displaying and
   524   animating code in a web-browser. The infrastructure should be agnostic
   524   animating code in a web-browser. The infrastructure should be agnostic
   525   with respect to the programming language, but should be configurable.
   525   with respect to the programming language, but should be configurable.
   526   I envisage something smaller than the projects 
   526   I envisage something smaller than the projects 
   527   <A HreF="http://www.pythontutor.com">here</a> (for Python),
   527   <A HREF="http://www.pythontutor.com">here</A> (for Python),
   528   <a HRef=http://ideone.com>here</a> (for Java),
   528   <A HREF="http://ideone.com">here</A> (for Java),
   529   <A hreF=http://codepad.org>here</a> (for multiple languages),
   529   <A HREF="http://codepad.org">here</A> (for multiple languages),
   530   <a hREF="http://www.w3schools.com/html/tryit.asp?filename=tryhtml_intro">here</a> (for HTML)
   530   <A HREF="http://www.w3schools.com/html/tryit.asp?filename=tryhtml_intro">here</A> (for HTML)
   531   <A HrEf="http://repl.it/languages/JavaScript">here</a> (for JavaScript),
   531   <A HREF="http://repl.it/languages/JavaScript">here</A> (for JavaScript),
   532   and <a hRef="http://www.scala-tour.com/#/welcome">here</A> (for Scala).
   532   and <A HREF="http://www.scala-tour.com/#/welcome">here</A> (for Scala).
   533   </P>
   533   </p>
   534 
   534 
   535   <p>
   535   <p>
   536   The tasks in this project are being able (1) to lex and parse languages and (2) to write an interpreter.
   536   The tasks in this project are being able (1) to lex and parse languages and (2) to write an interpreter.
   537   The goal is to implement this as much as possible in a language-agnostic fashion.
   537   The goal is to implement this as much as possible in a language-agnostic fashion.
   538   
   538   </p>
   539 
   539 
   540   <p>
   540   <p>
   541   <b>Skills:</B> 
   541   <B>Skills:</B> 
   542   Good skills in lexing and language parsing, as well as being fluent with web programming (for
   542   Good skills in lexing and language parsing, as well as being fluent with web programming (for
   543   example JavaScript).
   543   example JavaScript).
   544   
   544   </p>
   545 
   545 
   546 
   546 
   547 <lI> <h4>[CU8] Proving the Correctness of Programs</H4>
   547 <li> <H4>[CU8] Proving the Correctness of Programs</H4>
   548 
   548 
   549  <P>
   549  <p>
   550  I am one of the main developers of the interactive theorem prover
   550  I am one of the main developers of the interactive theorem prover
   551  <A HREf="http://isabelle.in.tum.de">Isabelle</a>. This theorem prover
   551  <A HREF="http://isabelle.in.tum.de">Isabelle</A>. This theorem prover
   552  has been used to establish the correctness of some quite large
   552  has been used to establish the correctness of some quite large
   553  programs (for example an <A HREf=http://ertos.nicta.com.au/research/l4.verified/>operating system</A>).
   553  programs (for example an <A HREF="http://ertos.nicta.com.au/research/l4.verified/">operating system</A>).
   554  Together with colleagues from Nanjing, I used this theorem prover to establish the correctness of a
   554  Together with colleagues from Nanjing, I used this theorem prover to establish the correctness of a
   555  scheduling algorithm, called
   555  scheduling algorithm, called
   556  <A Href=http://en.wikipedia.org/wiki/Priority_inheritance>Priority Inheritance</a>,
   556  <A HREF="http://en.wikipedia.org/wiki/Priority_inheritance">Priority Inheritance</A>,
   557  for real-time operating systems. This scheduling algorithm is part of the operating
   557  for real-time operating systems. This scheduling algorithm is part of the operating
   558  system that drives, for example, the 
   558  system that drives, for example, the 
   559  <A HRef="http://en.wikipedia.org/wiki/Mars_Exploration_Rover">Mars rovers</A>.
   559  <A HREF="http://en.wikipedia.org/wiki/Mars_Exploration_Rover">Mars rovers</A>.
   560  Actually, the very first Mars rover mission in 1997 did not have this
   560  Actually, the very first Mars rover mission in 1997 did not have this
   561  algorithm switched on and it almost caused a catastrophic mission failure (see
   561  algorithm switched on and it almost caused a catastrophic mission failure (see
   562  this youtube video <A HrEF="http://www.youtube.com/watch?v=lyx7kARrGeM">here</a>
   562  this youtube video <A HREF="http://www.youtube.com/watch?v=lyx7kARrGeM">here</A>
   563  for an explanation what happened).
   563  for an explanation what happened).
   564  We were able to prove the correctness of this algorithm, but were also able to
   564  We were able to prove the correctness of this algorithm, but were also able to
   565  establish the correctness of some optimisations in this
   565  establish the correctness of some optimisations in this
   566  <A hrEf=https://nms.kcl.ac.uk/christian.urban/Publications/pip.pdf>paper</A>.
   566  <A HREF="https://nms.kcl.ac.uk/christian.urban/Publications/pip.pdf">paper</A>.
   567  </P>
   567  </p>
   568 
   568 
   569  <P>On a much smaller scale, there are a few small programs and underlying algorithms where it
   569  <p>On a much smaller scale, there are a few small programs and underlying algorithms where it
   570  is not really understood whether they always compute a correct result (for example the
   570  is not really understood whether they always compute a correct result (for example the
   571  regular expression matcher by Sulzmann and Lu in project [CU1]). The aim of this
   571  regular expression matcher by Sulzmann and Lu in project [CU1]). The aim of this
   572  project is to completely specify an algorithm in Isabelle and then prove it correct (that is,
   572  project is to completely specify an algorithm in Isabelle and then prove it correct (that is,
   573  it always computes the correct result).
   573  it always computes the correct result).
   574 
   574 </p>
   575 
   575 
   576   <P>
   576   <p>
   577   <b>Skills:</b> 
   577   <B>Skills:</B> 
   578   This project is for a very good student with a knack for theoretical things and formal reasoning.
   578   This project is for a very good student with a knack for theoretical things and formal reasoning.
   579   </P>
   579   </p>
   580 
   580 
   581 <li> <h4>[CU9] Anything Security Related that is Interesting</H4>
   581 <li> <H4>[CU9] Anything Security Related that is Interesting</H4>
   582   
   582   
   583 <P>
   583 <p>
   584 If you have your own project that is related to security (must be
   584 If you have your own project that is related to security (must be
   585 something interesting), please propose it. We can then have a look
   585 something interesting), please propose it. We can then have a look
   586 whether it would be suitable for a project.
   586 whether it would be suitable for a project.
   587 
   587 </p>
   588 
   588 
   589 <LI> <h4>[CU10] Anything Interesting in the Areas</H4>
   589 <li> <H4>[CU10] Anything Interesting in the Areas</H4>
   590   
   590   
   591 <UL>
   591 <ul>
   592 <Li><A hRef="http://elm-lang.org">Elm</a> (a reactive functional language for animating webpages; have a look at the cool examples, or <A Href="http://pragmaticstudio.com/blog/2014/12/19/getting-started-with-elm">here</A> for an introduction)
   592 <li><A HREF="http://elm-lang.org">Elm</A> (a reactive functional language for animating webpages; have a look at the cool examples, or <A HREF="http://pragmaticstudio.com/blog/2014/12/19/getting-started-with-elm">here</A> for an introduction)
   593 <Li><A hRef=http://www.smlserver.org/smltojs/>SMLtoJS</A> (a ML compiler to JavaScript; or anything else related to
   593 <li><A HREF="http://www.smlserver.org/smltojs/">SMLtoJS</A> (a ML compiler to JavaScript; or anything else related to
   594   sane languages that compile to JavaScript)
   594   sane languages that compile to JavaScript)
   595 <Li>Any statistical data related to Bitcoins (in the spirit of this
   595 <li>Any statistical data related to Bitcoins (in the spirit of this
   596 <a hreF=http://people.csail.mit.edu/spillai/data/papers/bitcoin-transaction-graph-analysis.pdf>paper</A> or
   596 <A HREF="http://people.csail.mit.edu/spillai/data/papers/bitcoin-transaction-graph-analysis.pdf">paper</A> or
   597   this <a HREf="https://eprint.iacr.org/2012/584.pdf">one</a>; this will probably require some extensive C knowledge or any
   597   this <A HREF="https://eprint.iacr.org/2012/584.pdf">one</A>; this will probably require some extensive C knowledge or any
   598   other heavy-duty programming language)
   598   other heavy-duty programming language)
   599 <lI>Anything related to programming languages and formal methods (like
   599 <li>Anything related to programming languages and formal methods (like
   600   <A HreF="http://matt.might.net/articles/intro-static-analysis/">static program analysis</a>)  
   600   <A HREF="http://matt.might.net/articles/intro-static-analysis/">static program analysis</A>)  
   601 <li>Anything related to low-cost, hands-on hardware like Raspberry Pi, Arduino,
   601 <li>Anything related to low-cost, hands-on hardware like Raspberry Pi, Arduino,
   602   <A hReF=http://en.wikipedia.org/wiki/Cubieboard>Cubieboard</A>
   602   <A HREF="http://en.wikipedia.org/wiki/Cubieboard">Cubieboard</A>
   603 <lI>Anything related to unikernel operating systems, like
   603 <li>Anything related to unikernel operating systems, like
   604   <a href=http://www.xenproject.org>Xen</a> or
   604   <A HREF="http://www.xenproject.org">Xen</A> or
   605   <a hrEF="http://www.openmirage.org">Mirage OS</a>
   605   <A HREF="http://www.openmirage.org">Mirage OS</A>
   606 <lI>Any kind of applied hacking, for example the Arduino-based keylogger described
   606 <li>Any kind of applied hacking, for example the Arduino-based keylogger described
   607    <a HRef=http://samy.pl/keysweeper/>here</a>
   607    <A HREF="http://samy.pl/keysweeper/">here</A>
   608 <li>Anything related to code books, like this
   608 <li>Anything related to code books, like this
   609    <A HreF="http://www.joelotter.com/kajero/">one</A>
   609    <A HREF="http://www.joelotter.com/kajero/">one</A>
   610 </uL>
   610 </ul>
   611 
   611 
   612 
   612 
   613 
   613 
   614 <Li> <h4>Earlier Projects</h4>
   614 <li> <H4>Earlier Projects</H4>
   615 
   615 
   616  I am also open to project suggestions from you. You might find some inspiration from my earlier projects:
   616  I am also open to project suggestions from you. You might find some inspiration from my earlier projects:
   617  <a Href=https://nms.kcl.ac.uk/christian.urban/bsc-projects-12.html>BSc 2012/13</A>, 
   617  <A HREF="https://nms.kcl.ac.uk/christian.urban/bsc-projects-12.html">BSc 2012/13</A>, 
   618  <a hrEf=https://nms.kcl.ac.uk/christian.urban/msc-projects-12.html>MSc 2012/13</A>, 
   618  <A HREF="https://nms.kcl.ac.uk/christian.urban/msc-projects-12.html">MSc 2012/13</A>, 
   619  <a hReF=https://nms.kcl.ac.uk/christian.urban/bsc-projects-13.html>BSc 2013/14</a>,
   619  <A HREF="https://nms.kcl.ac.uk/christian.urban/bsc-projects-13.html">BSc 2013/14</A>,
   620  <A hrEF="https://nms.kcl.ac.uk/christian.urban/msc-projects-13.html">MSc 2013/14</a>, 
   620  <A HREF="https://nms.kcl.ac.uk/christian.urban/msc-projects-13.html">MSc 2013/14</A>, 
   621  <A hREf="https://nms.kcl.ac.uk/christian.urban/bsc-projects-14.html">BSc 2014/15</a>,
   621  <A HREF="https://nms.kcl.ac.uk/christian.urban/bsc-projects-14.html">BSc 2014/15</A>,
   622  <A HreF=https://nms.kcl.ac.uk/christian.urban/msc-projects-14.html>MSc 2014/15</a>, 
   622  <A HREF="https://nms.kcl.ac.uk/christian.urban/msc-projects-14.html">MSc 2014/15</A>, 
   623  <A HreF="https://nms.kcl.ac.uk/christian.urban/bsc-projects-15.html">BSc 2015/16</A>,
   623  <A HREF="https://nms.kcl.ac.uk/christian.urban/bsc-projects-15.html">BSc 2015/16</A>,
   624  <A HREF="https://nms.kcl.ac.uk/christian.urban/msc-projects-15.html">MSc 2015/16</A>, 
   624  <A HREF="https://nms.kcl.ac.uk/christian.urban/msc-projects-15.html">MSc 2015/16</A>, 
   625  <A HreF="https://nms.kcl.ac.uk/christian.urban/bsc-projects-16.html">BSc 2016/17</A>,
   625  <A HREF="https://nms.kcl.ac.uk/christian.urban/bsc-projects-16.html">BSc 2016/17</A>,
   626  <a HRef=https://nms.kcl.ac.uk/christian.urban/msc-projects-16.html>MSc 2016/17</A>,
   626  <A HREF="https://nms.kcl.ac.uk/christian.urban/msc-projects-16.html">MSc 2016/17</A>,
   627  <A HREF=https://nms.kcl.ac.uk/christian.urban/bsc-projects-17.html>BSc 2017/18</a>,
   627  <A HREF="https://nms.kcl.ac.uk/christian.urban/bsc-projects-17.html">BSc 2017/18</A>,
   628  <A hrEF="https://nms.kcl.ac.uk/christian.urban/msc-projects-17.html">MSc 2017/18</A>
   628  <A HREF="https://nms.kcl.ac.uk/christian.urban/msc-projects-17.html">MSc 2017/18</A>
   629 </Ul>
   629 </ul>
   630 </td>
   630 </TD>
   631 </tR>  
   631 </TR>  
   632 </TABlE>
   632 </TABLE>
   633         
   633         
   634 <p>
   634 <P>
   635 2018-09-24 12:12:35 by Christian Urban
   635 2018-09-24 12:12:35 by Christian Urban
   636 <A hREF=https://validator.w3.org/check/referer>[Validate this page.]</a>
   636 <a href="https://validator.w3.org/check/referer">[Validate this page.]</a>
   637 </P>
   637 </P>
   638 </Body>
   638 </BODY>
   639 </HTmL>
   639 </HTML>
   640  
   640  
   641  
   641  
   642  
   642