--- a/msc-projects-12.html Sat Nov 17 13:56:30 2012 +0000
+++ b/msc-projects-12.html Sat Nov 17 20:04:29 2012 +0000
@@ -57,8 +57,8 @@
PPDP'12 conference. The task in this project is to implement the results from this paper.</p>
<p>The background for this project is that some regular expressions are
- "<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>"
- and can "stab you in the back" according to
+ “<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>”
+ and can “stab you in the back” according to
this <A HREF="http://tech.blog.cueup.com/regular-expressions-will-stab-you-in-the-back">blog post</A>.
For example, if you use in <A HREF="http://www.python.org">Python</A> or
in <A HREF="http://www.ruby-lang.org/en/">Ruby</A> (probably also in other mainstream programming languages) the
@@ -69,7 +69,7 @@
<A HREF="http://www.dcs.kcl.ac.uk/staff/urbanc/cgi-bin/repos.cgi/afl-material/raw-file/tip/re-internal.rb">re.rb</A>
(Ruby version). You can imagine an attacker
mounting a nice <A HREF="http://en.wikipedia.org/wiki/Denial-of-service_attack">DoS attack</A> against
- your program if it contains such an "evil" regular expression. Actually
+ your program if it contains such an “evil” regular expression. Actually
<A HREF="http://www.scala-lang.org/">Scala</A> (and also Java) are almost immune from such
attacks as they can deal with strings of up to 4,300 <code>a</code>s in less than a second. But if you scale
the regular expression and string further to, say, 4,600 <code>a</code>s, then you get a <code>StackOverflowError</code>
@@ -87,7 +87,7 @@
<A HREF="http://lambda-the-ultimate.org/node/2293">derivatives of regular expressions</A>.
These derivatives were introduced in 1964 by <A HREF="http://en.wikipedia.org/wiki/Janusz_Brzozowski_(computer_scientist)">
Janusz Brzozowski</A>, but according to this
- <A HREF="http://www.cl.cam.ac.uk/~so294/documents/jfp09.pdf">paper</A> had been lost in the "sands of time".
+ <A HREF="http://www.cl.cam.ac.uk/~so294/documents/jfp09.pdf">paper</A> had been lost in the “sands of time”.
The advantage of derivatives is that they side-step completely the usual
<A HREF="http://hackingoff.com/compilers/regular-expression-to-nfa-dfa">translations</A> of regular expressions
into NFAs or DFAs, which can introduce the exponential behaviour exhibited by the regular
@@ -106,7 +106,7 @@
I used them once myself in a <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/Publications/rexp.pdf">paper</A>
in order to prove the <A HREF="http://en.wikipedia.org/wiki/Myhill–Nerode_theorem">Myhill-Nerode theorem</A>.
So I know they are worth their money. Still, it would be interesting to actually compare their results
- with my simple rainy-afternoon matcher and potentially "blow away" the regular expression matchers
+ with my simple rainy-afternoon matcher and potentially “blow away” the regular expression matchers
in Python and Ruby (and possibly in Scala too).
</p>
@@ -124,7 +124,7 @@
<A HREF="https://www.coursera.org/course/automata">Coursera</A>, though IMHO not
done with love.
Finally, there are millions of other pointers about regular expression
- matching on the Net. Test cases for "<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>"
+ matching on the Net. Test cases for “<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>”
regular expressions can be obtained from <A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">here</A>.
</p>
@@ -183,7 +183,7 @@
<B>Skills:</B>
This is a project for a student with very good programming
and <A HREF="http://en.wikipedia.org/wiki/Hacker_(programmer_subculture)">hacking</A> skills.
- Some knowledge in JavaScript, HTML and CSS cannot hurt The algorithms from automata
+ Some knowledge in JavaScript, HTML and CSS cannot hurt. The algorithms from automata
theory are fairly standard material.
</p>
@@ -295,7 +295,7 @@
This project is similar to [CU3]. The emphasis here, however, is on the
implementation and comparison of register spilling algorithms, also often called register allocation
algorithms. They are part of any respectable compiler. As said
- in [CU3], however, my simple compiler lacks them and assumes an infinite amount of registers instead.
+ in [CU3] my simple compiler lacks them and assumes an infinite amount of registers instead.
Real CPUs however only provide a fixed amount of registers (for example
x86-64 has 16 general purpose registers). Whenever a program needs
to hold more values than registers, the values need to be “spilled”
@@ -383,9 +383,10 @@
<p>
However, there is one restriction that makes this project harder than it seems
- as first sight. The department does not allow large server applications and databases
- to be run on calcium - the central server in the department. So the problem should be solved with as few resources needed
- on the "back-end" which collects the votes.
+ at first sight: The department does not allow large server applications and databases
+ to be run on calcium, which is the central server in the department. So the problem
+ should be solved with as few resources as possible
+ on the “back-end” collecting the votes.
</p>
<p>