42 defined as “a person who enjoys exploring the details of programmable systems and |
42 defined as “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.” I am always happy to supervise like-minded students.</H4> |
44 necessary.” I am always happy to supervise like-minded students.</H4> |
45 |
45 |
46 <ul class="striped"> |
46 <ul class="striped"> |
47 <li> <H4>[CU1] Regular Expression Matching and Derivatives</H4> |
47 <li> <H4>[CU1] Regular Expression Matching, Lexing and Derivatives</H4> |
48 |
48 |
49 <p> |
49 <p> |
50 <B>Description:</b> |
50 <B>Description:</b> |
51 <A HREF="http://en.wikipedia.org/wiki/Regular_expression">Regular expressions</A> |
51 <A HREF="http://en.wikipedia.org/wiki/Regular_expression">Regular expressions</A> |
52 are extremely useful for many text-processing tasks, such as finding patterns in texts, |
52 are extremely useful for many text-processing tasks, such as finding patterns in texts, |
468 <img style="-webkit-user-select: none; cursor: -webkit-zoom-in; |
468 <img style="-webkit-user-select: none; cursor: -webkit-zoom-in; |
469 "src="http://www.inf.kcl.ac.uk/staff/urbanc/rpi-watch.jpg" width="450" height="254"> |
469 "src="http://www.inf.kcl.ac.uk/staff/urbanc/rpi-watch.jpg" width="450" height="254"> |
470 </center> |
470 </center> |
471 </p> |
471 </p> |
472 |
472 |
473 <li> <H4>[CU6] Language Translator into JavaScript</H4> |
473 <li> <H4>[CU6] An Infrastructure for Displaying and Animating Code in a Web-Browser</H4> |
474 |
|
475 <p> |
|
476 <b>Description:</b> |
|
477 <A HREF="http://www.w3schools.com/js/">JavaScript</A> is a language that is supported by most |
|
478 browsers and therefore is a favourite |
|
479 vehicle for Web-programming. Some call it <B>the</B> scripting language of the Web. |
|
480 Unfortunately, JavaScript is probably one of the worst |
|
481 languages to program in (being designed and released in a hurry). <B>But</B> it can be used as a convenient target |
|
482 for translating programs from other languages. In particular there are two |
|
483 very optimised subsets of JavaScript that can be used for this purpose: |
|
484 one is <A HREF="http://asmjs.org">asm.js</A> and the other is |
|
485 <A HREF="https://github.com/kripken/emscripten/wiki">emscripten</A>. |
|
486 There is a <A HREF="https://github.com/kripken/emscripten/wiki/Tutorial">tutorial</A> for emscripten |
|
487 and an impressive <A HREF="http://www.unrealengine.com/html5/">demo</A> which runs the |
|
488 <A HREF="http://en.wikipedia.org/wiki/Unreal_Engine">Unreal Engine 3</A> |
|
489 in a browser with spectacular speed. This was achieved by compiling the |
|
490 C-code of the Unreal Engine to the LLVM intermediate language and then translating the LLVM |
|
491 code to JavaScript. |
|
492 </p> |
|
493 |
|
494 <p> |
|
495 <B>Skills:</B> |
|
496 This project is about exploring these two subsets of JavaScript and implement a translator |
|
497 of a small language into them. This is similar to the project [CU2] above and requires |
|
498 similar skills. In addition it would be good to have already some familiarity with JavaScript. |
|
499 There are plenty of <A HREF="http://www.w3schools.com/js/">tutorials</A> on the Web. |
|
500 <A HREF="http://jsbooks.revolunet.com">Here</A> is a list of free books on JavaScript. |
|
501 This is a project for a student who wants to get more familiar with JavaScript and Web-programming. |
|
502 A project from which you can draw inspiration is this |
|
503 <A HREF="http://jlongster.com/2012/01/04/outlet-my-lisp-to-javascript-experiment.html">List-to-JavaScript</A> |
|
504 translator. <A HREF="https://bitbucket.org/ktg/parenjs/overview">Here</A> is another such project. |
|
505 And <A HREF="https://github.com/viclib/liscript">another</A> in less than 100 lines of code. |
|
506 <A HREF="http://en.wikipedia.org/wiki/CoffeeScript">Coffeescript</A> is a similar project |
|
507 except that it is already quite <A HREF="http://coffeescript.org">mature</A>. And finally not to |
|
508 forget <A HREF="http://www.typescriptlang.org">TypeScript</A> developed by Microsoft. The main |
|
509 difference between these projects and this one is that they translate into relatively high-level |
|
510 JavaScript code; none of them use the much lower levels <A HREF="http://asmjs.org">asm.js</A> and |
|
511 <A HREF="https://github.com/kripken/emscripten/wiki">emscripten</A>. |
|
512 </p> |
|
513 |
|
514 |
|
515 |
|
516 <li> <H4>[CU7] An Infrastructure for Displaying and Animating Code in a Web-Browser</H4> |
|
517 |
474 |
518 <p> |
475 <p> |
519 <B>Description:</B> |
476 <B>Description:</B> |
520 The project aim is to implement an infrastructure for displaying and |
477 The project aim is to implement an infrastructure for displaying and |
521 animating code in a web-browser. The infrastructure should be agnostic |
478 animating code in a web-browser. The infrastructure should be agnostic |
539 Good skills in lexing and language parsing, as well as being fluent with web programming (for |
496 Good skills in lexing and language parsing, as well as being fluent with web programming (for |
540 example JavaScript). |
497 example JavaScript). |
541 </p> |
498 </p> |
542 |
499 |
543 |
500 |
544 <li> <H4>[CU8] Implementation of a Distributed Clock-Synchronisation Algorithm developed at NASA</H4> |
501 <li> <H4>[CU7] Implementation of a Distributed Clock-Synchronisation Algorithm developed at NASA</H4> |
545 |
502 |
546 <p> |
503 <p> |
547 <B>Description:</B> |
504 <B>Description:</B> |
548 There are many algorithms for synchronising clocks. This |
505 There are many algorithms for synchronising clocks. This |
549 <A HREF="http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20120000054_2011025573.pdf">paper</A> |
506 <A HREF="http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20120000054_2011025573.pdf">paper</A> |
571 <A HREF="http://akka.io">Akka</a> library. This library enables you to send messages |
528 <A HREF="http://akka.io">Akka</a> library. This library enables you to send messages |
572 between different <I>actors</I>. <A HREF="http://www.scala-lang.org/node/242">Here</A> |
529 between different <I>actors</I>. <A HREF="http://www.scala-lang.org/node/242">Here</A> |
573 are some examples that explain how to implement exchanging messages between actors. |
530 are some examples that explain how to implement exchanging messages between actors. |
574 </p> |
531 </p> |
575 |
532 |
576 <li> <H4>[CU9] Proving the Correctness of Programs</H4> |
533 <li> <H4>[CU8] Proving the Correctness of Programs</H4> |
577 |
534 |
578 <p> |
535 <p> |
579 I am one of the main developers of the interactive theorem prover |
536 I am one of the main developers of the interactive theorem prover |
580 <A HREF="http://isabelle.in.tum.de">Isabelle</A>. This theorem prover |
537 <A HREF="http://isabelle.in.tum.de">Isabelle</A>. This theorem prover |
581 has been used to establish the correctness of some quite large |
538 has been used to establish the correctness of some quite large |