bsc-projects-14.html
changeset 316 116648aeeac8
parent 315 4c8ecc515721
child 317 532effd5eff9
equal deleted inserted replaced
315:4c8ecc515721 316:116648aeeac8
   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 &ldquo;blow away&rdquo; the regular expression matchers 
   113   with my simple rainy-afternoon matcher and potentially &ldquo;blow away&rdquo; 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 &ldquo;<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>&rdquo;
   134   Test cases for &ldquo;<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>&rdquo;
   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   &ldquo;normal&rdquo; users likely only have a LaTeX background. The aim of this project is to invent a
   277   &ldquo;normal&rdquo; 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 &pound;34 (see picture left below). They were introduced
   394   are small Linux computers the size of a credit-card and only cost &pound;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
   610 </TD>
   607 </TD>
   611 </TR>
   608 </TR>
   612 </TABLE>
   609 </TABLE>
   613 
   610 
   614 <P>
   611 <P>
   615 <!-- hhmts start --> Last modified: Fri Sep 19 17:40:41 BST 2014 <!-- hhmts end -->
   612 <!-- hhmts start --> Last modified: Fri Sep 19 18:04:17 BST 2014 <!-- hhmts end -->
   616 <a href="http://validator.w3.org/check/referer">[Validate this page.]</a>
   613 <a href="http://validator.w3.org/check/referer">[Validate this page.]</a>
   617 </BODY>
   614 </BODY>
   618 </HTML>
   615 </HTML>