diff options
author | Jed Barber <jedb@bootes.lan> | 2021-06-28 00:21:26 +1200 |
---|---|---|
committer | Jed Barber <jedb@bootes.lan> | 2021-06-28 00:21:26 +1200 |
commit | e59ca4a3eaa53d66fb2dcd3ddbdd86d99b04b7c8 (patch) | |
tree | ba3223acbe2e99513adc0ecd9812f188a1a4ad2d | |
parent | 3a1a7a4d62dce554436aa8c23e980204a481c7b4 (diff) |
Converted everything to XHTML 1.1
31 files changed, 650 insertions, 584 deletions
diff --git a/project/assets/css/default.css b/project/assets/css/default.css index 827c218..8e09c9b 100644 --- a/project/assets/css/default.css +++ b/project/assets/css/default.css @@ -26,8 +26,10 @@ div.white { } -figure { +div.figure { text-align: center; + margin-top: 1em; + margin-bottom: 1em; margin-left: 0.5em; margin-right: 0.5em; } @@ -109,19 +111,28 @@ p { } +a.external { + background: url("/img/external_link.png"); + background-size: 1em 1em; + background-position: right; + background-repeat: no-repeat; + padding-right: 1.2em; +} + + /* Display the navbar like a table to make it horizontal and evenly spaced. */ -nav ul { +div.nav ul { display: table; width: 100%; margin: 0.5em auto 0.5em auto; padding: 0; } -nav ul li { +div.nav ul li { display: table-cell; text-align: center; margin: 0; @@ -129,14 +140,4 @@ nav ul li { width: 20%; } -/* -nav ul li:first-child { - text-align: left; -} - -nav ul li:last-child { - text-align: right; -} -*/ - diff --git a/project/assets/css/steelman.css b/project/assets/css/steelman.css index d0f2c2a..14bc84b 100644 --- a/project/assets/css/steelman.css +++ b/project/assets/css/steelman.css @@ -1,6 +1,6 @@ -section.accordian { +div.accordian { margin: 1em 2em 2em 2em; } diff --git a/project/assets/img/external_link.png b/project/assets/img/external_link.png Binary files differnew file mode 100644 index 0000000..9d8dd9d --- /dev/null +++ b/project/assets/img/external_link.png diff --git a/project/templates/about.html b/project/templates/about.html index 2648b2e..c2c744c 100644 --- a/project/templates/about.html +++ b/project/templates/about.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/about.css" rel="stylesheet"> + <link href="/css/about.css" rel="stylesheet" /> {% endblock %} @@ -17,17 +17,17 @@ <h4>About Me</h4> -<p>Have you ever looked at the way things are done and just wanted to make it <em>better</em>? I feel -like that all the time. It's not even a matter of introducing something new. The field of computing is -littered with ideas that are well researched, have working prototypes, yet ended up abandoned decades -ago for no apparent reason. I expect other fields are probably similar. One of my goals in life is to -reduce this gap between what's known and what's actually used. Mainly in software development, because -that's what I'm most familiar with.</p> +<p>Have you ever looked at the way things are done and just wanted to make it <em>better</em>? I +feel like that all the time. It's not even a matter of introducing something new. The field of +computing is littered with ideas that are well researched, have working prototypes, yet ended up +abandoned decades ago for no apparent reason. I expect other fields are probably similar. One of my +goals in life is to reduce this gap between what's known and what's actually used. Mainly in +software development, because that's what I'm most familiar with.</p> -<p>So this website is primarily about hosting and talking about programming projects. Expect a bunch of -smaller less useful pieces before I get to the good stuff. But also expect electronics, civics, foreign -languages... basically anything catching my interest about which I can say something data driven or -otherwise interesting.</p> +<p>So this website is primarily about hosting and talking about programming projects. Expect a bunch +of smaller less useful pieces before I get to the good stuff. But also expect electronics, civics, +foreign languages... basically anything catching my interest about which I can say something data +driven or otherwise interesting.</p> <h4>Qualifications</h4> @@ -39,7 +39,8 @@ otherwise interesting.</p> </ul> <p>In 2012 I almost completed an extra honours year in computer science, before finding out that I'm -really not cut out for research. My mindset is too focused on solving problems. Practical problems.</p> +really not cut out for research. My mindset is too focused on solving problems. Practical problems. +</p> <h4>Contact</h4> diff --git a/project/templates/adapad.html b/project/templates/adapad.html index 299db68..6e0501f 100644 --- a/project/templates/adapad.html +++ b/project/templates/adapad.html @@ -16,29 +16,30 @@ <h5>8/5/2017</h5> <p>The Ada binding for FLTK has now been moved to its own <a href="/cgit/cgit.cgi/fltkada">repository</a>. -Installing it is required to build and use Adapad, naturally. Both repositories are set up to use the GNAT -Project Manager build tools to handle all that, with any further specific details in each project's readme.</p> +Installing it is required to build and use Adapad, naturally. Both repositories are set up to use +the GNAT Project Manager build tools to handle all that, with any further specific details in each +project's readme.</p> <h5>2/1/2017</h5> -<p>I have a soft spot for the <a href="http://www.adaic.org/" target="_blank">Ada programming language</a>. +<p>I have a soft spot for the <a href="http://www.adaic.org/" class="external">Ada programming language</a>. Strong typing, built in concurrency, readable syntax, systems support, real-time support, a general -culture of correctness and emphasising reliability... what's not to like? I also have a bit of an interest -in <a href="http://www.fltk.org/index.php" target="_blank">FLTK</a>, being one of the more prominent tiny -graphics toolkits around. Adapad is a notepad clone born as a side project from efforts to create an Ada -binding for FLTK.</p> +culture of correctness and emphasising reliability... what's not to like? I also have a bit of an +interest in <a href="http://www.fltk.org/index.php" class="external">FLTK</a>, being one of the more +prominent tiny graphics toolkits around. Adapad is a notepad clone born as a side project from +efforts to create an Ada binding for FLTK.</p> -<figure> +<div class="figure"> <img src="/img/adapad_screenshot.png" alt="A screenshot of Adapad" height="568" - width="862"> - <figcaption>Adapad in action</figcaption> -</figure> + width="862" /> + <div class="figcaption">Adapad in action</div> +</div> -<p>It was modeled after <a href="http://tarot.freeshell.org/leafpad/" target="_blank">Leafpad</a>, and -the feature list is similar, currently comprising:</p> +<p>It was modeled after <a href="http://tarot.freeshell.org/leafpad/" class="external">Leafpad</a>, +and the feature list is similar, currently comprising:</p> <ul> <li>Cut/Copy/Paste</li> @@ -53,11 +54,11 @@ the feature list is similar, currently comprising:</p> <p>This is approximately what I was going for. However, at the current time of writing it is still considered to be at v0.8 due to a few minor issues, such as the horizontal scrollbar appearing even -when only vertical scroll is possible. That may be an FLTK issue, but that's not an excuse from an end -user perspective.</p> +when only vertical scroll is possible. That may be an FLTK issue, but that's not an excuse from an +end user perspective.</p> -<p>The FLTK/Ada binding currently occupies the same repository as Adapad, but will be moved to its own as work -progresses.</p> +<p>The FLTK/Ada binding currently occupies the same repository as Adapad, but will be moved to its +own as work progresses.</p> {% endblock %} diff --git a/project/templates/base.html b/project/templates/base.html index 8b117d1..5c0e547 100644 --- a/project/templates/base.html +++ b/project/templates/base.html @@ -1,18 +1,20 @@ -<!DOCTYPE html> -<html lang="en"> +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE html PUBLIC + "-//W3C//DTD XHTML 1.1//EN" + "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>{% block title %}{% endblock %}</title> - <link href="/css/default.css" rel="stylesheet"> + <link href="/css/default.css" rel="stylesheet" /> {% block style %} {% endblock %} </head> <body> <div class="white"> <h2>Jedidiah Barber's Personal Site</h2> - <hr> - <nav> + <hr /> + <div class="nav"> <ul> <li><a href="/">Index</a></li> <li><a href="/about.html">About</a></li> @@ -20,13 +22,13 @@ <li><a href="/cgit">Git</a></li> <li><a href="/links.html">Links</a></li> </ul> - </nav> - <hr> - <article> + </div> + <hr /> + <div class="article"> {% block content %} {% endblock %} - </article> - <hr> + </div> + <hr /> </div> </body> </html> diff --git a/project/templates/base_math.html b/project/templates/base_math.html new file mode 100644 index 0000000..a0fff19 --- /dev/null +++ b/project/templates/base_math.html @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE html PUBLIC + "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" + "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> +<head> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <title>{% block title %}{% endblock %}</title> + <link href="/css/default.css" rel="stylesheet" /> + {% block style %} + {% endblock %} +</head> +<body> + <div class="white"> + <h2>Jedidiah Barber's Personal Site</h2> + <hr /> + <div class="nav"> + <ul> + <li><a href="/">Index</a></li> + <li><a href="/about.html">About</a></li> + <li><a href="/tags.html">Tags</a></li> + <li><a href="/cgit">Git</a></li> + <li><a href="/links.html">Links</a></li> + </ul> + </div> + <hr /> + <div class="article"> + {% block content %} + {% endblock %} + </div> + <hr /> + </div> +</body> +</html> + diff --git a/project/templates/fltkada.html b/project/templates/fltkada.html index b7abb59..99f4749 100644 --- a/project/templates/fltkada.html +++ b/project/templates/fltkada.html @@ -11,15 +11,16 @@ <h4>FLTK Ada Binding</h4> -<p>Git repository: <a href="/cgit/cgit.cgi/fltkada">Link</a><br> +<p>Git repository: <a href="/cgit/cgit.cgi/fltkada">Link</a><br /> Estimated status: 80% complete</p> <h5>21/5/2018</h5> -<p>This binding is now complete enough for most purposes. It certainly took more effort than expected, in -part due to underestimation of how much needed binding. The vast majority of useful classes are now usable -in Ada, with a few exceptions such as the Fl_Browser, Fl_Help_View, Fl_Table, and Fl_Tree widgets.</p> +<p>This binding is now complete enough for most purposes. It certainly took more effort than +expected, in part due to underestimation of how much needed binding. The vast majority of useful +classes are now usable in Ada, with a few exceptions such as the Fl_Browser, Fl_Help_View, Fl_Table, +and Fl_Tree widgets.</p> <p>Noteworthy features and modifications include:</p> <ul> @@ -27,29 +28,32 @@ in Ada, with a few exceptions such as the Fl_Browser, Fl_Help_View, Fl_Table, an <li>Additional types have been defined and used to clean up the API</li> <li>No heap allocation/deallocation necessary</li> <li>Ada 2012 iterators are implemented for Group and Menu widgets</li> - <li>The API for Menu and Menu_Item has been rearranged to better reflect a container/item dichotomy</li> + <li>The API for Menu and Menu_Item has been rearranged to better reflect a container/item + dichotomy</li> <li>The Draw and Handle widget methods are easily overridable</li> <li>Static methods from the base Fl.H header have been split up into multiple packages</li> - <li>Automatic addition of widgets to a Group with fl_group_begin and fl_group_end is not supported</li> + <li>Automatic addition of widgets to a Group with fl_group_begin and fl_group_end is not + supported</li> </ul> -<p>A mapping of what C++ headers and methods correspond to what Ada packages, functions, and procedures is -included. Also, the below "Hello world" code sample has been modified to work with the updated binding.</p> +<p>A mapping of what C++ headers and methods correspond to what Ada packages, functions, and +procedures is included. Also, the below "Hello world" code sample has been modified to work with the +updated binding.</p> <h5>25/6/2017</h5> -<p>FLTK, or by its full name the <a href="http://www.fltk.org/" target="_blank">Fast Light Toolkit</a>, -is a graphical widget toolkit noteworthy for being so lightweight that it is commonly statically linked. -Projects that make use of it include the <a href="http://www.dillo.org/" target="_blank">Dillo</a> web -browser, the <a href="http://flwm.sourceforge.net/" target="_blank">FLWM</a> X window manager, and the -<a href="http://www.equinox-project.org/" target="_blank">Equinox Desktop Environment</a>. There are -bindings for it in several languages, including Python, Perl and Ruby, but not Ada. Until now!</p> +<p>FLTK, or by its full name the <a href="http://www.fltk.org/" class="external">Fast Light Toolkit</a>, +is a graphical widget toolkit noteworthy for being so lightweight that it is commonly statically +linked. Projects that make use of it include the <a href="http://www.dillo.org/" class="external">Dillo</a> web browser, the <a href="http://flwm.sourceforge.net/" class="external">FLWM</a> X window manager, +and the <a href="http://www.equinox-project.org/" class="external">Equinox Desktop Environment</a>. +There are bindings for it in several languages, including Python, Perl and Ruby, but not Ada. Until +now!</p> -<p>This is a spinoff from Adapad, and so despite not yet being complete it can be at least guaranteed to -be enough to write a text editor. It's a thick, loosely coupled binding, accomplished by first exporting -the interface to C, then importing that to Ada. Attempted usage of the internal C interface as a binding -on its own is not supported.</p> +<p>This is a spinoff from Adapad, and so despite not yet being complete it can be at least +guaranteed to be enough to write a text editor. It's a thick, loosely coupled binding, accomplished +by first exporting the interface to C, then importing that to Ada. Attempted usage of the internal C +interface as a binding on its own is not supported.</p> <p>A typical FLTK Hello World program in Ada:</p> <div class="precontain"> @@ -77,13 +81,14 @@ end Hello_World; </code> </div> -<p>Aside from reworking the types to better fit the strongly typed philosophy of Ada, the entire library has -been structured to avoid explicit heap usage. As you can see from the above example, the intended use is to -declare FLTK objects on the stack. Allocation and deallocation of the C++ internals is handled automatically.</p> +<p>Aside from reworking the types to better fit the strongly typed philosophy of Ada, the entire +library has been structured to avoid explicit heap usage. As you can see from the above example, the +intended use is to declare FLTK objects on the stack. Allocation and deallocation of the C++ +internals is handled automatically.</p> -<p>A few other minor changes were involved, such as requiring widgets to be explicitly added to a group rather -than implicitly being added to the last group not yet ended. At the moment the package specifications should -provide sufficient information to allow programmers to work with the library.</p> +<p>A few other minor changes were involved, such as requiring widgets to be explicitly added to a +group rather than implicitly being added to the last group not yet ended. At the moment the package specifications should provide sufficient information to allow programmers to work with the library. +</p> {% endblock %} diff --git a/project/templates/grasp.html b/project/templates/grasp.html index f5543ea..7eddc3c 100644 --- a/project/templates/grasp.html +++ b/project/templates/grasp.html @@ -15,44 +15,45 @@ <h5>1/1/2017</h5> -<p>Like Lisp, the esoteric programming language <a href="http://esolangs.org/wiki/Grasp" target="_blank"> -Grasp</a> is a homoiconic language that exclusively uses a single datatype. Except instead of lists, it -uses directed graphs.</p> +<p>Like Lisp, the esoteric programming language <a href="http://esolangs.org/wiki/Grasp" class="external"> +Grasp</a> is a homoiconic language that exclusively uses a single datatype. Except instead of lists, +it uses directed graphs.</p> <p>A Grasp program is initialised with instruction pointers to those nodes in the graph that have a "name" edge to a node with the value "grasp:main". The nodes at each instruction pointer are evaluated and the pointer then updated by following an available "next" edge. This continues until all instruction pointers have no more "next" edges to follow.</p> -<figure> +<div class="figure"> <img src="/img/grasp_helloworld.png" alt="Hello World in Grasp" height="176" - width="268"> - <figcaption>Hello World in Grasp</figcaption> -</figure> + width="268" /> + <div class="figcaption">Hello World in Grasp</div> +</div> -<p>In the <a href="https://github.com/fis/grajsp/wiki/Grasp-specification" target="_blank">current +<p>In the <a href="https://github.com/fis/grajsp/wiki/Grasp-specification" class="external">current specification</a>, the actions that can be performed are:</p> <ul> <li>Add or delete an edge</li> <li>Change the value of a node</li> <li>Add, subtract, multiply, divide, or modulo node values</li> - <li>Call and return from functions, which take the form of subgraphs with named entry points</li> + <li>Call and return from functions, which take the form of subgraphs with named entry points + </li> <li>Read and write from arbitrary file handles</li> <li>Push, pop and pick a section of nodes arranged to act as a stack</li> </ul> <p>The execution of a node may be skipped by having "cond" edges pointing to either zero values or -non-numeric values. Also, due to the way instruction pointers update and the way several instructions -are defined, there is a measure of non-determinism that can be introduced depending on what -edges are available.</p> +non-numeric values. Also, due to the way instruction pointers update and the way several +instructions are defined, there is a measure of non-determinism that can be introduced depending on +what edges are available.</p> <p>The language seemed like an interesting enough idea, but unfortunately nobody had done anything with it, and there was only a specification. This has now been fixed. The interpreter currently -uses a subset of the <a href="http://www.graphviz.org/doc/info/lang.html" target="_blank">DOT graph description language</a> -for the file format, to enable a text format as well as relatively easy conversion to a graph image.</p> +uses a subset of the <a href="http://www.graphviz.org/doc/info/lang.html" class="external">DOT graph description language</a> for the file format, to enable a text format as well as relatively easy +conversion to a graph image.</p> <p>The above example is recorded as follows:</p> <div class="precontain"> diff --git a/project/templates/index.html b/project/templates/index.html index ba5e849..2e81d90 100644 --- a/project/templates/index.html +++ b/project/templates/index.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/index.css" rel="stylesheet"> + <link href="/css/index.css" rel="stylesheet" /> {% endblock %} @@ -19,8 +19,8 @@ {%- for item in articles -%} {%- if item.updated -%}{%- set postclass = "update" -%}{%- else -%}{%- set postclass = "post" -%}{%- endif -%} {%- if item.updated -%}{%- set postverb = "Updated" -%}{%- else -%}{%- set postverb = "Posted" -%}{%- endif %} - <li><a href="{{ item.anchor }}">{{ item.title }}</a><br> - <span class="taglist">{{ item.taglist | join(", ") }}</span><br> + <li><a href="{{ item.anchor }}">{{ item.title }}</a><br /> + <span class="taglist">{{ item.taglist | join(", ") }}</span><br /> <span class="{{ postclass }}">({{ postverb }} {{ item.postdate }})</span></li> {%- endfor %} </ul> diff --git a/project/templates/integral.html b/project/templates/integral.html index 0e5307b..1c9d175 100644 --- a/project/templates/integral.html +++ b/project/templates/integral.html @@ -1,5 +1,5 @@ -{% extends "base.html" %} +{% extends "base_math.html" %} @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/integral.css" rel="stylesheet"> + <link href="/css/integral.css" rel="stylesheet" /> {% endblock %} @@ -21,25 +21,26 @@ <h5>29/12/2018</h5> -<p>A definite integral can be represented on the xy-plane as the signed area -bounded by the curve of the function f(x), the x-axis, and the limits of -integration a and b. But it's not immediately clear how this definition applies -for complex valued functions.</p> +<p>A definite integral can be represented on the xy-plane as the signed area bounded by the curve of +the function f(x), the x-axis, and the limits of integration a and b. But it's not immediately clear +how this definition applies for complex valued functions.</p> <p>Consider the following example:</p> <div class="precontain"><div class="mathblock"> <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> - <msubsup> - <mo>∫</mo> + <munderover> + <mo>∫</mo> <mn>0</mn> <mn>1</mn> - </msubsup> + </munderover> <msup> - <mfenced> + <mrow> + <mo>(</mo> <mn>-1</mn> - </mfenced> + <mo>)</mo> + </mrow> <mi>x</mi> </msup> <mi>dx</mi> @@ -47,70 +48,68 @@ for complex valued functions.</p> </math> </div></div> -<p>If the function is graphed on the xy-plane, the real valued outputs are sparse. -Yet an elementary antiderivative exists and the definite integral is well defined.</p> +<p>If the function is graphed on the xy-plane, the real valued outputs are sparse. Yet an elementary +antiderivative exists and the definite integral is well defined.</p> -<figure> +<div class="figure"> <img src="/img/minus_one_exp_x_real_values_only.png" alt="Real values only plot of minus one raised to the x power" height="400" - width="520"> - <figcaption>Figure 1 - Real values only</figcaption> -</figure> - -<p>In order to plot a meaningful graph that can be used to potentially calculate -the integral as a signed area, some cues are taken from Philip Lloyd's work on -<a href="https://phantomgraphs.weebly.com/" target="_blank">Phantom Graphs</a>. -In that work, an additional z-axis is used to extend the x-axis into a complex -xz-plane, allowing complex inputs to be graphed. For the function considered -here, the z-axis is instead used to extend the y-axis into a complex yz-plane -to allow graphing of complex outputs instead.</p> + width="520" /> + <div class="figcaption">Figure 1 - Real values only</div> +</div> + +<p>In order to plot a meaningful graph that can be used to potentially calculate the integral as a +signed area, some cues are taken from Philip Lloyd's work on +<a href="https://phantomgraphs.weebly.com/" class="external">Phantom Graphs</a>. In that work, an +additional z-axis is used to extend the x-axis into a complex xz-plane, allowing complex inputs to +be graphed. For the function considered here, the z-axis is instead used to extend the y-axis into a +complex yz-plane to allow graphing of complex outputs instead.</p> <p>Upon doing so, the following helical graph is obtained:</p> -<figure> +<div class="figure"> <img src="/img/minus_one_exp_x_full_plot.png" alt="Complete three dimensional graph of all values of minux one raised to the x power" height="400" - width="520"> - <figcaption>Figure 2 - Full graph</figcaption> -</figure> + width="520" /> + <div class="figcaption">Figure 2 - Full graph</div> +</div> -<p>The curve is continuous and spirals around the x-axis, intersecting with the -real xy-plane at the points plotted in the initial graph of Figure 1. However -it is still not clear how to represent the area under the curve.</p> +<p>The curve is continuous and spirals around the x-axis, intersecting with the real xy-plane at the +points plotted in the initial graph of Figure 1. However it is still not clear how to represent the +area under the curve.</p> -<p>Observing that complex numbers in cartesian form are composed of a real -part and an imaginary part, it is possible to decompose the function -into real and imaginary components. These are easy to obtain by rotating the -graph above to view the real and imaginary parts as flat planes.</p> +<p>Observing that complex numbers in cartesian form are composed of a real part and an imaginary +part, it is possible to decompose the function into real and imaginary components. These are easy to +obtain by rotating the graph above to view the real and imaginary parts as flat planes.</p> <table id="component"> <tr> <td> - <figure> + <div class="figure"> <img src="/img/cos_pi_x.png" alt="Graph of the real component of minus one raised to the power of x" height="400" - width="520"> - <figcaption>Figure 3 - Real component</figcaption> - </figure> + width="520" /> + <div class="figcaption">Figure 3 - Real component</div> + </div> </td> <td> - <figure> + <div class="figure"> <img src="/img/sin_pi_x.png" alt="Graph of the imaginary component of minus one raised to the power of x" height="400" - width="520"> - <figcaption>Figure 4 - Imaginary component</figcaption> - </figure> + width="520" /> + <div class="figcaption">Figure 4 - Imaginary component</div> + </div> </td> </tr> </table> -<p>From this it can be seen that the function is a combination of a real valued -cosine and an imaginary valued sine. With the limits of integration under -consideration, the real values disappear and we are left with the following:</p> +<p>From this it can be seen that the function is a combination of a real valued cosine and an +imaginary valued sine. With the limits of integration under consideration, the real values disappear +and we are left with the following:</p> <div class="precontain"><div class="mathblock"> <table> @@ -118,15 +117,17 @@ consideration, the real values disappear and we are left with the following:</p> <td colspan="2"> <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> - <msubsup> - <mo>∫</mo> + <munderover> + <mo>∫</mo> <mn>0</mn> <mn>1</mn> - </msubsup> + </munderover> <msup> - <mfenced> + <mrow> + <mo>(</mo> <mn>-1</mn> - </mfenced> + <mo>)</mo> + </mrow> <mi>x</mi> </msup> <mi>dx</mi> @@ -140,19 +141,19 @@ consideration, the real values disappear and we are left with the following:</p> <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> <mi>i</mi> - <msubsup> - <mo>∫</mo> + <munderover> + <mo>∫</mo> <mn>0</mn> <mn>1</mn> - </msubsup> + </munderover> <mi>sin</mi> - <mfenced> - <mrow> - <mi>π</mi> - <mo>⁢</mo> - <mi>x</mi> - </mrow> - </mfenced> + <mrow> + <mo>(</mo> + <mi>π</mi> + <mo>⁢</mo> + <mi>x</mi> + <mo>)</mo> + </mrow> <mi>dx</mi> </mrow> </math> @@ -166,19 +167,19 @@ consideration, the real values disappear and we are left with the following:</p> <mo>-</mo> <mfrac> <mi>i</mi> - <mi>π</mi> + <mi>π</mi> </mfrac> <msubsup> <menclose notation="right"> <mrow> <mi>cos</mi> - <mfenced> - <mrow> - <mi>π</mi> - <mo>⁢</mo> - <mi>x</mi> - </mrow> - </mfenced> + <mrow> + <mo>(</mo> + <mi>π</mi> + <mo>⁢</mo> + <mi>x</mi> + <mo>)</mo> + </mrow> </mrow> </menclose> <mn>0</mn> @@ -196,15 +197,15 @@ consideration, the real values disappear and we are left with the following:</p> <mo>-</mo> <mfrac> <mi>i</mi> - <mi>π</mi> + <mi>π</mi> </mfrac> - <mfenced> - <mrow> - <mn>-1</mn> - <mo>-</mo> - <mn>1</mn> - </mrow> - </mfenced> + <mrow> + <mo>(</mo> + <mn>-1</mn> + <mo>-</mo> + <mn>1</mn> + <mo>)</mo> + </mrow> </mrow> </math> </td> @@ -217,9 +218,9 @@ consideration, the real values disappear and we are left with the following:</p> <mfrac> <mrow> <mn>2</mn> - <mi>i</mn> + <mi>i</mi> </mrow> - <mi>π</mi> + <mi>π</mi> </mfrac> </mrow> </math> @@ -228,14 +229,14 @@ consideration, the real values disappear and we are left with the following:</p> </table> </div></div> -<p>This agrees with the answer obtained by ordinary evaluation of the integral -without considering the graph, so the informal area under the curve definition -still works. Considering the area under the curve using polar coordinates also -works, but requires evaluating a less than pleasant infinite sum and so won't -be considered here.</p> +<p>This agrees with the answer obtained by ordinary evaluation of the integral without considering +the graph, so the informal area under the curve definition still works. Considering the area under +the curve using polar coordinates also works, but requires evaluating a less than pleasant infinite +sum and so won't be considered here.</p> <p>The next interesting question is how this relates to the surface area of a -<a href="https://www.mathcurve.com/surfaces.gb/helicoiddroit/helicoiddroit.shtml" target="_blank">right helicoid</a>.</p> +<a href="https://www.mathcurve.com/surfaces.gb/helicoiddroit/helicoiddroit.shtml" class="external"> +right helicoid</a>.</p> {% endblock %} diff --git a/project/templates/links.html b/project/templates/links.html index 54a0678..c7640f5 100644 --- a/project/templates/links.html +++ b/project/templates/links.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/links.css" rel="stylesheet"> + <link href="/css/links.css" rel="stylesheet" /> {% endblock %} @@ -17,193 +17,194 @@ <h4>Links</h4> -<p>These are some of the websites that found their way into my bookmarks over the years. Quite a few years, -since some of these require the Wayback Machine to view now. Posted because if I find these pages interesting, -chances are someone else might too. Note that this list is not anywhere near exhaustive.<br> -<br> -Please do not send me suggestions for websites to put here. While I am sure you mean well, I much prefer to -discover these things for myself.</p> +<p>These are some of the websites that found their way into my bookmarks over the years. Quite a +few years, since some of these require the Wayback Machine to view now. Posted because if I find +these pages interesting, chances are someone else might too. Note that this list is not anywhere +near exhaustive.<br /> +<br /> +Please do not send me suggestions for websites to put here. While I am sure you mean well, I much +prefer to discover these things for myself.</p> <div class="colcontain"> <div class="colleft"> <div class="content"> <h5>Blogs</h5> <ul> - <li><a href="http://esr.ibiblio.org/" target="_blank"> + <li><a href="http://esr.ibiblio.org/" class="external"> Armed and Dangerous</a></li> - <li><a href="http://linuxfinances.info/info/total.html" target="_blank"> + <li><a href="http://linuxfinances.info/info/total.html" class="external"> Christopher Browne's Web Pages</a></li> - <li><a href="https://www.damninteresting.com/" target="_blank"> + <li><a href="https://www.damninteresting.com/" class="external"> Damn Interesting</a></li> - <li><a href="http://danluu.com/" target="_blank"> + <li><a href="http://danluu.com/" class="external"> Dan Luu</a></li> - <li><a href="https://igurublog.wordpress.com/" target="_blank"> + <li><a href="https://igurublog.wordpress.com/" class="external"> IgnorantGuru's Blog</a></li> - <li><a href="http://ithare.com/" target="_blank"> + <li><a href="http://ithare.com/" class="external"> IT Hare</a></li> - <li><a href="https://joelw.id.au/" target="_blank"> + <li><a href="https://joelw.id.au/" class="external"> Joel's Compendium of Total Knowledge</a></li> - <li><a href="https://qntm.org/" target="_blank"> + <li><a href="https://qntm.org/" class="external"> Things of Interest</a></li> - <li><a href="http://www.waynesthisandthat.com/" target="_blank"> + <li><a href="http://www.waynesthisandthat.com/" class="external"> Wayne's This and That</a></li> </ul> <h5>Books</h5> <ul> - <li><a href="http://web.archive.org/web/20090413002834/http://title.forbiddenlibrary.com/" target="_blank"> + <li><a href="http://web.archive.org/web/20090413002834/http://title.forbiddenlibrary.com/" class="external"> Banned and Challenged Books</a></li> - <li><a href="http://b-ok.org/" target="_blank"> + <li><a href="http://b-ok.org/" class="external"> Electronic Library</a></li> - <li><a href="http://www.vbtutor.net/Xiyouji/journeytothewest.htm" target="_blank"> + <li><a href="http://www.vbtutor.net/Xiyouji/journeytothewest.htm" class="external"> Journey to the West</a></li> - <li><a href="https://mirtitles.org/" target="_blank"> + <li><a href="https://mirtitles.org/" class="external"> Mir Books</a></li> </ul> <h5>Computer Hardware</h5> <ul> - <li><a href="http://fpgacomputing.blogspot.ca/2006/12/asynchronous-adiabatic-systems.html" target="_blank"> + <li><a href="http://fpgacomputing.blogspot.ca/2006/12/asynchronous-adiabatic-systems.html" class="external"> Asynchronous, Adiabatic Systems</a></li> - <li><a href="http://homebrewcpu.com/" target="_blank"> + <li><a href="http://homebrewcpu.com/" class="external"> Homebrew CPU Magic-1</a></li> - <li><a href="http://www.logicalincrements.com/" target="_blank"> + <li><a href="http://www.logicalincrements.com/" class="external"> Logical Increments</a></li> - <li><a href="http://lowendmac.com/" target="_blank"> + <li><a href="http://lowendmac.com/" class="external"> Low End Mac</a></li> - <li><a href="http://www.lowrisc.org/" target="_blank"> + <li><a href="http://www.lowrisc.org/" class="external"> LowRISC</a></li> - <li><a href="http://www.megaprocessor.com/" target="_blank"> + <li><a href="http://www.megaprocessor.com/" class="external"> Megaprocessor</a></li> - <li><a href="https://www.mram-info.com/" target="_blank"> + <li><a href="https://www.mram-info.com/" class="external"> MRAM Info</a></li> - <li><a href="http://netfpga.org/site/#/" target="_blank"> + <li><a href="http://netfpga.org/site/#/" class="external"> NetFPGA</a></li> - <li><a href="https://www.fsf.org/resources/hw/endorsement/respects-your-freedom" target="_blank"> + <li><a href="https://www.fsf.org/resources/hw/endorsement/respects-your-freedom" class="external"> Respects Your Freedom</a></li> - <li><a href="http://www.pcguide.com/topicnf.html" target="_blank"> + <li><a href="http://www.pcguide.com/topicnf.html" class="external"> The PC Guide</a></li> - <li><a href="http://visual6502.org/" target="_blank"> + <li><a href="http://visual6502.org/" class="external"> Visual 6502</a></li> </ul> <h5>DIY</h5> <ul> - <li><a href="http://www.backyardmetalcasting.com/" target="_blank"> + <li><a href="http://www.backyardmetalcasting.com/" class="external"> Backyard Metalcasting</a></li> - <li><a href="https://web.archive.org/web/20110522214933/http://www.interestingprojects.com:80/cruisemissile/" target="_blank"> + <li><a href="https://web.archive.org/web/20110522214933/http://www.interestingprojects.com:80/cruisemissile/" class="external"> Cruise Missile</a></li> - <li><a href="http://moonshine-still.com/" target="_blank"> + <li><a href="http://moonshine-still.com/" class="external"> Distillation Apparatus</a></li> - <li><a href="http://www.velomobiel.nl/allert/Recumbent%20motorbike.htm" target="_blank"> + <li><a href="http://www.velomobiel.nl/allert/Recumbent%20motorbike.htm" class="external"> Feetforward Motorbike</a></li> - <li><a href="http://www.fpga4fun.com/" target="_blank"> + <li><a href="http://www.fpga4fun.com/" class="external"> FPGA4Fun</a></li> - <li><a href="http://www.gizmology.net/index.htm" target="_blank"> + <li><a href="http://www.gizmology.net/index.htm" class="external"> Gizmologist's Lair</a></li> - <li><a href="http://hackaday.com/" target="_blank"> + <li><a href="http://hackaday.com/" class="external"> Hackaday</a></li> - <li><a href="https://web.archive.org/web/20100714085157/http://home.c2i.net/metaphor/mvpage.html" target="_blank"> + <li><a href="https://web.archive.org/web/20100714085157/http://home.c2i.net/metaphor/mvpage.html" class="external"> Melting Metal in a Domestic Microwave</a></li> - <li><a href="http://alumni.media.mit.edu/~mellis/cellphone/" target="_blank"> + <li><a href="http://alumni.media.mit.edu/~mellis/cellphone/" class="external"> Mobile Phone</a></li> - <li><a href="http://192.197.62.35/staff/mcsele/lasers/index.html" target="_blank"> + <li><a href="http://192.197.62.35/staff/mcsele/lasers/index.html" class="external"> The Professor's Homebuilt Lasers Site</a></li> </ul> <h5>Electronics</h5> <ul> - <li><a href="http://www.bunniestudios.com/" target="_blank"> + <li><a href="http://www.bunniestudios.com/" class="external"> bunnie's blog</a></li> - <li><a href="http://www.cathodecorner.com/index.html" target="_blank"> + <li><a href="http://www.cathodecorner.com/index.html" class="external"> Cathode Corner</a></li> - <li><a href="http://www.gstube.com/" target="_blank"> + <li><a href="http://www.gstube.com/" class="external"> GS Tube</a></li> - <li><a href="http://www.amazing1.com/" target="_blank"> + <li><a href="http://www.amazing1.com/" class="external"> Information Unlimited</a></li> - <li><a href="http://www.opencircuits.com/Main_Page" target="_blank"> + <li><a href="http://www.opencircuits.com/Main_Page" class="external"> Open Circuits</a></li> - <li><a href="http://www.myropcb.com/" target="_blank"> + <li><a href="http://www.myropcb.com/" class="external"> Prototype and Low Volume PCB Assembly</a></li> - <li><a href="http://www.richieburnett.co.uk/tesla.shtml" target="_blank"> + <li><a href="http://www.richieburnett.co.uk/tesla.shtml" class="external"> Richie's Tesla Coil Webpage</a></li> </ul> <h5>Fitness and Cycling</h5> <ul> - <li><a href="http://liamrosen.com/fitness.html" target="_blank"> + <li><a href="http://liamrosen.com/fitness.html" class="external"> Beginner's Guide to Health and Fitness</a></li> - <li><a href="http://john-s-allen.com/gears/hubratios.htm" target="_blank"> + <li><a href="http://john-s-allen.com/gears/hubratios.htm" class="external"> Drive Ratios of Bicycle Hub Gears</a></li> - <li><a href="http://sheldonbrown.com/" target="_blank"> + <li><a href="http://sheldonbrown.com/" class="external"> Sheldon Brown's Bicycle Technical Info</a></li> - <li><a href="https://www.strongerbyscience.com/" target="_blank"> + <li><a href="https://www.strongerbyscience.com/" class="external"> Stronger by Science</a></li> </ul> <h5>Food</h5> <ul> - <li><a href="http://dbkitschen.blogspot.ca/" target="_blank"> + <li><a href="http://dbkitschen.blogspot.ca/" class="external"> Dr Bobb's Kitschen</a></li> - <li><a href="http://www.drinksmixer.com/" target="_blank"> + <li><a href="http://www.drinksmixer.com/" class="external"> Drinks Mixer</a></li> - <li><a href="http://www.pimpthatsnack.com/index.php" target="_blank"> + <li><a href="http://www.pimpthatsnack.com/index.php" class="external"> Pimp That Snack</a></li> - <li><a href="http://www.exploratorium.edu/cooking/index.html" target="_blank"> + <li><a href="http://www.exploratorium.edu/cooking/index.html" class="external"> Science of Cooking</a></li> </ul> <h5>Foreign Languages</h5> <ul> - <li><a href="https://djtguide.neocities.org/" target="_blank"> + <li><a href="https://djtguide.neocities.org/" class="external"> DJT Guide</a></li> - <li><a href="http://how-to-learn-any-language.com/e/index.html" target="_blank"> + <li><a href="http://how-to-learn-any-language.com/e/index.html" class="external"> How to Learn Any Language</a></li> - <li><a href="http://www.guidetojapanese.org/learn/grammar" target="_blank"> + <li><a href="http://www.guidetojapanese.org/learn/grammar" class="external"> Japanese Grammar Guide</a></li> - <li><a href="https://www.tofugu.com/japanese/japanese-reading-practice-for-beginners/" target="_blank"> + <li><a href="https://www.tofugu.com/japanese/japanese-reading-practice-for-beginners/" class="external"> Japanese Reading Practice for Beginners</a></li> - <li><a href="http://kanjidamage.com/" target="_blank"> + <li><a href="http://kanjidamage.com/" class="external"> Kanji Damage</a></li> </ul> <h5>Gaming</h5> <ul> - <li><a href="http://hg101.kontek.net/" target="_blank"> + <li><a href="http://hg101.kontek.net/" class="external"> Hardcore Gaming 101</a></li> - <li><a href="http://homeoftheunderdogs.net/" target="_blank"> + <li><a href="http://homeoftheunderdogs.net/" class="external"> Home of the Underdogs</a></li> - <li><a href="http://www.lostlevels.org/" target="_blank"> + <li><a href="http://www.lostlevels.org/" class="external"> Lost Levels</a></li> - <li><a href="http://www.romhacking.net/" target="_blank"> + <li><a href="http://www.romhacking.net/" class="external"> Romhacking.net</a></li> - <li><a href="http://speeddemosarchive.com/" target="_blank"> + <li><a href="http://speeddemosarchive.com/" class="external"> Speed Demos Archive</a></li> - <li><a href="http://tasvideos.org/" target="_blank"> + <li><a href="http://tasvideos.org/" class="external"> TASVideos</a></li> - <li><a href="http://www.nesworld.com/mirror/nr.php" target="_blank"> + <li><a href="http://www.nesworld.com/mirror/nr.php" class="external"> Unreleased NES Games</a></li> - <li><a href="http://www.wonder-tonic.com/wolf1d/" target="_blank"> + <li><a href="http://www.wonder-tonic.com/wolf1d/" class="external"> Wolfenstein 1D</a></li> </ul> <h5>General Computing</h5> <ul> - <li><a href="https://www.nngroup.com/articles/anti-mac-interface/" target="_blank"> + <li><a href="https://www.nngroup.com/articles/anti-mac-interface/" class="external"> Anti-Mac User Interface</a></li> - <li><a href="http://cat-v.org/" target="_blank"> + <li><a href="http://cat-v.org/" class="external"> Cat-v.org</a></li> - <li><a href="http://world.std.com/~reinhold/diceware.html" target="_blank"> + <li><a href="http://world.std.com/~reinhold/diceware.html" class="external"> Diceware Passphrases</a></li> - <li><a href="https://wiki.installgentoo.com/index.php/Main_Page" target="_blank"> + <li><a href="https://wiki.installgentoo.com/index.php/Main_Page" class="external"> InstallGentoo Wiki</a></li> - <li><a href="https://liteweb.neocities.org/" target="_blank"> + <li><a href="https://liteweb.neocities.org/" class="external"> LiteWeb</a></li> - <li><a href="http://www.sudden.net/view/" target="_blank"> + <li><a href="http://www.sudden.net/view/" class="external"> Sudden View Text Editor</a></li> - <li><a href="https://thatoneprivacysite.net/" target="_blank"> + <li><a href="https://thatoneprivacysite.net/" class="external"> That One Privacy Site</a></li> - <li><a href="http://www.ranum.com/security/computer_security/editorials/dumb/" target="_blank"> + <li><a href="http://www.ranum.com/security/computer_security/editorials/dumb/" class="external"> The Six Dumbest Ideas in Computer Security</a></li> </ul> </div> @@ -212,175 +213,175 @@ discover these things for myself.</p> <div class="content"> <h5>Math and Logic</h5> <ul> - <li><a href="http://www.scottaaronson.com/blog/?p=2725" target="_blank"> + <li><a href="http://www.scottaaronson.com/blog/?p=2725" class="external"> 8000th Busy Beaver Number Eludes ZF Set Theory</a></li> - <li><a href="http://www.kleinbottle.com/" target="_blank"> + <li><a href="http://www.kleinbottle.com/" class="external"> Acme Klein Bottles</a></li> - <li><a href="http://www.askamathematician.com/" target="_blank"> + <li><a href="http://www.askamathematician.com/" class="external"> Ask a Mathematician / Ask a Physicist</a></li> - <li><a href="https://web.archive.org/web/20080207053918/http://abel.math.umu.se/Grundutbildning/lion.html" target="_blank"> + <li><a href="https://web.archive.org/web/20080207053918/http://abel.math.umu.se/Grundutbildning/lion.html" class="external"> Big Game Hunting</a></li> - <li><a href="http://www-users.cs.york.ac.uk/susan/joke/polly.htm" target="_blank"> + <li><a href="http://www-users.cs.york.ac.uk/susan/joke/polly.htm" class="external"> Impure Mathematics: The Adventures of Polly Nomial</a></li> - <li><a href="https://storiesandnarratives.tumblr.com/post/124972869715/how-to-play-strip-iterated-prisoners-dilemma" target="_blank"> + <li><a href="https://storiesandnarratives.tumblr.com/post/124972869715/how-to-play-strip-iterated-prisoners-dilemma" class="external"> Strip Iterated Prisoner's Dilemma</a></li> - <li><a href="http://eusebeia.dyndns.org/veblen/etf.html" target="_blank"> + <li><a href="http://eusebeia.dyndns.org/veblen/etf.html" class="external"> The Exploding Tree Function</a></li> - <li><a href="http://blog.geomblog.org/" target="_blank"> + <li><a href="http://blog.geomblog.org/" class="external"> The Geomblog</a></li> - <li><a href="https://golem.ph.utexas.edu/category/" target="_blank"> + <li><a href="https://golem.ph.utexas.edu/category/" class="external"> The n-Category Cafe</a></li> - <li><a href="https://www.dwheeler.com/essays/bases.html" target="_blank"> + <li><a href="https://www.dwheeler.com/essays/bases.html" class="external"> Way Off Base</a></li> </ul> <h5>Operating Systems</h5> <ul> - <li><a href="http://distrowatch.com/" target="_blank"> + <li><a href="http://distrowatch.com/" class="external"> Distrowatch</a></li> - <li><a href="http://itvision.altervista.org/why.linux.is.not.ready.for.the.desktop.current.html" target="_blank"> + <li><a href="http://itvision.altervista.org/why.linux.is.not.ready.for.the.desktop.current.html" class="external"> Main Linux Problems on the Desktop</a></li> - <li><a href="https://marte.unican.es/" target="_blank"> + <li><a href="https://marte.unican.es/" class="external"> MaRTE OS</a></li> - <li><a href="http://www.menuetos.net/index.htm" target="_blank"> + <li><a href="http://www.menuetos.net/index.htm" class="external"> MenuetOS</a></li> - <li><a href="https://web.archive.org/web/20130411210254/https://pdos.csail.mit.edu/exo.html" target="_blank"> + <li><a href="https://web.archive.org/web/20130411210254/https://pdos.csail.mit.edu/exo.html" class="external"> MIT Exokernel Operating System</a></li> - <li><a href="http://wiki.osdev.org/Main_Page" target="_blank"> + <li><a href="http://wiki.osdev.org/Main_Page" class="external"> OSDev Wiki</a></li> - <li><a href="http://tunes.org/Review/OSes.html" target="_blank"> + <li><a href="http://tunes.org/Review/OSes.html" class="external"> Review of Operating Systems</a></li> - <li><a href="https://theosperiment.wordpress.com/" target="_blank"> + <li><a href="https://theosperiment.wordpress.com/" class="external"> The OS|periment</a></li> - <li><a href="http://without-systemd.org/wiki/index.php/Main_Page" target="_blank"> + <li><a href="http://without-systemd.org/wiki/index.php/Main_Page" class="external"> Without Systemd</a></li> - <li><a href="https://web.archive.org/web/20130326162240/http://geezer.osdevbrasil.net/osd/index.htm" target="_blank"> + <li><a href="https://web.archive.org/web/20130326162240/http://geezer.osdevbrasil.net/osd/index.htm" class="external"> Write Your Own OS</a></li> </ul> <h5>Other</h5> <ul> - <li><a href="http://www.artofmanliness.com/" target="_blank"> + <li><a href="http://www.artofmanliness.com/" class="external"> Art of Manliness</a></li> - <li><a href="http://www.wtfjapanseriously.com/" target="_blank"> + <li><a href="http://www.wtfjapanseriously.com/" class="external"> Flipside Japan</a></li> - <li><a href="http://longplayer.org/" target="_blank"> + <li><a href="http://longplayer.org/" class="external"> Longplayer</a></li> - <li><a href="http://blog.alinelerner.com/resumes-suck-heres-the-data/" target="_blank"> + <li><a href="http://blog.alinelerner.com/resumes-suck-heres-the-data/" class="external"> Resumes Suck: Here's the Data</a></li> - <li><a href="http://stuffonmycat.com/" target="_blank"> + <li><a href="http://stuffonmycat.com/" class="external"> Stuff On My Cat</a></li> - <li><a href="http://www.textfiles.com/" target="_blank"> + <li><a href="http://www.textfiles.com/" class="external"> Textfiles Dot Com</a></li> - <li><a href="http://slatestarcodex.com/2014/12/17/the-toxoplasma-of-rage/" target="_blank"> + <li><a href="http://slatestarcodex.com/2014/12/17/the-toxoplasma-of-rage/" class="external"> The Toxoplasma of Rage</a></li> </ul> <h5>Politics and Law</h5> <ul> - <li><a href="http://www.austlii.edu.au/" target="_blank"> + <li><a href="http://www.austlii.edu.au/" class="external"> Australasian Legal Information Institute</a></li> - <li><a href="http://sealedabstract.com/rants/beyond-open-source/" target="_blank"> + <li><a href="http://sealedabstract.com/rants/beyond-open-source/" class="external"> Beyond Open Source</a></li> - <li><a href="http://electionroyalcommission.org.au/" target="_blank"> + <li><a href="http://electionroyalcommission.org.au/" class="external"> Electoral Royal Commission</a></li> - <li><a href="http://hcsoftware.sourceforge.net/jason-rohrer/freeDistribution.html" target="_blank"> + <li><a href="http://hcsoftware.sourceforge.net/jason-rohrer/freeDistribution.html" class="external"> Free Distribution</a></li> - <li><a href="https://web.archive.org/web/20090123151120/http://www.privacyinternational.org:80/article.shtml?cmd%5B347%5D=x-347-559597" target="_blank"> + <li><a href="https://web.archive.org/web/20090123151120/http://www.privacyinternational.org:80/article.shtml?cmd%5B347%5D=x-347-559597" class="external"> Leading Surveillance Societies 2007</a></li> - <li><a href="https://nbnmyths.wordpress.com/" target="_blank"> + <li><a href="https://nbnmyths.wordpress.com/" class="external"> NBN Myths</a></li> - <li><a href="https://pirateparty.org.au/" target="_blank"> + <li><a href="https://pirateparty.org.au/" class="external"> Pirate Party Australia</a></li> - <li><a href="http://www.refused-classification.com/" target="_blank"> + <li><a href="http://www.refused-classification.com/" class="external"> Refused Classification</a></li> - <li><a href="https://www.reddit.com/r/australia/comments/1stklc/australians_should_never_forgive_nor_forget_that/" target="_blank"> + <li><a href="https://www.reddit.com/r/australia/comments/1stklc/australians_should_never_forgive_nor_forget_that/" class="external"> VS Telstra</a></li> </ul> <h5>Programming</h5> <ul> - <li><a href="http://www2.seas.gwu.edu/~adagroup/sigada-website/lawlis.html" target="_blank"> + <li><a href="http://www2.seas.gwu.edu/~adagroup/sigada-website/lawlis.html" class="external"> Ada Outperforms Assembly: A Case Study</a></li> - <li><a href="http://www.plantation-productions.com/Webster/" target="_blank"> + <li><a href="http://www.plantation-productions.com/Webster/" class="external"> Art of Assembly Language Programming</a></li> - <li><a href="https://catseye.tc/" target="_blank"> + <li><a href="https://catseye.tc/" class="external"> Cat's Eye Technologies</a></li> - <li><a href="https://blog.regehr.org/" target="_blank"> + <li><a href="https://blog.regehr.org/" class="external"> Embedded in Academia</a></li> - <li><a href="http://esolangs.org/wiki/Main_Page" target="_blank"> + <li><a href="http://esolangs.org/wiki/Main_Page" class="external"> Esolang Wiki</a></li> - <li><a href="http://ewontfix.com/" target="_blank"> + <li><a href="http://ewontfix.com/" class="external"> EWONTFIX</a></li> - <li><a href="http://bitemyapp.com/posts/2014-12-31-functional-education.html" target="_blank"> + <li><a href="http://bitemyapp.com/posts/2014-12-31-functional-education.html" class="external"> Functional Education</a></li> - <li><a href="https://www.gamedev.net/" target="_blank"> + <li><a href="https://www.gamedev.net/" class="external"> GameDev</a></li> - <li><a href="http://lambda-the-ultimate.org/" target="_blank"> + <li><a href="http://lambda-the-ultimate.org/" class="external"> Lambda the Ultimate</a></li> - <li><a href="http://okmij.org/ftp/" target="_blank"> + <li><a href="http://okmij.org/ftp/" class="external"> okmij.org</a></li> - <li><a href="http://p-nand-q.com/index.html" target="_blank"> + <li><a href="http://p-nand-q.com/index.html" class="external"> P NAND Q</a></li> - <li><a href="http://probabilistic-programming.org/wiki/Home" target="_blank"> + <li><a href="http://probabilistic-programming.org/wiki/Home" class="external"> Probabilistic Programming</a></li> - <li><a href="http://www.somethinkodd.com/oddthinking/category/geek/software-development/rat1000/" target="_blank"> + <li><a href="http://www.somethinkodd.com/oddthinking/category/geek/software-development/rat1000/" class="external"> Rational 1000</a></li> - <li><a href="https://wiki.theory.org/index.php/YourLanguageSucks" target="_blank"> + <li><a href="https://wiki.theory.org/index.php/YourLanguageSucks" class="external"> Your Language Sucks</a></li> </ul> <h5>Science</h5> <ul> - <li><a href="https://sites.google.com/site/scienceandmathguide/" target="_blank"> + <li><a href="https://sites.google.com/site/scienceandmathguide/" class="external"> /sci/ guide</a></li> - <li><a href="http://www.leapsecond.com/pages/atomic-bill/" target="_blank"> + <li><a href="http://www.leapsecond.com/pages/atomic-bill/" class="external"> First Atomic Clock Wristwatch</a></li> - <li><a href="http://www.polarization.com/haidinger/haidinger.html" target="_blank"> + <li><a href="http://www.polarization.com/haidinger/haidinger.html" class="external"> Haidinger's Brush: The Unknown Sense</a></li> - <li><a href="https://arxiv.org/abs/quant-ph/0510032" target="_blank"> + <li><a href="https://arxiv.org/abs/quant-ph/0510032" class="external"> Kindergarten Quantum Mechanics</a></li> - <li><a href="http://www.chm.bris.ac.uk/sillymolecules/sillymols.htm" target="_blank"> + <li><a href="http://www.chm.bris.ac.uk/sillymolecules/sillymols.htm" class="external"> Molecules With Silly or Unusual Names</a></li> - <li><a href="http://periodictable.com/" target="_blank"> + <li><a href="http://periodictable.com/" class="external"> Photographic Periodic Table of the Elements</a></li> - <li><a href="https://www.physicsforums.com/" target="_blank"> + <li><a href="https://www.physicsforums.com/" class="external"> Physics Forums</a></li> - <li><a href="http://physicsopenlab.org/" target="_blank"> + <li><a href="http://physicsopenlab.org/" class="external"> Physics Open Lab</a></li> - <li><a href="http://www.sciencemadness.org/" target="_blank"> + <li><a href="http://www.sciencemadness.org/" class="external"> Science Madness</a></li> - <li><a href="http://sci-toys.com/" target="_blank"> + <li><a href="http://sci-toys.com/" class="external"> Science Toys</a></li> - <li><a href="http://blogs.sciencemag.org/pipeline/archives/category/things-i-wont-work-with" target="_blank"> + <li><a href="http://blogs.sciencemag.org/pipeline/archives/category/things-i-wont-work-with" class="external"> Things I Won't Work With</a></li> - <li><a href="http://unitednuclear.com/" target="_blank"> + <li><a href="http://unitednuclear.com/" class="external"> United Nuclear</a></li> </ul> <h5>Travel and Transportation</h5> <ul> - <li><a href="http://www.darkroastedblend.com/2007/04/dry-valleys-of-antarctica.html" target="_blank"> + <li><a href="http://www.darkroastedblend.com/2007/04/dry-valleys-of-antarctica.html" class="external"> Dry Valleys of Antarctica</a></li> - <li><a href="http://www.ifitweremyhome.com/" target="_blank"> + <li><a href="http://www.ifitweremyhome.com/" class="external"> If It Were My Home</a></li> - <li><a href="http://www.infiltration.org/" target="_blank"> + <li><a href="http://www.infiltration.org/" class="external"> Infiltration</a></li> - <li><a href="http://www.monorails.org/" target="_blank"> + <li><a href="http://www.monorails.org/" class="external"> Monorail Society</a></li> - <li><a href="http://englishrussia.com/2006/11/08/russian-smallest-submarine/" target="_blank"> + <li><a href="http://englishrussia.com/2006/11/08/russian-smallest-submarine/" class="external"> Russian Smallest Submarine</a></li> - <li><a href="http://www.amusingplanet.com/2013/05/tabletop-mountains-or-tepuis-of.html" target="_blank"> + <li><a href="http://www.amusingplanet.com/2013/05/tabletop-mountains-or-tepuis-of.html" class="external"> Tabletop Mountains of Venezuela</a></li> - <li><a href="http://vienna-pyongyang.blogspot.ca/" target="_blank"> + <li><a href="http://vienna-pyongyang.blogspot.ca/" class="external"> The Forbidden Railway: Vienna - Pyongyang</a></li> - <li><a href="http://www.travelite.org/" target="_blank"> + <li><a href="http://www.travelite.org/" class="external"> The Travelite FAQ</a></li> - <li><a href="http://transitmap.net/" target="_blank"> + <li><a href="http://transitmap.net/" class="external"> Transit Maps</a></li> - <li><a href="http://www.lightpollution.it/worldatlas/pages/fig1.htm" target="_blank"> + <li><a href="http://www.lightpollution.it/worldatlas/pages/fig1.htm" class="external"> World Atlas of Artificial Night Sky Brightness</a></li> - <li><a href="https://en.tutiempo.net/" target="_blank"> + <li><a href="https://en.tutiempo.net/" class="external"> World Weather</a></li> </ul> </div> diff --git a/project/templates/packrat.html b/project/templates/packrat.html index 117c69a..17dbfc0 100644 --- a/project/templates/packrat.html +++ b/project/templates/packrat.html @@ -12,7 +12,7 @@ <h4>Packrat Parser Combinator Library</h4> -<p>Git repository: <a href="/cgit/cgit.cgi/packrat">Link</a><br> +<p>Git repository: <a href="/cgit/cgit.cgi/packrat">Link</a><br /> Paper this was based on: <a href="http://richard.myweb.cs.uwindsor.ca/PUBLICATIONS/PREPRINT_PADL_NOV_07.pdf">Link</a></p> <h5>2/2/2021</h5> @@ -20,17 +20,16 @@ Paper this was based on: <a href="http://richard.myweb.cs.uwindsor.ca/PUBLICATIO <h5>Overview</h5> -<p>Parser combinators are what you end up with when you start factoring out common pieces of functionality from -<a href="http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm">recursive descent parsing</a>. They are higher order -functions that can be combined in modular ways to create a desired parser.</p> +<p>Parser combinators are what you end up with when you start factoring out common pieces of +functionality from <a href="http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm">recursive descent parsing</a>. They are higher order functions that can be combined in modular ways to create a desired parser.</p> -<p>However they also inherit the drawbacks of recursive descent parsing, and in particular recursive descent -parsing with backtracking. If the grammar that the parser is designed to accept contains left recursion then -the parser will loop infinitely. If the grammar is ambiguous then only one result will be obtained. And any result -may require exponential time and space to calculate.</p> +<p>However they also inherit the drawbacks of recursive descent parsing, and in particular recursive +descent parsing with backtracking. If the grammar that the parser is designed to accept contains +left recursion then the parser will loop infinitely. If the grammar is ambiguous then only one +result will be obtained. And any result may require exponential time and space to calculate.</p> -<p>This library, based on the paper linked at the top, solves all those problems and a few bits more. As an -example, the following grammar portion:</p> +<p>This library, based on the paper linked at the top, solves all those problems and a few bits +more. As an example, the following grammar portion:</p> <div class="precontain"> <pre> @@ -65,74 +64,81 @@ function Expression is new Stamp (Expression_Label, Expr_Choice); </code> </div> -<p>Most of the verbosity is caused by the need to individually instantiate each combinator, as generics are -used to serve the same purpose as higher order functions. Some bits are also omitted, such as the label -enumeration and the actual setting of the redirectors. But the above should provide a good general -impression.</p> +<p>Most of the verbosity is caused by the need to individually instantiate each combinator, as +generics are used to serve the same purpose as higher order functions. Some bits are also omitted, +such as the label enumeration and the actual setting of the redirectors. But the above should +provide a good general impression.</p> <h5>Features</h5> <p>A list of features that this library provides includes:</p> <ul> - <li>Higher order combinator functions in Ada, a language that does not support functional programming</li> + <li>Higher order combinator functions in Ada, a language that does not support functional + programming</li> <li>Both parser combinators and simpler lexer combinators are available</li> <li>Input can be any array, whether that is text strings or otherwise</li> <li>Left recursive grammars are parsed correctly with no infinite loops</li> - <li>Ambiguity is handled by incorporating all possible valid options into the resulting parse tree</li> - <li>Parsing and lexing can both be done piecewise, providing input in successive parts instead of all at once</li> - <li>Error messages are generated when applicable that note what would have been needed and where for a successful parse</li> + <li>Ambiguity is handled by incorporating all possible valid options into the resulting parse tree + </li> + <li>Parsing and lexing can both be done piecewise, providing input in successive parts instead of + all at once</li> + <li>Error messages are generated when applicable that note what would have been needed and where + for a successful parse</li> <li>All of the above is accomplished in polynomial worst case time and space complexity</li> </ul> <p>More thorough documentation is provided in the <em>/doc</em> directory.</p> -<p>The name of the library comes from <a href="https://bford.info/pub/lang/packrat-icfp02.pdf">packrat parsing</a> -which is a parsing algorithm that avoids exponential time complexity by memoizing all intermediate results. As that -is what this library does, both so as to reduce the time complexity and to enable piecewise parsing, the name -seemed appropriate.</p> +<p>The name of the library comes from <a href="https://bford.info/pub/lang/packrat-icfp02.pdf">packrat parsing</a> which is a parsing algorithm that avoids exponential time complexity by memoizing all intermediate results. As that is what this library does, both so as to reduce the time complexity +and to enable piecewise parsing, the name seemed appropriate.</p> <h5>Left Recursion</h5> -<p>Direct left recursion, meaning a grammar non-terminal that immediately recurses to itself on the left as in -the <em>Expression</em> or <em>Term</em> used above, is fairly easy to handle. A counter is used to keep track -of how many times a particular combinator has been applied to the input at a particular position, and when that -counter exceeds the number of unconsumed input tokens plus one the result is curtailed. This is explained on -pages 7 and 8 of the paper.</p> - -<p>The really thorny issue that caused the most problems with this library is indirect left recursion. This is -when a non-terminal recurses to itself on the left only after first evaluating to one or more other non-terminals. -Curtailment in these circumstances can easily cause those other non-terminals to also be curtailed, and reusing -the results for those other non-terminals may be incorrect. This issue along with a proposed solution is -explained on page 9 of the paper. However that solution was not as clear as would be preferred. So some minor -rephrasing and reworking was needed.</p> - -<p>Bringing this problem back to the start: What are we really doing when we curtail a result due to left -recursion? It is not a matter of cutting off branches in a parse tree. We are identifying conditions where the -parse result of a particular non-terminal can be calculated without further recursion. The word "curtailment" is -somewhat misleading in this regard. Once this reframing is done then a clearer view immediately follows.</p> - -<p>What is the condition? Exactly as described above for direct left recursion. Through comparing recursion counts -with the amount of unconsumed input we determine that a result of no successful parse can be calculated, and that -the result is valid for reuse for any deeper recursion of the same combinator at that input position.</p> +<p>Direct left recursion, meaning a grammar non-terminal that immediately recurses to itself on the +left as in the <em>Expression</em> or <em>Term</em> used above, is fairly easy to handle. A counter +is used to keep track of how many times a particular combinator has been applied to the input at a +particular position, and when that counter exceeds the number of unconsumed input tokens plus one +the result is curtailed. This is explained on pages 7 and 8 of the paper.</p> + +<p>The really thorny issue that caused the most problems with this library is indirect left +recursion. This is when a non-terminal recurses to itself on the left only after first evaluating to +one or more other non-terminals. Curtailment in these circumstances can easily cause those other +non-terminals to also be curtailed, and reusing the results for those other non-terminals may be +incorrect. This issue along with a proposed solution is explained on page 9 of the paper. However +that solution was not as clear as would be preferred. So some minor rephrasing and reworking was +needed.</p> + +<p>Bringing this problem back to the start: What are we really doing when we curtail a result due to +left recursion? It is not a matter of cutting off branches in a parse tree. We are identifying +conditions where the parse result of a particular non-terminal can be calculated without further +recursion. The word "curtailment" is somewhat misleading in this regard. Once this reframing is done +then a clearer view immediately follows.</p> + +<p>What is the condition? Exactly as described above for direct left recursion. Through comparing +recursion counts with the amount of unconsumed input we determine that a result of no successful +parse can be calculated, and that the result is valid for reuse for any deeper recursion of the same combinator at that input position.</p> <p>From that can be derived:</p> <ul> - <li>When merging two results that have different left recursion count conditions for the same non-terminal, - the larger count should be used</li> - <li>Conditions of subresults should also be made part of any result that includes those subresults</li> - <li>Any memoized result is only reusable if all the recursion count conditions of the stored result are less - than or equal to the recursion counts for the current input position</li> + <li>When merging two results that have different left recursion count conditions for the same + non-terminal, the larger count should be used</li> + <li>Conditions of subresults should also be made part of any result that includes those subresults + </li> + <li>Any memoized result is only reusable if all the recursion count conditions of the stored + result are less than or equal to the recursion counts for the current input position</li> </ul> -<p>So far the above list just covers what is in the paper. But there is a little more that can be inferred:</p> +<p>So far the above list just covers what is in the paper. But there is a little more that can be +inferred:</p> <ul> - <li>If a result is not reusable and a new result is calculated, then the recursion count conditions of the - old result should be updated to the recursion counts at the current position and applied to the new result</li> - <li>When the recursion count of a condition applied to a result plus the number of unconsumed input tokens after - the result is less than the number of input tokens available at the beginning of the result, then that - condition can be omitted from the result</li> + <li>If a result is not reusable and a new result is calculated, then the recursion count + conditions of the old result should be updated to the recursion counts at the current position and + applied to the new result</li> + <li>When the recursion count of a condition applied to a result plus the number of unconsumed + input tokens after the result is less than the number of input tokens available at the beginning + of the result, then that condition can be omitted from the result</li> </ul> <p>These two details should constitute a minor efficiency improvement.</p> @@ -140,17 +146,19 @@ the result is valid for reuse for any deeper recursion of the same combinator at <h5>Further Work</h5> -<p>While the polynomial complexity of this library has been experimentally confirmed, no effort has yet been -made to prove that it is actually polynomial in the same way that the parser combinators in the paper are. It -is possible that due to the changes involved with using a non-functional language and enabling piecewise -parsing that some subtle complexity difference may have arisen.</p> +<p>While the polynomial complexity of this library has been experimentally confirmed, no effort has +yet been made to prove that it is actually polynomial in the same way that the parser combinators in +the paper are. It is possible that due to the changes involved with using a non-functional language +and enabling piecewise parsing that some subtle complexity difference may have arisen.</p> -<p>Likewise, the piecewise parsing has been unit tested to a degree but no formal proof that it is correct has -been done.</p> +<p>Likewise, the piecewise parsing has been unit tested to a degree but no formal proof that it is +correct has been done.</p> -<p>Ideas like being able to modify and resume an erroneous parsing attempt would also be interesting to explore.</p> +<p>Ideas like being able to modify and resume an erroneous parsing attempt would also be interesting +to explore.</p> -<p>Finally, the plan is to actually use this library for something significant at some point in the future.</p> +<p>Finally, the plan is to actually use this library for something significant at some point in the +future.</p> {% endblock %} diff --git a/project/templates/sokoban.html b/project/templates/sokoban.html index ee2a470..bf676d1 100644 --- a/project/templates/sokoban.html +++ b/project/templates/sokoban.html @@ -16,24 +16,24 @@ <h5>8/8/2017</h5> <p>Back when I was studying computer science at university, there was an assignment involving -<a href="https://en.wikipedia.org/wiki/Sokoban" target="_blank">Sokoban</a>. We were tasked with completing -a half written implementation in Java and Swing. This is not that implementation. It is, however, based -on it. Recently while going over old notes I found the assignment. The submission I had originally -made is lost to time, but it seemed like a nice quick diversion to get some more use out of the -FLTK Ada binding.</p> +<a href="https://en.wikipedia.org/wiki/Sokoban" class="external">Sokoban</a>. We were tasked with +completing a half written implementation in Java and Swing. This is not that implementation. It is, +however, based on it. Recently while going over old notes I found the assignment. The submission I +had originally made is lost to time, but it seemed like a nice quick diversion to get some more use +out of the FLTK Ada binding.</p> -<figure> +<div class="figure"> <img src="/img/sokoban_level0.png" alt="The first level" height="568" - width="764"> - <figcaption>The first level</figcaption> -</figure> - -<p>This is a vanilla version, so the only mechanic is pushing blocks to specific goal tiles. Controls -are simple enough that instructions can be left permanently written at the bottom of the window. An -<a href="https://brilliant.org/wiki/a-star-search/" target="_blank">A* Search</a> algorithm is used -for the mouse control.</p> + width="764" /> + <div class="figcaption">The first level</div> +</div> + +<p>This is a vanilla version, so the only mechanic is pushing blocks to specific goal tiles. +Controls are simple enough that instructions can be left permanently written at the bottom of the +window. An <a href="https://brilliant.org/wiki/a-star-search/" class="external">A* Search</a> +algorithm is used for the mouse control.</p> {% endblock %} diff --git a/project/templates/steelman.html b/project/templates/steelman.html index bb61548..6fb543b 100644 --- a/project/templates/steelman.html +++ b/project/templates/steelman.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/steelman.css" rel="stylesheet"> + <link href="/css/steelman.css" rel="stylesheet" /> {% endblock %} @@ -28,7 +28,7 @@ more refined versions of the requirements from Strawman through to Ironman, this programming language, possibly the gold standard language for writing safe and secure software, was designed to comply with Steelman.</p> -<p>In 1996 David A. Wheeler <a href="http://www.adahome.com/History/Steelman/steeltab.htm" target="_blank">wrote a paper</a> +<p>In 1996 David A. Wheeler <a href="http://www.adahome.com/History/Steelman/steeltab.htm" class="external">wrote a paper</a> that compared Ada, C, C++, and Java against the Steelman. This served to highlight the strengths and weaknesses of those languages, areas that could be improved, and a scant few requirement points that perhaps aren't even applicable anymore. Since then several more programming languages capable of systems work have been created, so it's time for an @@ -37,70 +37,70 @@ update. More datapoints! Hence, this article will conduct a similar comparison, <h5>The Languages</h5> -<p><a href="https://dlang.org/" target="_blank">D</a> was created originally as a reworking of C++ in 2000-2001. It +<p><a href="https://dlang.org/" class="external">D</a> was created originally as a reworking of C++ in 2000-2001. It serves to represent a progression of the C language family, adding features including contracts, optional garbage collection, and a standard threading model.</p> -<p><a href="https://forge.open-do.org/plugins/moinmoin/parasail/" target="_blank">Parasail</a> is a research language +<p><a href="https://forge.open-do.org/plugins/moinmoin/parasail/" class="external">Parasail</a> is a research language created in 2009 by AdaCore, the main vendor of Ada compiler tooling today. The language is designed with implicit -parallelism throughout, <a href="https://www.embedded.com/design/programming-languages-and-tools/4375616/1/ParaSail--Less-is-more-with-multicore" target="_blank">simplifying and adding static checking</a> +parallelism throughout, <a href="https://www.embedded.com/design/programming-languages-and-tools/4375616/1/ParaSail--Less-is-more-with-multicore" class="external">simplifying and adding static checking</a> to eliminate as many sources of errors as possible. It represents a possible future direction for Ada derived languages.</p> -<p><a href="https://en.wikipedia.org/wiki/Pascal_(programming_language)" target="_blank">Pascal</a>, like C, predates +<p><a href="https://en.wikipedia.org/wiki/Pascal_(programming_language)" class="external">Pascal</a>, like C, predates the Steelman requirements and so they cannot have had any influence at all on the language. It was designed for formal -specification and <a href="https://www.tutorialspoint.com/pascal/pascal_overview.htm" target="_blank">teaching algorithms</a>. +specification and <a href="https://www.tutorialspoint.com/pascal/pascal_overview.htm" class="external">teaching algorithms</a>. Later dialects were used to develop several high profile software projects, including Skype, Photoshop, and the original Mac OS. It is useful to consider as a precusor of Ada, sharing many points of functionality and style.</p> -<p><a href="https://www.rust-lang.org/" target="_blank">Rust</a> is the newest language here, created in 2010. It +<p><a href="https://www.rust-lang.org/" class="external">Rust</a> is the newest language here, created in 2010. It is an odd mix of C and ML influence, placing more emphasis on the functional paradigm than other systems languages. Its main claim to fame is adding another method of heap memory safety via -<a href="https://en.wikipedia.org/wiki/Substructural_type_system" target="_blank">affine typing</a>.</p> +<a href="https://en.wikipedia.org/wiki/Substructural_type_system" class="external">affine typing</a>.</p> <table id="lang"> <tr> <td> - <figure> + <div class="figure"> <img src="/img/logo_d_small.png" alt="Logo for the D programming language" height="124" - width="164"> - <figcaption>D</figcaption> - </figure> + width="164" /> + <div class="figcaption">D</div> + </div> </td> <td> - <figure> + <div class="figure"> <img src="/img/logo_parasail_small.png" alt="Logo for the Parasail programming language" height="144" - width="149"> - <figcaption>Parasail</figcaption> - </figure> + width="149" /> + <div class="figcaption">Parasail</div> + </div> </td> </tr> <tr> <td> - <figure> + <div class="figure"> <img src="/img/logo_pascal_small.png" alt="A picture of Blaise Pascal to stand in as a logo for the Pascal programming language" height="144" - width="142"> - <figcaption>Pascal*</figcaption> - </figure> + width="142" /> + <div class="figcaption">Pascal*</div> + </div> </td> <td> - <figure> + <div class="figure"> <img src="/img/logo_rust_small.png" alt="Logo for the Rust programming language" height="144" - width="144"> - <figcaption>Rust</figcaption> - </figure> + width="144" /> + <div class="figcaption">Rust</div> + </div> </td> </tr> </table> -<p>* Pascal does not have an official logo, so a picture of <a href="https://en.wikipedia.org/wiki/Blaise_Pascal" target="_blank">Blaise Pascal</a>, +<p>* Pascal does not have an official logo, so a picture of <a href="https://en.wikipedia.org/wiki/Blaise_Pascal" class="external">Blaise Pascal</a>, in whose honour the language is named, will have to do.</p> @@ -118,17 +118,17 @@ that, effort has been made to keep the evaluation as similar as practical to the <p>The defining documents used for each of these languages are as follows:</p> <ul> - <li>D: The <a href="https://dlang.org/spec/spec.html" target="_blank">D Language Specification</a> and the - accompanying <a href="https://dlang.org/phobos/index.html" target="_blank">Library Reference</a>.</li> - <li>Parasail: The <a href="https://forge.open-do.org/plugins/moinmoin/parasail/FrontPage?action=AttachFile&do=view&target=parasail_ref_manual.pdf" target="_blank">Parasail Reference Manual</a>. + <li>D: The <a href="https://dlang.org/spec/spec.html" class="external">D Language Specification</a> and the + accompanying <a href="https://dlang.org/phobos/index.html" class="external">Library Reference</a>.</li> + <li>Parasail: The <a href="https://forge.open-do.org/plugins/moinmoin/parasail/FrontPage?action=AttachFile&do=view&target=parasail_ref_manual.pdf" class="external">Parasail Reference Manual</a>. Parasail is still a work in progress, and no efforts to standardise it have yet been started.</li> <li>Pascal: ISO 7185 details Standard Pascal, and is available at several places in various formats. The copy used here - was retrieved from <a href="http://www.pascal-central.com/standards.html" target="_blank">Pascal Central</a>. + was retrieved from <a href="http://www.pascal-central.com/standards.html" class="external">Pascal Central</a>. Checking for features of more recent Pascal dialects is done on a more ad hoc basis.</li> <li>Rust: The closest there is to a definition of the language is given in - <a href="https://doc.rust-lang.org/reference/" target="_blank">The Rust Reference</a>. It should + <a href="https://doc.rust-lang.org/reference/" class="external">The Rust Reference</a>. It should be noted that this document is not complete, nor stable. Supplementary information was obtained from - <a href="https://rustbyexample.com/" target="_blank">Rust by Example</a>. No work to standardise + <a href="https://rustbyexample.com/" class="external">Rust by Example</a>. No work to standardise Rust has been started yet either.</li> </ul> @@ -224,8 +224,8 @@ considered meet that requirement on the right. Some explanatory notes are includ turned out to be educated guesses. Fairness was the goal, but nonetheless reader discretion is advised.</p> -<section class="accordian"> - <input type="checkbox" name="collapse" id="handle1"> +<div class="accordian"> + <input type="checkbox" name="collapse" id="handle1" /> <label for="handle1">Toggle Appendix Table</label> <div class="hidden_content"> @@ -1502,7 +1502,7 @@ turned out to be educated guesses. Fairness was the goal, but nonetheless reader </tr> <tr> <td colspan="4"> - +   </td> </tr> @@ -2320,7 +2320,7 @@ turned out to be educated guesses. Fairness was the goal, but nonetheless reader </table> </div> -</section> +</div> {% endblock %} diff --git a/project/templates/stvcount.html b/project/templates/stvcount.html index 02b47ec..b19b4d7 100644 --- a/project/templates/stvcount.html +++ b/project/templates/stvcount.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/stvcount.css" rel="stylesheet"> + <link href="/css/stvcount.css" rel="stylesheet" /> {% endblock %} @@ -22,26 +22,27 @@ <h5>19/2/2017</h5> <p>To give an incredibly brief summary of <a href="https://en.wikipedia.org/wiki/Parliament_of_Australia" -target="_blank">Australia's political system</a>, both the Federal Parliament and most of the State +class="external">Australia's political system</a>, both the Federal Parliament and most of the State Parliaments are bicameral. The lower houses are generally elected by Instant Runoff, while the upper -houses generally have half elections using Single Transferable Vote. There are exceptions and a whole -lot of differing details, but that's the overall pattern.</p> +houses generally have half elections using Single Transferable Vote. There are exceptions and a +whole lot of differing details, but that's the overall pattern.</p> <p>In 2016, however, the Federal Parliament underwent a Double Dissolution, causing the entirety of both houses to go to an election. This had the outcome of 20 out of 76 seats going to third parties -in the upper house, a record number. Even more than the 18 there were prior. As the entire purpose of -a Double Dissolution is to break deadlocks in parliament, to have the outcome go in the +in the upper house, a record number. Even more than the 18 there were prior. As the entire purpose +of a Double Dissolution is to break deadlocks in parliament, to have the outcome go in the <a href="http://www.abc.net.au/news/2016-07-03/crabb-election-2016-is-lose-lose-for-malcolm-turnbull/7565840" -target="_blank">complete opposite direction</a> probably caused some dismay from Malcolm Turnbull +class="external">complete opposite direction</a> probably caused some dismay from Malcolm Turnbull and his Liberal/National government.</p> -<p>This raises the question: Would they have been better off had a normal election happened instead?</p> +<p>This raises the question: Would they have been better off had a normal election happened instead? +</p> <p>To calculate the likely outcome, the ballot preference data is needed. That's the easy part, as the Australian Electoral Commission makes that available -<a href="http://results.aec.gov.au/20499/Website/SenateDownloadsMenu-20499-Csv.htm" target="_blank">here</a> -in the 'Formal preferences' section. Then, a program is needed to execute the STV algorithm, which is -as follows:</p> +<a href="http://results.aec.gov.au/20499/Website/SenateDownloadsMenu-20499-Csv.htm" class="external">here</a> +in the 'Formal preferences' section. Then, a program is needed to execute the STV algorithm, which +is as follows:</p> <ol> <li>Set the quota of votes required for a candidate to win.</li> @@ -55,48 +56,51 @@ as follows:</p> <li>Repeat steps 3-5 until all seats are filled.</li> </ol> -<p>Seems simple enough, right? Except not really. There is a surprising amount of complexity in there, and most -of it is to do with how to transfer votes around. So, in addition, there are the specifics for the version -used for the Australian Senate:</p> +<p>Seems simple enough, right? Except not really. There is a surprising amount of complexity in +there, and most of it is to do with how to transfer votes around. So, in addition, there are the +specifics for the version used for the Australian Senate:</p> <ul> - <li>Voters are given the option of voting either "above the line" or "below the line". The latter is - standard STV. The former used to be a group voting ticket, but for 2016 and later it is treated as - a shorthand way of voting, as per instructions - <a href="http://www.aec.gov.au/Voting/How_to_vote/Voting_Senate.htm" target="_blank">here</a>.</li> - <li>There are <a href="http://www.aec.gov.au/Elections/candidates/files/ballot-paper-formality-guidelines.pdf" - target="_blank">specific guidelines</a> on what constitutes a correctly filled out ballot. This is - important for parsing the formal preference data.</li> - <li>The <a href="https://en.wikipedia.org/wiki/Droop_quota" target="_blank">Droop quota</a> is used.</li> + <li>Voters are given the option of voting either "above the line" or "below the line". The + latter is standard STV. The former used to be a group voting ticket, but for 2016 and later + it is treated as a shorthand way of voting, as per instructions + <a href="http://www.aec.gov.au/Voting/How_to_vote/Voting_Senate.htm" class="external">here</a>.</li> + <li>There are <a href="http://www.aec.gov.au/Elections/candidates/files/ballot-paper-formality guidelines.pdf" class="external">specific guidelines</a> on what constitutes a correctly filled + out ballot. This is important for parsing the formal preference data.</li> + <li>The <a href="https://en.wikipedia.org/wiki/Droop_quota" class="external">Droop quota</a> is + used.</li> <li>All votes are transferred from elected candidates at a fraction of their value, as per the - <a href="https://en.wikipedia.org/wiki/Counting_single_transferable_votes#Gregory" target="_blank"> - Gregory Method</a>. This can result in fractions with surprisingly large numerators and denominators. - This also results in occasional discarding of fractional votes during transfers.</li> - <li>Should the next applicable preference of a ballot be a candidate who has already been elected, that - preference is ignored and the ballot is transferred to the next preference.</li> - <li>If the number of remaining candidates is equal to one more than the number of remaining vacancies, - the candidates with the highest vote totals at that point are considered elected.</li> + <a href="https://en.wikipedia.org/wiki/Counting_single_transferable_votes#Gregory" class="external"> + Gregory Method</a>. This can result in fractions with surprisingly large numerators and + denominators. This also results in occasional discarding of fractional votes during + transfers.</li> + <li>Should the next applicable preference of a ballot be a candidate who has already been + elected, that preference is ignored and the ballot is transferred to the next preference. + </li> + <li>If the number of remaining candidates is equal to one more than the number of remaining + vacancies, the candidates with the highest vote totals at that point are considered elected. + </li> </ul> <p>My implementation also includes <a href="https://en.wikipedia.org/wiki/Counting_single_transferable_votes#Bulk_exclusions" -target="_blank">bulk exclusions</a> using applied breakpoints in order to increase speed slightly and minimise -superfluous logging.</p> +class="external">bulk exclusions</a> using applied breakpoints in order to increase speed slightly +and minimise superfluous logging.</p> -<p>At this point I'm fairly sure my program provides an accurate count. However, my numbers still differ -slightly from the ones provided by the AEC's official distribution of preferences. Investigations into the -exact cause are ongoing.</p> +<p>At this point I'm fairly sure my program provides an accurate count. However, my numbers still +differ slightly from the ones provided by the AEC's official distribution of preferences. +Investigations into the exact cause are ongoing.</p> <h4>Results</h4> -<p>Calculations were done for each state using the formal preference data with vacancies set to 6 instead of 12, -and the results were added to the Senators elected in 2013 to find the probable outcome. The results for -ACT and NT were taken as-is, because the few Senators elected from the territories are not part of the half -election cadence anyway.</p> +<p>Calculations were done for each state using the formal preference data with vacancies set to 6 +instead of 12, and the results were added to the Senators elected in 2013 to find the probable +outcome. The results for ACT and NT were taken as-is, because the few Senators elected from the +territories are not part of the half election cadence anyway.</p> -<p>Computational resources required varied from approximately 50 seconds using 46MB of memory for Tasmania, to -nearly 30 minutes using 1452MB memory for NSW. The vast majority of that time was spent parsing preference data, -and the program is single threaded, so there is still room for improvement. All counts were run on a Core 2 Quad -Q9500.</p> +<p>Computational resources required varied from approximately 50 seconds using 46MB of memory for +Tasmania, to nearly 30 minutes using 1452MB memory for NSW. The vast majority of that time was spent +parsing preference data, and the program is single threaded, so there is still room for improvement. +All counts were run on a Core 2 Quad Q9500.</p> <table> <caption>Probable non-DD results by state</caption> @@ -265,30 +269,35 @@ Q9500.</p> </tr> </table> -<p>* These three parties were all part of the Palmer United Party at the 2013/2014 election, but split up mid term.</p> - -<p>Surprisingly, these projected results <em>still</em> have 20 out of 76 seats held by third party candidates, despite -the half election putting them at a disadvantage. The number of third party groups the Liberal/Nationals have to -negotiate with to pass legislation (assuming Labor and Greens attempt to block) equally remains unchanged.</p> - -<p>The Greens manage to do slightly worse, even though their usual position of winning the 5th or 6th seat in most states -often allows them to obtain more representation than their primary vote would otherwise support. This can't even be -attributed to a bad 2013 result, as their primary vote both then and in 2016 was nearly identical.</p> - -<p>One Nation's much reduced number of seats can be attributed to the inherent geographic bias that any system involving -electing candidates across many independent divisions has. If like-minded voters are all in one place, they -receive representation, but when the same number of voters are spread out, they get nothing. When this effect -is intentionally exploited it's called gerrymandering, but here it's merely an artifact of electing Senators from each -state separately. One Nation's support is strongest in Queensland but is relatively diffuse. Any claims of Pauline -Hanson being <a href="http://junkee.com/malcolm-turnbull-will-probably-need-pauline-hansons-support-to-pass-any-laws/82138" -target="_blank">one of the most powerful politicians in Australia</a> are thus overblown.</p> - -<p>The Xenophon Group, by contrast, has the vast majority of their support concentrated in South Australia. So the result -for them remains unchanged.</p> - -<p>The most noteworthy outcomes for the question though, are that the Liberal/Nationals would have obtained more seats, -and Labor would have been in a more difficult position to block the passage of legislation. Meaning that yes, the -Liberal/National government would definitely have been better off with a normal election.</p> +<p>* These three parties were all part of the Palmer United Party at the 2013/2014 election, but +split up mid term.</p> + +<p>Surprisingly, these projected results <em>still</em> have 20 out of 76 seats held by third party +candidates, despite the half election putting them at a disadvantage. The number of third party +groups the Liberal/Nationals have to negotiate with to pass legislation (assuming Labor and Greens +attempt to block) equally remains unchanged.</p> + +<p>The Greens manage to do slightly worse, even though their usual position of winning the 5th or +6th seat in most states often allows them to obtain more representation than their primary vote +would otherwise support. This can't even be attributed to a bad 2013 result, as their primary vote +both then and in 2016 was nearly identical.</p> + +<p>One Nation's much reduced number of seats can be attributed to the inherent geographic bias that +any system involving electing candidates across many independent divisions has. If like-minded +voters are all in one place, they receive representation, but when the same number of voters are +spread out, they get nothing. When this effect is intentionally exploited it's called +gerrymandering, but here it's merely an artifact of electing Senators from each state separately. +One Nation's support is strongest in Queensland but is relatively diffuse. Any claims of Pauline +Hanson being <a href="http://junkee.com/malcolm-turnbull-will-probably-need-pauline-hansons-support-to-pass-any-laws/82138" class="external">one of the most powerful politicians in Australia</a> are thus +overblown.</p> + +<p>The Xenophon Group, by contrast, has the vast majority of their support concentrated in South +Australia. So the result for them remains unchanged.</p> + +<p>The most noteworthy outcomes for the question though, are that the Liberal/Nationals would have +obtained more seats, and Labor would have been in a more difficult position to block the passage of +legislation. Meaning that yes, the Liberal/National government would definitely have been better off +with a normal election.</p> <p>Nice job screwing over your own party, Malcolm.</p> diff --git a/project/templates/sunset.html b/project/templates/sunset.html index d670e64..9354e63 100644 --- a/project/templates/sunset.html +++ b/project/templates/sunset.html @@ -16,19 +16,18 @@ <h5>29/6/2017</h5> <p>Software licenses bother me. As a general rule I prefer to make my projects open source, -and for that purpose something like the <a href="https://unlicense.org/" target="_blank">Unlicense</a> -is often sufficient. But if I don't want to put my work in the public domain immediately, then -I have to make use of a <a href="https://www.copyleft.org/" target="_blank">copyleft</a> license. And all -of the ones currently available are both incredibly, unnecessarily verbose, and fail to -address the primary failing of modern copyright law, which is the unreasonably long term -lengths.</p> - -<p>So after a considerable amount of thought, I've written my own. (I can hear those with -legal knowledge wailing and gnashing their teeth already.) Care has been taken to mimic the -phrasing used in popular existing licenses where possible. I've also kept it as simple and as -straightforward as I can make it. So hopefully there are no loopholes and it's exactly as it -appears: a simple weak copyleft license which places older parts of a work under a public -domain disclaimer in a reasonable timeframe.</p> +and for that purpose something like the <a href="https://unlicense.org/" class="external">Unlicense</a> +is often sufficient. But if I don't want to put my work in the public domain immediately, then I +have to make use of a <a href="https://www.copyleft.org/" class="external">copyleft</a> license. And +all of the ones currently available are both incredibly, unnecessarily verbose, and fail to address +the primary failing of modern copyright law, which is the unreasonably long term lengths.</p> + +<p>So after a considerable amount of thought, I've written my own. (I can hear those with legal +knowledge wailing and gnashing their teeth already.) Care has been taken to mimic the phrasing used +in popular existing licenses where possible. I've also kept it as simple and as straightforward as I +can make it. So hopefully there are no loopholes and it's exactly as it appears: a simple weak +copyleft license which places older parts of a work under a public domain disclaimer in a reasonable +timeframe.</p> <p>The full text is as follows:</p> <div class="precontain"> @@ -56,9 +55,9 @@ may do whatever you want with it, regardless of all other clauses. </pre> </div> -<p>The git repository also contains an accompanying rationale and a simple logo I threw together. -In the future, all my projects will either use this license or the Unlicense. Works I've -already created will be relicensed as appropriate.</p> +<p>The git repository also contains an accompanying rationale and a simple logo I threw together. In +the future, all my projects will either use this license or the Unlicense. Works I've already +created will be relicensed as appropriate.</p> {% endblock %} diff --git a/project/templates/tags.html b/project/templates/tags.html index a3edfcc..349f575 100644 --- a/project/templates/tags.html +++ b/project/templates/tags.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/tags.css" rel="stylesheet"> + <link href="/css/tags.css" rel="stylesheet" /> {% endblock %} @@ -19,11 +19,13 @@ <ul> {%- for tag in tags -%} - {%- set total = 0 -%} + {%- set total = { 'value': 0 } -%} {%- for item in articles -%} - {%- if tag in item.taglist -%}{%- set total = total + 1 -%}{%- endif -%} + {%- if tag in item.taglist -%} + {%- if total.update({'value': total.value + 1}) -%}{%- endif -%} + {%- endif -%} {%- if item == articles | last %} - <li><a href="/tags/{{ tag }}.html">{{ tag }} ({{ total }})</a></li> + <li><a href="/tags/{{ tag }}.html">{{ tag }} ({{ total.value }})</a></li> {%- endif -%} {%- endfor -%} {%- endfor %} diff --git a/project/templates/tags/application.html b/project/templates/tags/application.html index 489ff13..caa763b 100644 --- a/project/templates/tags/application.html +++ b/project/templates/tags/application.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/index.css" rel="stylesheet"> + <link href="/css/index.css" rel="stylesheet" /> {% endblock %} @@ -22,8 +22,8 @@ {%- if 'application' in item.taglist -%} {%- if item.updated -%}{%- set postclass = "update" -%}{%- else -%}{%- set postclass = "post" -%}{%- endif -%} {%- if item.updated -%}{%- set postverb = "Updated" -%}{%- else -%}{%- set postverb = "Posted" -%}{%- endif %} - <li><a href="{{ item.anchor }}">{{ item.title }}</a><br> - <span class="taglist">{{ item.taglist | join(", ") }}</span><br> + <li><a href="{{ item.anchor }}">{{ item.title }}</a><br /> + <span class="taglist">{{ item.taglist | join(", ") }}</span><br /> <span class="{{ postclass }}">({{ postverb }} {{ item.postdate }})</span></li> {%- endif -%} {%- endfor %} diff --git a/project/templates/tags/binding.html b/project/templates/tags/binding.html index 92a63b0..000b5e2 100644 --- a/project/templates/tags/binding.html +++ b/project/templates/tags/binding.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/index.css" rel="stylesheet"> + <link href="/css/index.css" rel="stylesheet" /> {% endblock %} @@ -22,8 +22,8 @@ {%- if 'binding' in item.taglist -%} {%- if item.updated -%}{%- set postclass = "update" -%}{%- else -%}{%- set postclass = "post" -%}{%- endif -%} {%- if item.updated -%}{%- set postverb = "Updated" -%}{%- else -%}{%- set postverb = "Posted" -%}{%- endif %} - <li><a href="{{ item.anchor }}">{{ item.title }}</a><br> - <span class="taglist">{{ item.taglist | join(", ") }}</span><br> + <li><a href="{{ item.anchor }}">{{ item.title }}</a><br /> + <span class="taglist">{{ item.taglist | join(", ") }}</span><br /> <span class="{{ postclass }}">({{ postverb }} {{ item.postdate }})</span></li> {%- endif -%} {%- endfor %} diff --git a/project/templates/tags/compsci.html b/project/templates/tags/compsci.html index c39f7f1..07059c4 100644 --- a/project/templates/tags/compsci.html +++ b/project/templates/tags/compsci.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/index.css" rel="stylesheet"> + <link href="/css/index.css" rel="stylesheet" /> {% endblock %} @@ -22,8 +22,8 @@ {%- if 'compsci' in item.taglist -%} {%- if item.updated -%}{%- set postclass = "update" -%}{%- else -%}{%- set postclass = "post" -%}{%- endif -%} {%- if item.updated -%}{%- set postverb = "Updated" -%}{%- else -%}{%- set postverb = "Posted" -%}{%- endif %} - <li><a href="{{ item.anchor }}">{{ item.title }}</a><br> - <span class="taglist">{{ item.taglist | join(", ") }}</span><br> + <li><a href="{{ item.anchor }}">{{ item.title }}</a><br /> + <span class="taglist">{{ item.taglist | join(", ") }}</span><br /> <span class="{{ postclass }}">({{ postverb }} {{ item.postdate }})</span></li> {%- endif -%} {%- endfor %} diff --git a/project/templates/tags/copyright.html b/project/templates/tags/copyright.html index 1296aae..fe95b57 100644 --- a/project/templates/tags/copyright.html +++ b/project/templates/tags/copyright.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/index.css" rel="stylesheet"> + <link href="/css/index.css" rel="stylesheet" /> {% endblock %} @@ -22,8 +22,8 @@ {%- if 'copyright' in item.taglist -%} {%- if item.updated -%}{%- set postclass = "update" -%}{%- else -%}{%- set postclass = "post" -%}{%- endif -%} {%- if item.updated -%}{%- set postverb = "Updated" -%}{%- else -%}{%- set postverb = "Posted" -%}{%- endif %} - <li><a href="{{ item.anchor }}">{{ item.title }}</a><br> - <span class="taglist">{{ item.taglist | join(", ") }}</span><br> + <li><a href="{{ item.anchor }}">{{ item.title }}</a><br /> + <span class="taglist">{{ item.taglist | join(", ") }}</span><br /> <span class="{{ postclass }}">({{ postverb }} {{ item.postdate }})</span></li> {%- endif -%} {%- endfor %} diff --git a/project/templates/tags/esoteric.html b/project/templates/tags/esoteric.html index 253f7cc..eccab45 100644 --- a/project/templates/tags/esoteric.html +++ b/project/templates/tags/esoteric.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/index.css" rel="stylesheet"> + <link href="/css/index.css" rel="stylesheet" /> {% endblock %} @@ -22,8 +22,8 @@ {%- if 'esoteric' in item.taglist -%} {%- if item.updated -%}{%- set postclass = "update" -%}{%- else -%}{%- set postclass = "post" -%}{%- endif -%} {%- if item.updated -%}{%- set postverb = "Updated" -%}{%- else -%}{%- set postverb = "Posted" -%}{%- endif %} - <li><a href="{{ item.anchor }}">{{ item.title }}</a><br> - <span class="taglist">{{ item.taglist | join(", ") }}</span><br> + <li><a href="{{ item.anchor }}">{{ item.title }}</a><br /> + <span class="taglist">{{ item.taglist | join(", ") }}</span><br /> <span class="{{ postclass }}">({{ postverb }} {{ item.postdate }})</span></li> {%- endif -%} {%- endfor %} diff --git a/project/templates/tags/languages.html b/project/templates/tags/languages.html index 3c101b9..d680002 100644 --- a/project/templates/tags/languages.html +++ b/project/templates/tags/languages.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/index.css" rel="stylesheet"> + <link href="/css/index.css" rel="stylesheet" /> {% endblock %} @@ -22,8 +22,8 @@ {%- if 'languages' in item.taglist -%} {%- if item.updated -%}{%- set postclass = "update" -%}{%- else -%}{%- set postclass = "post" -%}{%- endif -%} {%- if item.updated -%}{%- set postverb = "Updated" -%}{%- else -%}{%- set postverb = "Posted" -%}{%- endif %} - <li><a href="{{ item.anchor }}">{{ item.title }}</a><br> - <span class="taglist">{{ item.taglist | join(", ") }}</span><br> + <li><a href="{{ item.anchor }}">{{ item.title }}</a><br /> + <span class="taglist">{{ item.taglist | join(", ") }}</span><br /> <span class="{{ postclass }}">({{ postverb }} {{ item.postdate }})</span></li> {%- endif -%} {%- endfor %} diff --git a/project/templates/tags/legal.html b/project/templates/tags/legal.html index 14143aa..3a4048a 100644 --- a/project/templates/tags/legal.html +++ b/project/templates/tags/legal.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/index.css" rel="stylesheet"> + <link href="/css/index.css" rel="stylesheet" /> {% endblock %} @@ -22,8 +22,8 @@ {%- if 'legal' in item.taglist -%} {%- if item.updated -%}{%- set postclass = "update" -%}{%- else -%}{%- set postclass = "post" -%}{%- endif -%} {%- if item.updated -%}{%- set postverb = "Updated" -%}{%- else -%}{%- set postverb = "Posted" -%}{%- endif %} - <li><a href="{{ item.anchor }}">{{ item.title }}</a><br> - <span class="taglist">{{ item.taglist | join(", ") }}</span><br> + <li><a href="{{ item.anchor }}">{{ item.title }}</a><br /> + <span class="taglist">{{ item.taglist | join(", ") }}</span><br /> <span class="{{ postclass }}">({{ postverb }} {{ item.postdate }})</span></li> {%- endif -%} {%- endfor %} diff --git a/project/templates/tags/library.html b/project/templates/tags/library.html index 86fd920..231b013 100644 --- a/project/templates/tags/library.html +++ b/project/templates/tags/library.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/index.css" rel="stylesheet"> + <link href="/css/index.css" rel="stylesheet" /> {% endblock %} @@ -22,8 +22,8 @@ {%- if 'library' in item.taglist -%} {%- if item.updated -%}{%- set postclass = "update" -%}{%- else -%}{%- set postclass = "post" -%}{%- endif -%} {%- if item.updated -%}{%- set postverb = "Updated" -%}{%- else -%}{%- set postverb = "Posted" -%}{%- endif %} - <li><a href="{{ item.anchor }}">{{ item.title }}</a><br> - <span class="taglist">{{ item.taglist | join(", ") }}</span><br> + <li><a href="{{ item.anchor }}">{{ item.title }}</a><br /> + <span class="taglist">{{ item.taglist | join(", ") }}</span><br /> <span class="{{ postclass }}">({{ postverb }} {{ item.postdate }})</span></li> {%- endif -%} {%- endfor %} diff --git a/project/templates/tags/mathematics.html b/project/templates/tags/mathematics.html index d99af34..06074d1 100644 --- a/project/templates/tags/mathematics.html +++ b/project/templates/tags/mathematics.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/index.css" rel="stylesheet"> + <link href="/css/index.css" rel="stylesheet" /> {% endblock %} @@ -22,8 +22,8 @@ {%- if 'mathematics' in item.taglist -%} {%- if item.updated -%}{%- set postclass = "update" -%}{%- else -%}{%- set postclass = "post" -%}{%- endif -%} {%- if item.updated -%}{%- set postverb = "Updated" -%}{%- else -%}{%- set postverb = "Posted" -%}{%- endif %} - <li><a href="{{ item.anchor }}">{{ item.title }}</a><br> - <span class="taglist">{{ item.taglist | join(", ") }}</span><br> + <li><a href="{{ item.anchor }}">{{ item.title }}</a><br /> + <span class="taglist">{{ item.taglist | join(", ") }}</span><br /> <span class="{{ postclass }}">({{ postverb }} {{ item.postdate }})</span></li> {%- endif -%} {%- endfor %} diff --git a/project/templates/tags/politics.html b/project/templates/tags/politics.html index e7d0790..7a592f3 100644 --- a/project/templates/tags/politics.html +++ b/project/templates/tags/politics.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/index.css" rel="stylesheet"> + <link href="/css/index.css" rel="stylesheet" /> {% endblock %} @@ -22,8 +22,8 @@ {%- if 'politics' in item.taglist -%} {%- if item.updated -%}{%- set postclass = "update" -%}{%- else -%}{%- set postclass = "post" -%}{%- endif -%} {%- if item.updated -%}{%- set postverb = "Updated" -%}{%- else -%}{%- set postverb = "Posted" -%}{%- endif %} - <li><a href="{{ item.anchor }}">{{ item.title }}</a><br> - <span class="taglist">{{ item.taglist | join(", ") }}</span><br> + <li><a href="{{ item.anchor }}">{{ item.title }}</a><br /> + <span class="taglist">{{ item.taglist | join(", ") }}</span><br /> <span class="{{ postclass }}">({{ postverb }} {{ item.postdate }})</span></li> {%- endif -%} {%- endfor %} diff --git a/project/templates/tags/programming.html b/project/templates/tags/programming.html index cfd79df..99fa502 100644 --- a/project/templates/tags/programming.html +++ b/project/templates/tags/programming.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/index.css" rel="stylesheet"> + <link href="/css/index.css" rel="stylesheet" /> {% endblock %} @@ -22,8 +22,8 @@ {%- if 'programming' in item.taglist -%} {%- if item.updated -%}{%- set postclass = "update" -%}{%- else -%}{%- set postclass = "post" -%}{%- endif -%} {%- if item.updated -%}{%- set postverb = "Updated" -%}{%- else -%}{%- set postverb = "Posted" -%}{%- endif %} - <li><a href="{{ item.anchor }}">{{ item.title }}</a><br> - <span class="taglist">{{ item.taglist | join(", ") }}</span><br> + <li><a href="{{ item.anchor }}">{{ item.title }}</a><br /> + <span class="taglist">{{ item.taglist | join(", ") }}</span><br /> <span class="{{ postclass }}">({{ postverb }} {{ item.postdate }})</span></li> {%- endif -%} {%- endfor %} diff --git a/project/templates/tags/videogames.html b/project/templates/tags/videogames.html index 898e1fb..4ca747e 100644 --- a/project/templates/tags/videogames.html +++ b/project/templates/tags/videogames.html @@ -8,7 +8,7 @@ {% block style %} - <link href="/css/index.css" rel="stylesheet"> + <link href="/css/index.css" rel="stylesheet" /> {% endblock %} @@ -22,8 +22,8 @@ {%- if 'videogames' in item.taglist -%} {%- if item.updated -%}{%- set postclass = "update" -%}{%- else -%}{%- set postclass = "post" -%}{%- endif -%} {%- if item.updated -%}{%- set postverb = "Updated" -%}{%- else -%}{%- set postverb = "Posted" -%}{%- endif %} - <li><a href="{{ item.anchor }}">{{ item.title }}</a><br> - <span class="taglist">{{ item.taglist | join(", ") }}</span><br> + <li><a href="{{ item.anchor }}">{{ item.title }}</a><br /> + <span class="taglist">{{ item.taglist | join(", ") }}</span><br /> <span class="{{ postclass }}">({{ postverb }} {{ item.postdate }})</span></li> {%- endif -%} {%- endfor %} diff --git a/project/templates/thue2a.html b/project/templates/thue2a.html index 04da9eb..7cc9a5b 100644 --- a/project/templates/thue2a.html +++ b/project/templates/thue2a.html @@ -15,11 +15,11 @@ <h5>1/1/2017</h5> -<p><a href="http://esolangs.org/wiki/Thue" target="_blank">Thue</a> is an esoteric programming -language based on unrestricted grammars. A Thue program consists of a number of rules detailing -a sequence of symbols to replace and a sequence of symbols to replace with, and an initial -state of the program. Applicable rules are then applied to the inital state in a random -order until no more are applicable, at which point the program terminates.</p> +<p><a href="http://esolangs.org/wiki/Thue" class="external">Thue</a> is an esoteric programming +language based on unrestricted grammars. A Thue program consists of a number of rules detailing a +sequence of symbols to replace and a sequence of symbols to replace with, and an initial state of +the program. Applicable rules are then applied to the inital state in a random order until no more +are applicable, at which point the program terminates.</p> <p>An example Thue program that increments a binary number surrounded by '_' characters:</p> <div class="precontain"> @@ -35,11 +35,11 @@ _1111111_ </code> </div> -<p>The before and after symbols in each rule are separated by '::=' and the list of rules is -ended by a blank rule. Note that whitespace in rules and the inital state is NOT ignored.</p> +<p>The before and after symbols in each rule are separated by '::=' and the list of rules is ended +by a blank rule. Note that whitespace in rules and the inital state is NOT ignored.</p> -<p>Output is handled by prefixing the right hand side with '~', which causes those symbols to -go to stdout and the replacement in the program to be the empty string.</p> +<p>Output is handled by prefixing the right hand side with '~', which causes those symbols to go to +stdout and the replacement in the program to be the empty string.</p> <p>The traditional Hello World program:</p> <div class="precontain"> @@ -50,9 +50,9 @@ a </code> </div> -<p>Input is handled by having the right hand side of a rule be ':::', which causes the left -hand side symbols to be replaced with a line from the standard output. Unfortunately, this -immediately causes problems.</p> +<p>Input is handled by having the right hand side of a rule be ':::', which causes the left hand +side symbols to be replaced with a line from the standard output. Unfortunately, this immediately +causes problems.</p> <p>The following is an innocent piece of code that accepts a single line of input and does nothing more. Maybe.</p> @@ -65,13 +65,13 @@ a </div> <p>If a string involving the letter 'a' is entered into the above program, the single input rule -will again become applicable and another line of input will be obtained. In other words, the -input in Thue is unescaped and allows direct code injection into a program.</p> +will again become applicable and another line of input will be obtained. In other words, the input +in Thue is unescaped and allows direct code injection into a program.</p> <p>To solve this problem, I've constructed a slightly modified version of Thue that I'm calling version 2a. In this version, all symbols obtained through stdin are treated as different from -ordinary symbols. Rules can refer to and manipulate symbols obtained through stdin by -surrounding them in double quotes.</p> +ordinary symbols. Rules can refer to and manipulate symbols obtained through stdin by surrounding +them in double quotes.</p> <p>A rule that replaces an ordinary symbol 'a' with 'abc':</p> <div class="precontain"> @@ -99,8 +99,8 @@ a::=abc </pre> </div> -<p>While this doesn't solve all the problems Thue has (try writing a Thue program that asks -for and greets the user by name!) it should solve this one particular issue.</p> +<p>While this doesn't solve all the problems Thue has (try writing a Thue program that asks for and +greets the user by name!) it should solve this one particular issue.</p> {% endblock %} |