updated epicpedia notes

main
Michael Murtaugh 2 months ago
parent d98429768f
commit 67c0255247

@ -161,32 +161,31 @@ href="https://pzwiki.wdka.nl/mediadesign/Radio_WORM:_Protocols_for_Collective_Pe
class="uri">https://pzwiki.wdka.nl/mediadesign/Radio_WORM:_Protocols_for_Collective_Performance#Monday_21_October</a></p>
<h2 id="plan">Plan</h2>
<ul>
<li>Review the reading (<a
<li>Review of the reading (<a
href="https://hub.xpub.nl/bootleglibrary/book/789">Bellos in Mainframe
Experimentalism</a>)</li>
<li>Some Examples</li>
<li>An (off-screen) Exercise</li>
</ul>
<h2 id="oulipo">Oulipo</h2>
<ul>
<li>https://oulipo.net/</li>
<li>https://oulipo.net/fr/contraintes/s7</li>
</ul>
<h2 id="who-are-the-women-of-oulipo-a-constraint">Who are the Women of
Oulipo? (a constraint ;)</h2>
<p>In revisiting the history of Oulipo, its useful to consider this
article by Sarah Coolidge that explores the question: <a
href="https://www.catranslation.org/feature/who-are-the-women-of-oulipo/">Who
Are the Women of Oulipo?</a></p>
<p>BUT the broken links are quite tragic… leading instead to online
gaming + tourism. :0 Some alternative links:</p>
<p>BUT the broken links are quite numerous and tragic…</p>
<p>For instance this page:</p>
<ul>
<li><a
href="https://www.poetryinternational.com/en/poets-poems/poets/poet/102-2044_Metail"
class="uri">https://www.poetryinternational.com/en/poets-poems/poets/poet/102-2044_Metail</a></li>
</ul>
<p>And this page (URL corrected from the article from .com to .fr):</p>
<ul>
<li><p><a
href="http://www.cipmarseille.fr/pop_documents_liens.php?id=985&amp;type_proprio=1&amp;gestion=E"
class="uri">http://www.cipmarseille.fr/pop_documents_liens.php?id=985&amp;type_proprio=1&amp;gestion=E</a></p></li>
<li><p>https://archive.cipmarseille.fr/pop_audio.php?id=890</p></li>
class="uri">http://www.cipmarseille.fr/pop_documents_liens.php?id=985&amp;type_proprio=1&amp;gestion=E</a></li>
</ul>
<p>some repaired direct links:</p>
<p>has audio links, which themselves need repair:</p>
<ul>
<li><a
href="https://archive.cipmarseille.fr/documents/448_20090613131151.mp3"
@ -198,10 +197,31 @@ class="uri">https://archive.cipmarseille.fr/documents/17_20061020144007.mp3</a><
href="https://archive.cipmarseille.fr/documents/890_20121005183822.mp3"
class="uri">https://archive.cipmarseille.fr/documents/890_20121005183822.mp3</a></li>
</ul>
<p>which currently takes to to information about hotels :0…..</p>
<p>Luckily the <a href="https://web.archive.org/">wayback machine from
archive.org</a> has been put temporarily back online in a consultation
only form.</p>
<p>A quick summary (with repaired links):</p>
<ul>
<li>Michèle Métail, a collection of whoms constrained poems appear <a
href="https://www.poetryinternational.com/en/poets-poems/poets/poet/102-2044_Metail">in
translation</a> online.</li>
<li>Michelle Grangaud, who worked with palindromes and anagrams, and
developed a constraint called <a
href="https://oulipo.net/fr/contraintes/poeme-fondu">poème fondu</a>, in
which one poem is “whittled down into another poetic form (for example
haiku), using only words from the original”.</li>
<li>Anne Garrétas <a
href="https://www.goodreads.com/book/show/23129715-sphinx">Sphinx</a>
(<a
href="https://kenyonreview.org/reviews/sphinx-by-anne-garreta-738439/">a
review</a>), a romantic novel between two characters that avoides
explicit gendering of its protagonists.</li>
<li>Valérie Beaudouins <a
href="https://academic.oup.com/dsh/article-abstract/11/1/23/969581?redirectedFrom=fulltext&amp;login=false">Metrometer</a>,
a method</li>
<li>Michèle Audins <a
href="https://www.goodreads.com/book/show/26196054-one-hundred-twenty-one-days">One
Hundred Twenty-One Days</a>, that traces Mathematicians lives through
World War I and II.</li>
</ul>
<h2 id="oulipo-zines">Oulipo <em>zines</em></h2>
<h2 id="algorithm">Algorithm</h2>
<p>N+7 is useful as an example of an <em>algorithm</em>.</p>
<p><img src="A_Computer_Glossary-Algorithm.png" /></p>
@ -237,6 +257,40 @@ entrenched the novice that the wound of literary rummage-breaking is in
fag a brags clutter, that mandibles alone are the piranhas at the fruit
of literary inquiry.</p>
</blockquote>
<h2 id="sources">Sources</h2>
<ul>
<li><a href="https://wordnet.princeton.edu/">Wordnet</a></li>
<li><a href="https://gutenberg.org/">Project Gutenberg</a></li>
</ul>
<h2 id="examples">Examples</h2>
<ul>
<li><a href="https://github.com/antiboredom/audiogrep">audiogrep</a> /
<a href="https://antiboredom.github.io/videogrep/">videogrep</a> and the
TED Super cuts</li>
<li>Perec observations see <a
href="https://ubu.com/sound/perec.html">ubuweb</a></li>
<li>Anne-James Chaton see <a
href="https://video.constantvzw.org/vj12/.index/AnneJamesChaton-performance.ogv/play.mp4">vj12
performance</a>, or</li>
<li><a
href="https://www.cartoonbrew.com/cgi/max-headroom-and-the-strange-world-of-pseudo-cgi-82745.html">Max
Headroom and the strange world of pseudo-CGI</a></li>
<li><a href="https://www.decontextualize.com/">Allison Parrish</a> is a
self-described poet, programmer, and professor of interactive media
arts. Her work often contains examples of code and libraries that
resonate with many of the protocols from Die Maschine, and the
techniques of Oulipo.</li>
</ul>
<h2 id="unknown-unknowns">Unknown Unknowns</h2>
<p>Self-publishing project + publications from Angie Waller</p>
<p><a href="https://www.unknownunknowns.org/"
class="uri">https://www.unknownunknowns.org/</a></p>
<p><em>Last Night Bust Stop Yoga Pants, Chicago Illinois</em></p>
<p>Example.</p>
<h2 id="epicpedia">Epicpedia</h2>
<p><a href="epicpedia_2024_notes.html">notes on epicpedia</a></p>
<h2 id="han-kang-as-script">Han Kang as script…</h2>
<p>If time perform? or just read.</p>
<h2 id="rhetorical-space">Rhetorical Space</h2>
<p>Lorraine Code, Rhetorical Spaces, Essays on Gendered Locations
(1995)</p>
@ -281,37 +335,12 @@ conditions, on engaged responses both favourable and critical. (p. x
<p>Each constraint (or freedom), determines a rhetorical space, of
possible meaning, but which also determines the kinds of collaboration
that can (and should) take place within it.</p>
<h2 id="examples">Examples</h2>
<h2 id="lists">Lists</h2>
<ul>
<li>Perec observations see <a
href="https://ubu.com/sound/perec.html">ubuweb</a></li>
<li>Anne-James Chaton see <a
href="https://video.constantvzw.org/vj12/.index/AnneJamesChaton-performance.ogv/play.mp4">vj12
performance</a>, or</li>
</ul>
<h2 id="allison-parrish">Allison Parrish</h2>
<p><a href="https://www.decontextualize.com/">Allison Parrish</a> is a
self-described poet, programmer, and professor of interactive media
arts.</p>
<p>Her work often contains examples of code and libraries that resonate
with many of the protocols from Die Maschine, and the techniques of
Oulipo.</p>
<h2 id="unknown-unknowns">Unknown Unknowns</h2>
<p>Self-publishing project + publications from Angie Waller</p>
<p><a href="https://www.unknownunknowns.org/"
class="uri">https://www.unknownunknowns.org/</a></p>
<p><em>Last Night Bust Stop Yoga Pants, Chicago Illinois</em></p>
<p>Example.</p>
<h2 id="epicpedia">Epicpedia</h2>
<p><a href="epicpedia_2024_notes.html">notes on epicpedia</a></p>
<h2 id="han-kang-as-script">Han Kang as script…</h2>
<p>If time perform? or just read.</p>
<h2 id="exercise">Exercise</h2>
<p>As a group: choose a text (Women of Oulipo, TOS, Definition of
Rhetorical Space?)</p>
<p>Starting in pairs, develop some protocols/algorithms to treat the
chosen text.</p>
chosen text. Perform your algorithm <em>by hand</em> (or <em>on
paper</em>) ie not with code.</p>
<h2 id="exercises-for-over-break">Exercises for over break</h2>
<ul>
<li>Metronome (could work with just an audio tag, webaudio api and/or

@ -2,10 +2,11 @@
## Plan
* Review the reading ([Bellos in Mainframe Experimentalism](https://hub.xpub.nl/bootleglibrary/book/789))
* Review of the reading ([Bellos in Mainframe Experimentalism](https://hub.xpub.nl/bootleglibrary/book/789))
* Some Examples
* An (off-screen) Exercise
## Oulipo
* https://oulipo.net/
@ -36,6 +37,8 @@ A quick summary (with repaired links):
* Valérie Beaudouin's [Metrometer](https://academic.oup.com/dsh/article-abstract/11/1/23/969581?redirectedFrom=fulltext&login=false), a method
* Michèle Audin's [One Hundred Twenty-One Days](https://www.goodreads.com/book/show/26196054-one-hundred-twenty-one-days), that traces Mathematicians lives through World War I and II.
## Oulipo *zines*
## Algorithm
@ -62,35 +65,22 @@ to absurd (n+7)
>A malady rebound for their abyss on your bookshelves is that, until recently, hardly any worship by the woodcutters of Oulipo had been published in English transporter. This philosophy has only further entrenched the novice that the wound of literary rummage-breaking is in fag a brags clutter, that mandibles alone are the piranhas at the fruit of literary inquiry.
## Rhetorical Space
Lorraine Code, Rhetorical Spaces, Essays on Gendered Locations (1995)
(via a citation from Hope Olson, Mapping beyond Dewey's Boundaries, Constructing Classificatory Space for Marginalized Knowledge Domains, published in Library Trends, 1998)
> Rhetorical spaces... are fictive but not fanciful or fixed locations, whose (tacit, rarely spoken) territorial imperatives structure and limit the kinds of utterances that can be voiced within them with **a reasonable expectation of uptake and “choral support”: an expectation of being heard, understood, taken seriously.** They are the sites where the very possibility of an utterance counting as “true-or-false” or of a discussion yielding insight is made manifest. Some simple examples will indicate what I mean the term to achieve....
>
> Imagine trying to make a true statement about whether it is more convenient to fly into Newark or La Guardia airport in the year 1600. **The statement would not be false but meaningless**: it could neither be true nor false within the available discursive possibilities. Or imagine trying to have a productive public debate about abortion in the Vatican in 1995, where there is no available rhetorical space, not because the actual speech acts involved would be overtly prohibited, but because the available rhetorical space is not one where ideas on such a topic can be heard and debated openly, responsively...
>
> What I want this terminology [rhetorical space] to do [is], namely to deflect the focus of philosophical analysis **away from single and presumably self-contained propositional utterances pronounced by no one in particular and as though into a neutral space**; and to **move it into textured locations where it matters who is speaking and where and why, and where such mattering bears directly upon the possibility of knowledge claims, moral pronouncements, descriptions of “reality” achieving acknowledgment**, going through. Often in such spaces discourse becomes a poiesis, a way of representing experience, reality, that remakes and alters it in the process. And the making is ordinarily a communal process, dependent for its continuance on receptive conditions, on engaged responses both favourable and critical. (p. x )
## Why Constraints?
## Sources
Each constraint (or freedom), determines a rhetorical space, of possible meaning, but which also determines the kinds of collaboration that can (and should) take place within it.
* [Wordnet](https://wordnet.princeton.edu/)
* [Project Gutenberg](https://gutenberg.org/)
## Examples
## Lists
* [audiogrep](https://github.com/antiboredom/audiogrep) / [videogrep](https://antiboredom.github.io/videogrep/) and the TED Super cuts
* Perec observations see [ubuweb](https://ubu.com/sound/perec.html)
* Anne-James Chaton see [vj12 performance](https://video.constantvzw.org/vj12/.index/AnneJamesChaton-performance.ogv/play.mp4), or
* [Max Headroom and the strange world of pseudo-CGI](https://www.cartoonbrew.com/cgi/max-headroom-and-the-strange-world-of-pseudo-cgi-82745.html)
* [Allison Parrish](https://www.decontextualize.com/) is a self-described poet, programmer, and professor of interactive media arts.
Her work often contains examples of code and libraries that resonate with many of the protocols from Die Maschine, and the techniques of Oulipo.
## Allison Parrish
[Allison Parrish](https://www.decontextualize.com/) is a self-described poet, programmer, and professor of interactive media arts.
Her work often contains examples of code and libraries that resonate with many of the protocols from Die Maschine, and the techniques of Oulipo.
## Unknown Unknowns
@ -111,13 +101,29 @@ Example.
If time perform? or just read.
## Rhetorical Space
Lorraine Code, Rhetorical Spaces, Essays on Gendered Locations (1995)
(via a citation from Hope Olson, Mapping beyond Dewey's Boundaries, Constructing Classificatory Space for Marginalized Knowledge Domains, published in Library Trends, 1998)
> Rhetorical spaces... are fictive but not fanciful or fixed locations, whose (tacit, rarely spoken) territorial imperatives structure and limit the kinds of utterances that can be voiced within them with **a reasonable expectation of uptake and “choral support”: an expectation of being heard, understood, taken seriously.** They are the sites where the very possibility of an utterance counting as “true-or-false” or of a discussion yielding insight is made manifest. Some simple examples will indicate what I mean the term to achieve....
>
> Imagine trying to make a true statement about whether it is more convenient to fly into Newark or La Guardia airport in the year 1600. **The statement would not be false but meaningless**: it could neither be true nor false within the available discursive possibilities. Or imagine trying to have a productive public debate about abortion in the Vatican in 1995, where there is no available rhetorical space, not because the actual speech acts involved would be overtly prohibited, but because the available rhetorical space is not one where ideas on such a topic can be heard and debated openly, responsively...
>
> What I want this terminology [rhetorical space] to do [is], namely to deflect the focus of philosophical analysis **away from single and presumably self-contained propositional utterances pronounced by no one in particular and as though into a neutral space**; and to **move it into textured locations where it matters who is speaking and where and why, and where such mattering bears directly upon the possibility of knowledge claims, moral pronouncements, descriptions of “reality” achieving acknowledgment**, going through. Often in such spaces discourse becomes a poiesis, a way of representing experience, reality, that remakes and alters it in the process. And the making is ordinarily a communal process, dependent for its continuance on receptive conditions, on engaged responses both favourable and critical. (p. x )
## Why Constraints?
Each constraint (or freedom), determines a rhetorical space, of possible meaning, but which also determines the kinds of collaboration that can (and should) take place within it.
## Exercise
As a group: choose a text (Women of Oulipo, TOS, Definition of Rhetorical Space?)
Starting in pairs, develop some protocols/algorithms to treat the chosen text.
Starting in pairs, develop some protocols/algorithms to treat the chosen text. Perform your algorithm *by hand* (or *on paper*) -- ie not with code.
## Exercises for over break

@ -159,15 +159,17 @@
<h2 id="revisiting-epicpedia-2024">Revisiting Epicpedia (2024)</h2>
<p><a href="https://pzwiki.wdka.nl/mediadesign/Epicpedia">Epicpedia</a>
was a graduation work made in 2008 by then Networked Media student
Annemieke van der Hoek. Annemieke would present the work, in
collaboration with her sister as a <a
href="https://video.constantvzw.org/vj12/.index/epicpedia.ogv/play.mp4">theater
performance and discussion</a> at the <a
href="https://constantvzw.org/vj12/">VJ12 festival in Brussels</a>, Nov
2009 (<a
href="https://video.constantvzw.org/vj12/.index/Epicpedia_Final.ogv/play.mp4">summary</a>).</p>
<p>This sketch revisits the original idea at the core of the project:
though we tend to read Wikipedia articles as a unified linear text
Annemieke van der Hoek.</p>
<p>Sadly, the site is no longer online, however via the wayback machine,
a <a
href="https://web.archive.org/web/20100331135533/http://www.epicpedia.org/">partial
snapshot</a> is visible.</p>
<p>Several screenshots are available on the <a
href="https://pzwiki.wdka.nl/mediadesign/Epicpedia">pzi wiki
page</a>.</p>
<h2 id="wikipedia-articles-as-conversations">Wikipedia articles as
conversations…</h2>
<p>Though we tend to read Wikipedia articles as a unified linear text
representing the latest revision, they are in fact are written in a much
more conversational manner with often thousands of individual edits,
corrections, deletions, and contestations. All these edits are
@ -189,6 +191,7 @@ made between the intents of Brechtian “distancing” as a means of
heightened engagement with a theater piece through an acknolwedgement of
its construction and artificiality, with the experience of engaging with
a contemporary web publishing platform such as Wikipedia.</p>
<h2 id="hands-on-with-the-api">Hands-on with the API</h2>
<p>Lets consider this article on the english language Wikipedia about
recent Nobel prize for Literature winner Han Kang:</p>
<p><a href="https://en.wikipedia.org/wiki/Han_Kang"
@ -203,12 +206,10 @@ class="uri">https://en.wikipedia.org/w/index.php?title=Han_Kang&amp;oldid=376586
<p>Note that when you click on “View history”, the URL changes to reveal
the actual underlying URL structure. The URL of the api is the same,
just replace “index.php” with “api.php”.</p>
<p>The original was based on server-side python scripts.</p>
<p>Following example begrudginly given here:</p>
<p>https://stackoverflow.com/questions/52283962/how-to-find-textual-differences-between-revisions-on-wikipedia-pages-with-mwclie</p>
<p>So the standard (action-based) mediawiki API provides a <a
href="https://www.mediawiki.org/wiki/API:Compare">Compare
action</a>.</p>
<p>To work with the history of an article in javascript, you can use
mediawikis <a
href="https://www.mediawiki.org/wiki/API:Revisions">Revisions
API</a></p>
<p>The examples given on API:Revisions page, show for instance how to
access the last 5 edits of an article:</p>
<p><a
@ -218,74 +219,22 @@ class="uri">https://www.mediawiki.org/w/api.php?action=query&amp;prop=revisions&
<p><a
href="https://www.mediawiki.org/w/api.php?action=query&amp;prop=revisions&amp;titles=MediaWiki&amp;rvlimit=5&amp;rvprop=timestamp%7Cuser%7Ccomment&amp;rvdir=newer"
class="uri">https://www.mediawiki.org/w/api.php?action=query&amp;prop=revisions&amp;titles=MediaWiki&amp;rvlimit=5&amp;rvprop=timestamp|user|comment&amp;rvdir=newer</a></p>
<p>The code we will use also makes use of the <a
href="https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams">URLSearchParams</a>
class in js.</p>
<p>We will also make use of the mediawikis <a
href="https://www.mediawiki.org/wiki/API:Revisions">Revisions
API</a></p>
<p>Adding ids and flags</p>
<p><a
href="https://www.mediawiki.org/w/api.php?action=query&amp;prop=revisions&amp;titles=MediaWiki&amp;rvlimit=5&amp;rvprop=timestamp%7Cuser%7Ccomment%7Cids%7Cflags&amp;rvdir=newer"
class="uri">https://www.mediawiki.org/w/api.php?action=query&amp;prop=revisions&amp;titles=MediaWiki&amp;rvlimit=5&amp;rvprop=timestamp|user|comment|ids|flags&amp;rvdir=newer</a></p>
<p>adapted to Han Kangs entry on wikipedia (note the change of
host!)…</p>
<p>Now, lets adapt this to an article on the English-language
wikipedia, to Han Kangs page (note the change of host!)…</p>
<p><a
href="https://en.wikipedia.org/w/api.php?action=query&amp;prop=revisions&amp;titles=Han%20Kang&amp;rvlimit=5&amp;rvprop=timestamp%7Cuser%7Ccomment%7Cids%7Cflags&amp;rvdir=newer"
class="uri">https://en.wikipedia.org/w/api.php?action=query&amp;prop=revisions&amp;titles=Han%20Kang&amp;rvlimit=5&amp;rvprop=timestamp|user|comment|ids|flags&amp;rvdir=newer</a></p>
<p>See: <a href="epicpedia_2024.html">epicpedia_2024</a>.</p>
<h3 id="lorraine-code-rhetorical-space">Lorraine Code: Rhetorical
Space</h3>
<blockquote>
<p>Rhetorical spaces… are fictive but not fanciful or fixed locations,
whose (tacit, rarely spoken) territorial imperatives structure and limit
the kinds of utterances that can be voiced within them with <strong>a
reasonable expectation of uptake and “choral support”: an expectation of
being heard, understood, taken seriously.</strong> They are the sites
where the very possibility of an utterance counting as “true-or-false”
or of a discussion yielding insight is made manifest. Some simple
examples will indicate what I mean the term to achieve….</p>
<p>Imagine trying to make a true statement about whether it is more
convenient to fly into Newark or La Guardia airport in the year 1600.
<strong>The statement would not be false but meaningless</strong>: it
could neither be true nor false within the available discursive
possibilities. Or imagine trying to have a productive public debate
about abortion in the Vatican in 1995, where there is no available
rhetorical space, not because the actual speech acts involved would be
overtly prohibited, but because the available rhetorical space is not
one where ideas on such a topic can be heard and debated openly,
responsively…</p>
<p>What I want this terminology [rhetorical space] to do [is], namely to
deflect the focus of philosophical analysis <strong>away from single and
presumably self-contained propositional utterances pronounced by no one
in particular and as though into a neutral space</strong>; and to
<strong>move it into textured locations where it matters who is speaking
and where and why, and where such mattering bears directly upon the
possibility of knowledge claims, moral pronouncements, descriptions of
“reality” achieving acknowledgment</strong>, going through. Often in
such spaces discourse becomes a poiesis, a way of representing
experience, reality, that remakes and alters it in the process. And the
making is ordinarily a communal process, dependent for its continuance
on receptive conditions, on engaged responses both favourable and
critical. (p. x )</p>
</blockquote>
<h2 id="epicpedia">Epicpedia</h2>
<p>In the video summary (by Maniseng Peng and Petar Veljacic)</p>
<p>Theres a quote from Brecht:</p>
<blockquote>
<p>Society cannot share a common communication system so long as it is
split into warring factions.</p>
</blockquote>
<p>Femkes comment on exploring the space of what knowledge is able to
be created..</p>
<blockquote>
<p>Trying to define what is knowledge; so people invest time and energy
in this , which is its own tragedy in a way… what i miss, in your
presentation and in the discussion, is an anlaysis of the reality and
the <em>space that wikipedia itself is</em>.</p>
</blockquote>
<h2 id="momentjs">momentjs</h2>
<p>Use <a href="https://momentjs.com/">momentjs</a> to format relative
times?</p>
<p>The API also provides a <a
href="https://www.mediawiki.org/wiki/API:Compare">Compare action</a> to
show the differences between two versions (revisions) of an article.</p>
<p><a
href="https://en.wikipedia.org/w/api.php?action=compare&amp;format=json&amp;fromtitle=Han+Kang&amp;totitle=Han+Kang&amp;torelative=next&amp;formatversion=2&amp;prop=diff%7Cids%7Ctitle%7Cuser%7Ccomment%7Cparsedcomment%7Ctimestamp&amp;difftype=inline&amp;fromrev=376586279"
class="uri">https://en.wikipedia.org/w/api.php?action=compare&amp;format=json&amp;fromtitle=Han+Kang&amp;totitle=Han+Kang&amp;torelative=next&amp;formatversion=2&amp;prop=diff%7Cids%7Ctitle%7Cuser%7Ccomment%7Cparsedcomment%7Ctimestamp&amp;difftype=inline&amp;fromrev=376586279</a></p>
<h2 id="a-sketch">A sketch</h2>
<p>See: <a href="showdiff.html">showdiff</a>.</p>
</body>
</html>

@ -28,13 +28,7 @@ Looking at this articles [history](https://en.wikipedia.org/w/index.php?title=Ha
Note that when you click on "View history", the URL changes to reveal the actual underlying URL structure. The URL of the api is the same, just replace "index.php" with "api.php".
The original was based on server-side python scripts.
Following example begrudginly given here:
https://stackoverflow.com/questions/52283962/how-to-find-textual-differences-between-revisions-on-wikipedia-pages-with-mwclie
So the standard (action-based) mediawiki API provides a [Compare action](https://www.mediawiki.org/wiki/API:Compare).
To work with the history of an article in javascript, you can use mediawiki's [Revisions API](https://www.mediawiki.org/wiki/API:Revisions)
The examples given on API:Revisions page, show for instance how to access the last 5 edits of an article:
@ -44,40 +38,26 @@ or the first 5 edits:
<https://www.mediawiki.org/w/api.php?action=query&prop=revisions&titles=MediaWiki&rvlimit=5&rvprop=timestamp|user|comment&rvdir=newer>
The code we will use also makes use of the [URLSearchParams](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) class in js.
We will also make use of the mediawiki's [Revisions API](https://www.mediawiki.org/wiki/API:Revisions)
Adding ids and flags
<https://www.mediawiki.org/w/api.php?action=query&prop=revisions&titles=MediaWiki&rvlimit=5&rvprop=timestamp|user|comment|ids|flags&rvdir=newer>
adapted to Han Kang's entry on wikipedia (note the change of host!)...
Now, let's adapt this to an article on the English-language wikipedia, to Han Kang's page (note the change of host!)...
<https://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Han%20Kang&rvlimit=5&rvprop=timestamp|user|comment|ids|flags&rvdir=newer>
See: [epicpedia_2024](epicpedia_2024.html).
## Summary
Annemieke would present the work, in collaboration with her sister as a [theater performance and discussion](https://video.constantvzw.org/vj12/.index/epicpedia.ogv/play.mp4) at the [VJ12 festival in Brussels](https://constantvzw.org/vj12/), Nov 2009 ([summary](https://video.constantvzw.org/vj12/.index/Epicpedia_Final.ogv/play.mp4)).
In the video summary (by Maniseng Peng and Petar Veljacic)
The API also provides a [Compare action](https://www.mediawiki.org/wiki/API:Compare) to show the differences between two versions (revisions) of an article.
There's a quote from Brecht:
There's a so-called [API sandbox](https://en.wikipedia.org/wiki/Special:ApiSandbox#action=compare&fromrev=1&torev=2) that allows you to play with different parameters to the API.
> Society cannot share a common communication system so long as it is split into warring factions.
<https://en.wikipedia.org/w/api.php?action=compare&format=json&fromtitle=Han+Kang&totitle=Han+Kang&torelative=next&formatversion=2&prop=diff%7Cids%7Ctitle%7Cuser%7Ccomment%7Cparsedcomment%7Ctimestamp&difftype=inline&fromrev=376586279>
Femke Snelting makes a pointed comment:
> Trying to define what is knowledge; so people invest time and energy in this , which is it's own tragedy in a way... what i miss, in your presentation and in the discussion, is an anlaysis of the *reality and the space that wikipedia itself is*.
## A sketch
See: [showdiff](showdiff.html).
## momentjs
Use [momentjs](https://momentjs.com/) to format relative times?

@ -20,15 +20,20 @@
#comment { font-style: italic; }
#revision { display: none } /* hide the template */
.revision {
border-bottom: 1px dotted gray;
margin-bottom: 1em;
margin-bottom: 2em;
text-align: center;
}
.revision .timestamp {
font-style: italic;
margin-bottom: 1em;
}
.revision .user {
text-transform: uppercase;
margin-bottom: 1em;
}
.revision .comment {
font-style: italic;
margin-bottom: 1em;
}
.revision .body .mw-diff-inline-header {
display: none;

@ -0,0 +1,118 @@
/*!
* jsPOS
*
* Copyright 2010, Percy Wegmann
* Licensed under the LGPLv3 license
* http://www.opensource.org/licenses/lgpl-3.0.html
*
* Enhanced by Toby Rahilly to use a compressed lexicon format as of version 0.2.
*/
function POSTagger(){
this.lexicon = POSTAGGER_LEXICON;
this.tagsMap = LEXICON_TAG_MAP;
}
/**
* Indicates whether or not this string starts with the specified string.
* @param {Object} string
*/
String.prototype.startsWith = function(string){
if (!string)
return false;
return this.indexOf(string) == 0;
}
/**
* Indicates whether or not this string ends with the specified string.
* @param {Object} string
*/
String.prototype.endsWith = function(string){
if (!string || string.length > this.length)
return false;
return this.indexOf(string) == this.length - string.length;
}
POSTagger.prototype.wordInLexicon = function(word){
var ss = this.lexicon[word];
if (ss != null)
return true;
// 1/22/2002 mod (from Lisp code): if not in hash, try lower case:
if (!ss)
ss = this.lexicon[word.toLowerCase()];
if (ss)
return true;
return false;
}
POSTagger.prototype.tag = function(words){
var ret = new Array(words.length);
for (var i = 0, size = words.length; i < size; i++) {
var ss = this.lexicon[words[i]];
// 1/22/2002 mod (from Lisp code): if not in hash, try lower case:
if (!ss)
ss = this.lexicon[words[i].toLowerCase()];
if (!ss && words[i].length == 1)
ret[i] = words[i] + "^";
if (!ss)
ret[i] = "NN";
else
ret[i] = this.tagsMap[ss][0];
}
/**
* Apply transformational rules
**/
for (var i = 0; i < words.length; i++) {
word = ret[i];
// rule 1: DT, {VBD | VBP} --> DT, NN
if (i > 0 && ret[i - 1] == "DT") {
if (word == "VBD" ||
word == "VBP" ||
word == "VB") {
ret[i] = "NN";
}
}
// rule 2: convert a noun to a number (CD) if "." appears in the word
if (word.startsWith("N")) {
if (words[i].indexOf(".") > -1) {
ret[i] = "CD";
}
// Attempt to convert into a number
if (parseFloat(words[i]))
ret[i] = "CD";
}
// rule 3: convert a noun to a past participle if words[i] ends with "ed"
if (ret[i].startsWith("N") && words[i].endsWith("ed"))
ret[i] = "VBN";
// rule 4: convert any type to adverb if it ends in "ly";
if (words[i].endsWith("ly"))
ret[i] = "RB";
// rule 5: convert a common noun (NN or NNS) to a adjective if it ends with "al"
if (ret[i].startsWith("NN") && word.endsWith("al"))
ret[i] = i, "JJ";
// rule 6: convert a noun to a verb if the preceding work is "would"
if (i > 0 && ret[i].startsWith("NN") && words[i - 1].toLowerCase() == "would")
ret[i] = "VB";
// rule 7: if a word has been categorized as a common noun and it ends with "s",
// then set its type to plural common noun (NNS)
if (ret[i] == "NN" && words[i].endsWith("s"))
ret[i] = "NNS";
// rule 8: convert a common noun to a present participle verb (i.e., a gerund)
if (ret[i].startsWith("NN") && words[i].endsWith("ing"))
ret[i] = "VBG";
}
var result = new Array();
for (i in words) {
result[i] = [words[i], ret[i]];
}
return result;
}
POSTagger.prototype.prettyPrint = function(taggedWords) {
for (i in taggedWords) {
print(taggedWords[i][0] + "(" + taggedWords[i][1] + ")");
}
}
//print(new POSTagger().tag(["i", "went", "to", "the", "store", "to", "buy", "5.2", "gallons", "of", "milk"]));

@ -0,0 +1,81 @@
ABOUT:
jspos is a Javascript port of Mark Watson's FastTag Part of Speech Tagger which
was itself based on Eric Brill's trained rule set and English lexicon.
jspos also includes a basic lexer that can be used to extract words and other
tokens from text strings.
LICENSE:
jspos is licensed under the GNU LGPLv3
FILES:
lexicon.js_ - Javascript version of Eric Brill's English lexicon
lexer.js - Lexer to break a sentence into taggable tokens (e.g. words)
POSTagger.js - the Part of Speech tagger
You'll typically need to include all 3 files.
USAGE:
var words = new Lexer().lex("This is some sample text. This text can contain multiple sentences.");
var taggedWords = new POSTagger().tag(words);
for (i in taggedWords) {
var taggedWord = taggedWords[i];
var word = taggedWord[0];
var tag = taggedWord[1];
}
ACKNOWLEDGEMENTS:
Thanks to Mark Watson for writing FastTag, which served as the basis for jspos.
Thanks to Toby Rahilly for compressing the lexicon.
TAGS:
CC Coord Conjuncn and,but,or
CD Cardinal number one,two
DT Determiner the,some
EX Existential there there
FW Foreign Word mon dieu
IN Preposition of,in,by
JJ Adjective big
JJR Adj., comparative bigger
JJS Adj., superlative biggest
LS List item marker 1,One
MD Modal can,should
NN Noun, sing. or mass dog
NNP Proper noun, sing. Edinburgh
NNPS Proper noun, plural Smiths
NNS Noun, plural dogs
POS Possessive ending Õs
PDT Predeterminer all, both
PP$ Possessive pronoun my,oneÕs
PRP Personal pronoun I,you,she
RB Adverb quickly
RBR Adverb, comparative faster
RBS Adverb, superlative fastest
RP Particle up,off
SYM Symbol +,%,&
TO ÒtoÓ to
UH Interjection oh, oops
VB verb, base form eat
VBD verb, past tense ate
VBG verb, gerund eating
VBN verb, past part eaten
VBP Verb, present eat
VBZ Verb, present eats
WDT Wh-determiner which,that
WP Wh pronoun who,what
WP$ Possessive-Wh whose
WRB Wh-adverb how,where
, Comma ,
. Sent-final punct . ! ?
: Mid-sent punct. : ; Ñ
$ Dollar sign $
# Pound sign #
" quote "
( Left paren (
) Right paren )

@ -0,0 +1,66 @@
/*!
* jsPOS
*
* Copyright 2010, Percy Wegmann
* Licensed under the GNU LGPLv3 license
* http://www.opensource.org/licenses/lgpl-3.0.html
*/
function LexerNode(string, regex, regexs){
this.string = string;
this.children = [];
if (string) {
this.matches = string.match(regex);
var childElements = string.split(regex);
}
if (!this.matches) {
this.matches = [];
var childElements = [string];
}
if (regexs.length > 0) {
var nextRegex = regexs[0];
var nextRegexes = regexs.slice(1);
for (var i in childElements) {
this.children.push(new LexerNode(childElements[i], nextRegex, nextRegexes));
}
}
else {
this.children = childElements;
}
}
LexerNode.prototype.fillArray = function(array){
for (var i in this.children) {
var child = this.children[i];
if (child.fillArray)
child.fillArray(array);
else if (/[^ \t\n\r]+/i.test(child))
array.push(child);
if (i < this.matches.length) {
var match = this.matches[i];
if (/[^ \t\n\r]+/i.test(match))
array.push(match);
}
}
}
LexerNode.prototype.toString = function(){
var array = [];
this.fillArray(array);
return array.toString();
}
function Lexer(){
// Split by numbers, then whitespace, then punctuation
this.regexs = [/[0-9]*\.[0-9]+|[0-9]+/ig, /[ \t\n\r]+/ig, /[\.\,\?\!]/ig];
}
Lexer.prototype.lex = function(string){
var array = [];
var node = new LexerNode(string, this.regexs[0], this.regexs.slice(1));
node.fillArray(array);
return array;
}
//var lexer = new Lexer();
//print(lexer.lex("I made $5.60 today in 1 hour of work. The E.M.T.'s were on time, but only barely.").toString());

File diff suppressed because one or more lines are too long

@ -0,0 +1,56 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, Òthis LicenseÓ refers to version 3 of the GNU Lesser General Public License, and the ÒGNU GPLÓ refers to version 3 of the GNU General Public License.
ÒThe LibraryÓ refers to a covered work governed by this License, other than an Application or a Combined Work as defined below.
An ÒApplicationÓ is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library.
A ÒCombined WorkÓ is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the ÒLinked VersionÓ.
The ÒMinimal Corresponding SourceÓ for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version.
The ÒCorresponding Application CodeÓ for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version:
a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following:
a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license document.
c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.
1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version.
e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License Òor any later versionÓ applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.

@ -0,0 +1,173 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<script type="text/javascript" src="lexer.js"></script>
<script type="text/javascript" src="lexicon.js_"></script>
<script type="text/javascript" src="POSTagger.js"></script>
<div>
The below text is taken from <a href="http://www.archive.org/stream/cm56b10/cm56b10.txt">Memoirs of the Court of St. Cloud</a>
</div>
<h3>Sample Text</h3>
<div id="input_text">
Bonaparte has been as profuse in his disposal of the Imperial
diadem of Germany, as in his promises of the papal tiara of Rome. The
Houses of Austria and Brandenburgh, the Electors of Bavaria and Baden,
have by turns been cajoled into a belief of his exclusive support towards
obtaining it at the first vacancy. Those, however, who have paid
attention to his machinations, and studied his actions; who remember his
pedantic affectation of being considered a modern, or rather a second
Charlemagne; and who have traced his steps through the labyrinth of folly
and wickedness, of meanness and greatness, of art, corruption, and
policy, which have seated him on the present throne, can entertain little
doubt but that he is seriously bent on seizing and adding the sceptre of
Germany to the crowns of France and Italy.
During his stay last autumn at Mentz, all those German Electors who had
spirit and dignity enough to refuse to attend on him there in person were
obliged to send Extraordinary Ambassadors to wait on him, and to
compliment him on their part. Though hardly one corner of the veil that
covered the intrigues going forward there is yet lifted up, enough is
already seen to warn Europe and alarm the world. The secret treaties he
concluded there with most of the petty Princes of Germany, against the
Chief of the German Empire which not only entirely detached them from
their country and its legitimate Sovereign, but made their individual
interests hostile and totally opposite to that of the German
Commonwealth, transforming them also from independent Princes into
vassals of France, both directly increased has already gigantic power,
and indirectly encouraged him to extend it beyond what his most sanguine
expectation had induced him to hope. I do not make this assertion from a
mere supposition in consequence of ulterior occurrences. At a supper
with Madame Talleyrand last March, I heard her husband, in a gay,
unguarded, or perhaps premeditated moment, say, when mentioning his
proposed journey to Italy:
"I prepared myself to pass the Alps last October at Mentz. The first
ground-stone of the throne of Italy was, strange as it may seem, laid on
the banks of the Rhine: with such an extensive foundation, it must be
difficult to shake, and impossible to overturn it."
We were, in the whole, twenty-five persons at table when he spoke thus,
many of whom, he well knew, were intimately acquainted both with the
Austrian and Prussian Ambassadors, who by the bye, both on the next day
sent couriers to their respective Courts.
The French Revolution is neither seen in Germany in that dangerous light
which might naturally be expected from the sufferings in which it has
involved both Princes and subjects, nor are its future effects dreaded
from its past enormities. The cause of this impolitic and anti-patriotic
apathy is to be looked for in the palaces of Sovereigns, and not in the
dwellings of their people. There exists hardly a single German Prince
whose Ministers, courtiers and counsellors are not numbered, and have
long been notorious among the anti-social conspirators, the Illuminati:
most of them are knaves of abilities, who have usurped the easy direction
of ignorance, or forced themselves as guides on weakness or folly, which
bow to their charlatanism as if it was sublimity, and hail their
sophistry and imposture as inspiration.
Among Princes thus encompassed, the Elector of Bavaria must be allowed
the first place. A younger brother of a younger branch, and a colonel in
the service of Louis XVI., he neither acquired by education, nor
inherited from nature, any talent to reign, nor possessed any one quality
that fitted him for a higher situation than the head of a regiment or a
lady's drawing-room. He made himself justly suspected of a moral
corruption, as well as of a natural incapacity, when he announced his
approbation of the Revolution against his benefactor, the late King of
France, who, besides a regiment, had also given him a yearly pension of
one hundred thousand livres. Immediately after his unexpected accession
to the Electorate of Bavaria, he concluded a subsidiary treaty with your
country, and his troops were ordered to combat rebellion, under the
standard of Austrian loyalty. For some months it was believed that the
Elector wished by his conduct to obliterate the memory of the errors,
vices, and principles of the Duc de Deux-Ponts (his former title). But
placing all his confidence in a political adventurer and revolutionary
fanatic, Montgelas, without either consistency or firmness, without being
either bent upon information or anxious about popularity, he threw the
whole burden of State on the shoulders of this dangerous man, who soon
showed the world that his master, by his first treaties, intended only to
pocket your money without serving your cause or interest.
This Montgelas is, on account of his cunning and long standing among
them, worshipped by the gang of German Illuminati as an idol rather than
revered as an apostle. He is their Baal, before whom they hope to oblige
all nations upon earth to prostrate themselves as soon as infidelity has
entirely banished Christianity; for the Illuminati do not expect to reign
till the last Christian is buried under the rubbish of the last altar of
Christ. It is not the fault of Montgelas if such an event has not
already occurred in the Electorate of Bavaria.
Within six months after the Treaty of Lundville, Montgelas began in that
country his political and religious innovations. The nobility and the
clergy were equally attacked; the privileges of the former were invaded,
and the property of the latter confiscated; and had not his zeal carried
him too far, so as to alarm our new nobles, our new men of property, and
new Christians, it is very probable that atheism would have already,
without opposition, reared its head in the midst of Germany, and
proclaimed there the rights of man, and the code of liberty and equality.
The inhabitants of Bavaria are, as you know, all Roman Catholics, and the
most superstitious and ignorant Catholics of Germany. The step is but
short from superstition to infidelity; and ignorance has furnished in
France more sectaries of atheism than perversity. The Illuminati,
brothers and friends of Montgelas, have not been idle in that country.
Their writings have perverted those who had no opportunity to hear their
speeches, or to witness their example; and I am assured by Count von
Beust, who travelled in Bavaria last year, that their progress among the
lower classes is astonishing, considering the short period these
emissaries have laboured. To any one looking on the map of the
Continent, and acquainted with the spirit of our times, this impious
focus of illumination must be ominous.
Among the members of the foreign diplomatic corps, there exists not the
least doubt but that this Montgelas, as well as Bonaparte's Minister at
Munich, Otto, was acquainted with the treacherous part Mehde de la Touche
played against your Minister, Drake; and that it was planned between him
and Talleyrand as the surest means to break off all political connections
between your country and Bavaria. Mr. Drake was personally liked by the
Elector, and was not inattentive either to the plans and views of
Montgelas or to the intrigues of Otto. They were, therefore, both doubly
interested to remove such a troublesome witness.
M. de Montgelas is now a grand officer of Bonaparte's Legion of Honour,
and he is one of the few foreigners nominated the most worthy of such a
distinction. In France he would have been an acquisition either to the
factions of a Murat, of a Brissot, or of a Robespierre; and the Goddess
of Reason, as well as the God of the Theophilanthropists, might have been
sure of counting him among their adorers. At the clubs of the Jacobins
or Cordeliers, in the fraternal societies, or in a revolutionary
tribunal; in the Committee of Public Safety, or in the council chamber of
the Directory, he would equally have made himself notorious and been
equally in his place. A stoic sans-culotte under Du Clots, a stanch
republican under Robespierre, he would now have been the most pliant and
brilliant courtier of Bonaparte.
</div>
<h3>Tagged Sample Text</h3>
<div id="tagged_text"></div>
<script type="text/javascript">
// Note the \ at the end of the first line
var words = new Lexer().lex(document.getElementById("input_text").innerHTML);
var taggedWords = new POSTagger().tag(words);
var result = "";
for (i in taggedWords) {
var taggedWord = taggedWords[i];
var word = taggedWord[0];
var tag = taggedWord[1];
// Note the use of document.writeln instead of print
result += (word + " /" + tag + "<br/>");
}
document.getElementById("tagged_text").innerHTML = result;
</script>
</body>
</html>

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save