diff options
Diffstat (limited to 'markup')
3 files changed, 363 insertions, 691 deletions
diff --git a/markup/pod-samples/pod/not_without_help.austin_amissah/media/text/en/not_without_help.austin_amissah.sst b/markup/pod-samples/pod/not_without_help.austin_amissah/media/text/en/not_without_help.austin_amissah.sst index 708cb21..dd2f5e6 100644 --- a/markup/pod-samples/pod/not_without_help.austin_amissah/media/text/en/not_without_help.austin_amissah.sst +++ b/markup/pod-samples/pod/not_without_help.austin_amissah/media/text/en/not_without_help.austin_amissah.sst @@ -1366,7 +1366,7 @@ That night, I was in bed just about to sleep when the telephone rang. It was Sho Another Israeli friend whom I wanted to see was Simcha Gafny, my colleague on the UN Committee on Tax Treaties between Developed and Developing Countries. He was in semi-retirement but, I believe, still managing a commercial bank at the time. His son was the Governor of the Central Bank of Israel. He was kind enough to invite me to dinner at his apartment. We talked of old "friends" on the Committee. -The other people with whom I spent some time were not Israeli but Dutch. They were the Arienses, who had been in Ghana in the early 70s. Krick Ariens was Ambassador of the Netherlands to Ghana. He and his wife, Roberta, had been very gracious hosts to many Ghanaian friends. Krick joined with a number of Ghanaians to play tennis on Wednesdays at the court in the residence of his second in command, Joris Vos, later to become Ambassador to Australia, then the Soviet Union and then Ambassador to Russia and to a number of the States into which the Soviet Union broke afterwards. After being Secretary to the Minister of Foreign Affairs, he became Ambassador to the United States. But these were early days for Joris. I got in touch with the Arienses when I arrived in Israel. They were living in Jerusalem and invited me to dinner a couple of times and also took me on one occasion to a hospital to which the people of Holland had sent a planeload of tulips. Holland maintained very close relations with the Israelis at the time and, as stated earlier, it was the only country which had its Embassy in Jerusalem. Krick asked how the Wednesday tennis group was going. I told a long story of how the group continued to thrive after Joris Vos was replaced by Jaap de Hoop Schaffer. The group had at various times included Kwame Pianim, who was so strong, he played singles with Jaap before the rest of us turned up to join them in our usual doubles games; Francis Nkrumah, a paediatrician specialist and son of our first Prime Minister and President, later to become a Professor of the Medical School and head of the Noguchi Institute; the late Kwamena Phillips, a delightful companion and diplomat; Kofi Annan, a diplomat, then on assignment with the Tourist Company in Ghana, later to become Secretary-General of the United Nations; Issa Egala, a paediatrician specialist, then with the Police Hospital, Roger Korsah, a judge of the High Court, later to be judge of the Supreme Court of Zimbabwe; Miguel Ribeiro, a lawyer in private practice; Osafo Sampong, a lawyer with the Attorney-General's Office; Commander Kyeremeh, a naval officer, but then, I believe a member of the Government with responsibility for the Cocoa Marketing Board; and myself. But when Jaap was in turn succeeded by Christian Kroner, he put an end to the group with the cryptic remark that "friends are made, not inherited". Roberta asked who this was and, when I told her, she summarily dismissed him by saying, "oh, he is not important". Kroner's remark, though unimpeachable in this case, later caused him some embarrassment. He did not know who those using the tennis court in his residence were. He had obviously come in with the idea of making his own life without interferences from the past. When he later learnt who we were, he asked Kwame Pianim to persuade us to come back to his court. Not one of us accepted. By then, some of us were using the court of the Canadian High Commissioner down the road. +The other people with whom I spent some time were not Israeli but Dutch. They were the Arienses, who had been in Ghana in the early 70s. Krick Ariens was Ambassador of the Netherlands to Ghana. He and his wife, Roberta, had been very gracious hosts to many Ghanaian friends. Krick joined with a number of Ghanaians to play tennis on Wednesdays at the court in the residence of his second in command, Joris Vos, later to become Ambassador to Australia, then the Soviet Union and then Ambassador to Russia and to a number of the States into which the Soviet Union broke afterwards. After being Secretary to the Minister of Foreign Affairs, he became Ambassador to the United States. But these were early days for Joris. I got in touch with the Arienses when I arrived in Israel. They were living in Jerusalem and invited me to dinner a couple of times and also took me on one occasion to a hospital to which the people of Holland had sent a planeload of tulips. Holland maintained very close relations with the Israelis at the time and, as stated earlier, it was the only country which had its Embassy in Jerusalem. Krick asked how the Wednesday tennis group was going. I told a long story of how the group continued to thrive after Joris Vos was replaced by Jaap de Hoop Scheffer. The group had at various times included Kwame Pianim, who was so strong, he played singles with Jaap before the rest of us turned up to join them in our usual doubles games; Francis Nkrumah, a paediatrician specialist and son of our first Prime Minister and President, later to become a Professor of the Medical School and head of the Noguchi Institute; the late Kwamena Phillips, a delightful companion and diplomat; Kofi Annan, a diplomat, then on assignment with the Tourist Company in Ghana, later to become Secretary-General of the United Nations; Issa Egala, a paediatrician specialist, then with the Police Hospital, Roger Korsah, a judge of the High Court, later to be judge of the Supreme Court of Zimbabwe; Miguel Ribeiro, a lawyer in private practice; Osafo Sampong, a lawyer with the Attorney-General's Office; Commander Kyeremeh, a naval officer, but then, I believe a member of the Government with responsibility for the Cocoa Marketing Board; and myself. But when Jaap was in turn succeeded by Christian Kroner, he put an end to the group with the cryptic remark that "friends are made, not inherited". Roberta asked who this was and, when I told her, she summarily dismissed him by saying, "oh, he is not important". Kroner's remark, though unimpeachable in this case, later caused him some embarrassment. He did not know who those using the tennis court in his residence were. He had obviously come in with the idea of making his own life without interferences from the past. When he later learnt who we were, he asked Kwame Pianim to persuade us to come back to his court. Not one of us accepted. By then, some of us were using the court of the Canadian High Commissioner down the road. After our intensive work, sightseeing and social visits in Israel, Sodzi and I left for India. I did not know so many people in India. I had lost all touch with the Indians whom I met in Oxford, like Anandraman, Dershi Malhotra, Venkatswaran and Ajmani. The last two, I occasionally enquired about and was aware that they had risen very high in the Indian Foreign Service. With George Isaac, who married the Swede, Cecilia Philipson, with whom many students lost their heart, Stella and I kept in desultory touch after he had returned to India. But he was nowhere near Delhi as his base was in Kerala. We got to know Amrik Mehta when he was the Indian High Commissioner in Accra quite well but he had got a job with UNIDO in Vienna after Ghana and I did not think it worthwhile finding him in New Delhi. Of course, Muthu was still in Ghana. I should have tried to find Justice Khanna with whom I toured Australia in 1975 as soon as we got to New Delhi. I knew that he had retired from the Supreme Court but my enquiries started late. When I got his home address, I was about to leave so I sent him a card instead. On my return to Accra, I got a very kind letter from him regretting that he had not been able to see me in New Delhi. diff --git a/markup/pod-samples/pod/the_autonomous_contract.ralph_amissah/media/text/en/the_autonomous_contract.ralph_amissah.sst b/markup/pod-samples/pod/the_autonomous_contract.ralph_amissah/media/text/en/the_autonomous_contract.ralph_amissah.sst index 6919582..b3a80e7 100644 --- a/markup/pod-samples/pod/the_autonomous_contract.ralph_amissah/media/text/en/the_autonomous_contract.ralph_amissah.sst +++ b/markup/pod-samples/pod/the_autonomous_contract.ralph_amissah/media/text/en/the_autonomous_contract.ralph_amissah.sst @@ -100,7 +100,7 @@ Standard contracts may attempt to be autonomous in themselves, but seldom are, h 2~ A transnational regulatory order for contracts -Within the traditional municipal order a limited degree of autonomy is available in contract. Autonomy is here used in the sense of reducing the relevance of specific national laws. This is achieved as discussed through: the selection of the law of a state that applies uniform law; the use of uniform rules and principles; and/or the use of negotiated standard contracts. There are problems however, with state's judiciaries' limited ability to disengage themselves from their traditional legal process, methods of legal reasoning, use of sources, and interpretation of uniform law, principles, rules and contracts. In addition to these there are problems associated with the enforcement of claims in other states world-wide as required for international commerce. These constraints have long represented a hindrance to the business community that has sought and found a preferable solution in international commercial arbitration. This may be further enhanced through the selection of a-national law as the governing law of the contract under arbitration, such as /{ lex mercatoria }/. This a-national regulatory order is made possible by: *{ (a) }* States' acceptance of _{freedom of contract}_ (/{ odre public }/ or public policy excepted). *{ (b) }* Sanctity of contract embodied in the principle /{ _{pacta sunt servanda}_ }/. *{ (c) }* Written contractual selection of dispute resolution by _{international commercial arbitration}_ - /{ ad hoc }/ or institutional, usually under internationally accepted arbitration rules. *{ (d) }* Enforcement: arbitration where necessary borrowing the state apparatus for _{law enforcement through the /{ New York Convention}_ on Recognition and Enforcement of Arbitral Awards 1958 }/. *{ (e) }* Greater transnational effect is achieved through the exclusion of state law as governing the contract. Usually substituting the choice of general principles of law or /{ _{lex mercatoria}_ }/ as governing the contract, or calling upon the arbitrators to act as /{ amiable compositeur }/ or /{ ex aequo et bono }/. For increased predictability preferably through application of the /{ UNIDROIT Principles }/. +Within the traditional municipal order a limited degree of autonomy is available in contract. Autonomy is here used in the sense of reducing the relevance of specific national laws. This is achieved as discussed through: the selection of the law of a state that applies uniform law; the use of uniform rules and principles; and/or the use of negotiated standard contracts. There are problems however, with state's judiciaries' limited ability to disengage themselves from their traditional legal process, methods of legal reasoning, use of sources, and interpretation of uniform law, principles, rules and contracts. In addition to these there are problems associated with the enforcement of claims in other states world-wide as required for international commerce. These constraints have long represented a hindrance to the business community that has sought and found a preferable solution in international commercial arbitration. This may be further enhanced through the selection of a-national law as the governing law of the contract under arbitration, such as /{ lex mercatoria }/. This a-national regulatory order is made possible by: *{ (a) }* States' acceptance of _{freedom of contract}_ (/{ odre public }/ or public policy excepted). *{ (b) }* Sanctity of contract embodied in the principle /{ _{pacta sunt servanda}_ }/. *{ (c) }* Written contractual selection of dispute resolution by _{international commercial arbitration}_ - /{ ad hoc }/ or institutional, usually under internationally accepted arbitration rules. *{ (d) }* Enforcement: arbitration where necessary borrowing the state apparatus for law enforcement through the /{ _{New York Convention}_ on Recognition and Enforcement of Arbitral Awards 1958 }/. *{ (e) }* Greater transnational effect is achieved through the exclusion of state law as governing the contract. Usually substituting the choice of general principles of law or /{ _{lex mercatoria}_ }/ as governing the contract, or calling upon the arbitrators to act as /{ amiable compositeur }/ or /{ ex aequo et bono }/. For increased predictability preferably through application of the /{ UNIDROIT Principles }/. 3~ International commercial arbitration (ICA) diff --git a/markup/sisudoc-spine-bespoke-output/html/homepage.index.html b/markup/sisudoc-spine-bespoke-output/html/homepage.index.html index adf34f1..c5ba045 100644 --- a/markup/sisudoc-spine-bespoke-output/html/homepage.index.html +++ b/markup/sisudoc-spine-bespoke-output/html/homepage.index.html @@ -1,759 +1,431 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> - <meta http-equiv="Content-Type" content="text/plain; charset=UTF-8" /> + <meta charset="UTF-8" /> <title>≅ SiSU project sisudoc.org</title> <link href="./css/html_seg.css" rel="stylesheet" /> </head> <body> -<h1>≅ - SiSU for documents - structuring, publishing in multiple -formats & search</h1> - -<h2>ℹ - A short description</h2> +<h1>≅ SiSU - lightweight markup, object-centric documents, +multiple outputs & search</h1> <p> -SiSU is an object-centric, lightweight markup based, document structuring, -parser, publishing and search tool for document collections. It is command line -oriented and generates static content that is made searchable at an object level -through an SQL database. +SiSU parses a lightweight-markup source into an abstract document object +model. Every substantive element (paragraph, heading, table, verse, image) +becomes a typed object carrying its position in the document's sequence +and in its heading hierarchy, and a stable citation number. From that single +abstraction it emits multiple output formats - HTML (segmented and scroll), +EPUB3, LaTeX (then PDF via xelatex), ODT, plain text, and an SQLite full-text +search database. Each object's number stays stable across every output +format and across translations of the same document. </p> <p> -SiSU markup helps define (delineate) objects (primarily various types of text -block) which are tracked in sequence, substantive objects being numbered -sequentially by the program for object citation. Breaking document into numbered -objects provides interesting possibilities. These object numbers provide the -possibility of citing/locating text precisely across different document formats -and different languages (assuming the document has been translated). For search -it also makes it possible to identify precisely where within in each document -search criteria is met in the form of an index. Additionally the use of objects -(and that objects are numbered) frees the possibility to represent the document -in the manner considered most suitable to a specific document format (whilst -retaining its structural (and citation) integrity). +The processing pipeline is <b>markup → abstraction → +output</b>. </p> <p> -Objects which include their inherent associated properties (which vary by type -of object), constitute building blocks of a document from which alternative -representations of a document can be (imagined and) built. +<b>Object-Centric Document Abstraction</b>. The abstraction stage builds an +in-memory object model along two bound dimensions: <b>document structure</b> +(the heading hierarchy - title, section, part, chapter, sub-headings) and +<b>document objects</b> (every paragraph, heading, table, footnote and so on, +as a typed unit). The two are mapped to each other - each object knows its +place in the heading hierarchy, and each structural node knows the objects +that belong to it. Substantive objects also carry a stable citation number +(OCN, Object Citation Numbering). Every output format is generated from this +single abstraction, so all formats share the same object identifiers and the +same structural shape. The abstraction can also be written out as a +human-readable, PEG-parsable text format (<code>.ssp</code>) that other tools +can consume directly. </p> -<h2>Δ - SiSU project source</h2> +<h2>ℹ - How this differs from a typical "markup → HTML" +pipeline</h2> <p> - <a href="./projects"> - Δ SiSU projects repo (git) - </a><br> - - <a href="https://git.sisudoc.org"> - https://git.sisudoc.org - </a><br> -</p> +<ul> + <li><b>Citation that survives format conversion.</b> Quote object 412 and the + reference is meaningful in the HTML, the EPUB, the PDF, the plain text and the + SQLite search results - and in any translation, because OCN is a property of + the abstraction, not of pagination or layout.</li> -<h3>Δ - sisudoc-spine project source (programmed in D)</h3> + <li><b>Object-granular search.</b> The SQLite database is populated at object + granularity. A query reports not just "this document matches" but "object 412 + in this document matches" - and links straight back to that object in the + published HTML.</li> -<p> - <a href="./projects/sisudoc-spine"> - Δ SiSU (sisudoc-spine): document publishing (multiple formats + search) [D] - </a><br> - - <a href="https://git.sisudoc.org/sisudoc-spine"> - https://git.sisudoc.org/sisudoc-spine - </a><br> - git clone git://git.sisudoc.org/software/sisudoc-spine - <br> -</p> + <li><b>Inspectable intermediate form.</b> The document abstraction has a + human-readable, PEG-parsable text serialisation (<code>.ssp</code>). Other + tools - in any language - can consume the abstraction without re-implementing + the parser. This is also what lets the abstraction stage be reasoned about, + diffed, fed to embedding pipelines, or used as the input to custom + renderers.</li> -<p> - <a href="./projects/sisudoc-spine-search-cgi"> - Δ SiSU (sisudoc-spine search): a sample cgi sqlite search for sisudoc-spine [D] - </a><br> - - <a href="https://git.sisudoc.org/sisudoc-spine-search-cgi"> - https://git.sisudoc.org/sisudoc-spine-search-cgi - </a><br> - git clone git://git.sisudoc.org/software/sisudoc-spine-search-cgi - <br> -</p> + <li><b>Deterministic and reproducible.</b> The same markup source produces the + same OCN sequence and the same outputs every time. Per-object content hashes + can be exposed for content identification or verification without disclosing + the content itself.</li> -<p> - <a href="./projects/sisudoc-spine-samples"> - Δ SiSU (sisudoc-spine markup): markup samples in document pods for sisudoc-spine - </a><br> - - <a href="https://git.sisudoc.org/sisudoc-spine-samples"> - https://git.sisudoc.org/sisudoc-spine-samples - </a><br> - git clone git://git.sisudoc.org/markup/sisudoc-spine-samples - <br> -</p> - -<h3>Δ - sisu scribe project source (programmed in Ruby)</h3> - -<p> - <a href="./projects/sisu"> - Δ SiSU (scribe): document publishing (multiple formats + search) [Ruby] - </a><br> - - <a href="https://git.sisudoc.org/sisu"> - https://git.sisudoc.org/sisu - </a><br> - git clone git://git.sisudoc.org/software/sisu - <br> -</p> + <li><b>Designed for finished, "published" works.</b> SiSU is aimed at writings + that are published as a stable artefact (books, essays, articles, legal and + regulatory texts), where a fixed citable reference of object-level granularity + is more valuable than the flexibility of fluid text.</li> -<p> - <a href="./projects/sisu-markup"> - Δ SiSU markup samples in document pods for sisu (scribe) - </a><br> - - <a href="https://git.sisudoc.org/sisu-markup"> - https://git.sisudoc.org/sisu-markup - </a><br> - git clone git://git.sisudoc.org/markup/sisu-markup-samples - <br> + <li><b>Static output, optional search.</b> Generated content is static HTML / + EPUB / PDF / text - trivial to host and to archive. The SQLite + CGI search is + an opt-in component that adds object-granular full-text query without changing + the publishing model.</li> +</ul> </p> -<h2>⌘ - SiSU Spine markup sample output</h2> +<h2>⌘ - See it in action</h2> <p> -To give an idea of how this works here is a small collection of documents marked -up for and generated by the software. The curation of topics for a collection of -specialized related documents would benefit from a consistently applied bespoke -ontology or thesaurus. -<br> -The documents presented are documents that have been released under various -creative commons licences, in the public domain, or the author's work, with the -exception of one that is under GPL and the old abandoned Debian live-manual +A single document - <i>The Wealth of Networks</i>, Yochai Benkler - +shown in every output format SiSU Spine produces. The same OCN +identifies the same object in each: </p> -<p> - <a href="./authors.html"> - ⌘ Authors - </a> - (software curated from provided document header metadata)<br> - - <a href="./authors.html"> - https://sisudoc.org/spine/authors.html - </a> -</p> +<ul> + <li><a href="./en/html/the_wealth_of_networks.yochai_benkler/toc.html"> + HTML (segmented, one page per chapter)</a></li> + <li><a href="./en/html/the_wealth_of_networks.yochai_benkler.html"> + HTML (single scroll)</a></li> + <li><a href="./en/epub/the_wealth_of_networks.yochai_benkler.en.epub"> + EPUB</a></li> + <li><a href="./pdf/the_wealth_of_networks.yochai_benkler.en.a4.portrait.pdf"> + PDF (LaTeX → xelatex, A4)</a></li> + <li><a href="./en/html/metadata.the_wealth_of_networks.yochai_benkler.html"> + Metadata page</a></li> + <li><a href="./spine_search?fn=the_wealth_of_networks.yochai_benkler&rt=txt&ec=on&url=on&sml=1000"> + Search within this document (object-granular)</a></li> + <li><a href="./pod/the_wealth_of_networks.yochai_benkler/"> + Source pod (markup + assets + manifest)</a></li> +</ul> -<p> - <a href="./topics.html"> - ⌘ Topics - </a> - (software curated from provided document header metadata)<br> - - <a href="./topics.html"> - https://sisudoc.org/spine/topics.html - </a> -</p> +<h2>⌘ - Browse and search the sample collection</h2> -<h2>፨ - SiSU Spine search</h2> <p> - <a href="./spine_search"> - ፨ Search - </a> - (granular search of text objects)<br> - - <a href="https://sisudoc.org/spine_search"> - https://sisudoc.org/spine_search - </a> +<a href="./authors.html">⌘ Authors</a> + - +<a href="./topics.html">⌘ Topics</a> + - +<a href="./spine_search">፨ Search</a> +<br> +(Authors and Topics are software-curated from each document's +header metadata. Search is object-granular.) </p> <div class="p"> - <!-- SiSU Spine Search --> - <form action="https://sisudoc.org/spine_search" target="_top" method="POST" accept-charset="UTF-8" id="search"> - <input type="text" name="sf" size="24" maxlength="255"> - <input type="hidden" name="db" value="spine.search.db"> + <!-- SiSU Spine Search --> + <form action="https://sisudoc.org/spine_search" target="_top" + method="POST" accept-charset="UTF-8" id="search"> + <input type="text" name="sf" size="32" maxlength="255" + placeholder="search the collection..."> + <input type="hidden" name="db" value="spine.search.db"> <input type="hidden" name="sml" value="1000"> - <input type="hidden" name="ec" value="on"> + <input type="hidden" name="ec" value="on"> <input type="hidden" name="url" value="on"> <button type="submit" form="search"> ㏈ ፨ </button> - </form> - <!-- SiSU Spine Search --> + </form> + <!-- SiSU Spine Search --> </div> -<h2>ℹ - SiSU description</h2> - -<p> -SiSU is an object-centric, lightweight markup based, document structuring, -parser, publishing and search tool for document collections. It is command line -oriented and generates static content that is currently made searchable at an -object level through an SQL database. -Markup helps define (delineate) objects (primarily various types of text block) -which are tracked in sequence, substantive objects being numbered sequentially -by the program for object citation. -</p> - -<p> -<b>Summary.</b> An object is a unit of text within a document the most common -being a paragraph. Objects include individual headings, paragraphs, tables, -grouped text of various types such as code blocks and within poems, verse. -Objects have properties and attributes, of particular significance are headings -and their levels which provide document structure. A heading is an object with a -heirarchical value, that conceptually contains other objects (such as paragraphs -and possibly sub-headings etc.). Objects are tracked sequentially as they relate -to each other object within a document and substantive objects are numbered -sequentially, for citation purposes. Notably footnotes are not objects in -themselves, rather belonging to the object from which they are referenced, and -following their own numbering sequence. From heading objects (linked) tables of -content may be generated, and if additional metadata is provided book type -indexes can be generated that link back to the objects to which they relate. -</p> - -<p> -<b>Unpacking this a bit further.</b> SiSU as a concept independent of its markup -language and the parsers that have been implemented, is based on the following -ideas: -</p> - -<p> -<b>Object-Centricity. On objects:</b> In SiSU objects are the fundamental unit -from which larger constructs within a document and the document itself is built. -Breaking the document into objects provides interesting possibilities. -</p> - -<p> -<b>Objects are fundamental building blocks:</b> Conceptually within SiSU, -objects are the building blocks or individual units of construction of a -document. Objects are usually blocks of text, the most common of which is the -paragraph, other examples include: individual headings, tables, grouped text of -various types which include code blocks and verse within poems, ... and as -mentioned an object could also, for example, be an image. Objects can be -formatted and placed as needed, providing flexibility and enabling multiple -types of representation across disperate formats and text recepticle, examples -including html, epub, latex (in the past mind-maps) and sql (populated at an -object level, and thereby providing search with that degree of granularity). -</p> - <p> -<b>Sequential. Objects have sequence:</b> That objects have sequence, goes -largely without saying, this follows authorship, it is part of the definition of -a document and how a document is written to convey meaning. +The collection contains 25+ documents released under various Creative Commons +licences, in the public domain, or as the author's own work (with one +GPL-licensed exception and the abandoned Debian live-manual). A specialised +collection would benefit from a consistently applied bespoke ontology or +thesaurus. </p> -<p> -<b>Object Numbers & Citation. Substantive objects are numbered for citation -purposes:</b> Most objects within a document are meant by the author to be a -substantive part of the document. All such objects are numbered sequentially and -can be referenced thereby for citation purposes. -<br> -Object numbers provide the possibility of citing/locating text precisely across -different document formats and different languages (assuming the document has -been translated). For search it also makes it possible to identify precisely -where search criteria is met within in each document in the form of an index or -to view those precise text objects before deciding which documents are of -interest. Additionally the use of objects (and that objects are numbered) frees -the possibility to represent the document in the manner considered most suitable -to a specific document format wilst retaining its structural (and citation) -integrity). -</p> +<h2>Δ - Source repositories</h2> <p> -<b>Characteristics. Objects have properties and attributes:</b> Objects have -properties (and may have attributes). By properties I here refer to the -fundamental type of object, be it a heading, a paragraph, table, verse etc. -Attributes extend further and may include other things that one might wish to -associate with the object (examples not necessarily currently available/ -implemented in SiSU might include, formatting whether it is indented, or -metadata e.g. the associated language, or programming language for a code block) +All project repositories are at +<a href="https://git.sisudoc.org">https://git.sisudoc.org</a>: </p> -<p> -<b>Document structure. Heading objects hold documents structure:</b> Heading -objects hold documents structure through their heading level property. The types -of document of interest to SiSU have structure that is captured by the heading -level property. Headings are individual objects like any other with the -additional properties that (i) they may be regarded as containing the other -objects following them sequentially (until the next heading of a similar or -higher level), heading objects may include other headings (sub-headings), and -(ii) that they have a heirarchy, the root "heading" being the document -title. -<br> -A complication was intruduced to provide greater flexibility across document -output formats. Headings have two sets of levels, the level under which -substantive text occurs, this would be a chapter or segment level, and above -that in the heirarchy if needed are document section separators, book, section, -part. -</p> - -<p> -<b>Non-objects</b> Most but not all parts of a document are treated as objects. -Notably footnotes are not objects in themselves, rather belonging to the object -from which they are referenced, and following their own numbering sequence. From -heading objects (linked) tables of content may be generated, and if additional -metadata is provided book type indexes can be generated that link back to the -objects to which they relate. -</p> +<ul> + <li><b>sisudoc-spine</b> (D) - the current generator + <br><code>git clone git://git.sisudoc.org/software/sisudoc-spine</code></li> + <li><b>sisudoc-spine-search-cgi</b> (D) - object-granular CGI search + <br><code>git clone git://git.sisudoc.org/software/sisudoc-spine-search-cgi</code></li> + <li><b>sisudoc-spine-samples</b> - 25+ marked-up sample documents + <br><code>git clone git://git.sisudoc.org/markup/sisudoc-spine-samples</code></li> + <li><b>sisu</b> (Ruby, original/antecedent) - the original generator + <br><code>git clone git://git.sisudoc.org/software/sisu</code></li> + <li><b>sisu-markup-samples</b> - samples for the original sisu + <br><code>git clone git://git.sisudoc.org/markup/sisu-markup-samples</code></li> + <li><b>tree-sitter-sisu</b> - tree sitter for sisu markup + <br><code>git clone git://git.sisudoc.org/tools/tree-sitter-sisu</code></li> +</ul> -<p> -<b>The Document Header.</b> SiSU document have headers which contain document -metadata, at a minimum the document title and author. In addition the document -header may contain markup instruction (e.g. how to identify headings within the -document, in which case those headings need not be found and treated -accordingly) -</p> - -<p> -SiSU parsers have now been implemented in different programming paradigms and -languages a couple of times, the chosen markup has been left unchanged though -the document headers have been modified. -<br> -This is the core of sisu, beyond which there is more but largely in the form of -choices based on ... existing output formats and of implementation detail, -deciding what attributes of objects, or within objects should be supported, -extending markup to allow for the generation of book indexes from if tagging -provided. -</p> - -<h2>ℹ - SiSU Historical Descriptions</h2> - -<p> -Here is a description that has been used for the original sisu (scribe): -</p> - -<p> -With minimal preparation of a plain-text (UTF-8) file, using sisu markup syntax -in your text editor of choice, SiSU can generate various document formats, most -of which share a common object numbering system for locating content, including -plain text, HTML, XHTML, XML, EPUB, OpenDocument text (ODF:ODT), LaTeX, PDF -files, and populate an SQL database with objects (roughly paragraph-sized -chunks) so searches may be performed and matches returned with that degree of -granularity. Think of being able to finely match text in documents, using common -object numbers, across different output formats (same object identifier for pdf, -epub or html) and across languages if you have translations of the same document -(same object identifier across languages). For search, your criteria is met by -these documents at these locations within each document (equally relevant across -different output formats and languages). To be clear (if obvious) page numbers -provide none of this functionality. Object numbering is particularly suitable -for "published" works (finalized texts as opposed to works that are frequently -changed or updated) for which it provides a fixed means of reference of content. -Document outputs can also share provided semantic meta-data. -</p> - -<h3>...</h3> - -<p> -SiSU is less about document layout than it is about finding a way using little -markup to construct an abstract representation of a document that makes it -possible to produce multiple representations of it which may be rather different -from each other and used for different purposes, whether layout and publishing, -scrollworthy online viewing/ reading, or content search. To be able to take -advantage from its minimal preparation starting point of some of the strengths -of rather different established ways of representing documents for different -purposes, whether for search (relational database, or indexed flat files -generated for that purpose whether of complete documents, or say of files made -up of objects), online or other electronic viewing (e.g. html, xml, epub), or -paper publication (e.g. pdf via latex)... -</p> - -<p> -The solution arrived at is to extract structural information about the document -(document sections and headings within the document, available through pattern -matching or markup) and tracking objects (which primarily are defined units of -text such as paragraphs, headings, tables, verse, etc. but also images) which -can be reconstituted as the same documents with relevant object identification -numbers so text (objects) can be referenced across different output formats and -presentations. -</p> - -<p> -SiSU generates tables of content, and through its markup the means for metadata -to be provided for the generation of book style indexes for a document (that -again due to document object numbers are the same and equally relevant across -all document formats). Per document classifying/organizing metadata can also be -provided for automated document curation. -</p> - -<p> -... there have also been working experiments with sisu markup source, two way -conversion/representation of sisu document markup source in mind-mapping -(software kdissert was used for its strong focus on producing documents (now -apparently called semantik)); also po4a software for translators has been used -successfuly in its regular text mode for sisu markup in translation, (which is -more an attribute of po4a than of sisu, but) which is of interest due to -sisu/spine's object citation numbering being available across translations. Open -Document Format text (odf:odt), has been an output, but much more interesting -(and requested by potential users of sisu/spine) would be the ability of a word -processor to save text/a document in sisu markup, making alternative document -processing and presentations with sisu possible. -</p> - -<p> -also worth mention, in the relatively long history of this project, there has -been work done on extracting hash representations of each object, that could -hypothetically be shared to prove the content of a document without sharing its -content, or of identifying which objects change; these hashes can also be used -as unique identifiers in a database or as identifying filenames if individual -objects are saved. -</p> - -<p> -SiSU has evolved, the current implementation focuses on one primary use-case, -books and literary writings. However the concept on which it is based has wider -application. Here is a prevously posted souvenir from my encounter with an IBM -software evaluator in London June 2004 that came about through a chance -encounter with an IBM manager at a Linux Expo, who was curious about my interest -in Gnu/Linux with my legal background... on hearing that I also wrote software, -he suggested, maybe IBM should have a look at it. I was interested, the meeting -was set up... with an IBM, Software Innovations evaluator -<br> -His response after the meeting: -</p> - -<p> -"Ralph<br>Good to meet with you today, I was very impressed with your -software.<br><i>[colleague's name (also posted to an IBM colleague)]</i> - in -summary - Ralph has built an application that runs on linux and takes ASCII -documents and pulls them apart in to the smallest constituent parts, storing -them as XML, PDF and HTML, the HTML are hyperlinked up so the document can be -browsed in its full form. the format and text data created is stored in a -database.<br>This has potential in any place that needs the power of full text -search whilst holding the structural concepts of the document i.e. legal, -pharma, education, research.. which ones we need to figure out, ..." -</p> - -<p> -Special interest was expressed in the search implications of SiSU. To -paraphrase, the company has document management systems dealing with hundreds of -thousands of texts, these tell you which documents match your search criteria, -but cannot inform you where within a text these matches were found without -opening the documents. This is achieved through defining document objects and -making them the building block of the document, trackable document objects (that -can be placed back in the context of the document or corpus of documents if part -of a collection). SiSU's early design was to - abstract documents to their -structure, and identified objects, numbered in a citable way (as pointed out -document object hashes can be of use for the purpose). -</p> - -<h2>ℹ - SiSU Spine (sisudoc-spine)</h2> - -<p> -SiSU Spine is the new generator for documents prepared in sisu markup, written -in D as opposed to the original sisu which was first shared in Ruby. -</p> +<h2>ℹ - Spine vs. the original sisu</h2> <p> -sisudoc spine code was shared publicly under the AGPLv3 2024-05-01 (after -considerable procrastination). (It should be fairly straightforward to have this -work on other OS platforms, I have only used linux since 1999.) -</p> - -<p> -As compared with the original sisu generator sisu spine: -</p> - -<p> -- Spine uses the same document markup for the document body, but uses yaml for -document headers (which contains document metadata and configuration details), -the original sisu has a bespoke markup for headers. -</p> - -<p> -- Spine (written in D) is considerably faster at generating native output than -sisu (written in Ruby), on last test at least 60 times faster (what took 1 -minute takes 1 second; 1 hour a minute :-) (admittedly some time ago, ruby has -been getting faster, hopefully this is not over over promising). -</p> - -<p> -- Spine produces fewer document outputs types than sisu (html, epub, (odt, -latex) and populates sql db for search) -</p> - -<p> -- As regards non-native output, so far Spine has greater separation of what it -does and largely leaves calling the external program to the user, e.g.: latex -output is a native output in the sense that it is generated directly by spine, -but the pdfs that can be produced from these are produced through use of an -external program xelatex, which produces fine output but is a very much slower -process. -</p> - -<p> -- (where both produce the same output type, generally) Spine generally produces -more up to date output format representations. -</p> - -<h2>ℹ - Some Observations</h2> - -<p> -SiSU is more suited to finalized/stratified/published writings (writings, -articles, books), that are to remain and be referenced as published, -representing a work or ideas, set at a given time. (As opposed to the -increasingly prevalent and important forms of fluid text). -</p> - -<p> -Trained AI likely could assist in the preparation of documents (with SiSU -markup), with resulting deterministic and reproducible outputs (for substantive -document objects). Caveats: Where text objects may be in blocks (or not) there -is some room for discretion and ambiguity in the markup with resulting -possibility of differences in the resulting presentation of a document. Book -indexes are another area that if desired is markup intensive and unless -following an already published index, can be prepared differently and possibly -improved over time, and for specialised collections on a subject area could -potentially be prepared against a thesaurus. -</p> - -<h2>ℹ - Thank You</h2> - -<p> -Thanks to all who help produce and maintain the software and libraries I am able -to use and have come to rely on. Reliable infrastructure so far. +Spine (D) and the original sisu (Ruby) share the same lightweight body markup; +spine moves the document header to YAML where the original uses a bespoke header +dialect. Spine is roughly 60x faster on equivalent inputs (a one-minute Ruby run +is about a one-second D run). Spine emits HTML, EPUB, LaTeX, ODT, plain text and +the SQLite search database; PDF is delegated to an external xelatex pass (slower +but produces excellent output). For output formats both produce, spine's +representations are generally more up to date. Spine was released publicly under +AGPLv3 on 2024-05-01. </p> <hr> -<p class="tiny"><i> -ralph.amissah www since 1993 ;-) -</i></p> -<hr> -<h2>Some external links of interest</h2> +<!-- Below the fold: long-form material wrapped in <details> so the + homepage does not have to render or scroll past it on first + paint. The content is unchanged, just moved. --> + +<details> + <summary><b>ℹ - A longer description (design and intent)</b></summary> + + <p> + <b>Summary.</b> An object is a unit of text within a document, the most common + being a paragraph. Objects include individual headings, paragraphs, tables, + and grouped text of various types such as code blocks and (within poems) + verse. Objects have properties and attributes; of particular significance are + headings and their levels, which provide document structure. A heading is an + object with a hierarchical value that conceptually contains other objects + (such as paragraphs and possibly sub-headings). Objects are tracked + sequentially as they relate to each other within a document, and substantive + objects are numbered sequentially for citation purposes. Notably, footnotes + are not objects in themselves - they belong to the object from which they are + referenced, and follow their own numbering sequence. From heading objects, + linked tables of content may be generated; and if additional metadata is + provided, book-style indexes can be generated that link back to the objects to + which they relate. + </p> + + <p> + <b>Object-centricity.</b> In SiSU, objects are the fundamental unit from which + larger constructs and the document itself are built. Breaking the document + into objects provides interesting possibilities. + </p> + + <p> + <b>Objects are fundamental building blocks.</b> Objects are usually blocks of + text - paragraphs, headings, tables, grouped text of various types including + code blocks and verse - and may also be, for example, images. Objects can be + formatted and placed as needed, enabling multiple types of representation + across disparate formats and text receptacles: HTML, EPUB, LaTeX, (in the + past, mind-maps) and SQL (populated at object level, so that search has that + degree of granularity). + </p> + + <p> + <b>Sequence.</b> Objects have sequence - this follows authorship and is part + of how a document conveys meaning. + </p> + + <p> + <b>Object numbers and citation.</b> Substantive objects are numbered + sequentially and can be referenced for citation purposes. Object numbers + locate text precisely across different document formats and different + languages (assuming the document has been translated). For search, they + identify precisely where within each document the search criteria are met - in + the form of an index, or by surfacing the matching text objects so a reader + can decide which documents are of interest before opening them. Object + numbering also frees the representation of each format to be whatever is most + suitable to that format, while structural and citation integrity are retained. + </p> + + <p> + <b>Characteristics.</b> Objects have properties (the fundamental type: + heading, paragraph, table, verse, etc.) and may carry attributes (e.g. + indentation, language, programming language for a code block). + </p> + + <p> + <b>Document structure.</b> Headings hold the document's structure through + their heading-level property. Headings are individual objects like any other, + with the additional properties that (i) they may be regarded as containing the + other objects following them sequentially (until the next heading of similar + or higher level), and (ii) they have a hierarchy, the root being the document + title. To give greater flexibility across output formats, headings have two + sets of levels: the level under which substantive text occurs (chapter or + segment), and above that, optional document section separators (book, section, + part). + </p> + + <p> + <b>Non-objects.</b> Footnotes are not objects in themselves; they belong to + the referencing object and follow their own numbering sequence. Tables of + content may be generated from heading objects; book-style indexes may be + generated when the required metadata is provided. + </p> + + <p> + <b>The document header.</b> A SiSU document has a header carrying document + metadata - at a minimum, title and author. The header may also carry markup + instructions (e.g. how to identify headings within the document, so that those + headings do not need to be inferred). + </p> + +</details> + +<details> + <summary><b>ℹ - Historical description (original sisu)</b></summary> + + <p> + With minimal preparation of a plain-text (UTF-8) file using SiSU markup syntax + in your text editor of choice, SiSU can generate various document formats, + most of which share a common object numbering system for locating content - + plain text, HTML, XHTML, XML, EPUB, OpenDocument text (ODT), LaTeX, PDF - and + populate an SQL database with objects (roughly paragraph-sized chunks) so + searches may be performed and matches returned with that degree of + granularity. Think of being able to finely match text across different output + formats (same object identifier for PDF, EPUB or HTML) and across languages + where translations exist (same object identifier across languages). For + search, your criteria are met by these documents at these locations within + each document (equally relevant across different output formats and + languages). Page numbers provide none of this functionality. Object numbering + is particularly suitable for "published" works (finalised texts as opposed to + works that are frequently changed or updated), for which it provides a fixed + means of reference of content. Document outputs can also share provided + semantic metadata. + </p> + + <p> + SiSU is less about document layout than about finding a way, using little + markup, to construct an abstract representation of a document that makes it + possible to produce multiple representations - which may be rather different + from each other and used for different purposes - whether layout and + publishing, scrollworthy online viewing, or content search. The aim is to take + advantage, from a minimal-preparation starting point, of some of the strengths + of rather different established ways of representing documents for different + purposes: search (relational database, or indexed flat files of complete + documents or files made up of objects), online or electronic viewing (HTML, + XML, EPUB), or paper publication (PDF via LaTeX). + </p> + + <p> + The solution arrived at is to extract structural information about the + document (sections and headings, available through pattern matching or markup) + and to track objects (defined units of text such as paragraphs, headings, + tables, verse, etc., but also images), which can then be reconstituted as the + same document with relevant object identification numbers - so text (objects) + can be referenced across different output formats and presentations. + </p> + + <p> + SiSU generates tables of content and, through its markup, the means for + metadata to be provided for the generation of book-style indexes for a + document (that, again, due to document object numbers, are the same and + equally relevant across all output formats). Per-document + classifying/organizing metadata can also be provided for automated document + curation. + </p> + + <p> + There have also been working experiments with SiSU-markup source: two-way + conversion/representation in mind-mapping software (kdissert / semantik, for + its strong focus on producing documents); and po4a (for translators) has been + used successfully in its regular text mode for SiSU markup in translation - + which is more an attribute of po4a than of SiSU, but of interest due to + SiSU/spine's object citation numbering being available across translations. + ODT has been an output, but much more interesting (and requested by potential + users) would be the ability of a word processor to save text in SiSU markup, + making alternative document processing and presentations with SiSU possible. + </p> + + <p> + Also worth mention: in the relatively long history of this project there has + been work on extracting hash representations of each object that could + hypothetically be shared to prove the content of a document without sharing + its content, or to identify which objects change. These hashes can also be + used as unique identifiers in a database, or as filenames if individual + objects are saved. + </p> + +</details> + +<details> + <summary><b>ℹ - From a 2004 evaluation (IBM Software + Innovations)</b></summary> + + <p> + SiSU has evolved; the current implementation focuses on one primary use-case, + books and literary writings. The concept, however, has wider application. The + following is a souvenir from an encounter with an IBM software evaluator in + London in June 2004, set up after a chance meeting with an IBM manager at a + Linux Expo who was curious about my interest in GNU/Linux given my legal + background - on hearing that I also wrote software, he suggested IBM should + have a look. The evaluator's response after the meeting: + </p> + + <p> + "Ralph<br> + Good to meet with you today, I was very impressed with your software.<br> + <i>[colleague's name (also posted to an IBM colleague)]</i> - in summary - + Ralph has built an application that runs on linux and takes ASCII documents + and pulls them apart in to the smallest constituent parts, storing them as + XML, PDF and HTML; the HTML are hyperlinked up so the document can be browsed + in its full form. The format and text data created is stored in a + database. <br>This has potential in any place that needs the power of full + text search whilst holding the structural concepts of the document i.e. legal, + pharma, education, research.. which ones we need to figure out, ..." + </p> + + <p> + Special interest was expressed in the search implications of SiSU. To + paraphrase: the company has document management systems dealing with hundreds + of thousands of texts; these tell you which documents match your search + criteria, but cannot inform you where within a text these matches were found + without opening the documents. SiSU addresses this by defining document + objects and making them the building block of the document - trackable objects + that can be placed back in the context of the document or corpus of documents + if part of a collection. SiSU's early design was to abstract documents to + their structure and identified objects, numbered in a citable way (as the + evaluator pointed out, document-object hashes can be of use for the purpose). + </p> + +</details> + +<details> + <summary><b>ℹ - Some observations</b></summary> + + <p> + SiSU is more suited to finalised / stratified / published writings (articles, + books) that are to remain and be referenced as published - works set at a + given time. (As opposed to the increasingly prevalent and important forms of + fluid text.) + </p> + + <p> + Trained AI could likely assist in the preparation of documents with SiSU + markup, with resulting deterministic and reproducible outputs (for substantive + document objects). Caveats: where text objects may be in blocks (or not), + there is some room for discretion and ambiguity in the markup, with resulting + possibility of differences in presentation. Book indexes are another + markup-intensive area; unless following an already published index, they can + be prepared differently and possibly improved over time, and for specialised + subject collections could potentially be prepared against a thesaurus. + </p> + +</details> -<h3>Development</h3> -<h4>Programming</h4> -<p> - [ <a href="https://dlang.org/"> - D - (dlang) general purpose, multi-paradigm, fast C like programming language - </a> ] - [ <a href="https://code.dlang.org/"> - dub - package registry - </a> ] - [ <a href="https://forum.dlang.org/group/general"> - community discussion (mail list frontend) - </a> ]<br> -</p> -<p> - [ <a href="https://www.ruby-lang.org/en/"> - Ruby - </a> ] - [ <a href="https://rubygems.org/"> - Gems - </a> ]<br> - [ <a href="https://crystal-lang.org/"> - Crystal - </a> ]<br> -</p> -<h4>SQL DB</h4> -<p> - [ <a href="https://sqlite.org/index.html"> - Sqlite - an sql database engine - </a> ]<br> - [ <a href="https://www.postgresql.org/"> - PostgreSQL - </a> ]<br> -</p> -<h4>Markup</h4> -<p> - [ <a href="https://www.w3.org/html/"> - HTML - </a> ] - [ <a href="https://html.spec.whatwg.org/multipage/"> - multipage current spec - </a> ] - [ <a href="https://dom.spec.whatwg.org/"> - dom current spec - </a> ]<br> - [ <a href="https://www.w3.org/publishing/epub32/"> - Epub - </a> ]<br> - [ <a href="https://www.w3.org/Style/CSS/"> - css - cascading style sheets - </a> ]<br> -</p> -<p> - [ <a href="https://opendocumentformat.org/"> - OpenDocument Format - </a> ]<br> -</p> -<p> - [ <a href="https://www.latex-project.org/get/"> - LaTeX - </a> ]<br> -</p> -<p> - [ <a href="https://po4a.org/index.php.en"> - po4a - maintain translations - </a> ]<br> -</p> -<h4>Operating System Distributions</h4> -<p> - [ <a href="https://nixos.org/"> - NixOS - linux based operating system built on the Nix declarative, reproducible and reliable, build system - </a> ] - [ <a href="https://github.com/NixOS/nixpkgs"> - nixpkgs (packages @ github) - </a> ] - [ <a href="https://search.nixos.org/packages?channel=unstable&from=0&size=100&sort=relevance&query="> - package search - </a> ] - [ <a href="https://discourse.nixos.org/"> - community discussion (discourse) - </a> ] - [ <a href="https://discourse.nixos.org/t/nixos-foundation-board-giving-power-to-the-community/44552/"> - NixOS Foundation board: Giving power to the community - </a> ]<br> <!-- - [ <a href="https://aux.computer/"> - Aux - aux.computer - a community fork of nix (under deliberation), billed as "An alternative to the Nix ecosystem" - </a> ] - [ <a href="https://forum.aux.computer/"> - community discussion (discourse) - </a> ]<br> ---> - Gnu [ <a href="https://guix.gnu.org/"> - Guix - </a> ] - [ <a href="https://guix.gnu.org/en/packages/"> - packages - </a> ]<br> -</p> -<p> - [ <a href="https://debian.org/"> - Debian - the universal operating system distribution - </a> ]<br> - [ <a href="https://www.devuan.org/"> - Devuan - </a> ]<br> -</p> -<p> - [ <a href="https://archlinux.org/"> - Arch Linux - </a> ] - [ <a href="https://wiki.archlinux.org/"> - Arch Wiki - </a> ]<br> -</p> <hr> -<h2>Extraneous (external) links of personal interest</h2> - -<h4>Workspace</h4> - -<h5>Shell</h5> <p> - [ <a href="https://www.zsh.org/"> - zsh - </a> ]<br> - [ <a href="https://starship.rs/"> - starship - customizable cross-shell prompt - </a> ]<br> -</p> -<h5>Terminal</h5> -<p> - [ <a href="https://gnunn1.github.io/tilix-web/"> - tilix - </a> ] - [ <a href="https://alacritty.org/"> - alacritty - </a> ]<br> -</p> -<h5>Terminal Multiplexer</h5> -<p> - [ <a href="https://github.com/tmux/tmux"> - tmux (github) - </a> ] - [ <a href="https://www.gnu.org/software/screen/"> - screen - </a> ]<br> -</p> -<h5>Window Manager</h5> -<p> - [ <a href="https://i3wm.org/"> - i3wm - </a> ] - [ <a href="https://swaywm.org/"> - sway - </a> ]<br> -</p> -<h5>Text Editors</h5> -<p> - Gnu Emacs - [ <a href="https://github.com/hlissner/doom-emacs"> - Doom Emacs (github) - </a> ] - [ <a href="https://orgmode.org/"> - Org-Mode - your life in plain text & literate programming - </a> ] - [ <a href="https://github.com/emacs-evil/evil"> - Evil-Mode - </a> ]<br> -</p> -<p> - [ <a href="https://www.vim.org/"> - Vim - </a> ] - [ <a href="https://neovim.io/"> - NeoVim - </a> ]<br> -</p> -<h5>Source Control Manager</h5> -<p> - [ <a href="https://git-scm.com/"> - Git - </a> ]<br> -</p> -<h5>Browsers</h5> -<p> - [ <a href="https://vieb.dev/"> - vieb - </a> ] - [ <a href="https://fanglingsu.github.io/vimb/"> - vimb - </a> ]<br> - [ <a href="https://brave.com/"> - brave - </a> ]<br> +<a href="./links.html">Personal-interest external links</a> (toolchain, +distributions, editors, forges). </p> -<h3>Search</h3> -<p> - [ <a href="https://duckduckgo.com/"> - DuckDuckGo - </a> ] - [ <a href="https://yubnub.org/"> - YubNub - </a> ]<br> -</p> - -<h3>eMail</h3> -<p> - [ <a href="https://www.migadu.com/"> - Migadu - </a> ]<br> -</p> -<p> - [ <a href="https://notmuchmail.org/"> - NotmuchMail - </a> ]<br> -</p> - -<h3>Forges</h3> -<p> - [ <a href="https://sourcehut.org/"> - Sourcehut - </a> ]<br> -</p> -<p> - [ <a href="https://codeberg.org/"> - CodeBerg - </a> ]<br> -</p> -<p> - [ <a href="https://github.com"> - GitHub - </a> ] - [ <a href="https://gitlab.com"> - GitLab - </a> ]<br> -</p> - -<h3>Software Archives</h3> -<p> - [ <a href="https://www.softwareheritage.org/"> - Software Heritage - the universal software archive - </a> ]<br> -</p> +--!> <hr> + <p class="tiny"><i> -ralph.amissah www since 1993 ;-) +ralph.amissah - www since 1993 ;-) </i></p> </body> |
