104 <A HREF="http://www.home.hs-karlsruhe.de/~suma0002/publications/regex-parsing-derivatives.pdf">FLOPS'14-paper</A> mentioned |
104 <A HREF="http://www.home.hs-karlsruhe.de/~suma0002/publications/regex-parsing-derivatives.pdf">FLOPS'14-paper</A> mentioned |
105 above claim they are even faster than me and can deal with even more features of regular expressions |
105 above claim they are even faster than me and can deal with even more features of regular expressions |
106 (for example subexpression matching, which my rainy-afternoon matcher cannot). I am sure they thought |
106 (for example subexpression matching, which my rainy-afternoon matcher cannot). I am sure they thought |
107 about the problem much longer than a single afternoon. The task |
107 about the problem much longer than a single afternoon. The task |
108 in this project is to find out how good they actually are by implementing the results from their paper. |
108 in this project is to find out how good they actually are by implementing the results from their paper. |
109 Their approach is based on the concept of derivatives introduced in 1994 by |
109 Their approach is based on the concept of derivatives. |
110 <A HREF="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.56.2509&rep=rep1&type=pdf">Valentin Antimirov</A>. |
|
111 I used them once myself in a <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/Publications/rexp.pdf">paper</A> |
110 I used them once myself in a <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/Publications/rexp.pdf">paper</A> |
112 in order to prove the <A HREF="http://en.wikipedia.org/wiki/Myhill–Nerode_theorem">Myhill-Nerode theorem</A>. |
111 in order to prove the <A HREF="http://en.wikipedia.org/wiki/Myhill–Nerode_theorem">Myhill-Nerode theorem</A>. |
113 So I know they are worth their money. Still, it would be interesting to actually compare their results |
112 So I know they are worth their money. Still, it would be interesting to actually compare their results |
114 with my simple rainy-afternoon matcher and potentially “blow away” the regular expression matchers |
113 with my simple rainy-afternoon matcher and potentially “blow away” the regular expression matchers |
115 in Python and Ruby (and possibly in Scala too). The application would be to implement a fast lexer for |
114 in Python and Ruby (and possibly in Scala too). The application would be to implement a fast lexer for |
131 done with love. |
130 done with love. |
132 Finally, there are millions of other pointers about regular expression |
131 Finally, there are millions of other pointers about regular expression |
133 matching on the Web. I found the chapter on Lexing in this |
132 matching on the Web. I found the chapter on Lexing in this |
134 <A HREF="http://www.diku.dk/~torbenm/Basics/">online book</A> very helpful. |
133 <A HREF="http://www.diku.dk/~torbenm/Basics/">online book</A> very helpful. |
135 Test cases for “<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>” |
134 Test cases for “<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>” |
136 regular expressions can be obtained from <A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">here</A>. |
135 regular expressions can be obtained from <A HREF="http://www.haskell.org/haskellwiki/Regex_Posix">here</A>. |
137 |
136 |
138 </p> |
137 </p> |
139 |
138 |
140 <p> |
139 <p> |
141 <B>Skills:</B> |
140 <B>Skills:</B> |
187 languages to program in (being designed and released in a hurry). <B>But</B> it can be used as a convenient target |
186 languages to program in (being designed and released in a hurry). <B>But</B> it can be used as a convenient target |
188 for translating programs from other languages. In particular there are two |
187 for translating programs from other languages. In particular there are two |
189 very optimised subsets of JavaScript that can be used for this purpose: |
188 very optimised subsets of JavaScript that can be used for this purpose: |
190 one is <A HREF="http://asmjs.org">asm.js</A> and the other is |
189 one is <A HREF="http://asmjs.org">asm.js</A> and the other is |
191 <A HREF="https://github.com/kripken/emscripten/wiki">emscripten</A>. |
190 <A HREF="https://github.com/kripken/emscripten/wiki">emscripten</A>. |
192 There is a <A HREF="https://github.com/kripken/emscripten/wiki/Tutorial">tutorial</A> for emscripten |
191 There is a <A HREF="http://kripken.github.io/emscripten-site/docs/getting_started/Tutorial.html">tutorial</A> for emscripten |
193 and an impressive <A HREF="http://www.unrealengine.com/html5/">demo</A> which runs the |
192 and an impressive <A HREF="http://www.unrealengine.com/html5/">demo</A> which runs the |
194 <A HREF="http://en.wikipedia.org/wiki/Unreal_Engine">Unreal Engine 3</A> |
193 <A HREF="http://en.wikipedia.org/wiki/Unreal_Engine">Unreal Engine 3</A> |
195 in a browser with spectacular speed. This was achieved by compiling the |
194 in a browser with spectacular speed. This was achieved by compiling the |
196 C-code of the Unreal Engine to the LLVM intermediate language and then translating the LLVM |
195 C-code of the Unreal Engine to the LLVM intermediate language and then translating the LLVM |
197 code to JavaScript. |
196 code to JavaScript. |
212 Intel's official manual for the x86 instruction is |
211 Intel's official manual for the x86 instruction is |
213 <A HREF="http://download.intel.com/design/intarch/manuals/24319101.pdf">here</A>. |
212 <A HREF="http://download.intel.com/design/intarch/manuals/24319101.pdf">here</A>. |
214 A simple assembler for the JVM is described <A HREF="http://jasmin.sourceforge.net">here</A>. |
213 A simple assembler for the JVM is described <A HREF="http://jasmin.sourceforge.net">here</A>. |
215 An interesting twist of this project is to not generate code for a CPU, but |
214 An interesting twist of this project is to not generate code for a CPU, but |
216 for the intermediate language of the <A HREF="http://llvm.org">LLVM</A> compiler |
215 for the intermediate language of the <A HREF="http://llvm.org">LLVM</A> compiler |
217 (also described <A HREF="https://wiki.aalto.fi/display/t1065450/LLVM+IR">here</A> and |
216 (also described <A HREF="http://llvm.org/docs/LangRef.html">here</A>). If you want to see |
218 <A HREF="http://llvm.org/docs/LangRef.html">here</A>). If you want to see |
|
219 what machine code looks like you can compile your C-program using gcc -S. |
217 what machine code looks like you can compile your C-program using gcc -S. |
220 </p> |
218 </p> |
221 <p> |
219 <p> |
222 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. |
220 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. |
223 <A HREF="http://jsbooks.revolunet.com">Here</A> is a list of free books on JavaScript. |
221 <A HREF="http://jsbooks.revolunet.com">Here</A> is a list of free books on JavaScript. |
241 But if Scala is a problem, my code can also be translated quickly into any other functional |
239 But if Scala is a problem, my code can also be translated quickly into any other functional |
242 language. |
240 language. |
243 </p> |
241 </p> |
244 |
242 |
245 <p> |
243 <p> |
246 <B>PS:</B> Compiler projects, like this [CU2] and [CU6], consistently received high marks in the past. |
244 <B>PS:</B> Compiler projects, like this one or [CU6], consistently received high marks in the past. |
247 I suprvised four so far and none of them received a mark below 70% - one even was awarded a prize. |
245 I suprvised four so far and none of them received a mark below 70% - one even was awarded a prize. |
248 </p> |
246 </p> |
249 |
247 |
250 <li> <H4>[CU3] Slide-Making in the Web-Age</H4> |
248 <li> <H4>[CU3] Slide-Making in the Web-Age</H4> |
251 |
249 |
272 |
270 |
273 <p> |
271 <p> |
274 It seems HTML and JavaScript are much better suited for generating |
272 It seems HTML and JavaScript are much better suited for generating |
275 such animated slides. This <A HREF="http://www.impressivewebs.com/html-slidedeck-toolkits/">page</A> |
273 such animated slides. This <A HREF="http://www.impressivewebs.com/html-slidedeck-toolkits/">page</A> |
276 links to 22 slide-generating programs using this combination of technologies. |
274 links to 22 slide-generating programs using this combination of technologies. |
277 <A HREF="http://www.impressivewebs.com/html-slidedeck-toolkits/">Here</A> are even more such |
275 However, the problem with all of these project is that they depend heavily on the users being |
278 projects. However, the problem with all of these project is that they depend heavily on the users being |
|
279 able to write JavaScript, CCS or HTML...not something one would like to depend on given that |
276 able to write JavaScript, CCS or HTML...not something one would like to depend on given that |
280 “normal” users likely only have a LaTeX background. The aim of this project is to invent a |
277 “normal” users likely only have a LaTeX background. The aim of this project is to invent a |
281 very simple language that is inspired by LaTeX and then generate from code written in this language |
278 very simple language that is inspired by LaTeX and then generate from code written in this language |
282 slides that can be displayed in a web-browser. |
279 slides that can be displayed in a web-browser. |
283 </p> |
280 </p> |
309 appropriate libraries. Tutorials for JavaScript are <A HREF="http://www.w3schools.com/js/">here</A>. |
306 appropriate libraries. Tutorials for JavaScript are <A HREF="http://www.w3schools.com/js/">here</A>. |
310 A parser generator for JavaScript is <A HREF="http://pegjs.majda.cz">here</A>. There are probably also |
307 A parser generator for JavaScript is <A HREF="http://pegjs.majda.cz">here</A>. There are probably also |
311 others. If you want to avoid JavaScript there are a number of alternatives: for example the |
308 others. If you want to avoid JavaScript there are a number of alternatives: for example the |
312 <A HREF="http://elm-lang.org">Elm</A> |
309 <A HREF="http://elm-lang.org">Elm</A> |
313 language has been especially designed for implementing easily interactive animations, which would be |
310 language has been especially designed for implementing easily interactive animations, which would be |
314 very conveninet for this project. |
311 very convenient for this project. |
315 </p> |
312 </p> |
316 |
313 |
317 <li> <H4>[CU4] An Online Student Voting System</H4> |
314 <li> <H4>[CU4] An Online Student Voting System</H4> |
318 |
315 |
319 <p> |
316 <p> |
320 <B>Description:</B> |
317 <B>Description:</B> |
321 One of the more annoying aspects of giving a lecture is to ask a question |
318 One of the more annoying aspects of giving a lecture is to ask a question |
322 to the students and no matter how easy the question is to not |
319 to the students and no matter how easy the question is to not |
323 receive any answer. Recently, the online course system |
320 receive any answer. The online course system |
324 <A HREF="http://www.udacity.com">Udacity</A> made an art out of |
321 <A HREF="http://www.udacity.com">Udacity</A>, in contrast, made an art out of |
325 asking questions during lectures (see for example the |
322 asking questions during lectures (see for example the |
326 <A HREF="http://www.udacity.com/overview/Course/cs253/CourseRev/apr2012">Web Application Engineering</A> |
323 <A HREF="http://www.udacity.com/overview/Course/cs253/CourseRev/apr2012">Web Application Engineering</A> |
327 course CS253). |
324 course CS253). |
328 The lecturer there gives multiple-choice questions as part of the lecture and the students need to |
325 The lecturer there gives multiple-choice questions as part of the lecture and the students need to |
329 click on the appropriate answer. This works very well in the online world. |
326 click on the appropriate answer. This works very well in the online world. |
363 </p> |
360 </p> |
364 |
361 |
365 <p> |
362 <p> |
366 <B>Literature:</B> |
363 <B>Literature:</B> |
367 The project requires fluency in a web-programming language (for example |
364 The project requires fluency in a web-programming language (for example |
368 <A HREF="http://en.wikipedia.org/wiki/JavaScript">Javascript</A>, |
365 <A HREF="http://en.wikipedia.org/wiki/JavaScript">JavaScript</A>, |
369 <A HREF="http://en.wikipedia.org/wiki/Go_(programming_language)">Go</A>, |
366 <A HREF="http://en.wikipedia.org/wiki/Go_(programming_language)">Go</A>, |
370 <A HREF="http://www.scala-lang.org/">Scala</A>). However JavaScript with |
367 <A HREF="http://www.scala-lang.org/">Scala</A>). However JavaScript with |
371 the <A HREF="http://nodejs.org">Node.js</A> extension seems to be best suited for the job. |
368 the <A HREF="http://nodejs.org">Node.js</A> extension seems to be best suited for the job. |
372 <A HREF="http://www.nodebeginner.org">Here</A> is a tutorial on Node.js for beginners. |
369 <A HREF="http://www.nodebeginner.org">Here</A> is a tutorial on Node.js for beginners. |
373 For web-programming the |
370 For web-programming the |
395 <B>Description:</B> |
392 <B>Description:</B> |
396 This project is for true hackers! <A HREF="http://en.wikipedia.org/wiki/Raspberry_Pi">Raspberry Pi's</A> |
393 This project is for true hackers! <A HREF="http://en.wikipedia.org/wiki/Raspberry_Pi">Raspberry Pi's</A> |
397 are small Linux computers the size of a credit-card and only cost £34 (see picture left below). They were introduced |
394 are small Linux computers the size of a credit-card and only cost £34 (see picture left below). They were introduced |
398 in 2012 and people went crazy...well some of them. There is a |
395 in 2012 and people went crazy...well some of them. There is a |
399 <A HREF="https://plus.google.com/communities/113390432655174294208?hl=en">Google+</A> community about Raspberry Pi's that has more |
396 <A HREF="https://plus.google.com/communities/113390432655174294208?hl=en">Google+</A> community about Raspberry Pi's that has more |
400 than 150k of followers. It is hard to keep up with what people do with these small computers. The possibilities |
397 than 172k of followers. It is hard to keep up with what people do with these small computers. The possibilities |
401 seem to be limitless. The main resource for Raspberry Pi's is <A HREF="http://www.raspberrypi.org">here</A>. |
398 seem to be limitless. The main resource for Raspberry Pi's is <A HREF="http://www.raspberrypi.org">here</A>. |
402 There are <A HREF="http://www.themagpi.com">magazines</A> dedicated to them and tons of |
399 There are <A HREF="http://www.themagpi.com">magazines</A> dedicated to them and tons of |
403 <A HREF="http://www.raspberrypi.org/phpBB3/viewforum.php?f=39">books</A> (not to mention |
400 <A HREF="http://www.raspberrypi.org/phpBB3/viewforum.php?f=39">books</A> (not to mention |
404 floods of <A HREF="https://www.google.co.uk/search?q=raspberry+pi">online</A> material). |
401 floods of <A HREF="https://www.google.co.uk/search?q=raspberry+pi">online</A> material). |
405 Google just released a |
402 Google just released a |