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> … |
39 <A HREF="http://en.wikipedia.org/wiki/Hacker_(programmer_subculture)">hacker</A> … |
40 defined as “a person who enjoys exploring the details of programmable systems and |
40 defined as “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.” I am always happy to supervise like-minded students.</H4> |
42 necessary.” 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> |