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> … |
41 <A HREF="http://en.wikipedia.org/wiki/Hacker_(programmer_subculture)">hacker</A> … |
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. |
44 necessary.” 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 “<A hreF=http://en.wikipedia.org/wiki/ReDoS#Examples>evil</A>” |
74 “<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>” |
75 and can “stab you in the back” according to |
75 and can “stab you in the back” 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 “evil” regular expression. But it can also happen by accident: |
91 your program if it contains such an “evil” 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 “sands of time”. |
115 <A HREF="https://www.cs.kent.ac.uk/people/staff/sao/documents/jfp09.pdf">paper</A> had been lost in the “sands of time”. |
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 “blow away” the regular expression matchers |
134 with my simple rainy-afternoon matcher and potentially “blow away” 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 “<a hReF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</a>” |
158 Test cases for “<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>” |
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 “wins” with 18 out of 21 points). |
327 is a side-by-side comparison between Word and LaTeX (which LaTeX “wins” 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 “static” and published in a book or journal, |
334 slides. Unlike documents, which are typically “static” 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 “story” of a talk or lecture demands. |
336 only later be revealed as the “story” 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 “normal” users likely only have a LaTeX background. The aim of this project is to invent a |
347 “normal” 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 £26, the |
395 are small Linux computers the size of a credit-card and only cost £26, the |
396 simplest version even costs only £5 (see pictures on the left below). They were introduced |
396 simplest version even costs only £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&feature=player_embedded">youtube</a> video). |
444 <A HREF="http://www.youtube.com/watch?v=-03bouPsfEQ&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 “Vin connected to GND” or “drawing more than 30mA from a GPIO” |
449 can be destroyed (if “Vin connected to GND” or “drawing more than 30mA from a GPIO” |
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 “ground control |
500 sensor to the helicopter for measuring the distance from ground. Another Raspberry Pi is attached to the “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 “oscillate” around the set altitude, but never be steady. To solve this problem, |
505 otherwise the helicopter would at best “oscillate” 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 |