bsc-projects-12.html
changeset 143 e779f42c6fa8
parent 141 5c859bb0358b
child 144 ee348904117f
equal deleted inserted replaced
142:cbe1b90ddc96 143:e779f42c6fa8
    33 <H4>Email: christian dot urban at kcl dot ac dot uk,  Office: Strand Building S1.24</H4>
    33 <H4>Email: christian dot urban at kcl dot ac dot uk,  Office: Strand Building S1.24</H4>
    34 <H4>If you are interested in a project, please send me an email and we can discuss details. Please include
    34 <H4>If you are interested in a project, please send me an email and we can discuss details. Please include
    35 a short description about your programming skills and Computer Science background in your first email. 
    35 a short description about your programming skills and Computer Science background in your first email. 
    36 I will also need your King's username in order to book the project for you. Thanks.</H4> 
    36 I will also need your King's username in order to book the project for you. Thanks.</H4> 
    37 
    37 
    38 <H4>Note that besides being a lecturer in the theory of Computer Science, I am also a passionate
    38 <H4>Note that besides being a lecturer at the theoretical end of Computer Science, I am also a passionate
    39     <A HREF="http://en.wikipedia.org/wiki/Hacker_(programmer_subculture)">hacker</A> &hellip;
    39     <A HREF="http://en.wikipedia.org/wiki/Hacker_(programmer_subculture)">hacker</A> &hellip;
    40     defined as &ldquo;a person who enjoys exploring the details of programmable systems and 
    40     defined as &ldquo;a person who enjoys exploring the details of programmable systems and 
    41     stretching their capabilities, as opposed to most users, who prefer to learn only the minimum 
    41     stretching their capabilities, as opposed to most users, who prefer to learn only the minimum 
    42     necessary.&rdquo; I am always happy to supervise like-minded students.</H4>  
    42     necessary.&rdquo; I am always happy to supervise like-minded students.</H4>  
    43 
    43 
    44 <ul class="striped">
    44 <ul class="striped">
    45 <li> <H4>[CU1] Automata Minimisation</H4>
    45 <li> <H4>[CU1] Automata Minimisation</H4>
    46 
    46 
    47   <p><B>Description:</b>  
    47   <p>
       
    48   <B>Description:</b>  
    48   <A HREF="http://en.wikipedia.org/wiki/Deterministic_finite_automaton">Deterministic finite automata</A> 
    49   <A HREF="http://en.wikipedia.org/wiki/Deterministic_finite_automaton">Deterministic finite automata</A> 
    49   have many uses in Computer Science, for example for lexing
    50   have many uses in Computer Science, for example for lexing
    50   program code. In order to improve their run-time, automata need to be minimised, that 
    51   program code. In order to improve their run-time, automata need to be minimised, that 
    51   is transformed into equivalent automata with the smallest possible number of state 
    52   is transformed into equivalent automata with the smallest possible number of state 
    52   nodes. 
    53   nodes. 
   100   <A HREF="http://www.python.org">Python</A>, etc.
   101   <A HREF="http://www.python.org">Python</A>, etc.
   101   </p>
   102   </p>
   102 
   103 
   103 <li> <H4>[CU2] Equivalence Checking of Regular Expressions</H4>
   104 <li> <H4>[CU2] Equivalence Checking of Regular Expressions</H4>
   104 
   105 
   105   <p><B>Description:</b>  
   106   <p>
       
   107   <B>Description:</b>  
   106   Solving the problem of deciding the equivalence of regular expressions can be used
   108   Solving the problem of deciding the equivalence of regular expressions can be used
   107   to decide a number of problems in automated reasoning. Recently, 
   109   to decide a number of problems in automated reasoning. Recently, 
   108   <A HREF="http://www.cs.unibo.it/~asperti/">Andreas Asperti</A>
   110   <A HREF="http://www.cs.unibo.it/~asperti/">Andreas Asperti</A>
   109   proposed a simple method for deciding regular expression equivalence described
   111   proposed a simple method for deciding regular expression equivalence described
   110   <A HREF="http://www.cs.unibo.it/~asperti/PAPERS/compact.pdf">here</A>. 
   112   <A HREF="http://www.cs.unibo.it/~asperti/PAPERS/compact.pdf">here</A>. 
   137   code is beneficial for the part involving extended regular expressions.
   139   code is beneficial for the part involving extended regular expressions.
   138   </p>
   140   </p>
   139 
   141 
   140 <li> <H4>[CU3] Machine Code Generation for a Simple Compiler</H4>
   142 <li> <H4>[CU3] Machine Code Generation for a Simple Compiler</H4>
   141 
   143 
   142   <p><b>Description:</b> 
   144   <p>
       
   145   <b>Description:</b> 
   143   Compilers translate high-level programs that humans can read and write into
   146   Compilers translate high-level programs that humans can read and write into
   144   efficient machine code that can be run on a CPU or virtual machine.
   147   efficient machine code that can be run on a CPU or virtual machine.
   145   I recently implemented a very simple compiler for a very simple functional
   148   I recently implemented a very simple compiler for a very simple functional
   146   programming language following this 
   149   programming language following this 
   147   <A HREF="http://www.cs.princeton.edu/~dpw/papers/tal-toplas.pdf">paper</A> 
   150   <A HREF="http://www.cs.princeton.edu/~dpw/papers/tal-toplas.pdf">paper</A> 
   178   <A HREF="http://download.intel.com/design/intarch/manuals/24319101.pdf">here<A>. 
   181   <A HREF="http://download.intel.com/design/intarch/manuals/24319101.pdf">here<A>. 
   179   A simple assembler for the JVM is described <A HREF="http://jasmin.sourceforge.net">here</A>.
   182   A simple assembler for the JVM is described <A HREF="http://jasmin.sourceforge.net">here</A>.
   180   An interesting twist of this project is to not generate code for a CPU, but
   183   An interesting twist of this project is to not generate code for a CPU, but
   181   for the intermediate language of the <A HREF="http://llvm.org">LLVM</A> compiler
   184   for the intermediate language of the <A HREF="http://llvm.org">LLVM</A> compiler
   182   (also described <A HREF="https://wiki.aalto.fi/display/t1065450/LLVM+IR">here</A> and
   185   (also described <A HREF="https://wiki.aalto.fi/display/t1065450/LLVM+IR">here</A> and
   183   <A HREF="http://llvm.org/docs/LangRef.html">here</A>).
   186   <A HREF="http://llvm.org/docs/LangRef.html">here</A>). If you want to see
   184   </p>
   187   what machine code looks like you can compile your C-program using gcc -S.
   185 
   188   </p>
   186   <p><B>Skills:</B> 
   189 
       
   190   <p>
       
   191   <B>Skills:</B> 
   187   This is a project for a student with a deep interest in programming languages and
   192   This is a project for a student with a deep interest in programming languages and
   188   compilers. Since my compiler is implemented in <A HREF="http://www.scala-lang.org/">Scala</A>,
   193   compilers. Since my compiler is implemented in <A HREF="http://www.scala-lang.org/">Scala</A>,
   189   it would make sense to continue this project in this language. I can be
   194   it would make sense to continue this project in this language. I can be
   190   of help with questions and books about <A HREF="http://www.scala-lang.org/">Scala</A>.
   195   of help with questions and books about <A HREF="http://www.scala-lang.org/">Scala</A>.
   191   But if Scala is a problem, my code can also be translated quickly into any other functional
   196   But if Scala is a problem, my code can also be translated quickly into any other functional
   192   language. 
   197   language. 
   193   </p>
   198   </p>
   194 
   199 
   195 <li> <H4>[CU4] Implementation of Register Spilling Algorithms</H4>
   200 <li> <H4>[CU4] Implementation of Register Spilling Algorithms</H4>
   196   
   201   
   197   <p><b>Description:</b> 
   202   <p>
       
   203   <b>Description:</b> 
   198   This project is similar to [CU3]. The emphasis here, however, is on the
   204   This project is similar to [CU3]. The emphasis here, however, is on the
   199   implementation and comparison of register spilling algorithms, also often called register allocation 
   205   implementation and comparison of register spilling algorithms, also often called register allocation 
   200   algorithms. They are part of any respectable compiler.  As said
   206   algorithms. They are part of any respectable compiler.  As said
   201   in [CU3], however, my simple compiler lacks them and assumes an infinite amount of registers instead.
   207   in [CU3], however, my simple compiler lacks them and assumes an infinite amount of registers instead.
   202   Real CPUs however only provide a fixed amount of registers (for example
   208   Real CPUs however only provide a fixed amount of registers (for example
   229   There is also a survey 
   235   There is also a survey 
   230   <A HREF="http://compilers.cs.ucla.edu/fernando/publications/drafts/survey.pdf">article</A> 
   236   <A HREF="http://compilers.cs.ucla.edu/fernando/publications/drafts/survey.pdf">article</A> 
   231   about register allocation algorithms with further pointers.
   237   about register allocation algorithms with further pointers.
   232   </p>
   238   </p>
   233 
   239 
   234   <p><B>Skills:</B> 
   240   <p>
       
   241   <B>Skills:</B> 
   235   Same skills as [CU3].
   242   Same skills as [CU3].
   236   </p>
   243   </p>
   237 
   244 
   238 <li> <H4>[CU5] A Student Polling System</H4>
   245 <li> <H4>[CU5] A Student Polling System</H4>
       
   246 
   239   <p>
   247   <p>
   240   <B>Description:</B>
   248   <B>Description:</B>
   241   One of the more annoying aspects of giving a lecture is to ask a question
   249   One of the more annoying aspects of giving a lecture is to ask a question
   242   to the students and no matter how easy the questions is to not 
   250   to the students and no matter how easy the questions is to not 
   243   receive an answer. Recently, the online course system 
   251   receive an answer. Recently, the online course system 
   285   <p>
   293   <p>
   286   <B>Literature:</B> 
   294   <B>Literature:</B> 
   287   The project requires fluency in a web-programming language (for example 
   295   The project requires fluency in a web-programming language (for example 
   288   <A HREF="http://en.wikipedia.org/wiki/JavaScript">Javascript</A>,
   296   <A HREF="http://en.wikipedia.org/wiki/JavaScript">Javascript</A>,
   289   <A HREF="http://en.wikipedia.org/wiki/PHP">PHP</A>, 
   297   <A HREF="http://en.wikipedia.org/wiki/PHP">PHP</A>, 
   290   Java, <A HREF="http://www.python.org">Python</A>, <A HREF="http://en.wikipedia.org/wiki/Go_(programming_language)">Go</A>, <A HREF="http://www.scala-lang.org/">Scala</A>,
   298   Java, <A HREF="http://www.python.org">Python</A>, 
       
   299   <A HREF="http://en.wikipedia.org/wiki/Go_(programming_language)">Go</A>, 
       
   300   <A HREF="http://www.scala-lang.org/">Scala</A>,
   291   <A HREF="http://en.wikipedia.org/wiki/Ruby_(programming_language)">Ruby</A>) 
   301   <A HREF="http://en.wikipedia.org/wiki/Ruby_(programming_language)">Ruby</A>) 
   292   and possibly a cloud application platform (for example
   302   and possibly a cloud application platform (for example
   293   <A HREF="https://developers.google.com/appengine/">Google App Engine</a> or 
   303   <A HREF="https://developers.google.com/appengine/">Google App Engine</a> or 
   294   <A HREF="http://www.heroku.com">Heroku</A>).
   304   <A HREF="http://www.heroku.com">Heroku</A>).
   295   For web-programming the 
   305   For web-programming the 
   300   <A HREF="https://developers.google.com/chart/image/docs/making_charts">Chart Tools</A>
   310   <A HREF="https://developers.google.com/chart/image/docs/making_charts">Chart Tools</A>
   301   might be useful, which ar also described in this 
   311   might be useful, which ar also described in this 
   302   <A HREF="http://www.youtube.com/watch?v=NZtgT4jgnE8">youtube</A> video.
   312   <A HREF="http://www.youtube.com/watch?v=NZtgT4jgnE8">youtube</A> video.
   303   </p>
   313   </p>
   304 
   314 
   305   <p><B>Skills:</B> 
   315   <p>
       
   316   <B>Skills:</B> 
   306   In order to provide convenience for the lecturer, this project needs very good web-programming skills. A 
   317   In order to provide convenience for the lecturer, this project needs very good web-programming skills. A 
   307   <A HREF="http://en.wikipedia.org/wiki/Hacker_(programmer_subculture)">hacker mentality</A>
   318   <A HREF="http://en.wikipedia.org/wiki/Hacker_(programmer_subculture)">hacker mentality</A>
   308   (see above) is probably very beneficial: web-programming is an area that only emerged recently and
   319   (see above) is probably very beneficial: web-programming is an area that only emerged recently and
   309   many tools still lack maturity. You probably have to experiment a lot with several different
   320   many tools still lack maturity. You probably have to experiment a lot with several different
   310   languages and tools.
   321   languages and tools.
   311   </p>
   322   </p>
   312 
   323 
   313 <li> <H4>[CU6] Implementation of a Distributed Clock-Synchronisation Algorithm developed at NASA</H4>
   324 <li> <H4>[CU6] Implementation of a Distributed Clock-Synchronisation Algorithm developed at NASA</H4>
       
   325   
   314   <p>
   326   <p>
   315   <B>Description:</B>
   327   <B>Description:</B>
   316   There are many algorithms for synchronising clocks. This
   328   There are many algorithms for synchronising clocks. This
   317   <A HREF="http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20120000054_2011025573.pdf">paper</A> 
   329   <A HREF="http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20120000054_2011025573.pdf">paper</A> 
   318   describes a new algorithm for clocks that communicate by exchanging
   330   describes a new algorithm for clocks that communicate by exchanging
   319   messages and thereby reach a state in which (within some bound) all clocks are synchronised.
   331   messages and thereby reach a state in which (within some bound) all clocks are synchronised.
       
   332   A slightly longer and more detailed paper about the algorithm is 
       
   333   <A HREF="http://hdl.handle.net/2060/20110020812">here</A>.
   320   The point of this project is to implement this algorithm and simulate networks of clocks.
   334   The point of this project is to implement this algorithm and simulate networks of clocks.
   321   </p>
   335   </p>
   322 
   336 
   323   <B>Literature:</B> 
   337   <B>Literature:</B> 
   324   There is a wide range of literature on clock syncronisation algorithms. 
   338   There is a wide range of literature on clock syncronisation algorithms. 
   326   <A HREF="http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20120000054_2011025573.pdf">paper</A>,
   340   <A HREF="http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20120000054_2011025573.pdf">paper</A>,
   327   which describes the algorithm to be implemented in this project. Pointers
   341   which describes the algorithm to be implemented in this project. Pointers
   328   are given also <A HREF="http://en.wikipedia.org/wiki/Clock_synchronization">here</A>.
   342   are given also <A HREF="http://en.wikipedia.org/wiki/Clock_synchronization">here</A>.
   329   </p>
   343   </p>
   330 
   344 
   331   <p><B>Skills:</B> 
   345   <p>
       
   346   <B>Skills:</B> 
   332   In order to implement a simulation of a network of clocks, you need to tackle
   347   In order to implement a simulation of a network of clocks, you need to tackle
   333   concurrency. You can do this for example in the programming language
   348   concurrency. You can do this for example in the programming language
   334   <A HREF="http://www.scala-lang.org/">Scala</A> with the help of the 
   349   <A HREF="http://www.scala-lang.org/">Scala</A> with the help of the 
   335   <A HREF="http://akka.io">Akka</a> library. This library enables you to send messages
   350   <A HREF="http://akka.io">Akka</a> library. This library enables you to send messages
   336   between different <I>actors</I>. <A HREF="http://www.scala-lang.org/node/242">Here</A> 
   351   between different <I>actors</I>. <A HREF="http://www.scala-lang.org/node/242">Here</A> 
   340 </ul>
   355 </ul>
   341 </TD>
   356 </TD>
   342 </TR>
   357 </TR>
   343 </TABLE>
   358 </TABLE>
   344 
   359 
   345 <P><!-- Created: Tue Mar  4 00:23:25 GMT 1997 -->
   360 <P>
       
   361 <!-- Created: Tue Mar  4 00:23:25 GMT 1997 -->
   346 <!-- hhmts start -->
   362 <!-- hhmts start -->
   347 Last modified: Wed Jan 11 16:30:03 GMT 2012
   363 Last modified: Wed Sep 12 16:30:03 GMT 2012
   348 <!-- hhmts end -->
   364 <!-- hhmts end -->
   349 <a href="http://validator.w3.org/check/referer">[Validate this page.]</a>
   365 <a href="http://validator.w3.org/check/referer">[Validate this page.]</a>
   350 </BODY>
   366 </BODY>
   351 </HTML>
   367 </HTML>