<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ptworld.net</title>
	<atom:link href="https://ptworld.net/feed/" rel="self" type="application/rss+xml" />
	<link>https://ptworld.net</link>
	<description>e-consultancy, research and publishing</description>
	<lastBuildDate>Wed, 08 Mar 2023 15:03:45 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>MakeStaticSite on GitHub</title>
		<link>https://ptworld.net/blog/makestaticsite-on-github/</link>
		
		<dc:creator><![CDATA[Paul]]></dc:creator>
		<pubDate>Wed, 08 Mar 2023 15:03:44 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[announcements]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[SimTerm]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[workflow]]></category>
		<guid isPermaLink="false">https://ptworld.net/?p=1631</guid>

					<description><![CDATA[Work has continued on MakeStaticSite, the Bash utility to create static snapshots of websites, refine and deploy them — just through a single command. Now at version 0.22.2 and available for download, recent updates include: We&#8217;ve even updated the animation <a class="more-link" href="https://ptworld.net/blog/makestaticsite-on-github/">Read More ...</a>]]></description>
										<content:encoded><![CDATA[
<p></p>



<p>Work has continued on <a rel="noreferrer noopener" href="https://makestaticsite.sh/" target="_blank">MakeStaticSite</a>, the Bash utility to create static snapshots of websites, refine and deploy them — just through a single command.</p>



<p>Now at version 0.22.2 and <a href="https://makestaticsite.sh/getting-started/installing/" target="_blank" rel="noreferrer noopener">available for download</a>, recent updates include:</p>



<ul class="wp-block-list">
<li>improved support for search engines through the generation of a sitemap based on actual file output, matched in each web page by the canonical URL specified in the <tt>&lt;head></tt> tag.  This sitemap is also cited by the site&#8217;s <tt>robots.txt</tt> file.</li>



<li>more robust handling of <a rel="noreferrer noopener" href="https://makestaticsite.sh/in-depth/workflow/" target="_blank">workflow</a>, so you can use MakeStaticSite in conjunction with other scripts at various stages, to undertake other management tasks, such as reviewing accessibility or link checking.</li>



<li>more systematic treatment of options to clean WordPress ahead of being crawled by Wget.  These small steps also point the way to broader support for fine-tuning CMS output.</li>



<li>Support for deployment on Netlify Content Distribution Network, which is where the site is now hosted.  It&#8217;s expected that other CDN could be handled similarly.</li>
</ul>



<p>We&#8217;ve even updated the animation on the Home page, extending the <a rel="noreferrer noopener" href="https://github.com/paultraf/simterm" target="_blank">SimTerm plugin</a> in the process.</p>



<p>Now that MakeStaticSite has been used successfully over a period of several months, it has been placed under Git version control. I am pleased to announce that I&#8217;ve created a repository on GitHub<br><a href="https://github.com/paultraf/makestaticsite" target="_blank" rel="noreferrer noopener">https://github.com/paultraf/makestaticsite</a></p>



<p>In surveying approaches to generating static sites, I have not been able to find anything similar, and there is a myriad of ways in which it <a rel="noreferrer noopener" href="https://makestaticsite.sh/developers/further-work/" target="_blank">could be enhanced</a>.  Compared with some Jamstack approaches, the performance is slow, but building this site, which is quite substantial, only takes a few minutes whereas the MakeStaticSite project site takes less than a minute.  For most purposes, this should be fine.</p>



<p>The use of the command line is an obstacle for some, but there are various ways in which a GUI could be provided, even Web CGI, which might be security concern on a public-facing server, but far less so on a personal computer.  The beauty of using shell scripts is that you can quickly achieve desired results without being tied to any framework.  So, please give it a go!</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AI – Imagining in the morning, Engaging in the afternoon</title>
		<link>https://ptworld.net/blog/ai-imagining-in-the-morning-engaging-in-the-afternoon/</link>
		
		<dc:creator><![CDATA[Paul]]></dc:creator>
		<pubDate>Tue, 27 Sep 2022 14:47:31 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Ada]]></category>
		<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[Babbage]]></category>
		<category><![CDATA[Bodleian]]></category>
		<category><![CDATA[chatbot]]></category>
		<category><![CDATA[exhibition]]></category>
		<category><![CDATA[human agency]]></category>
		<category><![CDATA[imagination]]></category>
		<category><![CDATA[Lovelace]]></category>
		<category><![CDATA[Vodafone]]></category>
		<guid isPermaLink="false">https://ptworld.net/?p=1577</guid>

					<description><![CDATA[Exhibition at the Weston Library On Saturday morning I met up with a friend at the Bodleian&#8217;s Weston Library in Oxford. On entering the building, we paid a quick visit to a small exhibition, Imagining AI, curated by Professor Ursula <a class="more-link" href="https://ptworld.net/blog/ai-imagining-in-the-morning-engaging-in-the-afternoon/">Read More ...</a>]]></description>
										<content:encoded><![CDATA[
<p></p>



<h2 class="wp-block-heading">Exhibition at the Weston Library</h2>



<p>On Saturday morning I met up with a friend at the Bodleian&#8217;s Weston Library in Oxford. On entering the building, we paid a quick visit to a small exhibition, <a rel="noreferrer noopener" href="https://web.archive.org/web/20220910163419/https://visit.bodleian.ox.ac.uk/imagining-ai" target="_blank">Imagining AI</a>, curated by <a rel="noreferrer noopener" href="https://www.maths.ox.ac.uk/people/ursula.martin" target="_blank">Professor Ursula Martin</a>, who has considerable knowledge of the history of computing, and has written and presented <a rel="noreferrer noopener" href="https://www.youtube.com/watch?v=CNS4-6cS_AU" target="_blank">about Ada Lovelace&#8217;s significant contribution</a>.</p>



<p>This exhibition had a strong literary theme as it drew mainly on the <a rel="noreferrer noopener" href="https://www.bodleian.ox.ac.uk/collections-and-resources/special-collections" target="_blank">Bodleian’s special collections</a>, putting on display rare books, manuscripts and other documents. The introductory panel invited us to “explore the boundary between humans and machines”. I found this an interesting, even provocative pitch, setting humans and machines on opposite sides, like adversaries. This was then extrapolated. To paraphrase: will machines foster some fantastic utopia or nightmarish dystopia and take over the world? Lest we dwell in happy reverie, the selections, just to the right of that panel included extracts from Mary Shelley’s Frankenstein.</p>



<p>With the (surely, generally accepted) observation that machines are more than mere “number crunchers”, the exhibition developed the theme of computation, highlighting the work of Charles Babbage and Ada Lovelace on the Difference Engine (constructed) and Analytical Engine (conceived, never built). An underlying theme, supported by a quote from Lovelace, was human mimicry, especially of the brain’s thought processes. W. Stanley Jevons aimed to demonstrate rationality by his <a rel="noreferrer noopener" href="https://www.hsm.ox.ac.uk/collections-online#/item/hsm-catalogue-6547" target="_blank">“logical piano”</a>, on loan from the <a rel="noreferrer noopener" href="https://hsm.ox.ac.uk/" target="_blank">History of Science Museum</a>.  More subtle forms of human mental activity, considered by some to be among the first AI programs, were expressed in the simplistic love poetry generator of Christopher Strackey (as re-implemented (or re-enacted?) <a rel="noreferrer noopener" href="https://nickm.com/memslam/love_letters.html" target="_blank">in modern code</a>) &#8211; more than a decade before the more well-known <a rel="noreferrer noopener" href="https://en.wikipedia.org/wiki/ELIZA" target="_blank">Eliza</a>. These developments were explored and brought up to date in <a rel="noreferrer noopener" href="https://www.wadham.ox.ac.uk/events/imagining-ai" target="_blank">an associated event</a> (which I didn’t attend), evidencing how the complexity has increased exponentially and has become prominent in the arts, where there’s the ‘Wow!’ factor – picked up by a local paper, which <a rel="noreferrer noopener" href="https://www.oxfordmail.co.uk/news/21256537.meet-ai-da-superstar-robot-artist-oxfords-bodleian-library/" target="_blank">invited readers to meet Ai-Da</a>, a superstar robot artist.  </p>



<p>Thus, with all these bells and whistles, there is a sense of awe, even reference around these “transformative technologies”. But who or what is being transformed and in what ways? Is our well-being transformed?</p>



<p>The exhibition begs so many unanswered questions. I join the many who have claimed the existential threat is real and urgent, but what is less said and which I feel is just as imperative, if not moreso, is that in order to address and properly evaluate AI, we need to balance the discussions of machine ability with human ability; we need to remind ourselves and explore further what makes human life so remarkable in terms of originality and creativity. Furthermore, we need to reflect on the qualities of human sentience – to be and know – and how the presence of machines impacts this. </p>



<p>Without such a perspective, it’s too easy to fall into the trap of making (belated) comparisons under a narrow instrumentalist framework. Especially when millions of pounds are invested to demonstrate measurable benefits. As the sophistication increases, the accompanying language sometimes becomes hyperbolic and even idolatrous. Whilst computation elicits a myriad of possibilities to excite, we should not lose focus on the nature of the human mind, of its often-sublime qualities such as autonomy, reflection, intuition, originality, purpose and perseverance. All of these contribute to human agency and hence human flourishing and happiness.</p>



<p>Ada Lovelace was quoted expressing the power of these machines, but I think she herself might have given greater prominence – particularly given the exhibition’s title – to what she herself had expressed about imagination:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Imagination is the Discovering Faculty, pre-eminently … It is that which feels &amp; discovers what is, the REAL which we see not, which exists not for our senses… Mathematical science shows what is. It is the language of unseen relations between things… Imagination too shows what is … Hence she is or should be especially cultivated by the truly Scientific, those who wish to enter into the worlds around us!</p><cite>Journal entry for 5 Jan 1841, Lovelace Papers, Bodleian Library, Oxford University, 175, folio 199</cite></blockquote>



<p>It is the REAL, not the computational that Lovelace emphasizes that should be strived for.</p>



<h2 class="wp-block-heading">A chatbot reactivates an expired SIM card – or does it?</h2>



<p>On leaving the Weston, I popped next door to Blackwell’s to buy a couple of books. Only one was in stock so when I returned home I went to make a purchase online, using Paypal. Using the payment facility required two-factor authentication, which meant a text message to the SIM card in my trusty mini phone. But, on switching it on, it greeted me with the message that the card was non-operational.  It turned out it had expired because I had not used any chargeable services during the past 3 months.</p>



<p>I logged onto the Vodafone site and proceeded to enter into ‘dialogue’ with its chatbot, an experience I had managed to avoid previously. Somewhat sceptical, I commenced the mission to reactivate the card with the help of <a rel="noreferrer noopener" href="https://www.vodafone.co.uk/help-and-information/introducing-tobi" target="_blank">TOBi, Vodafone’s &#8216;friendly digital assistant&#8217;</a>, which has already been <a rel="noreferrer noopener" href="https://www.vodafone.co.uk/business/insights/articles/tobi-not-tobi-ai-transforming-customer-experience" target="_blank">around for 5 years</a>.  It is mentioned that the service is powered by IBM Watson and LivePerson, which are well-established systems using advanced machine-learning.</p>



<p>Pedigree is all very well, but what about the user experience?  My conversation proceeded, or sometimes stumbled along, as follows (note that I lost some formatting in my copy and paste, so there may be some errors and/or omissions):</p>



<p class="has-text-color" style="color:#2a2275">[14:50]&nbsp;<br><strong>TOBi</strong>: I’m TOBi &#8211; Vodafone’s chatbot<br>Ask me anything, I’m here to help.</p>



<p class="has-text-color" style="color:#2a2275">[14:51]<br><strong>Paul</strong>: my number has expired, but I would like it back</p>



<p class="has-text-color" style="color:#2a2275"><strong>TOBi</strong>:<br>Let&#8217;s see if we can get your number reactivated. First, I need to know what kind of customer you are?<br>Pay monthly<br>Pay as you go</p>



<p class="has-text-color" style="color:#2a2275"><strong>Paul</strong>: Pay as you go</p>



<p class="has-text-color" style="color:#2a2275"><strong>TOBi</strong>:&nbsp;&nbsp;To keep your Pay as you go number active, you need to use it for at least one chargeable activity – like sending a text or topping up – every 180 days.</p>



<p class="has-text-color" style="color:#2a2275">If you don’t top up or use any credit for 90 days, we’ll send you a text explaining that your account will expire in the next 90 days.</p>



<p class="has-text-color" style="color:#2a2275">To avoid this, simply use your phone for a chargeable activity after you receive the 90-day reminder text. This will let you carry on as normal with your current number.</p>



<p class="has-text-color" style="color:#2a2275">However, if you don’t use your phone within that 90-day period, your mobile number will be disconnected and will no longer work.</p>



<p class="has-text-color" style="color:#2a2275">If your Pay as you go number has been deactivated due to inactivity and you’d like to reactivate it, please speak to an adviser.</p>



<p class="has-text-color" style="color:#2a2275">Read more in our Pay as you go terms and conditions</p>



<p class="has-text-color" style="color:#2a2275">&lt;hyperlinked option&gt; speak to an adviser</p>



<p class="has-text-color" style="color:#2a2275"><strong>TOBi</strong>:&nbsp;&nbsp;Could you tell me your full name please?</p>



<p class="has-text-color" style="color:#2a2275"><strong>Paul</strong>: &lt;full name&gt;</p>



<p class="has-text-color" style="color:#2a2275">[14:52]<br><strong>TOBi</strong>:&nbsp;&nbsp;To help save you some time when speaking to an adviser, I&#8217;ll complete some quick security checks with you first.</p>



<p class="has-text-color" style="color:#2a2275">For this security check, I&#8217;ll need to take your phone number to send you a security code by text. I&#8217;ll launch a secure pop-up for you to enter your number now.</p>



<p class="has-text-color" style="color:#2a2275">&lt;didn’t see any popup&gt;</p>



<p class="has-text-color" style="color:#2a2275"><strong>TOBi</strong>:&nbsp;&nbsp;Thanks, that&#8217;s the security part completed.</p>



<p class="has-text-color" style="color:#2a2275"><strong>TOBi</strong>:&nbsp;&nbsp;Could you please tell me your phone number?</p>



<p class="has-text-color" style="color:#2a2275"><strong>Paul</strong>: &lt;entered the number associated with the expired SIM&gt;&nbsp;</p>



<p class="has-text-color" style="color:#2a2275">[14:53]<br><strong>TOBi</strong>:&nbsp;&nbsp;hello</p>



<p class="has-text-color" style="color:#2a2275"><strong>TOBi</strong>: I hope you are doing well today</p>



<p class="has-text-color" style="color:#2a2275"><strong>TOBi</strong>: How can I help you today ?</p>



<p class="has-text-color" style="color:#2a2275"><strong>Paul</strong>: i wish to reactivate my expired number</p>



<p class="has-text-color" style="color:#2a2275">[14:54]<br><strong>TOBi</strong>: I will try my best for you but it is difficult but still I will try my best</p>



<p class="has-text-color" style="color:#2a2275"><strong>TOBi</strong>: Please help me with the sim serial number on the back side of the sim card</p>



<p class="has-text-color" style="color:#2a2275"><strong>Paul</strong>: &lt;removed case and battery, then SIM card, squinted and typed the 24 alphanumeric code&gt;</p>



<p class="has-text-color" style="color:#2a2275">[14:55]<br><strong>TOBi</strong>: Thank you let me check and try</p>



<p class="has-text-color" style="color:#2a2275">&lt;no screen activity&gt;</p>



<p class="has-text-color" style="color:#2a2275">[15:00]<br><strong>TOBi</strong>: We have not heard from you in quite some time. Seems like we have lost connection. I&#8217;ll give it a minute more before I end this chat session.</p>



<p class="has-text-color" style="color:#2a2275">[15:01]<br><strong>Paul</strong>: Hello, have you reactivated the sim card?</p>



<p class="has-text-color" style="color:#2a2275"><strong>TOBi</strong>: Just doing the process for you and it is almost 90% done</p>



<p class="has-text-color" style="color:#2a2275">[15:02]<br><strong>Paul</strong>:&nbsp;&nbsp;OK, thanks. I shall wait.&nbsp;&nbsp;</p>



<p class="has-text-color" style="color:#2a2275">[15:05]<br><strong>TOBi</strong>: You will be very very good to know tat I have raised the order and your number will activated with in 2 to 24 hours</p>



<p class="has-text-color" style="color:#2a2275"><strong>TOBi</strong>: I hope it is sorted for you all <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p class="has-text-color" style="color:#2a2275">Is there any thing else I can do for you please ?</p>



<p class="has-text-color" style="color:#2a2275">[15:06]<br><strong>TOBi</strong>: I am glad that have been resolved&nbsp;<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p class="has-text-color" style="color:#2a2275"><strong>Paul</strong>: Thank you for your help. Much appreciated. Goodbye.</p>



<p class="has-text-color" style="color:#2a2275"><strong>TOBi</strong>: I would request you to please end this chat by clicking on the X button on the top of the chat</p>



<p></p>



<h3 class="wp-block-heading">Conversational Quirks</h3>



<p>TOBi maintained a chirpy and seemingly cheerful disposition.  The issue was correctly identified at the outset and after 15 minutes, it seemed it had been properly dealt with; we got there in the end.  However, I found the process somewhat precarious and it was a quite disorientating experience.  I felt uncertainty in several places, but whereas with a human service assistant I&#8217;d be confident in checking the status, here I was worried that I&#8217;d be misunderstood and then be back to square one.  Altogether, there were several hiatuses which made the conversation feel like an obstacle course:</p>



<ul class="wp-block-list"><li>At 14:52, TOBi mentioned speaking to an advisor, but I wasn&#8217;t sure of the implication &#8211; whether it meant in the event of the bot not being able to handle the request at some stage down the line or whether I would be transferred imminently.  There was no preparatory statement along the lines of, &#8220;a (human) advisor will deal with the query &#8230; &#8220;</li><li>The absence of the &#8216;secure&#8217; pop-up and then the validation confirmation without my consciously doing anything was a bit unsettling and surely something that needs to be checked by technical staff.  And only after passing the security check, was I asked for my phone number, which I would have thought would have been part of the check</li><li>Next (at 14:53), it was bizarre to be greeted afresh. At that point I had no idea about the status of my request, so I simply repeated it, echoing back the give terminology, &#8220;i wish to reactivate my expired number&#8221; (humans can learn too!)</li><li>From (14:54), the style of English became quite different, so perhaps at this stage I was dealing with a human?  But the instructions were clear enough and so by 14:55 I had provided all the information needed.  </li><li>But time was ticking by and these chat systems have quite strict timeouts, so at 15:00 I was threatened with a disconnection, with no reference to the status of my request.  I wanted to check the status, but didn&#8217;t want to interrupt anything, so I just asked about the reactivation of the SIM and after a moment I got the response that it was nearly done.  A few minutes later I got confirmation that it was done and I could conclude the chat.</li></ul>



<p>And, as promised, the card was reactivated and working later that afternoon, which was a positive outcome (and a relief).  </p>



<h3 class="wp-block-heading">Observations</h3>



<p>One of the disorientating aspects, possibly caused by my imagination, was my impression that in some places there was manual override that didn&#8217;t work well in concert with the basic chatbot workflow.  Interleaving of processes requires some orchestration so that you don’t get disconnected whilst some useful process is happening … The chatbot seems to have been architected as essentially a sequential system, but this kind of troubleshooting is really a problem in parallel and distributed computing, especially if multiple agents (bot and humans) are involved.</p>



<p>I wonder to what extent the actions are being carried out by the bot and what by humans. I imagine that manual override is possible at any stage (as with a self-driving car).  It probably occurred here as, surely, TOBi is not programmed to write, “You will be very very good to know tat I have raised the order and your number will activated with in 2 to 24 hours” (<em>sic</em>).<br>Or is that meant to be ultra-realistic human interaction, complete with typos?</p>



<p>As to the problem of SIM card expiring, the timescales have shortened – I originally bought the phone with the number more than 20 years ago and don’t recall any expiry at the time. Eventually, it was 12 months of inactivity. Now it has been reduced to 6 months, but I only received one reminder, in the middle, i.e. with 90 days remaining.  This is a long notice period, easy to forget.   It would be better to have received another reminder with 30 days to go.</p>



<p>Even with optimised machine-learning and having my problem solved, I somehow felt a lack of completion. Human communication is actually much more sophisticated and subtle in its interactions, with a remarkable amount being non-verbal and intuited.  I am conscious that with bots, humans need to fit around the ‘thought processes’ of the machines – I found myself trying to work out what terminology to use, and wasn’t sure of it.</p>



<p>What about the staff that TOBi has replaced? Do they really have more interesting work to do?  Do they still have jobs?  Or is the situation like high street banks, which have reduced in number and where the role of many staff has become far narrower?  Are human chatbot assistants like those who hover around to help people use ATMs and deposit points, answer a few general questions, before directing customers online?  I.e. to adjust to the ways of the machines &#8230; ?</p>



<p>The subject of artificial intelligence is of ongoing interest in my <a href="https://ptworld.net/research/mind/" data-type="page" data-id="858">research pages on mind</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Introducing MakeStaticSite for website deployment</title>
		<link>https://ptworld.net/blog/introducing-makestaticsite-for-website-deployment/</link>
		
		<dc:creator><![CDATA[Paul]]></dc:creator>
		<pubDate>Wed, 21 Sep 2022 14:53:20 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[MakeStaticSite]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[shell scripts]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[website]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://ptworld.net/?p=1504</guid>

					<description><![CDATA[(from a technical perspective) Launch of MakeStaticSite.sh Website November 2022: A website dedicated to MakeStaticSite is now available at https://makestaticsite.sh/. It provides the latest version of the software, released under AGPL, along with various documentation to help getting started. Motivation <a class="more-link" href="https://ptworld.net/blog/introducing-makestaticsite-for-website-deployment/">Read More ...</a>]]></description>
										<content:encoded><![CDATA[
<p>(from a technical perspective)</p>



<h2 class="wp-block-heading">Launch of MakeStaticSite.sh Website</h2>



<p><strong>November 2022</strong>: A website dedicated to MakeStaticSite is now available at <a rel="noreferrer noopener" href="https://makestaticsite.sh/" target="_blank">https://makestaticsite.sh/</a>.  It provides the latest version of the software, released under AGPL, along with various documentation to help getting started.</p>



<h2 class="wp-block-heading">Motivation</h2>



<p>The process of developing this website has evolved considerably.  On setting it up a few years ago in the conventional manner using WordPress, I duly familiarised myself with routines for maintaining security and improving performance on a hosted platform.  However, there were several aspects that weren&#8217;t ideal: the live content was hosted remotely, albeit with backups; updating the site <em>in situ</em>, particularly for major redesigns, was inconvenient; and performance wasn&#8217;t always as good as expected.  Observing that most of the content was not dynamic in nature, I resolved to develop the site locally and then, as a separate process, deliver it as a largely static site. </p>



<p>The rationale for generating static sites has been around a long-time; I first tackled this more than 20 years ago, when I needed to generate a <a href="https://ptworld.net/portfolio/multimedia-languages#CD2Go">CD ROM from a CGI/Perl multimedia website</a>.  Nowadays, the field is mature; <a rel="noreferrer noopener" href="https://www.netlify.com/blog/2018/07/12/the-reign-of-static-site-generators/" target="_blank">a Netlify blog post</a> (Netlify is a cloud-based service where many static outputs end up) gives many valid reasons, rooted in the need for more responsive work processes.  Typically underpinned by a simple language called <a rel="noreferrer noopener" href="https://www.w3schools.io/file/markdown-introduction/" target="_blank">markdown</a>, there has been a surge in solutions; hence, <a rel="noreferrer noopener" href="https://jamstack.org/generators/" target="_blank">options for Jamstack</a> abound.  However, the processes tend to be heavily oriented to developers at the expense of content authors, issues I know first-hand from enabling web access to museum collections.</p>



<p>I wanted instead to support existing content management processes, i.e. to continue with creating and managing content in WordPress, and then &#8216;at the press of a button&#8217; generate and publish a static copy online.  There are already some solutions, including dedicated plugins such as <a rel="noreferrer noopener" href="https://wordpress.org/plugins/simply-static/" target="_blank">Simply Static</a>.  Tim Nash, having observed increasingly complexity with the Jamstack options, <a rel="noreferrer noopener" href="https://timnash.co.uk/blog-like-a-confused-hacker-2020/" target="_blank">has described</a> how he used <a rel="noreferrer noopener" href="https://github.com/WP2Static/wp2static" target="_blank">WP2Static</a> via <a rel="noreferrer noopener" href="https://wp-cli.org" target="_blank">WP-CLI</a>, the WordPress command-line interface, for a (relatively) simple and compact solution.  But I hesitate over the use of a WordPress plugin to generate the static site.  Apart from the ongoing issue of maintenance and compatibility with WP Core, plugins are not really necessary since a public-facing website should be <em>de facto</em> crawlable by a web spider and not require internal system information.  </p>



<p>And so I turned to general-purpose tools I could run from the command line.  Enter <a rel="noreferrer noopener" href="https://www.gnu.org/software/wget/" target="_blank">Wget</a>, a ubiquitous utility for retrieving and packaging any number of web pages for subsequent viewing.  I needed to configure it, add a few additional inputs, and then choose where to store the outputs.  This led naturally to delving into (<a rel="noreferrer noopener" href="https://tiswww.case.edu/php/chet/bash/bashtop.html" target="_blank">Bash</a>) shell scripting to bring it all together and I continued the process, adding deployment options and invoking more commands, particularly <a rel="noreferrer noopener" href="https://wp-cli.org" target="_blank">WP-CLI</a> to prep the WordPress output (and to include a version of the plugin, <a rel="noreferrer noopener" href="https://github.com/paultraf/wp-static-search" target="_blank">WP Static Search</a>, revised to work offline).  If you examine the source code of this page, you will see the result.</p>



<h2 class="wp-block-heading">Pipeline</h2>



<p>Shell scripting became a means to orchestrate the overall process, which is readily seen as a <em>pipeline</em> comprising a sequence of <em>phases</em>.  For example, one phases runs <tt>wget</tt> for the initial capture, whilst another re-runs <tt>wget</tt> to more completely capture a site.  In fact, many core web development processes can be incorporated, such as replacing certain internal-facing pages or sections with alternative content; and invoking command-line tools for validation and streamlining output.  As of version 0.21, there are ten phases altogether; and command-line options allow you to control the start phase and end phase.</p>



<p>The flowchart below illustrates an emerging pipeline (for the latest perspective, please refer to pages on <a rel="noreferrer noopener" href="https://makestaticsite.sh/in-depth/workflow/" target="_blank">workflow</a> and <a rel="noreferrer noopener" href="https://makestaticsite.sh/in-depth/workflow/phases/" target="_blank">phases</a>).</p>



<div class="wp-block-cp-timeline-content-timeline-block Cool-Content-Timeline"><div class="cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484"><style scoped="true">.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-vertical-timeline-body .story-time p{color: #333;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-horizontal-timeline-body .story-time p{color: #333;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-vertical-timeline-body::before{background: linear-gradient(to bottom, rgba(230, 230, 230, 0) 0%, #D91B3E 10%, #D91B3E 90%, rgba(230, 230, 230, 0) 100%);}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-horizontal-timeline-body .timeline-content::before{background: #D91B3E;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-horizontal-timeline-body .timeline-content::after{background: #D91B3E;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-vertical-timeline-body .timeline-content::before{background: #D91B3E !important;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-vertical-timeline-body.left .story-details::after{background: #D91B3E !important;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-vertical-timeline-body.right .story-time::after{background: #D91B3E !important;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-vertical-timeline-body .timeline-content .timeline-block-icon{background: #D91B3E !important;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-horizontal-timeline-body .timeline-content .timeline-block-icon{background: #D91B3E !important;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-vertical-timeline-body.both-sided .timeline-content .position-right .story-details::before{border-right-color: #D91B3E !important;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-vertical-timeline-body.both-sided .timeline-content .position-left  .story-details::before{border-left-color: #D91B3E !important;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-vertical-timeline-body.one-sided.left .timeline-content  .story-details::before{border-right-color: #D91B3E !important;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-vertical-timeline-body.one-sided.right .timeline-content  .story-details::before{border-left-color: #D91B3E !important;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-vertical-timeline-body .timeline-content  .story-details{border-color: #D91B3E !important;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-horizontal-timeline-body .timeline-content .ctl-row .ctl-6.timeline-block-detail::before{border-bottom-color: #D91B3E !important;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-horizontal-timeline-body .ctl-6.timeline-block-detail{border-top-color: #D91B3E !important;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-vertical-timeline-body .timeline-content  .timeline-block-icon{border-color: #D91B3EFF !important;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-horizontal-timeline-body .swiper-button-next{color: #D91B3E;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-horizontal-timeline-body .swiper-button-prev{color: #D91B3E;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .cool-horizontal-timeline-body .swiper-pagination-bullet-active{background: #D91B3E;}.cool-timeline-block-9f4fed9e-b053-4040-999f-b8d7bd2d2484 .icon-true .timeline-block-icon span.timeline-block-render-icon svg{fill: white;}</style><div class="cool-vertical-timeline-body both-sided left"><div class="cool-timeline-block-list">
<div class="wp-block-cp-timeline-content-timeline-block-child swiper-slide"><div class="timeline-content icon-false "><div class=" timeline-block-timeline ctl-row  position-right"><div class="ctl-6 timeline-block-time"><div class="story-time"><p>Setup</p></div></div><div class="timeline-block-icon"></div><div class="ctl-6 timeline-block-detail"><div class="story-details"><div class="story-image"><img decoding="async" src="https://ptworld.net/wp-content/uploads/2022/09/sample.cfg-part.png" alt="Extract from a sample configuration (text file) for MakeStaticSite shows options, row by row"/></div><div class="story-content"><h3>Configuration dialogue</h3><p>The first step is to run the <tt>setup.sh</tt> script, which guides the user in an interactive dialogue to specify a series of options. </p></div></div></div></div></div></div>



<div class="wp-block-cp-timeline-content-timeline-block-child swiper-slide"><div class="timeline-content icon-false "><div class=" timeline-block-timeline ctl-row  position-right"><div class="ctl-6 timeline-block-time"><div class="story-time"><p>Initialisation</p></div></div><div class="timeline-block-icon"></div><div class="ctl-6 timeline-block-detail"><div class="story-details"><div class="story-content"><h3>Configure </h3><p>The system reads and processes configuration options<br><ul><li>read runtime options</li><li>read configuration file options</li><li>prepare output layout</li> </ul></p></div></div></div></div></div></div>



<div class="wp-block-cp-timeline-content-timeline-block-child swiper-slide"><div class="timeline-content icon-false "><div class=" timeline-block-timeline ctl-row  position-right"><div class="ctl-6 timeline-block-time"><div class="story-time"><p>Prep the CMS</p></div></div><div class="timeline-block-icon"></div><div class="ctl-6 timeline-block-detail"><div class="story-details"><div class="story-content"><h3>CMS-specific streamlining</h3><p>Optionally use wp-cli to<br><ul><li>ensure nice permalinks</li><li>remove query strings</li><li>remote shortlinks</li><li>replace with static search</li></ul>(Currently WordPress-only, but modules could be developed for other CMS.) </p></div></div></div></div></div></div>



<div class="wp-block-cp-timeline-content-timeline-block-child swiper-slide"><div class="timeline-content icon-false "><div class=" timeline-block-timeline ctl-row  position-right"><div class="ctl-6 timeline-block-time"><div class="story-time"><p>Generate static site  </p></div></div><div class="timeline-block-icon"></div><div class="ctl-6 timeline-block-detail"><div class="story-details"><div class="story-content"><h3>Generate wget mirror (first run) </h3><p>Run wget with the supplied configuration options<br><ul><li>optionally incorporate further input files</li><li>optionally set up a zip files</li><li>store the mirror in its own directory with timestamp</li> </ul></p></div></div></div></div></div></div>



<div class="wp-block-cp-timeline-content-timeline-block-child swiper-slide"><div class="timeline-content icon-false "><div class=" timeline-block-timeline ctl-row  position-right"><div class="ctl-6 timeline-block-time"><div class="story-time"><p>Augment static site  </p></div></div><div class="timeline-block-icon"></div><div class="ctl-6 timeline-block-detail"><div class="story-details"><div class="story-content"><h3>Further processing with wget </h3><p>Run wget with the supplied configuration options to fill in gaps<br><ul><li>optionally crawl static files for further URLs</li><li>Filter the URLs to retrieve only assets (multimedia files, etc.)</li><li>Re-run wget on the additional URLs</li></ul></p></div></div></div></div></div></div>



<div class="wp-block-cp-timeline-content-timeline-block-child swiper-slide"><div class="timeline-content icon-false "><div class=" timeline-block-timeline ctl-row  position-right"><div class="ctl-6 timeline-block-time"><div class="story-time"><p>Optimise static site  </p></div></div><div class="timeline-block-icon"></div><div class="ctl-6 timeline-block-detail"><div class="story-details"><div class="story-content"><h3>Further post-processing for deployment </h3><p>Further post-wget processing<br><ul><li>convert feeds to be XML files and modify references accordingly</li><li>Apply HTML Tidy to make more standards-compliant and use pretty-print (dependent on options)</li></ul>An accessibility validator could be added here.</p></div></div></div></div></div></div>



<div class="wp-block-cp-timeline-content-timeline-block-child swiper-slide"><div class="timeline-content icon-false "><div class=" timeline-block-timeline ctl-row  position-right"><div class="ctl-6 timeline-block-time"><div class="story-time"><p>Create an offline zip archive</p></div></div><div class="timeline-block-icon"></div><div class="ctl-6 timeline-block-detail"><div class="story-details"><div class="story-content"><h3>Create a custom zip based on the mirror</h3><p>The mirror acts as the basis for a zip archive, ready for uploading with the site or other distribution channels.</p></div></div></div></div></div></div>



<div class="wp-block-cp-timeline-content-timeline-block-child swiper-slide"><div class="timeline-content icon-false "><div class=" timeline-block-timeline ctl-row  position-left"><div class="ctl-6 timeline-block-time"><div class="story-time"><p>Augment</p></div></div><div class="timeline-block-icon"></div><div class="ctl-6 timeline-block-detail"><div class="story-details"><div class="story-content"><h3>Further additions</h3><p>Optionally augment the static mirror with <em>snippets</em>, substituting chunks of HTML in particular places according to the use of snippet tags.  These will augment the zip file also.<br>Additionally, allow the inclusion of further files that might not necessarily be static files.</p></div></div></div></div></div></div>



<div class="wp-block-cp-timeline-content-timeline-block-child swiper-slide"><div class="timeline-content icon-false "><div class=" timeline-block-timeline ctl-row  position-right"><div class="ctl-6 timeline-block-time"><div class="story-time"><p>Deploy</p></div></div><div class="timeline-block-icon"></div><div class="ctl-6 timeline-block-detail"><div class="story-details"><div class="story-content"><h3>Finalise and deploy locally or remote </h3><p>Optionally copy over additional <br><ul><li>Optionally copy over additional files, which might be scripts to provide missing interactivity</li><li>Finally deploy on local or remote server using rsync</li></ul></p></div></div></div></div></div></div>
</div></div></div></div>



<h2 class="wp-block-heading">Extending the usefulness</h2>



<p>MakeStaticSite is a prototype that was initially developed for individuals who are creating and maintaining websites on a personal computer.  However, the question soon arose: how might a team of content authors and editors be supported?  (The answer is: yes!)</p>



<p>For example, what if this site is to have multiple contributors?  In this case, the most straightforward approach is to set up or continue hosting with a third-party hosting provider, in the usual way.  This means those who are creating and managing content carry on as normal through the dashboard.  The main change is to separate the editing environment from the public site, which can be achieved by restricting access by some means of web authentication.  Then, run MakeStaticSite to deploy the static site to the public, whether on the server or remotely.  This approach ensures continuity; the only additional consideration is how to initiate MakeStaticSite once changes have been made — from within the CMS or external to it?</p>



<p>An initial test has shown that once set up, the process of maintenance and deployment can be carried out entirely from within WordPress.  This can be achieved by running the script under the terminal emulator <a rel="noreferrer noopener" href="https://wordpress.org/plugins/wpterm/" target="_blank">WPTerm</a> (MakeStaticSite has an option to run &#8216;unattended&#8217;, which makes default selections).  This depends on appropriate support for MakeStaticSite on the server; for shared hosting, the versions of required components, particularly Wget, may be somewhat old and, of course, for any serious use with a third party, access to WPTerm should be properly secured as instructed.  It&#8217;s preferable to keep the running of MakeStaticSite on a personal computer, an arrangement that has been used for <a href="https://fuengsin.org/" target="_blank" rel="noreferrer noopener">fuengsin.org</a>.</p>



<p>However, hosting with a third party means that the data is no longer immediately under our control; although a mixture of database replication and file synchronization can compensate, there&#8217;s some loss of independence.  Perhaps a better solution lies in p2p networks, but that&#8217;s an area I have yet to explore &#8230;</p>



<p>For now, this tool serves my needs well and I hope it is helpful to others.  Please refer to the <a href="https://makestaticsite.sh/" data-type="page" data-id="1499">MakeStaticSite project site</a> for further information.</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Welcome to the Relaunch of ptworld.net!</title>
		<link>https://ptworld.net/blog/welcome/</link>
		
		<dc:creator><![CDATA[Paul]]></dc:creator>
		<pubDate>Tue, 20 Sep 2022 14:05:11 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[introduction]]></category>
		<category><![CDATA[vision]]></category>
		<category><![CDATA[website]]></category>
		<category><![CDATA[welcome]]></category>
		<guid isPermaLink="false">https://ptworld.net/?p=1491</guid>

					<description><![CDATA[Hello.  After months of preparation, I’m pleased to welcome you to a completely overhauled website, launched on 25 September 2022. The site covers various endeavours past and present, offering an unusual east-west approach to the intersection of society and technology.  Faced <a class="more-link" href="https://ptworld.net/blog/welcome/">Read More ...</a>]]></description>
										<content:encoded><![CDATA[
<p></p>



<p>Hello.  After months of preparation, I’m pleased to welcome you to a completely overhauled website, launched on 25 September 2022.  The site covers various endeavours past and present, offering an unusual east-west approach to the intersection of society and technology.  Faced with the increasing pervasiveness of digital systems encroaching ever deeper on our lives, I wish to apply my background in mathematics, computer science and religious studies to safeguarding and promoting human autonomy and independent living — in body, speech and mind. </p>



<p>Accordingly, this site, and these posts in particular, will be my primary vehicle for dissemination, to serve as a launchpad for projects, current ideas and news for reducing dis-ease and increasing ease.  Much of it is interdisciplinary in nature, but the integration comes not from external connections, but wells up naturally as I seek to solve problems, often from first principles, drawing on existing knowledge.</p>



<p>The main goal is the creation of <a href="https://ptworld.net/projects/sigala/" data-type="page" data-id="802">Sigala</a>, a new kind of social networking service, based on the Buddha&#8217;s teachings on how to cultivate wholesome relationships.  For this, a team will be needed.  So, whilst this site is a solo effort at the outset, I hope it will gradually morph to a team site with multiple contributors.</p>



<h3 class="wp-block-heading">Wytham Woods</h3>



<p>The banner&nbsp;image, from a video still on a lush, rainy day, displays the following note:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><em>In Wytham,</em></p><p><em>Exploring far and wide<br>inner and outer worlds,<br>for knowledge and vision<br>therein &#8230;</em><br></p></blockquote>



<p>The view looks eastwards from Wytham Woods, a haven which I have frequently visited over many years for fresh air, exercise and reflection.</p>



<p>Today the woods are best-known as <a rel="noreferrer noopener" href="https://academic.oup.com/book/3158" target="_blank">an ecological laboratory</a>.  However, it is said that many centuries ago, monastics on pilgrimage from Cirencester to Canterbury, when making their way along the ridge towards Oxford, would break into song on seeing the emergence of the city of Oxford and hence it came to be called the &#8216;Singing Way&#8217;.  Not only Christian monastics have been in the woods, but more recently, in the 1970s, a Buddhist centre was established on the edge of the wood at Oakenholt, which witnessed historic gatherings of monastics from many traditions. </p>



<p>Many of the ideas expressed on this site arose in embryonic form whilst I was wandering through these woods.  Some ideas, already existing, were distilled.  Occasionally, I would stop mid-track to make some notes, and then move on. </p>



<h2 class="wp-block-heading">Orientation</h2>



<p>I&#8217;m hoping that the site&#8217;s structure and navigation makes it fairly straightforward to learn what it&#8217;s about, but here&#8217;s a quick overview.</p>



<ul class="wp-block-list"><li><strong><a href="https://ptworld.net/about/" data-type="page" data-id="12">About</a></strong>  Background information covering the origins of this site and the domain name; my professional experience, mainly in higher education and non-profits; and, looking forward, my business intentions and how you can help.</li><li><strong><a href="https://ptworld.net/research/" data-type="page" data-id="23">Research</a></strong>  Investigations usually start with a problem that we consider important for its impact in well-being, with quality of awareness a central concern.  Drawing on many disciplines, one of the first tasks is to clarify the nature of the problem and, in particular, the definitions.   </li><li><strong><a href="https://ptworld.net/projects/" data-type="page" data-id="53">Projects</a></strong>  The quest for a solution takes the theoretical analysis and extends it with experience of technological innovation gained from the ground up.  For example, when we consider designs that address cognitive problems, we have the foundations of considerable hands-on knowledge of software and hardware used in the field of personalised learning.  As evidenced in my portfolio, I&#8217;ve undertaken many bespoke projects, particularly at Oxford University, often addressing recurrent problems and requiring familiarity with relevant research themes. </li></ul>



<h3 class="wp-block-heading">Process</h3>



<p>As a software developer tackling a well-known problem, I may re-invent the wheel and not very well!   However, I sometimes come up with original code or provide a more complete solution.  This is reflected in this site, where I have tried to embody the paradigm of autonomy and self-sufficiency in the creation of <em><a href="https://ptworld.net/projects/software/makestaticsite/" data-type="page" data-id="1499">MakeStaticSite</a></em>, a tool for generating and deploying static websites with the goal of improving performance and security.</p>



<p>Archival is a common task, epitomised in the <a rel="noreferrer noopener" href="https://archive.org/web/" target="_blank">WayBack machine</a>, whilst some software developers already have a process for creating and deploying static sites, but I did not find a process that supported convenient authoring in WordPress together with other features I was looking for in static publication — such as the inclusion of a search facility, a more complete snapshot that took account of non-standard HTML attributes, support for HTML Tidy, and so on.</p>



<p>It seems a lot of effort just to get to the starting line.  But now that process is in place, I hope blog content and project development will start to flow! </p>



<p>   </p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
